langchain 0.3.25__py3-none-any.whl → 0.3.27__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.

Potentially problematic release.


This version of langchain might be problematic. Click here for more details.

Files changed (582) 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 +160 -133
  9. langchain/agents/agent_iterator.py +31 -14
  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 +2 -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 +7 -7
  48. langchain/agents/chat/base.py +6 -12
  49. langchain/agents/chat/output_parser.py +9 -6
  50. langchain/agents/chat/prompt.py +3 -4
  51. langchain/agents/conversational/base.py +9 -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 +7 -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 +18 -9
  63. langchain/agents/json_chat/base.py +18 -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 +9 -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 +80 -70
  71. langchain/agents/openai_functions_agent/base.py +47 -38
  72. langchain/agents/openai_functions_multi_agent/base.py +40 -27
  73. langchain/agents/openai_tools/base.py +8 -8
  74. langchain/agents/output_parsers/__init__.py +3 -3
  75. langchain/agents/output_parsers/json.py +7 -7
  76. langchain/agents/output_parsers/openai_functions.py +15 -7
  77. langchain/agents/output_parsers/openai_tools.py +9 -4
  78. langchain/agents/output_parsers/react_json_single_input.py +10 -5
  79. langchain/agents/output_parsers/react_single_input.py +15 -11
  80. langchain/agents/output_parsers/self_ask.py +3 -2
  81. langchain/agents/output_parsers/tools.py +18 -13
  82. langchain/agents/output_parsers/xml.py +99 -28
  83. langchain/agents/react/agent.py +4 -4
  84. langchain/agents/react/base.py +22 -17
  85. langchain/agents/react/output_parser.py +5 -6
  86. langchain/agents/react/textworld_prompt.py +0 -1
  87. langchain/agents/react/wiki_prompt.py +14 -15
  88. langchain/agents/schema.py +3 -2
  89. langchain/agents/self_ask_with_search/base.py +19 -15
  90. langchain/agents/self_ask_with_search/prompt.py +0 -1
  91. langchain/agents/structured_chat/base.py +14 -11
  92. langchain/agents/structured_chat/output_parser.py +16 -18
  93. langchain/agents/structured_chat/prompt.py +3 -4
  94. langchain/agents/tool_calling_agent/base.py +7 -6
  95. langchain/agents/tools.py +2 -2
  96. langchain/agents/utils.py +2 -3
  97. langchain/agents/xml/base.py +5 -5
  98. langchain/agents/xml/prompt.py +1 -2
  99. langchain/cache.py +12 -12
  100. langchain/callbacks/__init__.py +11 -11
  101. langchain/callbacks/aim_callback.py +2 -2
  102. langchain/callbacks/argilla_callback.py +1 -1
  103. langchain/callbacks/arize_callback.py +1 -1
  104. langchain/callbacks/arthur_callback.py +1 -1
  105. langchain/callbacks/base.py +7 -7
  106. langchain/callbacks/clearml_callback.py +1 -1
  107. langchain/callbacks/comet_ml_callback.py +1 -1
  108. langchain/callbacks/confident_callback.py +1 -1
  109. langchain/callbacks/context_callback.py +1 -1
  110. langchain/callbacks/flyte_callback.py +1 -1
  111. langchain/callbacks/human.py +2 -2
  112. langchain/callbacks/infino_callback.py +1 -1
  113. langchain/callbacks/labelstudio_callback.py +1 -1
  114. langchain/callbacks/llmonitor_callback.py +1 -1
  115. langchain/callbacks/manager.py +6 -6
  116. langchain/callbacks/mlflow_callback.py +2 -2
  117. langchain/callbacks/openai_info.py +1 -1
  118. langchain/callbacks/promptlayer_callback.py +1 -1
  119. langchain/callbacks/sagemaker_callback.py +1 -1
  120. langchain/callbacks/streaming_aiter.py +4 -1
  121. langchain/callbacks/streaming_aiter_final_only.py +5 -3
  122. langchain/callbacks/streaming_stdout_final_only.py +5 -3
  123. langchain/callbacks/streamlit/__init__.py +3 -2
  124. langchain/callbacks/streamlit/mutable_expander.py +1 -1
  125. langchain/callbacks/streamlit/streamlit_callback_handler.py +3 -3
  126. langchain/callbacks/tracers/__init__.py +1 -1
  127. langchain/callbacks/tracers/base.py +2 -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 +1 -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 +36 -22
  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 +89 -55
  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 +24 -11
  149. langchain/chains/combine_documents/map_reduce.py +39 -31
  150. langchain/chains/combine_documents/map_rerank.py +34 -21
  151. langchain/chains/combine_documents/reduce.py +47 -26
  152. langchain/chains/combine_documents/refine.py +26 -17
  153. langchain/chains/combine_documents/stuff.py +19 -12
  154. langchain/chains/constitutional_ai/base.py +4 -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 +6 -7
  158. langchain/chains/conversation/memory.py +5 -5
  159. langchain/chains/conversation/prompt.py +5 -5
  160. langchain/chains/conversational_retrieval/base.py +41 -20
  161. langchain/chains/conversational_retrieval/prompts.py +2 -3
  162. langchain/chains/elasticsearch_database/base.py +8 -9
  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 +26 -12
  167. langchain/chains/graph_qa/cypher.py +2 -2
  168. langchain/chains/graph_qa/falkordb.py +1 -1
  169. langchain/chains/graph_qa/gremlin.py +1 -1
  170. langchain/chains/graph_qa/neptune_sparql.py +1 -1
  171. langchain/chains/graph_qa/prompts.py +2 -2
  172. langchain/chains/history_aware_retriever.py +2 -1
  173. langchain/chains/hyde/base.py +6 -5
  174. langchain/chains/hyde/prompts.py +5 -6
  175. langchain/chains/llm.py +77 -61
  176. langchain/chains/llm_bash/__init__.py +2 -1
  177. langchain/chains/llm_checker/base.py +7 -5
  178. langchain/chains/llm_checker/prompt.py +3 -4
  179. langchain/chains/llm_math/base.py +16 -9
  180. langchain/chains/llm_math/prompt.py +1 -2
  181. langchain/chains/llm_summarization_checker/base.py +9 -6
  182. langchain/chains/llm_symbolic_math/__init__.py +2 -1
  183. langchain/chains/loading.py +170 -153
  184. langchain/chains/mapreduce.py +4 -3
  185. langchain/chains/moderation.py +8 -9
  186. langchain/chains/natbot/base.py +8 -8
  187. langchain/chains/natbot/crawler.py +73 -76
  188. langchain/chains/natbot/prompt.py +2 -3
  189. langchain/chains/openai_functions/__init__.py +7 -7
  190. langchain/chains/openai_functions/base.py +13 -10
  191. langchain/chains/openai_functions/citation_fuzzy_match.py +12 -11
  192. langchain/chains/openai_functions/extraction.py +19 -19
  193. langchain/chains/openai_functions/openapi.py +35 -35
  194. langchain/chains/openai_functions/qa_with_structure.py +19 -12
  195. langchain/chains/openai_functions/tagging.py +2 -4
  196. langchain/chains/openai_tools/extraction.py +7 -8
  197. langchain/chains/qa_generation/base.py +4 -3
  198. langchain/chains/qa_generation/prompt.py +5 -5
  199. langchain/chains/qa_with_sources/base.py +14 -6
  200. langchain/chains/qa_with_sources/loading.py +16 -8
  201. langchain/chains/qa_with_sources/map_reduce_prompt.py +8 -9
  202. langchain/chains/qa_with_sources/refine_prompts.py +0 -1
  203. langchain/chains/qa_with_sources/retrieval.py +14 -5
  204. langchain/chains/qa_with_sources/stuff_prompt.py +6 -7
  205. langchain/chains/qa_with_sources/vector_db.py +17 -6
  206. langchain/chains/query_constructor/base.py +34 -33
  207. langchain/chains/query_constructor/ir.py +4 -4
  208. langchain/chains/query_constructor/parser.py +37 -32
  209. langchain/chains/query_constructor/prompt.py +5 -6
  210. langchain/chains/question_answering/chain.py +21 -10
  211. langchain/chains/question_answering/map_reduce_prompt.py +14 -14
  212. langchain/chains/question_answering/map_rerank_prompt.py +3 -3
  213. langchain/chains/question_answering/refine_prompts.py +2 -5
  214. langchain/chains/question_answering/stuff_prompt.py +5 -5
  215. langchain/chains/retrieval.py +1 -3
  216. langchain/chains/retrieval_qa/base.py +34 -27
  217. langchain/chains/retrieval_qa/prompt.py +1 -2
  218. langchain/chains/router/__init__.py +3 -3
  219. langchain/chains/router/base.py +24 -20
  220. langchain/chains/router/embedding_router.py +12 -8
  221. langchain/chains/router/llm_router.py +17 -16
  222. langchain/chains/router/multi_prompt.py +2 -2
  223. langchain/chains/router/multi_retrieval_qa.py +10 -5
  224. langchain/chains/sequential.py +30 -18
  225. langchain/chains/sql_database/prompt.py +14 -16
  226. langchain/chains/sql_database/query.py +6 -5
  227. langchain/chains/structured_output/__init__.py +1 -1
  228. langchain/chains/structured_output/base.py +75 -67
  229. langchain/chains/summarize/chain.py +11 -5
  230. langchain/chains/summarize/map_reduce_prompt.py +0 -1
  231. langchain/chains/summarize/stuff_prompt.py +0 -1
  232. langchain/chains/transform.py +5 -6
  233. langchain/chat_loaders/facebook_messenger.py +1 -1
  234. langchain/chat_loaders/langsmith.py +1 -1
  235. langchain/chat_loaders/utils.py +3 -3
  236. langchain/chat_models/__init__.py +20 -19
  237. langchain/chat_models/anthropic.py +1 -1
  238. langchain/chat_models/azureml_endpoint.py +1 -1
  239. langchain/chat_models/baidu_qianfan_endpoint.py +1 -1
  240. langchain/chat_models/base.py +160 -123
  241. langchain/chat_models/bedrock.py +1 -1
  242. langchain/chat_models/fake.py +1 -1
  243. langchain/chat_models/meta.py +1 -1
  244. langchain/chat_models/pai_eas_endpoint.py +1 -1
  245. langchain/chat_models/promptlayer_openai.py +1 -1
  246. langchain/chat_models/volcengine_maas.py +1 -1
  247. langchain/docstore/base.py +1 -1
  248. langchain/document_loaders/__init__.py +9 -9
  249. langchain/document_loaders/airbyte.py +3 -3
  250. langchain/document_loaders/assemblyai.py +1 -1
  251. langchain/document_loaders/azure_blob_storage_container.py +1 -1
  252. langchain/document_loaders/azure_blob_storage_file.py +1 -1
  253. langchain/document_loaders/baiducloud_bos_file.py +1 -1
  254. langchain/document_loaders/base.py +1 -1
  255. langchain/document_loaders/blob_loaders/__init__.py +1 -1
  256. langchain/document_loaders/blockchain.py +1 -1
  257. langchain/document_loaders/chatgpt.py +1 -1
  258. langchain/document_loaders/college_confidential.py +1 -1
  259. langchain/document_loaders/confluence.py +1 -1
  260. langchain/document_loaders/email.py +1 -1
  261. langchain/document_loaders/facebook_chat.py +1 -1
  262. langchain/document_loaders/markdown.py +1 -1
  263. langchain/document_loaders/notebook.py +1 -1
  264. langchain/document_loaders/org_mode.py +1 -1
  265. langchain/document_loaders/parsers/__init__.py +1 -1
  266. langchain/document_loaders/parsers/docai.py +1 -1
  267. langchain/document_loaders/parsers/generic.py +1 -1
  268. langchain/document_loaders/parsers/html/__init__.py +1 -1
  269. langchain/document_loaders/parsers/html/bs4.py +1 -1
  270. langchain/document_loaders/parsers/language/cobol.py +1 -1
  271. langchain/document_loaders/parsers/language/python.py +1 -1
  272. langchain/document_loaders/parsers/msword.py +1 -1
  273. langchain/document_loaders/parsers/pdf.py +5 -5
  274. langchain/document_loaders/parsers/registry.py +1 -1
  275. langchain/document_loaders/pdf.py +8 -8
  276. langchain/document_loaders/powerpoint.py +1 -1
  277. langchain/document_loaders/pyspark_dataframe.py +1 -1
  278. langchain/document_loaders/telegram.py +2 -2
  279. langchain/document_loaders/tencent_cos_directory.py +1 -1
  280. langchain/document_loaders/unstructured.py +5 -5
  281. langchain/document_loaders/url_playwright.py +1 -1
  282. langchain/document_loaders/whatsapp_chat.py +1 -1
  283. langchain/document_loaders/youtube.py +2 -2
  284. langchain/document_transformers/__init__.py +3 -3
  285. langchain/document_transformers/beautiful_soup_transformer.py +1 -1
  286. langchain/document_transformers/doctran_text_extract.py +1 -1
  287. langchain/document_transformers/doctran_text_qa.py +1 -1
  288. langchain/document_transformers/doctran_text_translate.py +1 -1
  289. langchain/document_transformers/embeddings_redundant_filter.py +3 -3
  290. langchain/document_transformers/google_translate.py +1 -1
  291. langchain/document_transformers/html2text.py +1 -1
  292. langchain/document_transformers/nuclia_text_transform.py +1 -1
  293. langchain/embeddings/__init__.py +5 -5
  294. langchain/embeddings/base.py +33 -24
  295. langchain/embeddings/cache.py +117 -26
  296. langchain/embeddings/fake.py +1 -1
  297. langchain/embeddings/huggingface.py +2 -2
  298. langchain/evaluation/__init__.py +22 -22
  299. langchain/evaluation/agents/trajectory_eval_chain.py +24 -24
  300. langchain/evaluation/agents/trajectory_eval_prompt.py +6 -9
  301. langchain/evaluation/comparison/__init__.py +1 -1
  302. langchain/evaluation/comparison/eval_chain.py +21 -14
  303. langchain/evaluation/comparison/prompt.py +1 -2
  304. langchain/evaluation/criteria/__init__.py +1 -1
  305. langchain/evaluation/criteria/eval_chain.py +21 -12
  306. langchain/evaluation/criteria/prompt.py +2 -3
  307. langchain/evaluation/embedding_distance/base.py +24 -21
  308. langchain/evaluation/loading.py +15 -11
  309. langchain/evaluation/parsing/base.py +4 -1
  310. langchain/evaluation/parsing/json_distance.py +5 -2
  311. langchain/evaluation/parsing/json_schema.py +12 -8
  312. langchain/evaluation/qa/__init__.py +1 -1
  313. langchain/evaluation/qa/eval_chain.py +13 -6
  314. langchain/evaluation/qa/eval_prompt.py +7 -8
  315. langchain/evaluation/qa/generate_chain.py +2 -1
  316. langchain/evaluation/qa/generate_prompt.py +2 -4
  317. langchain/evaluation/schema.py +38 -30
  318. langchain/evaluation/scoring/__init__.py +1 -1
  319. langchain/evaluation/scoring/eval_chain.py +23 -16
  320. langchain/evaluation/scoring/prompt.py +0 -1
  321. langchain/evaluation/string_distance/base.py +15 -10
  322. langchain/globals.py +12 -11
  323. langchain/graphs/__init__.py +6 -6
  324. langchain/graphs/graph_document.py +1 -1
  325. langchain/graphs/networkx_graph.py +2 -2
  326. langchain/hub.py +9 -11
  327. langchain/indexes/__init__.py +3 -3
  328. langchain/indexes/_sql_record_manager.py +63 -46
  329. langchain/indexes/prompts/entity_extraction.py +1 -2
  330. langchain/indexes/prompts/entity_summarization.py +1 -2
  331. langchain/indexes/prompts/knowledge_triplet_extraction.py +1 -3
  332. langchain/indexes/vectorstore.py +35 -19
  333. langchain/llms/__init__.py +13 -13
  334. langchain/llms/ai21.py +1 -1
  335. langchain/llms/azureml_endpoint.py +4 -4
  336. langchain/llms/base.py +15 -7
  337. langchain/llms/bedrock.py +1 -1
  338. langchain/llms/cloudflare_workersai.py +1 -1
  339. langchain/llms/gradient_ai.py +1 -1
  340. langchain/llms/loading.py +1 -1
  341. langchain/llms/openai.py +1 -1
  342. langchain/llms/sagemaker_endpoint.py +1 -1
  343. langchain/load/dump.py +1 -1
  344. langchain/load/load.py +1 -1
  345. langchain/load/serializable.py +3 -3
  346. langchain/memory/__init__.py +3 -3
  347. langchain/memory/buffer.py +11 -8
  348. langchain/memory/chat_memory.py +14 -8
  349. langchain/memory/chat_message_histories/__init__.py +1 -1
  350. langchain/memory/chat_message_histories/astradb.py +1 -1
  351. langchain/memory/chat_message_histories/cassandra.py +1 -1
  352. langchain/memory/chat_message_histories/cosmos_db.py +1 -1
  353. langchain/memory/chat_message_histories/dynamodb.py +1 -1
  354. langchain/memory/chat_message_histories/elasticsearch.py +1 -1
  355. langchain/memory/chat_message_histories/file.py +1 -1
  356. langchain/memory/chat_message_histories/firestore.py +1 -1
  357. langchain/memory/chat_message_histories/momento.py +1 -1
  358. langchain/memory/chat_message_histories/mongodb.py +1 -1
  359. langchain/memory/chat_message_histories/neo4j.py +1 -1
  360. langchain/memory/chat_message_histories/postgres.py +1 -1
  361. langchain/memory/chat_message_histories/redis.py +1 -1
  362. langchain/memory/chat_message_histories/rocksetdb.py +1 -1
  363. langchain/memory/chat_message_histories/singlestoredb.py +1 -1
  364. langchain/memory/chat_message_histories/streamlit.py +1 -1
  365. langchain/memory/chat_message_histories/upstash_redis.py +1 -1
  366. langchain/memory/chat_message_histories/xata.py +1 -1
  367. langchain/memory/chat_message_histories/zep.py +1 -1
  368. langchain/memory/combined.py +13 -12
  369. langchain/memory/entity.py +84 -61
  370. langchain/memory/prompt.py +10 -11
  371. langchain/memory/readonly.py +0 -2
  372. langchain/memory/simple.py +1 -3
  373. langchain/memory/summary.py +13 -11
  374. langchain/memory/summary_buffer.py +17 -8
  375. langchain/memory/utils.py +3 -2
  376. langchain/memory/vectorstore.py +13 -6
  377. langchain/memory/vectorstore_token_buffer_memory.py +5 -5
  378. langchain/model_laboratory.py +12 -11
  379. langchain/output_parsers/__init__.py +4 -4
  380. langchain/output_parsers/boolean.py +7 -4
  381. langchain/output_parsers/combining.py +10 -5
  382. langchain/output_parsers/datetime.py +32 -31
  383. langchain/output_parsers/enum.py +5 -3
  384. langchain/output_parsers/fix.py +52 -52
  385. langchain/output_parsers/format_instructions.py +6 -8
  386. langchain/output_parsers/json.py +2 -2
  387. langchain/output_parsers/list.py +2 -2
  388. langchain/output_parsers/loading.py +9 -9
  389. langchain/output_parsers/openai_functions.py +3 -3
  390. langchain/output_parsers/openai_tools.py +1 -1
  391. langchain/output_parsers/pandas_dataframe.py +43 -47
  392. langchain/output_parsers/prompts.py +1 -2
  393. langchain/output_parsers/rail_parser.py +1 -1
  394. langchain/output_parsers/regex.py +7 -8
  395. langchain/output_parsers/regex_dict.py +7 -10
  396. langchain/output_parsers/retry.py +77 -78
  397. langchain/output_parsers/structured.py +11 -6
  398. langchain/output_parsers/yaml.py +15 -11
  399. langchain/prompts/__init__.py +5 -3
  400. langchain/prompts/base.py +5 -5
  401. langchain/prompts/chat.py +10 -9
  402. langchain/prompts/example_selector/__init__.py +3 -1
  403. langchain/prompts/example_selector/semantic_similarity.py +2 -2
  404. langchain/prompts/few_shot.py +1 -1
  405. langchain/prompts/loading.py +3 -3
  406. langchain/prompts/prompt.py +1 -1
  407. langchain/retrievers/__init__.py +5 -5
  408. langchain/retrievers/bedrock.py +2 -2
  409. langchain/retrievers/bm25.py +1 -1
  410. langchain/retrievers/contextual_compression.py +15 -13
  411. langchain/retrievers/docarray.py +1 -1
  412. langchain/retrievers/document_compressors/__init__.py +7 -5
  413. langchain/retrievers/document_compressors/base.py +13 -7
  414. langchain/retrievers/document_compressors/chain_extract.py +4 -5
  415. langchain/retrievers/document_compressors/chain_extract_prompt.py +2 -3
  416. langchain/retrievers/document_compressors/chain_filter.py +11 -12
  417. langchain/retrievers/document_compressors/chain_filter_prompt.py +1 -2
  418. langchain/retrievers/document_compressors/cohere_rerank.py +17 -19
  419. langchain/retrievers/document_compressors/embeddings_filter.py +23 -23
  420. langchain/retrievers/document_compressors/flashrank_rerank.py +1 -1
  421. langchain/retrievers/document_compressors/listwise_rerank.py +11 -6
  422. langchain/retrievers/ensemble.py +28 -25
  423. langchain/retrievers/google_cloud_documentai_warehouse.py +1 -1
  424. langchain/retrievers/google_vertex_ai_search.py +2 -2
  425. langchain/retrievers/kendra.py +10 -10
  426. langchain/retrievers/llama_index.py +1 -1
  427. langchain/retrievers/merger_retriever.py +11 -11
  428. langchain/retrievers/milvus.py +1 -1
  429. langchain/retrievers/multi_query.py +32 -26
  430. langchain/retrievers/multi_vector.py +20 -8
  431. langchain/retrievers/parent_document_retriever.py +18 -9
  432. langchain/retrievers/re_phraser.py +6 -5
  433. langchain/retrievers/self_query/base.py +138 -119
  434. langchain/retrievers/time_weighted_retriever.py +18 -7
  435. langchain/retrievers/zilliz.py +1 -1
  436. langchain/runnables/hub.py +2 -1
  437. langchain/runnables/openai_functions.py +6 -2
  438. langchain/schema/__init__.py +23 -23
  439. langchain/schema/cache.py +1 -1
  440. langchain/schema/callbacks/base.py +7 -7
  441. langchain/schema/callbacks/manager.py +19 -19
  442. langchain/schema/callbacks/tracers/base.py +3 -2
  443. langchain/schema/callbacks/tracers/evaluation.py +1 -1
  444. langchain/schema/callbacks/tracers/langchain.py +1 -1
  445. langchain/schema/callbacks/tracers/langchain_v1.py +1 -1
  446. langchain/schema/callbacks/tracers/log_stream.py +1 -1
  447. langchain/schema/callbacks/tracers/schemas.py +8 -8
  448. langchain/schema/callbacks/tracers/stdout.py +3 -3
  449. langchain/schema/document.py +1 -1
  450. langchain/schema/language_model.py +2 -2
  451. langchain/schema/messages.py +12 -12
  452. langchain/schema/output.py +3 -3
  453. langchain/schema/output_parser.py +3 -3
  454. langchain/schema/runnable/__init__.py +3 -3
  455. langchain/schema/runnable/base.py +9 -9
  456. langchain/schema/runnable/config.py +5 -5
  457. langchain/schema/runnable/configurable.py +1 -1
  458. langchain/schema/runnable/history.py +1 -1
  459. langchain/schema/runnable/passthrough.py +1 -1
  460. langchain/schema/runnable/utils.py +16 -16
  461. langchain/schema/vectorstore.py +1 -1
  462. langchain/smith/__init__.py +1 -1
  463. langchain/smith/evaluation/__init__.py +2 -2
  464. langchain/smith/evaluation/config.py +10 -7
  465. langchain/smith/evaluation/name_generation.py +3 -3
  466. langchain/smith/evaluation/progress.py +11 -2
  467. langchain/smith/evaluation/runner_utils.py +181 -129
  468. langchain/smith/evaluation/string_run_evaluator.py +75 -68
  469. langchain/storage/__init__.py +2 -2
  470. langchain/storage/_lc_store.py +4 -2
  471. langchain/storage/encoder_backed.py +6 -2
  472. langchain/storage/file_system.py +19 -16
  473. langchain/storage/in_memory.py +1 -1
  474. langchain/storage/upstash_redis.py +1 -1
  475. langchain/text_splitter.py +15 -15
  476. langchain/tools/__init__.py +28 -26
  477. langchain/tools/ainetwork/app.py +1 -1
  478. langchain/tools/ainetwork/base.py +1 -1
  479. langchain/tools/ainetwork/owner.py +1 -1
  480. langchain/tools/ainetwork/rule.py +1 -1
  481. langchain/tools/ainetwork/transfer.py +1 -1
  482. langchain/tools/ainetwork/value.py +1 -1
  483. langchain/tools/amadeus/closest_airport.py +1 -1
  484. langchain/tools/amadeus/flight_search.py +1 -1
  485. langchain/tools/azure_cognitive_services/__init__.py +1 -1
  486. langchain/tools/base.py +4 -4
  487. langchain/tools/bearly/tool.py +1 -1
  488. langchain/tools/bing_search/__init__.py +1 -1
  489. langchain/tools/bing_search/tool.py +1 -1
  490. langchain/tools/dataforseo_api_search/__init__.py +1 -1
  491. langchain/tools/dataforseo_api_search/tool.py +1 -1
  492. langchain/tools/ddg_search/tool.py +1 -1
  493. langchain/tools/e2b_data_analysis/tool.py +2 -2
  494. langchain/tools/edenai/__init__.py +1 -1
  495. langchain/tools/file_management/__init__.py +1 -1
  496. langchain/tools/file_management/copy.py +1 -1
  497. langchain/tools/file_management/delete.py +1 -1
  498. langchain/tools/gmail/__init__.py +2 -2
  499. langchain/tools/gmail/get_message.py +1 -1
  500. langchain/tools/gmail/search.py +1 -1
  501. langchain/tools/gmail/send_message.py +1 -1
  502. langchain/tools/google_finance/__init__.py +1 -1
  503. langchain/tools/google_finance/tool.py +1 -1
  504. langchain/tools/google_scholar/__init__.py +1 -1
  505. langchain/tools/google_scholar/tool.py +1 -1
  506. langchain/tools/google_search/__init__.py +1 -1
  507. langchain/tools/google_search/tool.py +1 -1
  508. langchain/tools/google_serper/__init__.py +1 -1
  509. langchain/tools/google_serper/tool.py +1 -1
  510. langchain/tools/google_trends/__init__.py +1 -1
  511. langchain/tools/google_trends/tool.py +1 -1
  512. langchain/tools/jira/tool.py +20 -1
  513. langchain/tools/json/tool.py +25 -3
  514. langchain/tools/memorize/tool.py +1 -1
  515. langchain/tools/multion/__init__.py +1 -1
  516. langchain/tools/multion/update_session.py +1 -1
  517. langchain/tools/office365/__init__.py +2 -2
  518. langchain/tools/office365/events_search.py +1 -1
  519. langchain/tools/office365/messages_search.py +1 -1
  520. langchain/tools/office365/send_event.py +1 -1
  521. langchain/tools/office365/send_message.py +1 -1
  522. langchain/tools/openapi/utils/api_models.py +6 -6
  523. langchain/tools/playwright/__init__.py +5 -5
  524. langchain/tools/playwright/click.py +1 -1
  525. langchain/tools/playwright/extract_hyperlinks.py +1 -1
  526. langchain/tools/playwright/get_elements.py +1 -1
  527. langchain/tools/playwright/navigate.py +1 -1
  528. langchain/tools/plugin.py +2 -2
  529. langchain/tools/powerbi/tool.py +1 -1
  530. langchain/tools/python/__init__.py +2 -1
  531. langchain/tools/reddit_search/tool.py +1 -1
  532. langchain/tools/render.py +2 -2
  533. langchain/tools/requests/tool.py +2 -2
  534. langchain/tools/searchapi/tool.py +1 -1
  535. langchain/tools/searx_search/tool.py +1 -1
  536. langchain/tools/slack/get_message.py +1 -1
  537. langchain/tools/spark_sql/tool.py +1 -1
  538. langchain/tools/sql_database/tool.py +1 -1
  539. langchain/tools/tavily_search/__init__.py +1 -1
  540. langchain/tools/tavily_search/tool.py +1 -1
  541. langchain/tools/zapier/__init__.py +1 -1
  542. langchain/tools/zapier/tool.py +24 -2
  543. langchain/utilities/__init__.py +4 -4
  544. langchain/utilities/arcee.py +4 -4
  545. langchain/utilities/clickup.py +4 -4
  546. langchain/utilities/dalle_image_generator.py +1 -1
  547. langchain/utilities/dataforseo_api_search.py +1 -1
  548. langchain/utilities/opaqueprompts.py +1 -1
  549. langchain/utilities/reddit_search.py +1 -1
  550. langchain/utilities/sql_database.py +1 -1
  551. langchain/utilities/tavily_search.py +1 -1
  552. langchain/utilities/vertexai.py +2 -2
  553. langchain/utils/__init__.py +1 -1
  554. langchain/utils/aiter.py +1 -1
  555. langchain/utils/html.py +3 -3
  556. langchain/utils/input.py +1 -1
  557. langchain/utils/iter.py +1 -1
  558. langchain/utils/json_schema.py +1 -3
  559. langchain/utils/strings.py +1 -1
  560. langchain/utils/utils.py +6 -6
  561. langchain/vectorstores/__init__.py +5 -5
  562. langchain/vectorstores/alibabacloud_opensearch.py +1 -1
  563. langchain/vectorstores/azure_cosmos_db.py +1 -1
  564. langchain/vectorstores/clickhouse.py +1 -1
  565. langchain/vectorstores/elastic_vector_search.py +1 -1
  566. langchain/vectorstores/elasticsearch.py +2 -2
  567. langchain/vectorstores/myscale.py +1 -1
  568. langchain/vectorstores/neo4j_vector.py +1 -1
  569. langchain/vectorstores/pgembedding.py +1 -1
  570. langchain/vectorstores/qdrant.py +1 -1
  571. langchain/vectorstores/redis/__init__.py +1 -1
  572. langchain/vectorstores/redis/base.py +1 -1
  573. langchain/vectorstores/redis/filters.py +4 -4
  574. langchain/vectorstores/redis/schema.py +6 -6
  575. langchain/vectorstores/sklearn.py +2 -2
  576. langchain/vectorstores/starrocks.py +1 -1
  577. langchain/vectorstores/utils.py +1 -1
  578. {langchain-0.3.25.dist-info → langchain-0.3.27.dist-info}/METADATA +5 -5
  579. {langchain-0.3.25.dist-info → langchain-0.3.27.dist-info}/RECORD +582 -582
  580. {langchain-0.3.25.dist-info → langchain-0.3.27.dist-info}/WHEEL +1 -1
  581. {langchain-0.3.25.dist-info → langchain-0.3.27.dist-info}/entry_points.txt +0 -0
  582. {langchain-0.3.25.dist-info → langchain-0.3.27.dist-info}/licenses/LICENSE +0 -0
@@ -47,18 +47,18 @@ from pydantic import BaseModel
47
47
  """
48
48
  from pydantic import BaseModel, Field
49
49
  from langchain_anthropic import ChatAnthropic
50
-
50
+
51
51
  class Joke(BaseModel):
52
52
  setup: str = Field(description="The setup of the joke")
53
- punchline: str = Field(description="The punchline to the joke")
54
-
53
+ punchline: str = Field(description="The punchline to the joke")
54
+
55
55
  # Or any other chat model that supports tools.
56
56
  # Please reference to to the documentation of structured_output
57
- # to see an up to date list of which models support
57
+ # to see an up to date list of which models support
58
58
  # with_structured_output.
59
59
  model = ChatAnthropic(model="claude-3-opus-20240229", temperature=0)
60
60
  structured_llm = model.with_structured_output(Joke)
61
- structured_llm.invoke("Tell me a joke about cats.
61
+ structured_llm.invoke("Tell me a joke about cats.
62
62
  Make sure to call the Joke function.")
63
63
  """
64
64
  ),
@@ -134,7 +134,8 @@ def create_openai_fn_runnable(
134
134
  # -> RecordDog(name="Harry", color="brown", fav_food="chicken")
135
135
  """ # noqa: E501
136
136
  if not functions:
137
- raise ValueError("Need to pass in at least one function. Received zero.")
137
+ msg = "Need to pass in at least one function. Received zero."
138
+ raise ValueError(msg)
138
139
  openai_functions = [convert_to_openai_function(f) for f in functions]
139
140
  llm_kwargs_: dict[str, Any] = {"functions": openai_functions, **llm_kwargs}
140
141
  if len(openai_functions) == 1 and enforce_single_function_usage:
@@ -142,8 +143,7 @@ def create_openai_fn_runnable(
142
143
  output_parser = output_parser or get_openai_output_parser(functions)
143
144
  if prompt:
144
145
  return prompt | llm.bind(**llm_kwargs_) | output_parser
145
- else:
146
- return llm.bind(**llm_kwargs_) | output_parser
146
+ return llm.bind(**llm_kwargs_) | output_parser
147
147
 
148
148
 
149
149
  @deprecated(
@@ -168,15 +168,15 @@ def create_openai_fn_runnable(
168
168
 
169
169
  class Joke(BaseModel):
170
170
  setup: str = Field(description="The setup of the joke")
171
- punchline: str = Field(description="The punchline to the joke")
171
+ punchline: str = Field(description="The punchline to the joke")
172
172
 
173
173
  # Or any other chat model that supports tools.
174
174
  # Please reference to to the documentation of structured_output
175
- # to see an up to date list of which models support
175
+ # to see an up to date list of which models support
176
176
  # with_structured_output.
177
177
  model = ChatAnthropic(model="claude-3-opus-20240229", temperature=0)
178
178
  structured_llm = model.with_structured_output(Joke)
179
- structured_llm.invoke("Tell me a joke about cats.
179
+ structured_llm.invoke("Tell me a joke about cats.
180
180
  Make sure to call the Joke function.")
181
181
  """
182
182
  ),
@@ -190,7 +190,9 @@ def create_structured_output_runnable(
190
190
  enforce_function_usage: bool = True,
191
191
  return_single: bool = True,
192
192
  mode: Literal[
193
- "openai-functions", "openai-tools", "openai-json"
193
+ "openai-functions",
194
+ "openai-tools",
195
+ "openai-json",
194
196
  ] = "openai-functions",
195
197
  **kwargs: Any,
196
198
  ) -> Runnable:
@@ -201,39 +203,39 @@ def create_structured_output_runnable(
201
203
  is passed in, it's assumed to already be a valid JsonSchema.
202
204
  For best results, pydantic.BaseModels should have docstrings describing what
203
205
  the schema represents and descriptions for the parameters.
204
- llm: Language model to use. Assumed to support the OpenAI function-calling API
205
- if mode is 'openai-function'. Assumed to support OpenAI response_format
206
+ llm: Language model to use. Assumed to support the OpenAI function-calling API
207
+ if mode is 'openai-function'. Assumed to support OpenAI response_format
206
208
  parameter if mode is 'openai-json'.
207
- prompt: BasePromptTemplate to pass to the model. If mode is 'openai-json' and
208
- prompt has input variable 'output_schema' then the given output_schema
209
+ prompt: BasePromptTemplate to pass to the model. If mode is 'openai-json' and
210
+ prompt has input variable 'output_schema' then the given output_schema
209
211
  will be converted to a JsonSchema and inserted in the prompt.
210
212
  output_parser: Output parser to use for parsing model outputs. By default
211
213
  will be inferred from the function types. If pydantic.BaseModel is passed
212
- in, then the OutputParser will try to parse outputs using the pydantic
214
+ in, then the OutputParser will try to parse outputs using the pydantic
213
215
  class. Otherwise model outputs will be parsed as JSON.
214
- mode: How structured outputs are extracted from the model. If 'openai-functions'
215
- then OpenAI function calling is used with the deprecated 'functions',
216
- 'function_call' schema. If 'openai-tools' then OpenAI function
217
- calling with the latest 'tools', 'tool_choice' schema is used. This is
218
- recommended over 'openai-functions'. If 'openai-json' then OpenAI model
216
+ mode: How structured outputs are extracted from the model. If 'openai-functions'
217
+ then OpenAI function calling is used with the deprecated 'functions',
218
+ 'function_call' schema. If 'openai-tools' then OpenAI function
219
+ calling with the latest 'tools', 'tool_choice' schema is used. This is
220
+ recommended over 'openai-functions'. If 'openai-json' then OpenAI model
219
221
  with response_format set to JSON is used.
220
- enforce_function_usage: Only applies when mode is 'openai-tools' or
221
- 'openai-functions'. If True, then the model will be forced to use the given
222
- output schema. If False, then the model can elect whether to use the output
222
+ enforce_function_usage: Only applies when mode is 'openai-tools' or
223
+ 'openai-functions'. If True, then the model will be forced to use the given
224
+ output schema. If False, then the model can elect whether to use the output
223
225
  schema.
224
- return_single: Only applies when mode is 'openai-tools'. Whether to a list of
225
- structured outputs or a single one. If True and model does not return any
226
- structured outputs then chain output is None. If False and model does not
226
+ return_single: Only applies when mode is 'openai-tools'. Whether to a list of
227
+ structured outputs or a single one. If True and model does not return any
228
+ structured outputs then chain output is None. If False and model does not
227
229
  return any structured outputs then chain output is an empty list.
228
230
  kwargs: Additional named arguments.
229
231
 
230
232
  Returns:
231
- A runnable sequence that will return a structured output(s) matching the given
233
+ A runnable sequence that will return a structured output(s) matching the given
232
234
  output_schema.
233
-
235
+
234
236
  OpenAI tools example with Pydantic schema (mode='openai-tools'):
235
237
  .. code-block:: python
236
-
238
+
237
239
  from typing import Optional
238
240
 
239
241
  from langchain.chains import create_structured_output_runnable
@@ -251,23 +253,23 @@ def create_structured_output_runnable(
251
253
  llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0)
252
254
  prompt = ChatPromptTemplate.from_messages(
253
255
  [
254
- ("system", "You are an extraction algorithm. Please extract every possible instance"),
256
+ ("system", "You are an extraction algorithm. Please extract every possible instance"),
255
257
  ('human', '{input}')
256
258
  ]
257
259
  )
258
260
  structured_llm = create_structured_output_runnable(
259
- RecordDog,
260
- llm,
261
- mode="openai-tools",
262
- enforce_function_usage=True,
261
+ RecordDog,
262
+ llm,
263
+ mode="openai-tools",
264
+ enforce_function_usage=True,
263
265
  return_single=True
264
266
  )
265
267
  structured_llm.invoke({"input": "Harry was a chubby brown beagle who loved chicken"})
266
268
  # -> RecordDog(name="Harry", color="brown", fav_food="chicken")
267
-
269
+
268
270
  OpenAI tools example with dict schema (mode="openai-tools"):
269
271
  .. code-block:: python
270
-
272
+
271
273
  from typing import Optional
272
274
 
273
275
  from langchain.chains import create_structured_output_runnable
@@ -303,15 +305,15 @@ def create_structured_output_runnable(
303
305
 
304
306
  llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0)
305
307
  structured_llm = create_structured_output_runnable(
306
- dog_schema,
307
- llm,
308
- mode="openai-tools",
309
- enforce_function_usage=True,
308
+ dog_schema,
309
+ llm,
310
+ mode="openai-tools",
311
+ enforce_function_usage=True,
310
312
  return_single=True
311
313
  )
312
314
  structured_llm.invoke("Harry was a chubby brown beagle who loved chicken")
313
315
  # -> {'name': 'Harry', 'color': 'brown', 'fav_food': 'chicken'}
314
-
316
+
315
317
  OpenAI functions example (mode="openai-functions"):
316
318
  .. code-block:: python
317
319
 
@@ -332,7 +334,7 @@ def create_structured_output_runnable(
332
334
  structured_llm = create_structured_output_runnable(Dog, llm, mode="openai-functions")
333
335
  structured_llm.invoke("Harry was a chubby brown beagle who loved chicken")
334
336
  # -> Dog(name="Harry", color="brown", fav_food="chicken")
335
-
337
+
336
338
  OpenAI functions with prompt example:
337
339
  .. code-block:: python
338
340
 
@@ -361,7 +363,7 @@ def create_structured_output_runnable(
361
363
  # -> Dog(name="Harry", color="brown", fav_food="chicken")
362
364
  OpenAI json response format example (mode="openai-json"):
363
365
  .. code-block:: python
364
-
366
+
365
367
  from typing import Optional
366
368
 
367
369
  from langchain.chains import create_structured_output_runnable
@@ -379,9 +381,9 @@ def create_structured_output_runnable(
379
381
  llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0)
380
382
  structured_llm = create_structured_output_runnable(Dog, llm, mode="openai-json")
381
383
  system = '''You are a world class assistant for extracting information in structured JSON formats. \
382
-
384
+
383
385
  Extract a valid JSON blob from the user input that matches the following JSON Schema:
384
-
386
+
385
387
  {output_schema}'''
386
388
  prompt = ChatPromptTemplate.from_messages(
387
389
  [("system", system), ("human", "{input}"),]
@@ -391,7 +393,8 @@ def create_structured_output_runnable(
391
393
  """ # noqa: E501
392
394
  # for backwards compatibility
393
395
  force_function_usage = kwargs.get(
394
- "enforce_single_function_usage", enforce_function_usage
396
+ "enforce_single_function_usage",
397
+ enforce_function_usage,
395
398
  )
396
399
 
397
400
  if mode == "openai-tools":
@@ -400,9 +403,8 @@ def create_structured_output_runnable(
400
403
  # Backwards compatibility keys
401
404
  unrecognized_keys = keys_in_kwargs - {"enforce_single_function_usage"}
402
405
  if unrecognized_keys:
403
- raise TypeError(
404
- f"Got an unexpected keyword argument(s): {unrecognized_keys}."
405
- )
406
+ msg = f"Got an unexpected keyword argument(s): {unrecognized_keys}."
407
+ raise TypeError(msg)
406
408
 
407
409
  return _create_openai_tools_runnable(
408
410
  output_schema,
@@ -413,7 +415,7 @@ def create_structured_output_runnable(
413
415
  first_tool_only=return_single,
414
416
  )
415
417
 
416
- elif mode == "openai-functions":
418
+ if mode == "openai-functions":
417
419
  return _create_openai_functions_structured_output_runnable(
418
420
  output_schema,
419
421
  llm,
@@ -422,19 +424,24 @@ def create_structured_output_runnable(
422
424
  enforce_single_function_usage=force_function_usage,
423
425
  **kwargs, # llm-specific kwargs
424
426
  )
425
- elif mode == "openai-json":
427
+ if mode == "openai-json":
426
428
  if force_function_usage:
427
- raise ValueError(
429
+ msg = (
428
430
  "enforce_single_function_usage is not supported for mode='openai-json'."
429
431
  )
432
+ raise ValueError(msg)
430
433
  return _create_openai_json_runnable(
431
- output_schema, llm, prompt=prompt, output_parser=output_parser, **kwargs
432
- )
433
- else:
434
- raise ValueError(
435
- f"Invalid mode {mode}. Expected one of 'openai-tools', 'openai-functions', "
436
- f"'openai-json'."
434
+ output_schema,
435
+ llm,
436
+ prompt=prompt,
437
+ output_parser=output_parser,
438
+ **kwargs,
437
439
  )
440
+ msg = (
441
+ f"Invalid mode {mode}. Expected one of 'openai-tools', 'openai-functions', "
442
+ f"'openai-json'."
443
+ )
444
+ raise ValueError(msg)
438
445
 
439
446
 
440
447
  def _create_openai_tools_runnable(
@@ -454,12 +461,12 @@ def _create_openai_tools_runnable(
454
461
  "function": {"name": oai_tool["function"]["name"]},
455
462
  }
456
463
  output_parser = output_parser or _get_openai_tool_output_parser(
457
- tool, first_tool_only=first_tool_only
464
+ tool,
465
+ first_tool_only=first_tool_only,
458
466
  )
459
467
  if prompt:
460
468
  return prompt | llm.bind(**llm_kwargs) | output_parser
461
- else:
462
- return llm.bind(**llm_kwargs) | output_parser
469
+ return llm.bind(**llm_kwargs) | output_parser
463
470
 
464
471
 
465
472
  def _get_openai_tool_output_parser(
@@ -474,7 +481,8 @@ def _get_openai_tool_output_parser(
474
481
  else:
475
482
  key_name = convert_to_openai_tool(tool)["function"]["name"]
476
483
  output_parser = JsonOutputKeyToolsParser(
477
- first_tool_only=first_tool_only, key_name=key_name
484
+ first_tool_only=first_tool_only,
485
+ key_name=key_name,
478
486
  )
479
487
  return output_parser
480
488
 
@@ -533,8 +541,7 @@ def _create_openai_json_runnable(
533
541
  prompt = prompt.partial(output_schema=json.dumps(schema_as_dict, indent=2))
534
542
 
535
543
  return prompt | llm | output_parser
536
- else:
537
- return llm | output_parser
544
+ return llm | output_parser
538
545
 
539
546
 
540
547
  def _create_openai_functions_structured_output_runnable(
@@ -563,7 +570,8 @@ def _create_openai_functions_structured_output_runnable(
563
570
 
564
571
  function = _OutputFormatter
565
572
  output_parser = output_parser or PydanticAttrOutputFunctionsParser(
566
- pydantic_schema=_OutputFormatter, attr_name="output"
573
+ pydantic_schema=_OutputFormatter,
574
+ attr_name="output",
567
575
  )
568
576
  return create_openai_fn_runnable(
569
577
  [function],
@@ -20,13 +20,16 @@ class LoadingCallable(Protocol):
20
20
  """Interface for loading the combine documents chain."""
21
21
 
22
22
  def __call__(
23
- self, llm: BaseLanguageModel, **kwargs: Any
23
+ self,
24
+ llm: BaseLanguageModel,
25
+ **kwargs: Any,
24
26
  ) -> BaseCombineDocumentsChain:
25
27
  """Callable to load the combine documents chain."""
26
28
 
27
29
 
28
30
  def _load_stuff_chain(
29
31
  llm: BaseLanguageModel,
32
+ *,
30
33
  prompt: BasePromptTemplate = stuff_prompt.PROMPT,
31
34
  document_variable_name: str = "text",
32
35
  verbose: Optional[bool] = None,
@@ -44,6 +47,7 @@ def _load_stuff_chain(
44
47
 
45
48
  def _load_map_reduce_chain(
46
49
  llm: BaseLanguageModel,
50
+ *,
47
51
  map_prompt: BasePromptTemplate = map_reduce_prompt.PROMPT,
48
52
  combine_prompt: BasePromptTemplate = map_reduce_prompt.PROMPT,
49
53
  combine_document_variable_name: str = "text",
@@ -54,7 +58,6 @@ def _load_map_reduce_chain(
54
58
  verbose: Optional[bool] = None,
55
59
  token_max: int = 3000,
56
60
  callbacks: Callbacks = None,
57
- *,
58
61
  collapse_max_retries: Optional[int] = None,
59
62
  **kwargs: Any,
60
63
  ) -> MapReduceDocumentsChain:
@@ -81,10 +84,11 @@ def _load_map_reduce_chain(
81
84
  if collapse_prompt is None:
82
85
  collapse_chain = None
83
86
  if collapse_llm is not None:
84
- raise ValueError(
87
+ msg = (
85
88
  "collapse_llm provided, but collapse_prompt was not: please "
86
89
  "provide one or stop providing collapse_llm."
87
90
  )
91
+ raise ValueError(msg)
88
92
  else:
89
93
  _collapse_llm = collapse_llm or llm
90
94
  collapse_chain = StuffDocumentsChain(
@@ -116,6 +120,7 @@ def _load_map_reduce_chain(
116
120
 
117
121
  def _load_refine_chain(
118
122
  llm: BaseLanguageModel,
123
+ *,
119
124
  question_prompt: BasePromptTemplate = refine_prompts.PROMPT,
120
125
  refine_prompt: BasePromptTemplate = refine_prompts.REFINE_PROMPT,
121
126
  document_variable_name: str = "text",
@@ -140,7 +145,7 @@ def _load_refine_chain(
140
145
  def load_summarize_chain(
141
146
  llm: BaseLanguageModel,
142
147
  chain_type: str = "stuff",
143
- verbose: Optional[bool] = None,
148
+ verbose: Optional[bool] = None, # noqa: FBT001
144
149
  **kwargs: Any,
145
150
  ) -> BaseCombineDocumentsChain:
146
151
  """Load summarizing chain.
@@ -161,8 +166,9 @@ def load_summarize_chain(
161
166
  "refine": _load_refine_chain,
162
167
  }
163
168
  if chain_type not in loader_mapping:
164
- raise ValueError(
169
+ msg = (
165
170
  f"Got unsupported chain type: {chain_type}. "
166
171
  f"Should be one of {loader_mapping.keys()}"
167
172
  )
173
+ raise ValueError(msg)
168
174
  return loader_mapping[chain_type](llm, verbose=verbose, **kwargs)
@@ -1,4 +1,3 @@
1
- # flake8: noqa
2
1
  from langchain_core.prompts import PromptTemplate
3
2
 
4
3
  prompt_template = """Write a concise summary of the following:
@@ -1,4 +1,3 @@
1
- # flake8: noqa
2
1
  from langchain_core.prompts import PromptTemplate
3
2
 
4
3
  prompt_template = """Write a concise summary of the following:
@@ -77,9 +77,8 @@ class TransformChain(Chain):
77
77
  ) -> dict[str, Any]:
78
78
  if self.atransform_cb is not None:
79
79
  return await self.atransform_cb(inputs)
80
- else:
81
- self._log_once(
82
- "TransformChain's atransform is not provided, falling"
83
- " back to synchronous transform"
84
- )
85
- return self.transform_cb(inputs)
80
+ self._log_once(
81
+ "TransformChain's atransform is not provided, falling"
82
+ " back to synchronous transform",
83
+ )
84
+ return self.transform_cb(inputs)
@@ -29,4 +29,4 @@ def __getattr__(name: str) -> Any:
29
29
  return import_lookup(name)
30
30
 
31
31
 
32
- __all__ = ["SingleFileFacebookMessengerChatLoader", "FolderFacebookMessengerChatLoader"]
32
+ __all__ = ["FolderFacebookMessengerChatLoader", "SingleFileFacebookMessengerChatLoader"]
@@ -25,6 +25,6 @@ def __getattr__(name: str) -> Any:
25
25
 
26
26
 
27
27
  __all__ = [
28
- "LangSmithRunChatLoader",
29
28
  "LangSmithDatasetChatLoader",
29
+ "LangSmithRunChatLoader",
30
30
  ]
@@ -29,8 +29,8 @@ def __getattr__(name: str) -> Any:
29
29
 
30
30
 
31
31
  __all__ = [
32
- "merge_chat_runs_in_session",
33
- "merge_chat_runs",
34
- "map_ai_messages_in_session",
35
32
  "map_ai_messages",
33
+ "map_ai_messages_in_session",
34
+ "merge_chat_runs",
35
+ "merge_chat_runs_in_session",
36
36
  ]
@@ -36,6 +36,7 @@ def __getattr__(name: str) -> None:
36
36
  "Please import from langchain-community instead:\n\n"
37
37
  f"`from langchain_community.chat_models import {name}`.\n\n"
38
38
  "To install langchain-community run `pip install -U langchain-community`.",
39
+ stacklevel=2,
39
40
  category=LangChainDeprecationWarning,
40
41
  )
41
42
 
@@ -43,35 +44,35 @@ def __getattr__(name: str) -> None:
43
44
 
44
45
 
45
46
  __all__ = [
46
- "init_chat_model",
47
- "ChatOpenAI",
48
- "BedrockChat",
49
47
  "AzureChatOpenAI",
50
- "FakeListChatModel",
51
- "PromptLayerChatOpenAI",
52
- "ChatDatabricks",
53
- "ChatEverlyAI",
48
+ "BedrockChat",
54
49
  "ChatAnthropic",
50
+ "ChatAnyscale",
51
+ "ChatBaichuan",
55
52
  "ChatCohere",
53
+ "ChatDatabricks",
54
+ "ChatEverlyAI",
55
+ "ChatFireworks",
56
56
  "ChatGooglePalm",
57
- "ChatMlflow",
57
+ "ChatHunyuan",
58
+ "ChatJavelinAIGateway",
59
+ "ChatKonko",
60
+ "ChatLiteLLM",
58
61
  "ChatMLflowAIGateway",
62
+ "ChatMlflow",
59
63
  "ChatOllama",
64
+ "ChatOpenAI",
60
65
  "ChatVertexAI",
61
- "JinaChat",
66
+ "ChatYandexGPT",
67
+ "ErnieBotChat",
68
+ "FakeListChatModel",
69
+ "GigaChat",
62
70
  "HumanInputChatModel",
71
+ "JinaChat",
63
72
  "MiniMaxChat",
64
- "ChatAnyscale",
65
- "ChatLiteLLM",
66
- "ErnieBotChat",
67
- "ChatJavelinAIGateway",
68
- "ChatKonko",
69
73
  "PaiEasChatEndpoint",
74
+ "PromptLayerChatOpenAI",
70
75
  "QianfanChatEndpoint",
71
- "ChatFireworks",
72
- "ChatYandexGPT",
73
- "ChatBaichuan",
74
- "ChatHunyuan",
75
- "GigaChat",
76
76
  "VolcEngineMaasChat",
77
+ "init_chat_model",
77
78
  ]
@@ -25,6 +25,6 @@ def __getattr__(name: str) -> Any:
25
25
 
26
26
 
27
27
  __all__ = [
28
- "convert_messages_to_prompt_anthropic",
29
28
  "ChatAnthropic",
29
+ "convert_messages_to_prompt_anthropic",
30
30
  ]
@@ -25,6 +25,6 @@ def __getattr__(name: str) -> Any:
25
25
 
26
26
 
27
27
  __all__ = [
28
- "LlamaContentFormatter",
29
28
  "AzureMLChatOnlineEndpoint",
29
+ "LlamaContentFormatter",
30
30
  ]
@@ -11,7 +11,7 @@ if TYPE_CHECKING:
11
11
  # Used to consolidate logic for raising deprecation warnings and
12
12
  # handling optional imports.
13
13
  DEPRECATED_LOOKUP = {
14
- "QianfanChatEndpoint": "langchain_community.chat_models.baidu_qianfan_endpoint"
14
+ "QianfanChatEndpoint": "langchain_community.chat_models.baidu_qianfan_endpoint",
15
15
  }
16
16
 
17
17
  _import_attribute = create_importer(__package__, deprecated_lookups=DEPRECATED_LOOKUP)