langchain 0.3.26__py3-none-any.whl → 0.4.0.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. langchain/__init__.py +110 -96
  2. langchain/_api/__init__.py +2 -2
  3. langchain/_api/deprecation.py +3 -3
  4. langchain/_api/module_import.py +51 -46
  5. langchain/_api/path.py +1 -1
  6. langchain/adapters/openai.py +8 -8
  7. langchain/agents/__init__.py +15 -12
  8. langchain/agents/agent.py +174 -151
  9. langchain/agents/agent_iterator.py +50 -26
  10. langchain/agents/agent_toolkits/__init__.py +7 -6
  11. langchain/agents/agent_toolkits/ainetwork/toolkit.py +1 -1
  12. langchain/agents/agent_toolkits/amadeus/toolkit.py +1 -1
  13. langchain/agents/agent_toolkits/azure_cognitive_services.py +1 -1
  14. langchain/agents/agent_toolkits/clickup/toolkit.py +1 -1
  15. langchain/agents/agent_toolkits/conversational_retrieval/openai_functions.py +6 -4
  16. langchain/agents/agent_toolkits/csv/__init__.py +4 -2
  17. langchain/agents/agent_toolkits/file_management/__init__.py +1 -1
  18. langchain/agents/agent_toolkits/file_management/toolkit.py +1 -1
  19. langchain/agents/agent_toolkits/github/toolkit.py +9 -9
  20. langchain/agents/agent_toolkits/gitlab/toolkit.py +1 -1
  21. langchain/agents/agent_toolkits/json/base.py +1 -1
  22. langchain/agents/agent_toolkits/multion/toolkit.py +1 -1
  23. langchain/agents/agent_toolkits/office365/toolkit.py +1 -1
  24. langchain/agents/agent_toolkits/openapi/base.py +1 -1
  25. langchain/agents/agent_toolkits/openapi/planner.py +2 -2
  26. langchain/agents/agent_toolkits/openapi/planner_prompt.py +10 -10
  27. langchain/agents/agent_toolkits/openapi/prompt.py +1 -1
  28. langchain/agents/agent_toolkits/openapi/toolkit.py +1 -1
  29. langchain/agents/agent_toolkits/pandas/__init__.py +4 -2
  30. langchain/agents/agent_toolkits/playwright/__init__.py +1 -1
  31. langchain/agents/agent_toolkits/playwright/toolkit.py +1 -1
  32. langchain/agents/agent_toolkits/powerbi/base.py +1 -1
  33. langchain/agents/agent_toolkits/powerbi/chat_base.py +1 -1
  34. langchain/agents/agent_toolkits/powerbi/prompt.py +2 -2
  35. langchain/agents/agent_toolkits/powerbi/toolkit.py +1 -1
  36. langchain/agents/agent_toolkits/python/__init__.py +4 -2
  37. langchain/agents/agent_toolkits/spark/__init__.py +4 -2
  38. langchain/agents/agent_toolkits/spark_sql/base.py +1 -1
  39. langchain/agents/agent_toolkits/spark_sql/toolkit.py +1 -1
  40. langchain/agents/agent_toolkits/sql/prompt.py +1 -1
  41. langchain/agents/agent_toolkits/sql/toolkit.py +1 -1
  42. langchain/agents/agent_toolkits/vectorstore/base.py +4 -2
  43. langchain/agents/agent_toolkits/vectorstore/prompt.py +2 -4
  44. langchain/agents/agent_toolkits/vectorstore/toolkit.py +12 -11
  45. langchain/agents/agent_toolkits/xorbits/__init__.py +4 -2
  46. langchain/agents/agent_toolkits/zapier/toolkit.py +1 -1
  47. langchain/agents/agent_types.py +6 -6
  48. langchain/agents/chat/base.py +8 -12
  49. langchain/agents/chat/output_parser.py +9 -6
  50. langchain/agents/chat/prompt.py +3 -4
  51. langchain/agents/conversational/base.py +11 -5
  52. langchain/agents/conversational/output_parser.py +4 -2
  53. langchain/agents/conversational/prompt.py +2 -3
  54. langchain/agents/conversational_chat/base.py +9 -5
  55. langchain/agents/conversational_chat/output_parser.py +9 -11
  56. langchain/agents/conversational_chat/prompt.py +5 -6
  57. langchain/agents/format_scratchpad/__init__.py +3 -3
  58. langchain/agents/format_scratchpad/log_to_messages.py +1 -1
  59. langchain/agents/format_scratchpad/openai_functions.py +8 -6
  60. langchain/agents/format_scratchpad/tools.py +5 -3
  61. langchain/agents/format_scratchpad/xml.py +33 -2
  62. langchain/agents/initialize.py +17 -9
  63. langchain/agents/json_chat/base.py +19 -18
  64. langchain/agents/json_chat/prompt.py +2 -3
  65. langchain/agents/load_tools.py +2 -1
  66. langchain/agents/loading.py +28 -18
  67. langchain/agents/mrkl/base.py +11 -4
  68. langchain/agents/mrkl/output_parser.py +17 -13
  69. langchain/agents/mrkl/prompt.py +1 -2
  70. langchain/agents/openai_assistant/base.py +81 -71
  71. langchain/agents/openai_functions_agent/agent_token_buffer_memory.py +2 -0
  72. langchain/agents/openai_functions_agent/base.py +47 -37
  73. langchain/agents/openai_functions_multi_agent/base.py +40 -27
  74. langchain/agents/openai_tools/base.py +9 -8
  75. langchain/agents/output_parsers/__init__.py +3 -3
  76. langchain/agents/output_parsers/json.py +8 -6
  77. langchain/agents/output_parsers/openai_functions.py +24 -9
  78. langchain/agents/output_parsers/openai_tools.py +16 -4
  79. langchain/agents/output_parsers/react_json_single_input.py +13 -5
  80. langchain/agents/output_parsers/react_single_input.py +18 -11
  81. langchain/agents/output_parsers/self_ask.py +5 -2
  82. langchain/agents/output_parsers/tools.py +32 -13
  83. langchain/agents/output_parsers/xml.py +102 -28
  84. langchain/agents/react/agent.py +5 -4
  85. langchain/agents/react/base.py +26 -17
  86. langchain/agents/react/output_parser.py +7 -6
  87. langchain/agents/react/textworld_prompt.py +0 -1
  88. langchain/agents/react/wiki_prompt.py +14 -15
  89. langchain/agents/schema.py +5 -2
  90. langchain/agents/self_ask_with_search/base.py +23 -15
  91. langchain/agents/self_ask_with_search/prompt.py +0 -1
  92. langchain/agents/structured_chat/base.py +19 -11
  93. langchain/agents/structured_chat/output_parser.py +29 -18
  94. langchain/agents/structured_chat/prompt.py +3 -4
  95. langchain/agents/tool_calling_agent/base.py +8 -6
  96. langchain/agents/tools.py +5 -2
  97. langchain/agents/utils.py +2 -3
  98. langchain/agents/xml/base.py +12 -6
  99. langchain/agents/xml/prompt.py +1 -2
  100. langchain/cache.py +12 -12
  101. langchain/callbacks/__init__.py +11 -11
  102. langchain/callbacks/aim_callback.py +2 -2
  103. langchain/callbacks/argilla_callback.py +1 -1
  104. langchain/callbacks/arize_callback.py +1 -1
  105. langchain/callbacks/arthur_callback.py +1 -1
  106. langchain/callbacks/base.py +7 -7
  107. langchain/callbacks/clearml_callback.py +1 -1
  108. langchain/callbacks/comet_ml_callback.py +1 -1
  109. langchain/callbacks/confident_callback.py +1 -1
  110. langchain/callbacks/context_callback.py +1 -1
  111. langchain/callbacks/flyte_callback.py +1 -1
  112. langchain/callbacks/human.py +2 -2
  113. langchain/callbacks/infino_callback.py +1 -1
  114. langchain/callbacks/labelstudio_callback.py +1 -1
  115. langchain/callbacks/llmonitor_callback.py +1 -1
  116. langchain/callbacks/manager.py +5 -5
  117. langchain/callbacks/mlflow_callback.py +2 -2
  118. langchain/callbacks/openai_info.py +1 -1
  119. langchain/callbacks/promptlayer_callback.py +1 -1
  120. langchain/callbacks/sagemaker_callback.py +1 -1
  121. langchain/callbacks/streaming_aiter.py +17 -3
  122. langchain/callbacks/streaming_aiter_final_only.py +16 -5
  123. langchain/callbacks/streaming_stdout_final_only.py +10 -3
  124. langchain/callbacks/streamlit/__init__.py +3 -2
  125. langchain/callbacks/streamlit/mutable_expander.py +1 -1
  126. langchain/callbacks/streamlit/streamlit_callback_handler.py +3 -3
  127. langchain/callbacks/tracers/__init__.py +1 -1
  128. langchain/callbacks/tracers/comet.py +1 -1
  129. langchain/callbacks/tracers/evaluation.py +1 -1
  130. langchain/callbacks/tracers/log_stream.py +1 -1
  131. langchain/callbacks/tracers/logging.py +12 -1
  132. langchain/callbacks/tracers/stdout.py +1 -1
  133. langchain/callbacks/trubrics_callback.py +1 -1
  134. langchain/callbacks/utils.py +4 -4
  135. langchain/callbacks/wandb_callback.py +1 -1
  136. langchain/callbacks/whylabs_callback.py +1 -1
  137. langchain/chains/api/base.py +41 -23
  138. langchain/chains/api/news_docs.py +1 -2
  139. langchain/chains/api/open_meteo_docs.py +1 -2
  140. langchain/chains/api/openapi/requests_chain.py +1 -1
  141. langchain/chains/api/openapi/response_chain.py +1 -1
  142. langchain/chains/api/podcast_docs.py +1 -2
  143. langchain/chains/api/prompt.py +1 -2
  144. langchain/chains/api/tmdb_docs.py +1 -2
  145. langchain/chains/base.py +96 -56
  146. langchain/chains/chat_vector_db/prompts.py +2 -3
  147. langchain/chains/combine_documents/__init__.py +1 -1
  148. langchain/chains/combine_documents/base.py +30 -11
  149. langchain/chains/combine_documents/map_reduce.py +41 -30
  150. langchain/chains/combine_documents/map_rerank.py +39 -24
  151. langchain/chains/combine_documents/reduce.py +48 -26
  152. langchain/chains/combine_documents/refine.py +27 -17
  153. langchain/chains/combine_documents/stuff.py +24 -13
  154. langchain/chains/constitutional_ai/base.py +11 -4
  155. langchain/chains/constitutional_ai/principles.py +22 -25
  156. langchain/chains/constitutional_ai/prompts.py +25 -28
  157. langchain/chains/conversation/base.py +9 -4
  158. langchain/chains/conversation/memory.py +5 -5
  159. langchain/chains/conversation/prompt.py +5 -5
  160. langchain/chains/conversational_retrieval/base.py +108 -79
  161. langchain/chains/conversational_retrieval/prompts.py +2 -3
  162. langchain/chains/elasticsearch_database/base.py +10 -10
  163. langchain/chains/elasticsearch_database/prompts.py +2 -3
  164. langchain/chains/ernie_functions/__init__.py +2 -2
  165. langchain/chains/example_generator.py +3 -1
  166. langchain/chains/flare/base.py +28 -12
  167. langchain/chains/flare/prompts.py +2 -0
  168. langchain/chains/graph_qa/cypher.py +2 -2
  169. langchain/chains/graph_qa/falkordb.py +1 -1
  170. langchain/chains/graph_qa/gremlin.py +1 -1
  171. langchain/chains/graph_qa/neptune_sparql.py +1 -1
  172. langchain/chains/graph_qa/prompts.py +2 -2
  173. langchain/chains/history_aware_retriever.py +2 -1
  174. langchain/chains/hyde/base.py +6 -5
  175. langchain/chains/hyde/prompts.py +5 -6
  176. langchain/chains/llm.py +82 -61
  177. langchain/chains/llm_bash/__init__.py +3 -2
  178. langchain/chains/llm_checker/base.py +19 -6
  179. langchain/chains/llm_checker/prompt.py +3 -4
  180. langchain/chains/llm_math/base.py +25 -10
  181. langchain/chains/llm_math/prompt.py +1 -2
  182. langchain/chains/llm_summarization_checker/base.py +22 -7
  183. langchain/chains/llm_symbolic_math/__init__.py +3 -2
  184. langchain/chains/loading.py +155 -97
  185. langchain/chains/mapreduce.py +4 -3
  186. langchain/chains/moderation.py +11 -9
  187. langchain/chains/natbot/base.py +11 -9
  188. langchain/chains/natbot/crawler.py +102 -76
  189. langchain/chains/natbot/prompt.py +2 -3
  190. langchain/chains/openai_functions/__init__.py +7 -7
  191. langchain/chains/openai_functions/base.py +15 -10
  192. langchain/chains/openai_functions/citation_fuzzy_match.py +21 -11
  193. langchain/chains/openai_functions/extraction.py +19 -19
  194. langchain/chains/openai_functions/openapi.py +39 -35
  195. langchain/chains/openai_functions/qa_with_structure.py +22 -15
  196. langchain/chains/openai_functions/tagging.py +4 -4
  197. langchain/chains/openai_tools/extraction.py +7 -8
  198. langchain/chains/qa_generation/base.py +8 -3
  199. langchain/chains/qa_generation/prompt.py +5 -5
  200. langchain/chains/qa_with_sources/base.py +17 -6
  201. langchain/chains/qa_with_sources/loading.py +16 -8
  202. langchain/chains/qa_with_sources/map_reduce_prompt.py +8 -9
  203. langchain/chains/qa_with_sources/refine_prompts.py +0 -1
  204. langchain/chains/qa_with_sources/retrieval.py +15 -6
  205. langchain/chains/qa_with_sources/stuff_prompt.py +6 -7
  206. langchain/chains/qa_with_sources/vector_db.py +21 -8
  207. langchain/chains/query_constructor/base.py +37 -34
  208. langchain/chains/query_constructor/ir.py +4 -4
  209. langchain/chains/query_constructor/parser.py +101 -34
  210. langchain/chains/query_constructor/prompt.py +5 -6
  211. langchain/chains/question_answering/chain.py +21 -10
  212. langchain/chains/question_answering/map_reduce_prompt.py +14 -14
  213. langchain/chains/question_answering/map_rerank_prompt.py +3 -3
  214. langchain/chains/question_answering/refine_prompts.py +2 -5
  215. langchain/chains/question_answering/stuff_prompt.py +5 -5
  216. langchain/chains/retrieval.py +1 -3
  217. langchain/chains/retrieval_qa/base.py +38 -27
  218. langchain/chains/retrieval_qa/prompt.py +1 -2
  219. langchain/chains/router/__init__.py +3 -3
  220. langchain/chains/router/base.py +38 -22
  221. langchain/chains/router/embedding_router.py +15 -8
  222. langchain/chains/router/llm_router.py +23 -20
  223. langchain/chains/router/multi_prompt.py +5 -2
  224. langchain/chains/router/multi_retrieval_qa.py +28 -5
  225. langchain/chains/sequential.py +30 -18
  226. langchain/chains/sql_database/prompt.py +14 -16
  227. langchain/chains/sql_database/query.py +7 -5
  228. langchain/chains/structured_output/__init__.py +1 -1
  229. langchain/chains/structured_output/base.py +77 -67
  230. langchain/chains/summarize/chain.py +11 -5
  231. langchain/chains/summarize/map_reduce_prompt.py +0 -1
  232. langchain/chains/summarize/stuff_prompt.py +0 -1
  233. langchain/chains/transform.py +9 -6
  234. langchain/chat_loaders/facebook_messenger.py +1 -1
  235. langchain/chat_loaders/langsmith.py +1 -1
  236. langchain/chat_loaders/utils.py +3 -3
  237. langchain/chat_models/__init__.py +20 -19
  238. langchain/chat_models/anthropic.py +1 -1
  239. langchain/chat_models/azureml_endpoint.py +1 -1
  240. langchain/chat_models/baidu_qianfan_endpoint.py +1 -1
  241. langchain/chat_models/base.py +213 -139
  242. langchain/chat_models/bedrock.py +1 -1
  243. langchain/chat_models/fake.py +1 -1
  244. langchain/chat_models/meta.py +1 -1
  245. langchain/chat_models/pai_eas_endpoint.py +1 -1
  246. langchain/chat_models/promptlayer_openai.py +1 -1
  247. langchain/chat_models/volcengine_maas.py +1 -1
  248. langchain/docstore/base.py +1 -1
  249. langchain/document_loaders/__init__.py +9 -9
  250. langchain/document_loaders/airbyte.py +3 -3
  251. langchain/document_loaders/assemblyai.py +1 -1
  252. langchain/document_loaders/azure_blob_storage_container.py +1 -1
  253. langchain/document_loaders/azure_blob_storage_file.py +1 -1
  254. langchain/document_loaders/baiducloud_bos_file.py +1 -1
  255. langchain/document_loaders/base.py +1 -1
  256. langchain/document_loaders/blob_loaders/__init__.py +1 -1
  257. langchain/document_loaders/blob_loaders/schema.py +1 -4
  258. langchain/document_loaders/blockchain.py +1 -1
  259. langchain/document_loaders/chatgpt.py +1 -1
  260. langchain/document_loaders/college_confidential.py +1 -1
  261. langchain/document_loaders/confluence.py +1 -1
  262. langchain/document_loaders/email.py +1 -1
  263. langchain/document_loaders/facebook_chat.py +1 -1
  264. langchain/document_loaders/markdown.py +1 -1
  265. langchain/document_loaders/notebook.py +1 -1
  266. langchain/document_loaders/org_mode.py +1 -1
  267. langchain/document_loaders/parsers/__init__.py +1 -1
  268. langchain/document_loaders/parsers/docai.py +1 -1
  269. langchain/document_loaders/parsers/generic.py +1 -1
  270. langchain/document_loaders/parsers/html/__init__.py +1 -1
  271. langchain/document_loaders/parsers/html/bs4.py +1 -1
  272. langchain/document_loaders/parsers/language/cobol.py +1 -1
  273. langchain/document_loaders/parsers/language/python.py +1 -1
  274. langchain/document_loaders/parsers/msword.py +1 -1
  275. langchain/document_loaders/parsers/pdf.py +5 -5
  276. langchain/document_loaders/parsers/registry.py +1 -1
  277. langchain/document_loaders/pdf.py +8 -8
  278. langchain/document_loaders/powerpoint.py +1 -1
  279. langchain/document_loaders/pyspark_dataframe.py +1 -1
  280. langchain/document_loaders/telegram.py +2 -2
  281. langchain/document_loaders/tencent_cos_directory.py +1 -1
  282. langchain/document_loaders/unstructured.py +5 -5
  283. langchain/document_loaders/url_playwright.py +1 -1
  284. langchain/document_loaders/whatsapp_chat.py +1 -1
  285. langchain/document_loaders/youtube.py +2 -2
  286. langchain/document_transformers/__init__.py +3 -3
  287. langchain/document_transformers/beautiful_soup_transformer.py +1 -1
  288. langchain/document_transformers/doctran_text_extract.py +1 -1
  289. langchain/document_transformers/doctran_text_qa.py +1 -1
  290. langchain/document_transformers/doctran_text_translate.py +1 -1
  291. langchain/document_transformers/embeddings_redundant_filter.py +3 -3
  292. langchain/document_transformers/google_translate.py +1 -1
  293. langchain/document_transformers/html2text.py +1 -1
  294. langchain/document_transformers/nuclia_text_transform.py +1 -1
  295. langchain/embeddings/__init__.py +5 -5
  296. langchain/embeddings/base.py +35 -24
  297. langchain/embeddings/cache.py +37 -32
  298. langchain/embeddings/fake.py +1 -1
  299. langchain/embeddings/huggingface.py +2 -2
  300. langchain/evaluation/__init__.py +22 -22
  301. langchain/evaluation/agents/trajectory_eval_chain.py +26 -25
  302. langchain/evaluation/agents/trajectory_eval_prompt.py +6 -9
  303. langchain/evaluation/comparison/__init__.py +1 -1
  304. langchain/evaluation/comparison/eval_chain.py +21 -13
  305. langchain/evaluation/comparison/prompt.py +1 -2
  306. langchain/evaluation/criteria/__init__.py +1 -1
  307. langchain/evaluation/criteria/eval_chain.py +23 -11
  308. langchain/evaluation/criteria/prompt.py +2 -3
  309. langchain/evaluation/embedding_distance/base.py +34 -20
  310. langchain/evaluation/exact_match/base.py +14 -1
  311. langchain/evaluation/loading.py +16 -11
  312. langchain/evaluation/parsing/base.py +20 -4
  313. langchain/evaluation/parsing/json_distance.py +24 -10
  314. langchain/evaluation/parsing/json_schema.py +13 -12
  315. langchain/evaluation/qa/__init__.py +1 -1
  316. langchain/evaluation/qa/eval_chain.py +20 -5
  317. langchain/evaluation/qa/eval_prompt.py +7 -8
  318. langchain/evaluation/qa/generate_chain.py +4 -1
  319. langchain/evaluation/qa/generate_prompt.py +2 -4
  320. langchain/evaluation/regex_match/base.py +9 -1
  321. langchain/evaluation/schema.py +38 -30
  322. langchain/evaluation/scoring/__init__.py +1 -1
  323. langchain/evaluation/scoring/eval_chain.py +23 -15
  324. langchain/evaluation/scoring/prompt.py +0 -1
  325. langchain/evaluation/string_distance/base.py +20 -9
  326. langchain/globals.py +12 -11
  327. langchain/graphs/__init__.py +6 -6
  328. langchain/graphs/graph_document.py +1 -1
  329. langchain/graphs/networkx_graph.py +2 -2
  330. langchain/hub.py +9 -11
  331. langchain/indexes/__init__.py +3 -3
  332. langchain/indexes/_sql_record_manager.py +63 -46
  333. langchain/indexes/prompts/entity_extraction.py +1 -2
  334. langchain/indexes/prompts/entity_summarization.py +1 -2
  335. langchain/indexes/prompts/knowledge_triplet_extraction.py +1 -3
  336. langchain/indexes/vectorstore.py +35 -19
  337. langchain/llms/__init__.py +13 -13
  338. langchain/llms/ai21.py +1 -1
  339. langchain/llms/azureml_endpoint.py +4 -4
  340. langchain/llms/base.py +15 -7
  341. langchain/llms/bedrock.py +1 -1
  342. langchain/llms/cloudflare_workersai.py +1 -1
  343. langchain/llms/gradient_ai.py +1 -1
  344. langchain/llms/loading.py +1 -1
  345. langchain/llms/openai.py +1 -1
  346. langchain/llms/sagemaker_endpoint.py +1 -1
  347. langchain/load/dump.py +1 -1
  348. langchain/load/load.py +1 -1
  349. langchain/load/serializable.py +3 -3
  350. langchain/memory/__init__.py +3 -3
  351. langchain/memory/buffer.py +14 -7
  352. langchain/memory/buffer_window.py +2 -0
  353. langchain/memory/chat_memory.py +14 -8
  354. langchain/memory/chat_message_histories/__init__.py +1 -1
  355. langchain/memory/chat_message_histories/astradb.py +1 -1
  356. langchain/memory/chat_message_histories/cassandra.py +1 -1
  357. langchain/memory/chat_message_histories/cosmos_db.py +1 -1
  358. langchain/memory/chat_message_histories/dynamodb.py +1 -1
  359. langchain/memory/chat_message_histories/elasticsearch.py +1 -1
  360. langchain/memory/chat_message_histories/file.py +1 -1
  361. langchain/memory/chat_message_histories/firestore.py +1 -1
  362. langchain/memory/chat_message_histories/momento.py +1 -1
  363. langchain/memory/chat_message_histories/mongodb.py +1 -1
  364. langchain/memory/chat_message_histories/neo4j.py +1 -1
  365. langchain/memory/chat_message_histories/postgres.py +1 -1
  366. langchain/memory/chat_message_histories/redis.py +1 -1
  367. langchain/memory/chat_message_histories/rocksetdb.py +1 -1
  368. langchain/memory/chat_message_histories/singlestoredb.py +1 -1
  369. langchain/memory/chat_message_histories/streamlit.py +1 -1
  370. langchain/memory/chat_message_histories/upstash_redis.py +1 -1
  371. langchain/memory/chat_message_histories/xata.py +1 -1
  372. langchain/memory/chat_message_histories/zep.py +1 -1
  373. langchain/memory/combined.py +14 -13
  374. langchain/memory/entity.py +131 -61
  375. langchain/memory/prompt.py +10 -11
  376. langchain/memory/readonly.py +0 -2
  377. langchain/memory/simple.py +4 -3
  378. langchain/memory/summary.py +43 -11
  379. langchain/memory/summary_buffer.py +20 -8
  380. langchain/memory/token_buffer.py +2 -0
  381. langchain/memory/utils.py +3 -2
  382. langchain/memory/vectorstore.py +12 -5
  383. langchain/memory/vectorstore_token_buffer_memory.py +5 -5
  384. langchain/model_laboratory.py +12 -11
  385. langchain/output_parsers/__init__.py +4 -4
  386. langchain/output_parsers/boolean.py +7 -4
  387. langchain/output_parsers/combining.py +14 -7
  388. langchain/output_parsers/datetime.py +32 -31
  389. langchain/output_parsers/enum.py +10 -4
  390. langchain/output_parsers/fix.py +60 -53
  391. langchain/output_parsers/format_instructions.py +6 -8
  392. langchain/output_parsers/json.py +2 -2
  393. langchain/output_parsers/list.py +2 -2
  394. langchain/output_parsers/loading.py +9 -9
  395. langchain/output_parsers/openai_functions.py +3 -3
  396. langchain/output_parsers/openai_tools.py +1 -1
  397. langchain/output_parsers/pandas_dataframe.py +59 -48
  398. langchain/output_parsers/prompts.py +1 -2
  399. langchain/output_parsers/rail_parser.py +1 -1
  400. langchain/output_parsers/regex.py +9 -8
  401. langchain/output_parsers/regex_dict.py +7 -10
  402. langchain/output_parsers/retry.py +99 -80
  403. langchain/output_parsers/structured.py +21 -6
  404. langchain/output_parsers/yaml.py +19 -11
  405. langchain/prompts/__init__.py +5 -3
  406. langchain/prompts/base.py +5 -5
  407. langchain/prompts/chat.py +8 -8
  408. langchain/prompts/example_selector/__init__.py +3 -1
  409. langchain/prompts/example_selector/semantic_similarity.py +2 -2
  410. langchain/prompts/few_shot.py +1 -1
  411. langchain/prompts/loading.py +3 -3
  412. langchain/prompts/prompt.py +1 -1
  413. langchain/pydantic_v1/__init__.py +1 -1
  414. langchain/retrievers/__init__.py +5 -5
  415. langchain/retrievers/bedrock.py +2 -2
  416. langchain/retrievers/bm25.py +1 -1
  417. langchain/retrievers/contextual_compression.py +14 -8
  418. langchain/retrievers/docarray.py +1 -1
  419. langchain/retrievers/document_compressors/__init__.py +5 -4
  420. langchain/retrievers/document_compressors/base.py +12 -6
  421. langchain/retrievers/document_compressors/chain_extract.py +5 -3
  422. langchain/retrievers/document_compressors/chain_extract_prompt.py +2 -3
  423. langchain/retrievers/document_compressors/chain_filter.py +9 -9
  424. langchain/retrievers/document_compressors/chain_filter_prompt.py +1 -2
  425. langchain/retrievers/document_compressors/cohere_rerank.py +17 -15
  426. langchain/retrievers/document_compressors/cross_encoder_rerank.py +2 -0
  427. langchain/retrievers/document_compressors/embeddings_filter.py +24 -17
  428. langchain/retrievers/document_compressors/flashrank_rerank.py +1 -1
  429. langchain/retrievers/document_compressors/listwise_rerank.py +8 -5
  430. langchain/retrievers/ensemble.py +30 -27
  431. langchain/retrievers/google_cloud_documentai_warehouse.py +1 -1
  432. langchain/retrievers/google_vertex_ai_search.py +2 -2
  433. langchain/retrievers/kendra.py +10 -10
  434. langchain/retrievers/llama_index.py +1 -1
  435. langchain/retrievers/merger_retriever.py +11 -11
  436. langchain/retrievers/milvus.py +1 -1
  437. langchain/retrievers/multi_query.py +35 -27
  438. langchain/retrievers/multi_vector.py +24 -9
  439. langchain/retrievers/parent_document_retriever.py +33 -9
  440. langchain/retrievers/re_phraser.py +6 -5
  441. langchain/retrievers/self_query/base.py +157 -127
  442. langchain/retrievers/time_weighted_retriever.py +21 -7
  443. langchain/retrievers/zilliz.py +1 -1
  444. langchain/runnables/hub.py +12 -0
  445. langchain/runnables/openai_functions.py +12 -2
  446. langchain/schema/__init__.py +23 -23
  447. langchain/schema/cache.py +1 -1
  448. langchain/schema/callbacks/base.py +7 -7
  449. langchain/schema/callbacks/manager.py +19 -19
  450. langchain/schema/callbacks/tracers/base.py +1 -1
  451. langchain/schema/callbacks/tracers/evaluation.py +1 -1
  452. langchain/schema/callbacks/tracers/langchain.py +1 -1
  453. langchain/schema/callbacks/tracers/langchain_v1.py +1 -1
  454. langchain/schema/callbacks/tracers/log_stream.py +1 -1
  455. langchain/schema/callbacks/tracers/schemas.py +8 -8
  456. langchain/schema/callbacks/tracers/stdout.py +3 -3
  457. langchain/schema/document.py +1 -1
  458. langchain/schema/language_model.py +2 -2
  459. langchain/schema/messages.py +12 -12
  460. langchain/schema/output.py +3 -3
  461. langchain/schema/output_parser.py +3 -3
  462. langchain/schema/runnable/__init__.py +3 -3
  463. langchain/schema/runnable/base.py +9 -9
  464. langchain/schema/runnable/config.py +5 -5
  465. langchain/schema/runnable/configurable.py +1 -1
  466. langchain/schema/runnable/history.py +1 -1
  467. langchain/schema/runnable/passthrough.py +1 -1
  468. langchain/schema/runnable/utils.py +16 -16
  469. langchain/schema/vectorstore.py +1 -1
  470. langchain/smith/__init__.py +2 -1
  471. langchain/smith/evaluation/__init__.py +2 -2
  472. langchain/smith/evaluation/config.py +9 -23
  473. langchain/smith/evaluation/name_generation.py +3 -3
  474. langchain/smith/evaluation/progress.py +22 -4
  475. langchain/smith/evaluation/runner_utils.py +416 -247
  476. langchain/smith/evaluation/string_run_evaluator.py +102 -68
  477. langchain/storage/__init__.py +2 -2
  478. langchain/storage/_lc_store.py +4 -2
  479. langchain/storage/encoder_backed.py +7 -2
  480. langchain/storage/file_system.py +19 -16
  481. langchain/storage/in_memory.py +1 -1
  482. langchain/storage/upstash_redis.py +1 -1
  483. langchain/text_splitter.py +15 -15
  484. langchain/tools/__init__.py +28 -26
  485. langchain/tools/ainetwork/app.py +1 -1
  486. langchain/tools/ainetwork/base.py +1 -1
  487. langchain/tools/ainetwork/owner.py +1 -1
  488. langchain/tools/ainetwork/rule.py +1 -1
  489. langchain/tools/ainetwork/transfer.py +1 -1
  490. langchain/tools/ainetwork/value.py +1 -1
  491. langchain/tools/amadeus/closest_airport.py +1 -1
  492. langchain/tools/amadeus/flight_search.py +1 -1
  493. langchain/tools/azure_cognitive_services/__init__.py +1 -1
  494. langchain/tools/base.py +4 -4
  495. langchain/tools/bearly/tool.py +1 -1
  496. langchain/tools/bing_search/__init__.py +1 -1
  497. langchain/tools/bing_search/tool.py +1 -1
  498. langchain/tools/dataforseo_api_search/__init__.py +1 -1
  499. langchain/tools/dataforseo_api_search/tool.py +1 -1
  500. langchain/tools/ddg_search/tool.py +1 -1
  501. langchain/tools/e2b_data_analysis/tool.py +2 -2
  502. langchain/tools/edenai/__init__.py +1 -1
  503. langchain/tools/file_management/__init__.py +1 -1
  504. langchain/tools/file_management/copy.py +1 -1
  505. langchain/tools/file_management/delete.py +1 -1
  506. langchain/tools/gmail/__init__.py +2 -2
  507. langchain/tools/gmail/get_message.py +1 -1
  508. langchain/tools/gmail/search.py +1 -1
  509. langchain/tools/gmail/send_message.py +1 -1
  510. langchain/tools/google_finance/__init__.py +1 -1
  511. langchain/tools/google_finance/tool.py +1 -1
  512. langchain/tools/google_scholar/__init__.py +1 -1
  513. langchain/tools/google_scholar/tool.py +1 -1
  514. langchain/tools/google_search/__init__.py +1 -1
  515. langchain/tools/google_search/tool.py +1 -1
  516. langchain/tools/google_serper/__init__.py +1 -1
  517. langchain/tools/google_serper/tool.py +1 -1
  518. langchain/tools/google_trends/__init__.py +1 -1
  519. langchain/tools/google_trends/tool.py +1 -1
  520. langchain/tools/jira/tool.py +20 -1
  521. langchain/tools/json/tool.py +25 -3
  522. langchain/tools/memorize/tool.py +1 -1
  523. langchain/tools/multion/__init__.py +1 -1
  524. langchain/tools/multion/update_session.py +1 -1
  525. langchain/tools/office365/__init__.py +2 -2
  526. langchain/tools/office365/events_search.py +1 -1
  527. langchain/tools/office365/messages_search.py +1 -1
  528. langchain/tools/office365/send_event.py +1 -1
  529. langchain/tools/office365/send_message.py +1 -1
  530. langchain/tools/openapi/utils/api_models.py +6 -6
  531. langchain/tools/playwright/__init__.py +5 -5
  532. langchain/tools/playwright/click.py +1 -1
  533. langchain/tools/playwright/extract_hyperlinks.py +1 -1
  534. langchain/tools/playwright/get_elements.py +1 -1
  535. langchain/tools/playwright/navigate.py +1 -1
  536. langchain/tools/plugin.py +2 -2
  537. langchain/tools/powerbi/tool.py +1 -1
  538. langchain/tools/python/__init__.py +3 -2
  539. langchain/tools/reddit_search/tool.py +1 -1
  540. langchain/tools/render.py +2 -2
  541. langchain/tools/requests/tool.py +2 -2
  542. langchain/tools/searchapi/tool.py +1 -1
  543. langchain/tools/searx_search/tool.py +1 -1
  544. langchain/tools/slack/get_message.py +1 -1
  545. langchain/tools/spark_sql/tool.py +1 -1
  546. langchain/tools/sql_database/tool.py +1 -1
  547. langchain/tools/tavily_search/__init__.py +1 -1
  548. langchain/tools/tavily_search/tool.py +1 -1
  549. langchain/tools/zapier/__init__.py +1 -1
  550. langchain/tools/zapier/tool.py +24 -2
  551. langchain/utilities/__init__.py +4 -4
  552. langchain/utilities/arcee.py +4 -4
  553. langchain/utilities/clickup.py +4 -4
  554. langchain/utilities/dalle_image_generator.py +1 -1
  555. langchain/utilities/dataforseo_api_search.py +1 -1
  556. langchain/utilities/opaqueprompts.py +1 -1
  557. langchain/utilities/reddit_search.py +1 -1
  558. langchain/utilities/sql_database.py +1 -1
  559. langchain/utilities/tavily_search.py +1 -1
  560. langchain/utilities/vertexai.py +2 -2
  561. langchain/utils/__init__.py +1 -1
  562. langchain/utils/aiter.py +1 -1
  563. langchain/utils/html.py +3 -3
  564. langchain/utils/input.py +1 -1
  565. langchain/utils/iter.py +1 -1
  566. langchain/utils/json_schema.py +1 -3
  567. langchain/utils/strings.py +1 -1
  568. langchain/utils/utils.py +6 -6
  569. langchain/vectorstores/__init__.py +5 -5
  570. langchain/vectorstores/alibabacloud_opensearch.py +1 -1
  571. langchain/vectorstores/azure_cosmos_db.py +1 -1
  572. langchain/vectorstores/clickhouse.py +1 -1
  573. langchain/vectorstores/elastic_vector_search.py +1 -1
  574. langchain/vectorstores/elasticsearch.py +2 -2
  575. langchain/vectorstores/myscale.py +1 -1
  576. langchain/vectorstores/neo4j_vector.py +1 -1
  577. langchain/vectorstores/pgembedding.py +1 -1
  578. langchain/vectorstores/qdrant.py +1 -1
  579. langchain/vectorstores/redis/__init__.py +1 -1
  580. langchain/vectorstores/redis/base.py +1 -1
  581. langchain/vectorstores/redis/filters.py +4 -4
  582. langchain/vectorstores/redis/schema.py +6 -6
  583. langchain/vectorstores/sklearn.py +2 -2
  584. langchain/vectorstores/starrocks.py +1 -1
  585. langchain/vectorstores/utils.py +1 -1
  586. {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/METADATA +4 -14
  587. {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/RECORD +590 -591
  588. {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/WHEEL +1 -1
  589. langchain/smith/evaluation/utils.py +0 -0
  590. {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/entry_points.txt +0 -0
  591. {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/licenses/LICENSE +0 -0
@@ -27,11 +27,12 @@ def _get_builtin_translator(vectorstore: VectorStore) -> Visitor:
27
27
  """Get the translator class corresponding to the vector store class."""
28
28
  try:
29
29
  import langchain_community # noqa: F401
30
- except ImportError:
31
- raise ImportError(
30
+ except ImportError as err:
31
+ msg = (
32
32
  "The langchain-community package must be installed to use this feature."
33
33
  " Please install it using `pip install langchain-community`."
34
34
  )
35
+ raise ImportError(msg) from err
35
36
 
36
37
  from langchain_community.query_constructors.astradb import AstraDBTranslator
37
38
  from langchain_community.query_constructors.chroma import ChromaTranslator
@@ -118,116 +119,116 @@ def _get_builtin_translator(vectorstore: VectorStore) -> Visitor:
118
119
  }
119
120
  if isinstance(vectorstore, DatabricksVectorSearch):
120
121
  return DatabricksVectorSearchTranslator()
121
- elif isinstance(vectorstore, MyScale):
122
+ if isinstance(vectorstore, MyScale):
122
123
  return MyScaleTranslator(metadata_key=vectorstore.metadata_column)
123
- elif isinstance(vectorstore, Redis):
124
+ if isinstance(vectorstore, Redis):
124
125
  return RedisTranslator.from_vectorstore(vectorstore)
125
- elif isinstance(vectorstore, TencentVectorDB):
126
+ if isinstance(vectorstore, TencentVectorDB):
126
127
  fields = [
127
128
  field.name for field in (vectorstore.meta_fields or []) if field.index
128
129
  ]
129
130
  return TencentVectorDBTranslator(fields)
130
- elif vectorstore.__class__ in BUILTIN_TRANSLATORS:
131
+ if vectorstore.__class__ in BUILTIN_TRANSLATORS:
131
132
  return BUILTIN_TRANSLATORS[vectorstore.__class__]()
133
+ try:
134
+ from langchain_astradb.vectorstores import AstraDBVectorStore
135
+ except ImportError:
136
+ pass
132
137
  else:
133
- try:
134
- from langchain_astradb.vectorstores import AstraDBVectorStore
135
- except ImportError:
136
- pass
137
- else:
138
- if isinstance(vectorstore, AstraDBVectorStore):
139
- return AstraDBTranslator()
140
-
141
- try:
142
- from langchain_elasticsearch.vectorstores import ElasticsearchStore
143
- except ImportError:
144
- pass
145
- else:
146
- if isinstance(vectorstore, ElasticsearchStore):
147
- return ElasticsearchTranslator()
148
-
149
- try:
150
- from langchain_pinecone import PineconeVectorStore
151
- except ImportError:
152
- pass
153
- else:
154
- if isinstance(vectorstore, PineconeVectorStore):
155
- return PineconeTranslator()
156
-
157
- try:
158
- from langchain_milvus import Milvus
159
- except ImportError:
160
- pass
161
- else:
162
- if isinstance(vectorstore, Milvus):
163
- return MilvusTranslator()
164
-
165
- try:
166
- from langchain_mongodb import MongoDBAtlasVectorSearch
167
- except ImportError:
168
- pass
169
- else:
170
- if isinstance(vectorstore, MongoDBAtlasVectorSearch):
171
- return MongoDBAtlasTranslator()
172
-
173
- try:
174
- from langchain_neo4j import Neo4jVector
175
- except ImportError:
176
- pass
177
- else:
178
- if isinstance(vectorstore, Neo4jVector):
179
- return Neo4jTranslator()
180
-
181
- try:
182
- # Trying langchain_chroma import if exists
183
- from langchain_chroma import Chroma
184
- except ImportError:
185
- pass
186
- else:
187
- if isinstance(vectorstore, Chroma):
188
- return ChromaTranslator()
189
-
190
- try:
191
- from langchain_postgres import PGVector
192
- from langchain_postgres import PGVectorTranslator as NewPGVectorTranslator
193
- except ImportError:
194
- pass
195
- else:
196
- if isinstance(vectorstore, PGVector):
197
- return NewPGVectorTranslator()
198
-
199
- try:
200
- from langchain_qdrant import QdrantVectorStore
201
- except ImportError:
202
- pass
203
- else:
204
- if isinstance(vectorstore, QdrantVectorStore):
205
- return QdrantTranslator(metadata_key=vectorstore.metadata_payload_key)
206
-
207
- try:
208
- # Added in langchain-community==0.2.11
209
- from langchain_community.query_constructors.hanavector import HanaTranslator
210
- from langchain_community.vectorstores import HanaDB
211
- except ImportError:
212
- pass
213
- else:
214
- if isinstance(vectorstore, HanaDB):
215
- return HanaTranslator()
216
-
217
- try:
218
- # Trying langchain_weaviate (weaviate v4) import if exists
219
- from langchain_weaviate.vectorstores import WeaviateVectorStore
220
-
221
- except ImportError:
222
- pass
223
- else:
224
- if isinstance(vectorstore, WeaviateVectorStore):
225
- return WeaviateTranslator()
226
-
227
- raise ValueError(
228
- f"Self query retriever with Vector Store type {vectorstore.__class__}"
229
- f" not supported."
230
- )
138
+ if isinstance(vectorstore, AstraDBVectorStore):
139
+ return AstraDBTranslator()
140
+
141
+ try:
142
+ from langchain_elasticsearch.vectorstores import ElasticsearchStore
143
+ except ImportError:
144
+ pass
145
+ else:
146
+ if isinstance(vectorstore, ElasticsearchStore):
147
+ return ElasticsearchTranslator()
148
+
149
+ try:
150
+ from langchain_pinecone import PineconeVectorStore
151
+ except ImportError:
152
+ pass
153
+ else:
154
+ if isinstance(vectorstore, PineconeVectorStore):
155
+ return PineconeTranslator()
156
+
157
+ try:
158
+ from langchain_milvus import Milvus
159
+ except ImportError:
160
+ pass
161
+ else:
162
+ if isinstance(vectorstore, Milvus):
163
+ return MilvusTranslator()
164
+
165
+ try:
166
+ from langchain_mongodb import MongoDBAtlasVectorSearch
167
+ except ImportError:
168
+ pass
169
+ else:
170
+ if isinstance(vectorstore, MongoDBAtlasVectorSearch):
171
+ return MongoDBAtlasTranslator()
172
+
173
+ try:
174
+ from langchain_neo4j import Neo4jVector
175
+ except ImportError:
176
+ pass
177
+ else:
178
+ if isinstance(vectorstore, Neo4jVector):
179
+ return Neo4jTranslator()
180
+
181
+ try:
182
+ # Trying langchain_chroma import if exists
183
+ from langchain_chroma import Chroma
184
+ except ImportError:
185
+ pass
186
+ else:
187
+ if isinstance(vectorstore, Chroma):
188
+ return ChromaTranslator()
189
+
190
+ try:
191
+ from langchain_postgres import PGVector
192
+ from langchain_postgres import PGVectorTranslator as NewPGVectorTranslator
193
+ except ImportError:
194
+ pass
195
+ else:
196
+ if isinstance(vectorstore, PGVector):
197
+ return NewPGVectorTranslator()
198
+
199
+ try:
200
+ from langchain_qdrant import QdrantVectorStore
201
+ except ImportError:
202
+ pass
203
+ else:
204
+ if isinstance(vectorstore, QdrantVectorStore):
205
+ return QdrantTranslator(metadata_key=vectorstore.metadata_payload_key)
206
+
207
+ try:
208
+ # Added in langchain-community==0.2.11
209
+ from langchain_community.query_constructors.hanavector import HanaTranslator
210
+ from langchain_community.vectorstores import HanaDB
211
+ except ImportError:
212
+ pass
213
+ else:
214
+ if isinstance(vectorstore, HanaDB):
215
+ return HanaTranslator()
216
+
217
+ try:
218
+ # Trying langchain_weaviate (weaviate v4) import if exists
219
+ from langchain_weaviate.vectorstores import WeaviateVectorStore
220
+
221
+ except ImportError:
222
+ pass
223
+ else:
224
+ if isinstance(vectorstore, WeaviateVectorStore):
225
+ return WeaviateTranslator()
226
+
227
+ msg = (
228
+ f"Self query retriever with Vector Store type {vectorstore.__class__}"
229
+ f" not supported."
230
+ )
231
+ raise ValueError(msg)
231
232
 
232
233
 
233
234
  class SelfQueryRetriever(BaseRetriever):
@@ -238,7 +239,7 @@ class SelfQueryRetriever(BaseRetriever):
238
239
  """The underlying vector store from which documents will be retrieved."""
239
240
  query_constructor: Runnable[dict, StructuredQuery] = Field(alias="llm_chain")
240
241
  """The query constructor chain for generating the vector store queries.
241
-
242
+
242
243
  llm_chain is legacy name kept for backwards compatibility."""
243
244
  search_type: str = "similarity"
244
245
  """The search type to perform on the vector store."""
@@ -262,7 +263,7 @@ class SelfQueryRetriever(BaseRetriever):
262
263
  """Validate translator."""
263
264
  if "structured_query_translator" not in values:
264
265
  values["structured_query_translator"] = _get_builtin_translator(
265
- values["vectorstore"]
266
+ values["vectorstore"],
266
267
  )
267
268
  return values
268
269
 
@@ -272,10 +273,12 @@ class SelfQueryRetriever(BaseRetriever):
272
273
  return self.query_constructor
273
274
 
274
275
  def _prepare_query(
275
- self, query: str, structured_query: StructuredQuery
276
+ self,
277
+ query: str,
278
+ structured_query: StructuredQuery,
276
279
  ) -> tuple[str, dict[str, Any]]:
277
280
  new_query, new_kwargs = self.structured_query_translator.visit_structured_query(
278
- structured_query
281
+ structured_query,
279
282
  )
280
283
  if structured_query.limit is not None:
281
284
  new_kwargs["k"] = structured_query.limit
@@ -285,19 +288,24 @@ class SelfQueryRetriever(BaseRetriever):
285
288
  return new_query, search_kwargs
286
289
 
287
290
  def _get_docs_with_query(
288
- self, query: str, search_kwargs: dict[str, Any]
291
+ self,
292
+ query: str,
293
+ search_kwargs: dict[str, Any],
289
294
  ) -> list[Document]:
290
- docs = self.vectorstore.search(query, self.search_type, **search_kwargs)
291
- return docs
295
+ return self.vectorstore.search(query, self.search_type, **search_kwargs)
292
296
 
293
297
  async def _aget_docs_with_query(
294
- self, query: str, search_kwargs: dict[str, Any]
298
+ self,
299
+ query: str,
300
+ search_kwargs: dict[str, Any],
295
301
  ) -> list[Document]:
296
- docs = await self.vectorstore.asearch(query, self.search_type, **search_kwargs)
297
- return docs
302
+ return await self.vectorstore.asearch(query, self.search_type, **search_kwargs)
298
303
 
299
304
  def _get_relevant_documents(
300
- self, query: str, *, run_manager: CallbackManagerForRetrieverRun
305
+ self,
306
+ query: str,
307
+ *,
308
+ run_manager: CallbackManagerForRetrieverRun,
301
309
  ) -> list[Document]:
302
310
  """Get documents relevant for a query.
303
311
 
@@ -308,16 +316,19 @@ class SelfQueryRetriever(BaseRetriever):
308
316
  List of relevant documents
309
317
  """
310
318
  structured_query = self.query_constructor.invoke(
311
- {"query": query}, config={"callbacks": run_manager.get_child()}
319
+ {"query": query},
320
+ config={"callbacks": run_manager.get_child()},
312
321
  )
313
322
  if self.verbose:
314
- logger.info(f"Generated Query: {structured_query}")
323
+ logger.info("Generated Query: %s", structured_query)
315
324
  new_query, search_kwargs = self._prepare_query(query, structured_query)
316
- docs = self._get_docs_with_query(new_query, search_kwargs)
317
- return docs
325
+ return self._get_docs_with_query(new_query, search_kwargs)
318
326
 
319
327
  async def _aget_relevant_documents(
320
- self, query: str, *, run_manager: AsyncCallbackManagerForRetrieverRun
328
+ self,
329
+ query: str,
330
+ *,
331
+ run_manager: AsyncCallbackManagerForRetrieverRun,
321
332
  ) -> list[Document]:
322
333
  """Get documents relevant for a query.
323
334
 
@@ -328,13 +339,13 @@ class SelfQueryRetriever(BaseRetriever):
328
339
  List of relevant documents
329
340
  """
330
341
  structured_query = await self.query_constructor.ainvoke(
331
- {"query": query}, config={"callbacks": run_manager.get_child()}
342
+ {"query": query},
343
+ config={"callbacks": run_manager.get_child()},
332
344
  )
333
345
  if self.verbose:
334
- logger.info(f"Generated Query: {structured_query}")
346
+ logger.info("Generated Query: %s", structured_query)
335
347
  new_query, search_kwargs = self._prepare_query(query, structured_query)
336
- docs = await self._aget_docs_with_query(new_query, search_kwargs)
337
- return docs
348
+ return await self._aget_docs_with_query(new_query, search_kwargs)
338
349
 
339
350
  @classmethod
340
351
  def from_llm(
@@ -345,10 +356,29 @@ class SelfQueryRetriever(BaseRetriever):
345
356
  metadata_field_info: Sequence[Union[AttributeInfo, dict]],
346
357
  structured_query_translator: Optional[Visitor] = None,
347
358
  chain_kwargs: Optional[dict] = None,
348
- enable_limit: bool = False,
349
- use_original_query: bool = False,
359
+ enable_limit: bool = False, # noqa: FBT001,FBT002
360
+ use_original_query: bool = False, # noqa: FBT001,FBT002
350
361
  **kwargs: Any,
351
362
  ) -> "SelfQueryRetriever":
363
+ """Create a SelfQueryRetriever from an LLM and a vector store.
364
+
365
+ Args:
366
+ llm: The language model to use for generating queries.
367
+ vectorstore: The vector store to use for retrieving documents.
368
+ document_contents: Description of the page contents of the document to be
369
+ queried.
370
+ metadata_field_info: Metadata field information for the documents.
371
+ structured_query_translator: Optional translator for turning internal query
372
+ language into vectorstore search params.
373
+ chain_kwargs: Additional keyword arguments for the query constructor.
374
+ enable_limit: Whether to enable the limit operator.
375
+ use_original_query: Whether to use the original query instead of the revised
376
+ query from the LLM.
377
+ **kwargs: Additional keyword arguments for the SelfQueryRetriever.
378
+
379
+ Returns:
380
+ An instance of SelfQueryRetriever.
381
+ """
352
382
  if structured_query_translator is None:
353
383
  structured_query_translator = _get_builtin_translator(vectorstore)
354
384
  chain_kwargs = chain_kwargs or {}
@@ -375,7 +405,7 @@ class SelfQueryRetriever(BaseRetriever):
375
405
  **chain_kwargs,
376
406
  )
377
407
  query_constructor = query_constructor.with_config(
378
- run_name=QUERY_CONSTRUCTOR_RUN_NAME
408
+ run_name=QUERY_CONSTRUCTOR_RUN_NAME,
379
409
  )
380
410
  return cls( # type: ignore[call-arg]
381
411
  query_constructor=query_constructor,
@@ -10,6 +10,7 @@ from langchain_core.documents import Document
10
10
  from langchain_core.retrievers import BaseRetriever
11
11
  from langchain_core.vectorstores import VectorStore
12
12
  from pydantic import ConfigDict, Field
13
+ from typing_extensions import override
13
14
 
14
15
 
15
16
  def _get_hours_passed(time: datetime.datetime, ref_time: datetime.datetime) -> float:
@@ -24,7 +25,7 @@ class TimeWeightedVectorStoreRetriever(BaseRetriever):
24
25
  vectorstore: VectorStore
25
26
  """The vectorstore to store documents and determine salience."""
26
27
 
27
- search_kwargs: dict = Field(default_factory=lambda: dict(k=100))
28
+ search_kwargs: dict = Field(default_factory=lambda: {"k": 100})
28
29
  """Keyword arguments to pass to the vectorstore similarity search."""
29
30
 
30
31
  # TODO: abstract as a queue
@@ -81,7 +82,8 @@ class TimeWeightedVectorStoreRetriever(BaseRetriever):
81
82
  """Return documents that are salient to the query."""
82
83
  docs_and_scores: list[tuple[Document, float]]
83
84
  docs_and_scores = self.vectorstore.similarity_search_with_relevance_scores(
84
- query, **self.search_kwargs
85
+ query,
86
+ **self.search_kwargs,
85
87
  )
86
88
  results = {}
87
89
  for fetched_doc, relevance in docs_and_scores:
@@ -96,7 +98,8 @@ class TimeWeightedVectorStoreRetriever(BaseRetriever):
96
98
  docs_and_scores: list[tuple[Document, float]]
97
99
  docs_and_scores = (
98
100
  await self.vectorstore.asimilarity_search_with_relevance_scores(
99
- query, **self.search_kwargs
101
+ query,
102
+ **self.search_kwargs,
100
103
  )
101
104
  )
102
105
  results = {}
@@ -108,7 +111,8 @@ class TimeWeightedVectorStoreRetriever(BaseRetriever):
108
111
  return results
109
112
 
110
113
  def _get_rescored_docs(
111
- self, docs_and_scores: dict[Any, tuple[Document, Optional[float]]]
114
+ self,
115
+ docs_and_scores: dict[Any, tuple[Document, Optional[float]]],
112
116
  ) -> list[Document]:
113
117
  current_time = datetime.datetime.now()
114
118
  rescored_docs = [
@@ -125,8 +129,12 @@ class TimeWeightedVectorStoreRetriever(BaseRetriever):
125
129
  result.append(buffered_doc)
126
130
  return result
127
131
 
132
+ @override
128
133
  def _get_relevant_documents(
129
- self, query: str, *, run_manager: CallbackManagerForRetrieverRun
134
+ self,
135
+ query: str,
136
+ *,
137
+ run_manager: CallbackManagerForRetrieverRun,
130
138
  ) -> list[Document]:
131
139
  docs_and_scores = {
132
140
  doc.metadata["buffer_idx"]: (doc, self.default_salience)
@@ -136,8 +144,12 @@ class TimeWeightedVectorStoreRetriever(BaseRetriever):
136
144
  docs_and_scores.update(self.get_salient_docs(query))
137
145
  return self._get_rescored_docs(docs_and_scores)
138
146
 
147
+ @override
139
148
  async def _aget_relevant_documents(
140
- self, query: str, *, run_manager: AsyncCallbackManagerForRetrieverRun
149
+ self,
150
+ query: str,
151
+ *,
152
+ run_manager: AsyncCallbackManagerForRetrieverRun,
141
153
  ) -> list[Document]:
142
154
  docs_and_scores = {
143
155
  doc.metadata["buffer_idx"]: (doc, self.default_salience)
@@ -164,7 +176,9 @@ class TimeWeightedVectorStoreRetriever(BaseRetriever):
164
176
  return self.vectorstore.add_documents(dup_docs, **kwargs)
165
177
 
166
178
  async def aadd_documents(
167
- self, documents: list[Document], **kwargs: Any
179
+ self,
180
+ documents: list[Document],
181
+ **kwargs: Any,
168
182
  ) -> list[str]:
169
183
  """Add documents to vectorstore."""
170
184
  current_time = kwargs.get("current_time")
@@ -23,6 +23,6 @@ def __getattr__(name: str) -> Any:
23
23
 
24
24
 
25
25
  __all__ = [
26
- "ZillizRetriever",
27
26
  "ZillizRetreiver",
27
+ "ZillizRetriever",
28
28
  ]
@@ -19,6 +19,18 @@ class HubRunnable(RunnableBindingBase[Input, Output]):
19
19
  api_key: Optional[str] = None,
20
20
  **kwargs: Any,
21
21
  ) -> None:
22
+ """Initialize the HubRunnable.
23
+
24
+ Args:
25
+ owner_repo_commit: The full name of the prompt to pull from in the format of
26
+ `owner/prompt_name:commit_hash` or `owner/prompt_name`
27
+ or just `prompt_name` if it's your own prompt.
28
+ api_url: The URL of the LangChain Hub API.
29
+ Defaults to the hosted API service if you have an api key set,
30
+ or a localhost instance if not.
31
+ api_key: The API key to use to authenticate with the LangChain Hub API.
32
+ **kwargs: Additional keyword arguments to pass to the parent class.
33
+ """
22
34
  from langchain.hub import pull
23
35
 
24
36
  pulled = pull(owner_repo_commit, api_url=api_url, api_key=api_key)
@@ -36,9 +36,19 @@ class OpenAIFunctionsRouter(RunnableBindingBase[BaseMessage, Any]):
36
36
  ],
37
37
  functions: Optional[list[OpenAIFunction]] = None,
38
38
  ):
39
+ """Initialize the OpenAIFunctionsRouter.
40
+
41
+ Args:
42
+ runnables: A mapping of function names to runnables.
43
+ functions: Optional list of functions to check against the runnables.
44
+ """
39
45
  if functions is not None:
40
- assert len(functions) == len(runnables)
41
- assert all(func["name"] in runnables for func in functions)
46
+ if len(functions) != len(runnables):
47
+ msg = "The number of functions does not match the number of runnables."
48
+ raise ValueError(msg)
49
+ if not all(func["name"] in runnables for func in functions):
50
+ msg = "One or more function names are not found in runnables."
51
+ raise ValueError(msg)
42
52
  router = (
43
53
  JsonOutputFunctionsParser(args_only=False)
44
54
  | {"key": itemgetter("name"), "input": itemgetter("arguments")}
@@ -43,40 +43,40 @@ Memory = BaseMemory
43
43
  _message_to_dict = message_to_dict
44
44
 
45
45
  __all__ = [
46
- "BaseCache",
47
- "BaseMemory",
48
- "BaseStore",
49
- "AgentFinish",
46
+ "RUN_KEY",
47
+ "AIMessage",
50
48
  "AgentAction",
51
- "Document",
49
+ "AgentFinish",
50
+ "BaseCache",
52
51
  "BaseChatMessageHistory",
53
52
  "BaseDocumentTransformer",
53
+ "BaseLLMOutputParser",
54
+ "BaseMemory",
54
55
  "BaseMessage",
56
+ "BaseOutputParser",
57
+ "BasePromptTemplate",
58
+ "BaseRetriever",
59
+ "BaseStore",
60
+ "ChatGeneration",
55
61
  "ChatMessage",
62
+ "ChatResult",
63
+ "Document",
56
64
  "FunctionMessage",
65
+ "Generation",
57
66
  "HumanMessage",
58
- "AIMessage",
59
- "SystemMessage",
60
- "messages_from_dict",
61
- "messages_to_dict",
62
- "message_to_dict",
63
- "_message_to_dict",
64
- "_message_from_dict",
65
- "get_buffer_string",
66
- "RunInfo",
67
67
  "LLMResult",
68
- "ChatResult",
69
- "ChatGeneration",
70
- "Generation",
71
- "PromptValue",
72
68
  "LangChainException",
73
- "BaseRetriever",
74
- "RUN_KEY",
75
69
  "Memory",
76
70
  "OutputParserException",
71
+ "PromptValue",
72
+ "RunInfo",
77
73
  "StrOutputParser",
78
- "BaseOutputParser",
79
- "BaseLLMOutputParser",
80
- "BasePromptTemplate",
74
+ "SystemMessage",
75
+ "_message_from_dict",
76
+ "_message_to_dict",
81
77
  "format_document",
78
+ "get_buffer_string",
79
+ "message_to_dict",
80
+ "messages_from_dict",
81
+ "messages_to_dict",
82
82
  ]
langchain/schema/cache.py CHANGED
@@ -1,3 +1,3 @@
1
1
  from langchain_core.caches import RETURN_VAL_TYPE, BaseCache
2
2
 
3
- __all__ = ["BaseCache", "RETURN_VAL_TYPE"]
3
+ __all__ = ["RETURN_VAL_TYPE", "BaseCache"]
@@ -11,13 +11,13 @@ from langchain_core.callbacks.base import (
11
11
  )
12
12
 
13
13
  __all__ = [
14
- "RetrieverManagerMixin",
15
- "LLMManagerMixin",
16
- "ChainManagerMixin",
17
- "ToolManagerMixin",
18
- "CallbackManagerMixin",
19
- "RunManagerMixin",
20
- "BaseCallbackHandler",
21
14
  "AsyncCallbackHandler",
15
+ "BaseCallbackHandler",
22
16
  "BaseCallbackManager",
17
+ "CallbackManagerMixin",
18
+ "ChainManagerMixin",
19
+ "LLMManagerMixin",
20
+ "RetrieverManagerMixin",
21
+ "RunManagerMixin",
22
+ "ToolManagerMixin",
23
23
  ]
@@ -28,28 +28,28 @@ from langchain_core.tracers.context import (
28
28
  from langchain_core.utils.env import env_var_is_set
29
29
 
30
30
  __all__ = [
31
- "tracing_enabled",
32
- "tracing_v2_enabled",
33
- "collect_runs",
34
- "trace_as_chain_group",
35
- "handle_event",
36
- "BaseRunManager",
37
- "RunManager",
38
- "ParentRunManager",
39
- "AsyncRunManager",
40
- "AsyncParentRunManager",
41
- "CallbackManagerForLLMRun",
42
- "AsyncCallbackManagerForLLMRun",
43
- "CallbackManagerForChainRun",
31
+ "AsyncCallbackManager",
32
+ "AsyncCallbackManagerForChainGroup",
44
33
  "AsyncCallbackManagerForChainRun",
45
- "CallbackManagerForToolRun",
46
- "AsyncCallbackManagerForToolRun",
47
- "CallbackManagerForRetrieverRun",
34
+ "AsyncCallbackManagerForLLMRun",
48
35
  "AsyncCallbackManagerForRetrieverRun",
36
+ "AsyncCallbackManagerForToolRun",
37
+ "AsyncParentRunManager",
38
+ "AsyncRunManager",
39
+ "BaseRunManager",
49
40
  "CallbackManager",
50
41
  "CallbackManagerForChainGroup",
51
- "AsyncCallbackManager",
52
- "AsyncCallbackManagerForChainGroup",
53
- "register_configure_hook",
42
+ "CallbackManagerForChainRun",
43
+ "CallbackManagerForLLMRun",
44
+ "CallbackManagerForRetrieverRun",
45
+ "CallbackManagerForToolRun",
46
+ "ParentRunManager",
47
+ "RunManager",
48
+ "collect_runs",
54
49
  "env_var_is_set",
50
+ "handle_event",
51
+ "register_configure_hook",
52
+ "trace_as_chain_group",
53
+ "tracing_enabled",
54
+ "tracing_v2_enabled",
55
55
  ]
@@ -1,4 +1,4 @@
1
1
  from langchain_core.exceptions import TracerException
2
2
  from langchain_core.tracers.base import BaseTracer
3
3
 
4
- __all__ = ["TracerException", "BaseTracer"]
4
+ __all__ = ["BaseTracer", "TracerException"]
@@ -3,4 +3,4 @@ from langchain_core.tracers.evaluation import (
3
3
  wait_for_all_evaluators,
4
4
  )
5
5
 
6
- __all__ = ["wait_for_all_evaluators", "EvaluatorCallbackHandler"]
6
+ __all__ = ["EvaluatorCallbackHandler", "wait_for_all_evaluators"]