langchain 0.3.26__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 (580) 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 +6 -6
  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 +16 -8
  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 +46 -37
  72. langchain/agents/openai_functions_multi_agent/base.py +39 -26
  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 +6 -6
  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 +5 -5
  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/comet.py +1 -1
  128. langchain/callbacks/tracers/evaluation.py +1 -1
  129. langchain/callbacks/tracers/log_stream.py +1 -1
  130. langchain/callbacks/tracers/logging.py +1 -1
  131. langchain/callbacks/tracers/stdout.py +1 -1
  132. langchain/callbacks/trubrics_callback.py +1 -1
  133. langchain/callbacks/utils.py +4 -4
  134. langchain/callbacks/wandb_callback.py +1 -1
  135. langchain/callbacks/whylabs_callback.py +1 -1
  136. langchain/chains/api/base.py +36 -22
  137. langchain/chains/api/news_docs.py +1 -2
  138. langchain/chains/api/open_meteo_docs.py +1 -2
  139. langchain/chains/api/openapi/requests_chain.py +1 -1
  140. langchain/chains/api/openapi/response_chain.py +1 -1
  141. langchain/chains/api/podcast_docs.py +1 -2
  142. langchain/chains/api/prompt.py +1 -2
  143. langchain/chains/api/tmdb_docs.py +1 -2
  144. langchain/chains/base.py +88 -54
  145. langchain/chains/chat_vector_db/prompts.py +2 -3
  146. langchain/chains/combine_documents/__init__.py +1 -1
  147. langchain/chains/combine_documents/base.py +23 -10
  148. langchain/chains/combine_documents/map_reduce.py +38 -30
  149. langchain/chains/combine_documents/map_rerank.py +33 -20
  150. langchain/chains/combine_documents/reduce.py +47 -26
  151. langchain/chains/combine_documents/refine.py +26 -17
  152. langchain/chains/combine_documents/stuff.py +19 -12
  153. langchain/chains/constitutional_ai/base.py +4 -4
  154. langchain/chains/constitutional_ai/principles.py +22 -25
  155. langchain/chains/constitutional_ai/prompts.py +25 -28
  156. langchain/chains/conversation/base.py +5 -3
  157. langchain/chains/conversation/memory.py +5 -5
  158. langchain/chains/conversation/prompt.py +5 -5
  159. langchain/chains/conversational_retrieval/base.py +41 -20
  160. langchain/chains/conversational_retrieval/prompts.py +2 -3
  161. langchain/chains/elasticsearch_database/base.py +8 -9
  162. langchain/chains/elasticsearch_database/prompts.py +2 -3
  163. langchain/chains/ernie_functions/__init__.py +2 -2
  164. langchain/chains/example_generator.py +3 -1
  165. langchain/chains/flare/base.py +26 -12
  166. langchain/chains/graph_qa/cypher.py +2 -2
  167. langchain/chains/graph_qa/falkordb.py +1 -1
  168. langchain/chains/graph_qa/gremlin.py +1 -1
  169. langchain/chains/graph_qa/neptune_sparql.py +1 -1
  170. langchain/chains/graph_qa/prompts.py +2 -2
  171. langchain/chains/history_aware_retriever.py +2 -1
  172. langchain/chains/hyde/base.py +6 -5
  173. langchain/chains/hyde/prompts.py +5 -6
  174. langchain/chains/llm.py +77 -61
  175. langchain/chains/llm_bash/__init__.py +2 -1
  176. langchain/chains/llm_checker/base.py +7 -5
  177. langchain/chains/llm_checker/prompt.py +3 -4
  178. langchain/chains/llm_math/base.py +16 -9
  179. langchain/chains/llm_math/prompt.py +1 -2
  180. langchain/chains/llm_summarization_checker/base.py +9 -6
  181. langchain/chains/llm_symbolic_math/__init__.py +2 -1
  182. langchain/chains/loading.py +151 -95
  183. langchain/chains/mapreduce.py +4 -3
  184. langchain/chains/moderation.py +8 -9
  185. langchain/chains/natbot/base.py +8 -8
  186. langchain/chains/natbot/crawler.py +73 -76
  187. langchain/chains/natbot/prompt.py +2 -3
  188. langchain/chains/openai_functions/__init__.py +7 -7
  189. langchain/chains/openai_functions/base.py +13 -10
  190. langchain/chains/openai_functions/citation_fuzzy_match.py +12 -11
  191. langchain/chains/openai_functions/extraction.py +19 -19
  192. langchain/chains/openai_functions/openapi.py +35 -35
  193. langchain/chains/openai_functions/qa_with_structure.py +19 -12
  194. langchain/chains/openai_functions/tagging.py +2 -4
  195. langchain/chains/openai_tools/extraction.py +7 -8
  196. langchain/chains/qa_generation/base.py +4 -3
  197. langchain/chains/qa_generation/prompt.py +5 -5
  198. langchain/chains/qa_with_sources/base.py +14 -6
  199. langchain/chains/qa_with_sources/loading.py +16 -8
  200. langchain/chains/qa_with_sources/map_reduce_prompt.py +8 -9
  201. langchain/chains/qa_with_sources/refine_prompts.py +0 -1
  202. langchain/chains/qa_with_sources/retrieval.py +14 -5
  203. langchain/chains/qa_with_sources/stuff_prompt.py +6 -7
  204. langchain/chains/qa_with_sources/vector_db.py +17 -6
  205. langchain/chains/query_constructor/base.py +34 -33
  206. langchain/chains/query_constructor/ir.py +4 -4
  207. langchain/chains/query_constructor/parser.py +37 -32
  208. langchain/chains/query_constructor/prompt.py +5 -6
  209. langchain/chains/question_answering/chain.py +21 -10
  210. langchain/chains/question_answering/map_reduce_prompt.py +14 -14
  211. langchain/chains/question_answering/map_rerank_prompt.py +3 -3
  212. langchain/chains/question_answering/refine_prompts.py +2 -5
  213. langchain/chains/question_answering/stuff_prompt.py +5 -5
  214. langchain/chains/retrieval.py +1 -3
  215. langchain/chains/retrieval_qa/base.py +34 -27
  216. langchain/chains/retrieval_qa/prompt.py +1 -2
  217. langchain/chains/router/__init__.py +3 -3
  218. langchain/chains/router/base.py +24 -20
  219. langchain/chains/router/embedding_router.py +12 -8
  220. langchain/chains/router/llm_router.py +17 -16
  221. langchain/chains/router/multi_prompt.py +2 -2
  222. langchain/chains/router/multi_retrieval_qa.py +10 -5
  223. langchain/chains/sequential.py +30 -18
  224. langchain/chains/sql_database/prompt.py +14 -16
  225. langchain/chains/sql_database/query.py +6 -5
  226. langchain/chains/structured_output/__init__.py +1 -1
  227. langchain/chains/structured_output/base.py +75 -67
  228. langchain/chains/summarize/chain.py +11 -5
  229. langchain/chains/summarize/map_reduce_prompt.py +0 -1
  230. langchain/chains/summarize/stuff_prompt.py +0 -1
  231. langchain/chains/transform.py +5 -6
  232. langchain/chat_loaders/facebook_messenger.py +1 -1
  233. langchain/chat_loaders/langsmith.py +1 -1
  234. langchain/chat_loaders/utils.py +3 -3
  235. langchain/chat_models/__init__.py +20 -19
  236. langchain/chat_models/anthropic.py +1 -1
  237. langchain/chat_models/azureml_endpoint.py +1 -1
  238. langchain/chat_models/baidu_qianfan_endpoint.py +1 -1
  239. langchain/chat_models/base.py +160 -123
  240. langchain/chat_models/bedrock.py +1 -1
  241. langchain/chat_models/fake.py +1 -1
  242. langchain/chat_models/meta.py +1 -1
  243. langchain/chat_models/pai_eas_endpoint.py +1 -1
  244. langchain/chat_models/promptlayer_openai.py +1 -1
  245. langchain/chat_models/volcengine_maas.py +1 -1
  246. langchain/docstore/base.py +1 -1
  247. langchain/document_loaders/__init__.py +9 -9
  248. langchain/document_loaders/airbyte.py +3 -3
  249. langchain/document_loaders/assemblyai.py +1 -1
  250. langchain/document_loaders/azure_blob_storage_container.py +1 -1
  251. langchain/document_loaders/azure_blob_storage_file.py +1 -1
  252. langchain/document_loaders/baiducloud_bos_file.py +1 -1
  253. langchain/document_loaders/base.py +1 -1
  254. langchain/document_loaders/blob_loaders/__init__.py +1 -1
  255. langchain/document_loaders/blockchain.py +1 -1
  256. langchain/document_loaders/chatgpt.py +1 -1
  257. langchain/document_loaders/college_confidential.py +1 -1
  258. langchain/document_loaders/confluence.py +1 -1
  259. langchain/document_loaders/email.py +1 -1
  260. langchain/document_loaders/facebook_chat.py +1 -1
  261. langchain/document_loaders/markdown.py +1 -1
  262. langchain/document_loaders/notebook.py +1 -1
  263. langchain/document_loaders/org_mode.py +1 -1
  264. langchain/document_loaders/parsers/__init__.py +1 -1
  265. langchain/document_loaders/parsers/docai.py +1 -1
  266. langchain/document_loaders/parsers/generic.py +1 -1
  267. langchain/document_loaders/parsers/html/__init__.py +1 -1
  268. langchain/document_loaders/parsers/html/bs4.py +1 -1
  269. langchain/document_loaders/parsers/language/cobol.py +1 -1
  270. langchain/document_loaders/parsers/language/python.py +1 -1
  271. langchain/document_loaders/parsers/msword.py +1 -1
  272. langchain/document_loaders/parsers/pdf.py +5 -5
  273. langchain/document_loaders/parsers/registry.py +1 -1
  274. langchain/document_loaders/pdf.py +8 -8
  275. langchain/document_loaders/powerpoint.py +1 -1
  276. langchain/document_loaders/pyspark_dataframe.py +1 -1
  277. langchain/document_loaders/telegram.py +2 -2
  278. langchain/document_loaders/tencent_cos_directory.py +1 -1
  279. langchain/document_loaders/unstructured.py +5 -5
  280. langchain/document_loaders/url_playwright.py +1 -1
  281. langchain/document_loaders/whatsapp_chat.py +1 -1
  282. langchain/document_loaders/youtube.py +2 -2
  283. langchain/document_transformers/__init__.py +3 -3
  284. langchain/document_transformers/beautiful_soup_transformer.py +1 -1
  285. langchain/document_transformers/doctran_text_extract.py +1 -1
  286. langchain/document_transformers/doctran_text_qa.py +1 -1
  287. langchain/document_transformers/doctran_text_translate.py +1 -1
  288. langchain/document_transformers/embeddings_redundant_filter.py +3 -3
  289. langchain/document_transformers/google_translate.py +1 -1
  290. langchain/document_transformers/html2text.py +1 -1
  291. langchain/document_transformers/nuclia_text_transform.py +1 -1
  292. langchain/embeddings/__init__.py +5 -5
  293. langchain/embeddings/base.py +33 -24
  294. langchain/embeddings/cache.py +36 -31
  295. langchain/embeddings/fake.py +1 -1
  296. langchain/embeddings/huggingface.py +2 -2
  297. langchain/evaluation/__init__.py +22 -22
  298. langchain/evaluation/agents/trajectory_eval_chain.py +23 -23
  299. langchain/evaluation/agents/trajectory_eval_prompt.py +6 -9
  300. langchain/evaluation/comparison/__init__.py +1 -1
  301. langchain/evaluation/comparison/eval_chain.py +20 -13
  302. langchain/evaluation/comparison/prompt.py +1 -2
  303. langchain/evaluation/criteria/__init__.py +1 -1
  304. langchain/evaluation/criteria/eval_chain.py +20 -11
  305. langchain/evaluation/criteria/prompt.py +2 -3
  306. langchain/evaluation/embedding_distance/base.py +23 -20
  307. langchain/evaluation/loading.py +15 -11
  308. langchain/evaluation/parsing/base.py +4 -1
  309. langchain/evaluation/parsing/json_distance.py +5 -2
  310. langchain/evaluation/parsing/json_schema.py +12 -8
  311. langchain/evaluation/qa/__init__.py +1 -1
  312. langchain/evaluation/qa/eval_chain.py +12 -5
  313. langchain/evaluation/qa/eval_prompt.py +7 -8
  314. langchain/evaluation/qa/generate_chain.py +2 -1
  315. langchain/evaluation/qa/generate_prompt.py +2 -4
  316. langchain/evaluation/schema.py +38 -30
  317. langchain/evaluation/scoring/__init__.py +1 -1
  318. langchain/evaluation/scoring/eval_chain.py +22 -15
  319. langchain/evaluation/scoring/prompt.py +0 -1
  320. langchain/evaluation/string_distance/base.py +14 -9
  321. langchain/globals.py +12 -11
  322. langchain/graphs/__init__.py +6 -6
  323. langchain/graphs/graph_document.py +1 -1
  324. langchain/graphs/networkx_graph.py +2 -2
  325. langchain/hub.py +9 -11
  326. langchain/indexes/__init__.py +3 -3
  327. langchain/indexes/_sql_record_manager.py +63 -46
  328. langchain/indexes/prompts/entity_extraction.py +1 -2
  329. langchain/indexes/prompts/entity_summarization.py +1 -2
  330. langchain/indexes/prompts/knowledge_triplet_extraction.py +1 -3
  331. langchain/indexes/vectorstore.py +35 -19
  332. langchain/llms/__init__.py +13 -13
  333. langchain/llms/ai21.py +1 -1
  334. langchain/llms/azureml_endpoint.py +4 -4
  335. langchain/llms/base.py +15 -7
  336. langchain/llms/bedrock.py +1 -1
  337. langchain/llms/cloudflare_workersai.py +1 -1
  338. langchain/llms/gradient_ai.py +1 -1
  339. langchain/llms/loading.py +1 -1
  340. langchain/llms/openai.py +1 -1
  341. langchain/llms/sagemaker_endpoint.py +1 -1
  342. langchain/load/dump.py +1 -1
  343. langchain/load/load.py +1 -1
  344. langchain/load/serializable.py +3 -3
  345. langchain/memory/__init__.py +3 -3
  346. langchain/memory/buffer.py +9 -7
  347. langchain/memory/chat_memory.py +14 -8
  348. langchain/memory/chat_message_histories/__init__.py +1 -1
  349. langchain/memory/chat_message_histories/astradb.py +1 -1
  350. langchain/memory/chat_message_histories/cassandra.py +1 -1
  351. langchain/memory/chat_message_histories/cosmos_db.py +1 -1
  352. langchain/memory/chat_message_histories/dynamodb.py +1 -1
  353. langchain/memory/chat_message_histories/elasticsearch.py +1 -1
  354. langchain/memory/chat_message_histories/file.py +1 -1
  355. langchain/memory/chat_message_histories/firestore.py +1 -1
  356. langchain/memory/chat_message_histories/momento.py +1 -1
  357. langchain/memory/chat_message_histories/mongodb.py +1 -1
  358. langchain/memory/chat_message_histories/neo4j.py +1 -1
  359. langchain/memory/chat_message_histories/postgres.py +1 -1
  360. langchain/memory/chat_message_histories/redis.py +1 -1
  361. langchain/memory/chat_message_histories/rocksetdb.py +1 -1
  362. langchain/memory/chat_message_histories/singlestoredb.py +1 -1
  363. langchain/memory/chat_message_histories/streamlit.py +1 -1
  364. langchain/memory/chat_message_histories/upstash_redis.py +1 -1
  365. langchain/memory/chat_message_histories/xata.py +1 -1
  366. langchain/memory/chat_message_histories/zep.py +1 -1
  367. langchain/memory/combined.py +13 -12
  368. langchain/memory/entity.py +84 -61
  369. langchain/memory/prompt.py +10 -11
  370. langchain/memory/readonly.py +0 -2
  371. langchain/memory/simple.py +1 -3
  372. langchain/memory/summary.py +13 -11
  373. langchain/memory/summary_buffer.py +17 -8
  374. langchain/memory/utils.py +3 -2
  375. langchain/memory/vectorstore.py +12 -5
  376. langchain/memory/vectorstore_token_buffer_memory.py +5 -5
  377. langchain/model_laboratory.py +12 -11
  378. langchain/output_parsers/__init__.py +4 -4
  379. langchain/output_parsers/boolean.py +7 -4
  380. langchain/output_parsers/combining.py +10 -5
  381. langchain/output_parsers/datetime.py +32 -31
  382. langchain/output_parsers/enum.py +5 -3
  383. langchain/output_parsers/fix.py +52 -52
  384. langchain/output_parsers/format_instructions.py +6 -8
  385. langchain/output_parsers/json.py +2 -2
  386. langchain/output_parsers/list.py +2 -2
  387. langchain/output_parsers/loading.py +9 -9
  388. langchain/output_parsers/openai_functions.py +3 -3
  389. langchain/output_parsers/openai_tools.py +1 -1
  390. langchain/output_parsers/pandas_dataframe.py +43 -47
  391. langchain/output_parsers/prompts.py +1 -2
  392. langchain/output_parsers/rail_parser.py +1 -1
  393. langchain/output_parsers/regex.py +7 -8
  394. langchain/output_parsers/regex_dict.py +7 -10
  395. langchain/output_parsers/retry.py +77 -78
  396. langchain/output_parsers/structured.py +11 -6
  397. langchain/output_parsers/yaml.py +15 -11
  398. langchain/prompts/__init__.py +5 -3
  399. langchain/prompts/base.py +5 -5
  400. langchain/prompts/chat.py +8 -8
  401. langchain/prompts/example_selector/__init__.py +3 -1
  402. langchain/prompts/example_selector/semantic_similarity.py +2 -2
  403. langchain/prompts/few_shot.py +1 -1
  404. langchain/prompts/loading.py +3 -3
  405. langchain/prompts/prompt.py +1 -1
  406. langchain/retrievers/__init__.py +5 -5
  407. langchain/retrievers/bedrock.py +2 -2
  408. langchain/retrievers/bm25.py +1 -1
  409. langchain/retrievers/contextual_compression.py +14 -8
  410. langchain/retrievers/docarray.py +1 -1
  411. langchain/retrievers/document_compressors/__init__.py +5 -4
  412. langchain/retrievers/document_compressors/base.py +12 -6
  413. langchain/retrievers/document_compressors/chain_extract.py +2 -2
  414. langchain/retrievers/document_compressors/chain_extract_prompt.py +2 -3
  415. langchain/retrievers/document_compressors/chain_filter.py +9 -9
  416. langchain/retrievers/document_compressors/chain_filter_prompt.py +1 -2
  417. langchain/retrievers/document_compressors/cohere_rerank.py +15 -15
  418. langchain/retrievers/document_compressors/embeddings_filter.py +21 -17
  419. langchain/retrievers/document_compressors/flashrank_rerank.py +1 -1
  420. langchain/retrievers/document_compressors/listwise_rerank.py +7 -5
  421. langchain/retrievers/ensemble.py +28 -25
  422. langchain/retrievers/google_cloud_documentai_warehouse.py +1 -1
  423. langchain/retrievers/google_vertex_ai_search.py +2 -2
  424. langchain/retrievers/kendra.py +10 -10
  425. langchain/retrievers/llama_index.py +1 -1
  426. langchain/retrievers/merger_retriever.py +11 -11
  427. langchain/retrievers/milvus.py +1 -1
  428. langchain/retrievers/multi_query.py +32 -26
  429. langchain/retrievers/multi_vector.py +20 -8
  430. langchain/retrievers/parent_document_retriever.py +18 -9
  431. langchain/retrievers/re_phraser.py +6 -5
  432. langchain/retrievers/self_query/base.py +138 -127
  433. langchain/retrievers/time_weighted_retriever.py +18 -7
  434. langchain/retrievers/zilliz.py +1 -1
  435. langchain/runnables/openai_functions.py +6 -2
  436. langchain/schema/__init__.py +23 -23
  437. langchain/schema/cache.py +1 -1
  438. langchain/schema/callbacks/base.py +7 -7
  439. langchain/schema/callbacks/manager.py +19 -19
  440. langchain/schema/callbacks/tracers/base.py +1 -1
  441. langchain/schema/callbacks/tracers/evaluation.py +1 -1
  442. langchain/schema/callbacks/tracers/langchain.py +1 -1
  443. langchain/schema/callbacks/tracers/langchain_v1.py +1 -1
  444. langchain/schema/callbacks/tracers/log_stream.py +1 -1
  445. langchain/schema/callbacks/tracers/schemas.py +8 -8
  446. langchain/schema/callbacks/tracers/stdout.py +3 -3
  447. langchain/schema/document.py +1 -1
  448. langchain/schema/language_model.py +2 -2
  449. langchain/schema/messages.py +12 -12
  450. langchain/schema/output.py +3 -3
  451. langchain/schema/output_parser.py +3 -3
  452. langchain/schema/runnable/__init__.py +3 -3
  453. langchain/schema/runnable/base.py +9 -9
  454. langchain/schema/runnable/config.py +5 -5
  455. langchain/schema/runnable/configurable.py +1 -1
  456. langchain/schema/runnable/history.py +1 -1
  457. langchain/schema/runnable/passthrough.py +1 -1
  458. langchain/schema/runnable/utils.py +16 -16
  459. langchain/schema/vectorstore.py +1 -1
  460. langchain/smith/__init__.py +1 -1
  461. langchain/smith/evaluation/__init__.py +2 -2
  462. langchain/smith/evaluation/config.py +10 -7
  463. langchain/smith/evaluation/name_generation.py +3 -3
  464. langchain/smith/evaluation/progress.py +11 -2
  465. langchain/smith/evaluation/runner_utils.py +179 -127
  466. langchain/smith/evaluation/string_run_evaluator.py +75 -68
  467. langchain/storage/__init__.py +2 -2
  468. langchain/storage/_lc_store.py +4 -2
  469. langchain/storage/encoder_backed.py +6 -2
  470. langchain/storage/file_system.py +19 -16
  471. langchain/storage/in_memory.py +1 -1
  472. langchain/storage/upstash_redis.py +1 -1
  473. langchain/text_splitter.py +15 -15
  474. langchain/tools/__init__.py +28 -26
  475. langchain/tools/ainetwork/app.py +1 -1
  476. langchain/tools/ainetwork/base.py +1 -1
  477. langchain/tools/ainetwork/owner.py +1 -1
  478. langchain/tools/ainetwork/rule.py +1 -1
  479. langchain/tools/ainetwork/transfer.py +1 -1
  480. langchain/tools/ainetwork/value.py +1 -1
  481. langchain/tools/amadeus/closest_airport.py +1 -1
  482. langchain/tools/amadeus/flight_search.py +1 -1
  483. langchain/tools/azure_cognitive_services/__init__.py +1 -1
  484. langchain/tools/base.py +4 -4
  485. langchain/tools/bearly/tool.py +1 -1
  486. langchain/tools/bing_search/__init__.py +1 -1
  487. langchain/tools/bing_search/tool.py +1 -1
  488. langchain/tools/dataforseo_api_search/__init__.py +1 -1
  489. langchain/tools/dataforseo_api_search/tool.py +1 -1
  490. langchain/tools/ddg_search/tool.py +1 -1
  491. langchain/tools/e2b_data_analysis/tool.py +2 -2
  492. langchain/tools/edenai/__init__.py +1 -1
  493. langchain/tools/file_management/__init__.py +1 -1
  494. langchain/tools/file_management/copy.py +1 -1
  495. langchain/tools/file_management/delete.py +1 -1
  496. langchain/tools/gmail/__init__.py +2 -2
  497. langchain/tools/gmail/get_message.py +1 -1
  498. langchain/tools/gmail/search.py +1 -1
  499. langchain/tools/gmail/send_message.py +1 -1
  500. langchain/tools/google_finance/__init__.py +1 -1
  501. langchain/tools/google_finance/tool.py +1 -1
  502. langchain/tools/google_scholar/__init__.py +1 -1
  503. langchain/tools/google_scholar/tool.py +1 -1
  504. langchain/tools/google_search/__init__.py +1 -1
  505. langchain/tools/google_search/tool.py +1 -1
  506. langchain/tools/google_serper/__init__.py +1 -1
  507. langchain/tools/google_serper/tool.py +1 -1
  508. langchain/tools/google_trends/__init__.py +1 -1
  509. langchain/tools/google_trends/tool.py +1 -1
  510. langchain/tools/jira/tool.py +20 -1
  511. langchain/tools/json/tool.py +25 -3
  512. langchain/tools/memorize/tool.py +1 -1
  513. langchain/tools/multion/__init__.py +1 -1
  514. langchain/tools/multion/update_session.py +1 -1
  515. langchain/tools/office365/__init__.py +2 -2
  516. langchain/tools/office365/events_search.py +1 -1
  517. langchain/tools/office365/messages_search.py +1 -1
  518. langchain/tools/office365/send_event.py +1 -1
  519. langchain/tools/office365/send_message.py +1 -1
  520. langchain/tools/openapi/utils/api_models.py +6 -6
  521. langchain/tools/playwright/__init__.py +5 -5
  522. langchain/tools/playwright/click.py +1 -1
  523. langchain/tools/playwright/extract_hyperlinks.py +1 -1
  524. langchain/tools/playwright/get_elements.py +1 -1
  525. langchain/tools/playwright/navigate.py +1 -1
  526. langchain/tools/plugin.py +2 -2
  527. langchain/tools/powerbi/tool.py +1 -1
  528. langchain/tools/python/__init__.py +2 -1
  529. langchain/tools/reddit_search/tool.py +1 -1
  530. langchain/tools/render.py +2 -2
  531. langchain/tools/requests/tool.py +2 -2
  532. langchain/tools/searchapi/tool.py +1 -1
  533. langchain/tools/searx_search/tool.py +1 -1
  534. langchain/tools/slack/get_message.py +1 -1
  535. langchain/tools/spark_sql/tool.py +1 -1
  536. langchain/tools/sql_database/tool.py +1 -1
  537. langchain/tools/tavily_search/__init__.py +1 -1
  538. langchain/tools/tavily_search/tool.py +1 -1
  539. langchain/tools/zapier/__init__.py +1 -1
  540. langchain/tools/zapier/tool.py +24 -2
  541. langchain/utilities/__init__.py +4 -4
  542. langchain/utilities/arcee.py +4 -4
  543. langchain/utilities/clickup.py +4 -4
  544. langchain/utilities/dalle_image_generator.py +1 -1
  545. langchain/utilities/dataforseo_api_search.py +1 -1
  546. langchain/utilities/opaqueprompts.py +1 -1
  547. langchain/utilities/reddit_search.py +1 -1
  548. langchain/utilities/sql_database.py +1 -1
  549. langchain/utilities/tavily_search.py +1 -1
  550. langchain/utilities/vertexai.py +2 -2
  551. langchain/utils/__init__.py +1 -1
  552. langchain/utils/aiter.py +1 -1
  553. langchain/utils/html.py +3 -3
  554. langchain/utils/input.py +1 -1
  555. langchain/utils/iter.py +1 -1
  556. langchain/utils/json_schema.py +1 -3
  557. langchain/utils/strings.py +1 -1
  558. langchain/utils/utils.py +6 -6
  559. langchain/vectorstores/__init__.py +5 -5
  560. langchain/vectorstores/alibabacloud_opensearch.py +1 -1
  561. langchain/vectorstores/azure_cosmos_db.py +1 -1
  562. langchain/vectorstores/clickhouse.py +1 -1
  563. langchain/vectorstores/elastic_vector_search.py +1 -1
  564. langchain/vectorstores/elasticsearch.py +2 -2
  565. langchain/vectorstores/myscale.py +1 -1
  566. langchain/vectorstores/neo4j_vector.py +1 -1
  567. langchain/vectorstores/pgembedding.py +1 -1
  568. langchain/vectorstores/qdrant.py +1 -1
  569. langchain/vectorstores/redis/__init__.py +1 -1
  570. langchain/vectorstores/redis/base.py +1 -1
  571. langchain/vectorstores/redis/filters.py +4 -4
  572. langchain/vectorstores/redis/schema.py +6 -6
  573. langchain/vectorstores/sklearn.py +2 -2
  574. langchain/vectorstores/starrocks.py +1 -1
  575. langchain/vectorstores/utils.py +1 -1
  576. {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/METADATA +4 -4
  577. {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/RECORD +580 -580
  578. {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/WHEEL +1 -1
  579. {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/entry_points.txt +0 -0
  580. {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/licenses/LICENSE +0 -0
@@ -28,15 +28,15 @@ from langchain_core.runnables.schema import StreamEvent
28
28
  from langchain_core.tools import BaseTool
29
29
  from langchain_core.tracers import RunLog, RunLogPatch
30
30
  from pydantic import BaseModel
31
- from typing_extensions import TypeAlias
31
+ from typing_extensions import TypeAlias, override
32
32
 
33
33
  __all__ = [
34
- "init_chat_model",
35
34
  # For backwards compatibility
36
35
  "BaseChatModel",
37
36
  "SimpleChatModel",
38
- "generate_from_stream",
39
37
  "agenerate_from_stream",
38
+ "generate_from_stream",
39
+ "init_chat_model",
40
40
  ]
41
41
 
42
42
 
@@ -86,59 +86,60 @@ def init_chat_model(
86
86
  config_prefix: Optional[str] = None,
87
87
  **kwargs: Any,
88
88
  ) -> Union[BaseChatModel, _ConfigurableModel]:
89
- """Initialize a ChatModel from the model name and provider.
89
+ """Initialize a ChatModel in a single line using the model's name and provider.
90
90
 
91
- **Note:** Must have the integration package corresponding to the model provider
92
- installed.
91
+ .. note::
92
+ Must have the integration package corresponding to the model provider installed.
93
+ You should look at the `provider integration's API reference <https://python.langchain.com/api_reference/reference.html#integrations>`__
94
+ to see what parameters are supported by the model.
93
95
 
94
96
  Args:
95
- model: The name of the model, e.g. "o3-mini", "claude-3-5-sonnet-latest". You can
97
+ model: The name of the model, e.g. ``'o3-mini'``, ``'claude-3-5-sonnet-latest'``. You can
96
98
  also specify model and model provider in a single argument using
97
- '{model_provider}:{model}' format, e.g. "openai:o1".
99
+ ``'{model_provider}:{model}'`` format, e.g. ``'openai:o1'``.
98
100
  model_provider: The model provider if not specified as part of model arg (see
99
101
  above). Supported model_provider values and the corresponding integration
100
102
  package are:
101
103
 
102
- - 'openai' -> langchain-openai
103
- - 'anthropic' -> langchain-anthropic
104
- - 'azure_openai' -> langchain-openai
105
- - 'azure_ai' -> langchain-azure-ai
106
- - 'google_vertexai' -> langchain-google-vertexai
107
- - 'google_genai' -> langchain-google-genai
108
- - 'bedrock' -> langchain-aws
109
- - 'bedrock_converse' -> langchain-aws
110
- - 'cohere' -> langchain-cohere
111
- - 'fireworks' -> langchain-fireworks
112
- - 'together' -> langchain-together
113
- - 'mistralai' -> langchain-mistralai
114
- - 'huggingface' -> langchain-huggingface
115
- - 'groq' -> langchain-groq
116
- - 'ollama' -> langchain-ollama
117
- - 'google_anthropic_vertex' -> langchain-google-vertexai
118
- - 'deepseek' -> langchain-deepseek
119
- - 'ibm' -> langchain-ibm
120
- - 'nvidia' -> langchain-nvidia-ai-endpoints
121
- - 'xai' -> langchain-xai
122
- - 'perplexity' -> langchain-perplexity
104
+ - ``openai`` -> ``langchain-openai``
105
+ - ``anthropic`` -> ``langchain-anthropic``
106
+ - ``azure_openai`` -> ``langchain-openai``
107
+ - ``azure_ai`` -> ``langchain-azure-ai``
108
+ - ``google_vertexai`` -> ``langchain-google-vertexai``
109
+ - ``google_genai`` -> ``langchain-google-genai``
110
+ - ``bedrock`` -> ``langchain-aws``
111
+ - ``bedrock_converse`` -> ``langchain-aws``
112
+ - ``cohere`` -> ``langchain-cohere``
113
+ - ``fireworks`` -> ``langchain-fireworks``
114
+ - ``together`` -> ``langchain-together``
115
+ - ``mistralai`` -> ``langchain-mistralai``
116
+ - ``huggingface`` -> ``langchain-huggingface``
117
+ - ``groq`` -> ``langchain-groq``
118
+ - ``ollama`` -> ``langchain-ollama``
119
+ - ``google_anthropic_vertex`` -> ``langchain-google-vertexai``
120
+ - ``deepseek`` -> ``langchain-deepseek``
121
+ - ``ibm`` -> ``langchain-ibm``
122
+ - ``nvidia`` -> ``langchain-nvidia-ai-endpoints``
123
+ - ``xai`` -> ``langchain-xai``
124
+ - ``perplexity`` -> ``langchain-perplexity``
123
125
 
124
126
  Will attempt to infer model_provider from model if not specified. The
125
127
  following providers will be inferred based on these model prefixes:
126
128
 
127
- - 'gpt-3...' | 'gpt-4...' | 'o1...' -> 'openai'
128
- - 'claude...' -> 'anthropic'
129
- - 'amazon....' -> 'bedrock'
130
- - 'gemini...' -> 'google_vertexai'
131
- - 'command...' -> 'cohere'
132
- - 'accounts/fireworks...' -> 'fireworks'
133
- - 'mistral...' -> 'mistralai'
134
- - 'deepseek...' -> 'deepseek'
135
- - 'grok...' -> 'xai'
136
- - 'sonar...' -> 'perplexity'
137
- configurable_fields: Which model parameters are
138
- configurable:
129
+ - ``gpt-3...`` | ``gpt-4...`` | ``o1...`` -> ``openai``
130
+ - ``claude...`` -> ``anthropic``
131
+ - ``amazon...`` -> ``bedrock``
132
+ - ``gemini...`` -> ``google_vertexai``
133
+ - ``command...`` -> ``cohere``
134
+ - ``accounts/fireworks...`` -> ``fireworks``
135
+ - ``mistral...`` -> ``mistralai``
136
+ - ``deepseek...`` -> ``deepseek``
137
+ - ``grok...`` -> ``xai``
138
+ - ``sonar...`` -> ``perplexity``
139
+ configurable_fields: Which model parameters are configurable:
139
140
 
140
141
  - None: No configurable fields.
141
- - "any": All fields are configurable. *See Security Note below.*
142
+ - ``'any'``: All fields are configurable. **See Security Note below.**
142
143
  - Union[List[str], Tuple[str, ...]]: Specified fields are configurable.
143
144
 
144
145
  Fields are assumed to have config_prefix stripped if there is a
@@ -146,15 +147,15 @@ def init_chat_model(
146
147
  not specified, then defaults to ``("model", "model_provider")``.
147
148
 
148
149
  ***Security Note***: Setting ``configurable_fields="any"`` means fields like
149
- api_key, base_url, etc. can be altered at runtime, potentially redirecting
150
+ ``api_key``, ``base_url``, etc. can be altered at runtime, potentially redirecting
150
151
  model requests to a different service/user. Make sure that if you're
151
152
  accepting untrusted configurations that you enumerate the
152
153
  ``configurable_fields=(...)`` explicitly.
153
154
 
154
- config_prefix: If config_prefix is a non-empty string then model will be
155
+ config_prefix: If ``'config_prefix'`` is a non-empty string then model will be
155
156
  configurable at runtime via the
156
157
  ``config["configurable"]["{config_prefix}_{param}"]`` keys. If
157
- config_prefix is an empty string then model will be configurable via
158
+ ``'config_prefix'`` is an empty string then model will be configurable via
158
159
  ``config["configurable"]["{param}"]``.
159
160
  temperature: Model temperature.
160
161
  max_tokens: Max output tokens.
@@ -315,27 +316,32 @@ def init_chat_model(
315
316
  warnings.warn(
316
317
  f"{config_prefix=} has been set but no fields are configurable. Set "
317
318
  f"`configurable_fields=(...)` to specify the model params that are "
318
- f"configurable."
319
+ f"configurable.",
320
+ stacklevel=2,
319
321
  )
320
322
 
321
323
  if not configurable_fields:
322
324
  return _init_chat_model_helper(
323
- cast(str, model), model_provider=model_provider, **kwargs
324
- )
325
- else:
326
- if model:
327
- kwargs["model"] = model
328
- if model_provider:
329
- kwargs["model_provider"] = model_provider
330
- return _ConfigurableModel(
331
- default_config=kwargs,
332
- config_prefix=config_prefix,
333
- configurable_fields=configurable_fields,
325
+ cast(str, model),
326
+ model_provider=model_provider,
327
+ **kwargs,
334
328
  )
329
+ if model:
330
+ kwargs["model"] = model
331
+ if model_provider:
332
+ kwargs["model_provider"] = model_provider
333
+ return _ConfigurableModel(
334
+ default_config=kwargs,
335
+ config_prefix=config_prefix,
336
+ configurable_fields=configurable_fields,
337
+ )
335
338
 
336
339
 
337
340
  def _init_chat_model_helper(
338
- model: str, *, model_provider: Optional[str] = None, **kwargs: Any
341
+ model: str,
342
+ *,
343
+ model_provider: Optional[str] = None,
344
+ **kwargs: Any,
339
345
  ) -> BaseChatModel:
340
346
  model, model_provider = _parse_model(model, model_provider)
341
347
  if model_provider == "openai":
@@ -343,42 +349,42 @@ def _init_chat_model_helper(
343
349
  from langchain_openai import ChatOpenAI
344
350
 
345
351
  return ChatOpenAI(model=model, **kwargs)
346
- elif model_provider == "anthropic":
352
+ if model_provider == "anthropic":
347
353
  _check_pkg("langchain_anthropic")
348
354
  from langchain_anthropic import ChatAnthropic
349
355
 
350
356
  return ChatAnthropic(model=model, **kwargs) # type: ignore[call-arg,unused-ignore]
351
- elif model_provider == "azure_openai":
357
+ if model_provider == "azure_openai":
352
358
  _check_pkg("langchain_openai")
353
359
  from langchain_openai import AzureChatOpenAI
354
360
 
355
361
  return AzureChatOpenAI(model=model, **kwargs)
356
- elif model_provider == "azure_ai":
362
+ if model_provider == "azure_ai":
357
363
  _check_pkg("langchain_azure_ai")
358
364
  from langchain_azure_ai.chat_models import AzureAIChatCompletionsModel
359
365
 
360
366
  return AzureAIChatCompletionsModel(model=model, **kwargs)
361
- elif model_provider == "cohere":
367
+ if model_provider == "cohere":
362
368
  _check_pkg("langchain_cohere")
363
369
  from langchain_cohere import ChatCohere
364
370
 
365
371
  return ChatCohere(model=model, **kwargs)
366
- elif model_provider == "google_vertexai":
372
+ if model_provider == "google_vertexai":
367
373
  _check_pkg("langchain_google_vertexai")
368
374
  from langchain_google_vertexai import ChatVertexAI
369
375
 
370
376
  return ChatVertexAI(model=model, **kwargs)
371
- elif model_provider == "google_genai":
377
+ if model_provider == "google_genai":
372
378
  _check_pkg("langchain_google_genai")
373
379
  from langchain_google_genai import ChatGoogleGenerativeAI
374
380
 
375
381
  return ChatGoogleGenerativeAI(model=model, **kwargs)
376
- elif model_provider == "fireworks":
382
+ if model_provider == "fireworks":
377
383
  _check_pkg("langchain_fireworks")
378
384
  from langchain_fireworks import ChatFireworks
379
385
 
380
386
  return ChatFireworks(model=model, **kwargs)
381
- elif model_provider == "ollama":
387
+ if model_provider == "ollama":
382
388
  try:
383
389
  _check_pkg("langchain_ollama")
384
390
  from langchain_ollama import ChatOllama
@@ -393,73 +399,72 @@ def _init_chat_model_helper(
393
399
  _check_pkg("langchain_ollama")
394
400
 
395
401
  return ChatOllama(model=model, **kwargs)
396
- elif model_provider == "together":
402
+ if model_provider == "together":
397
403
  _check_pkg("langchain_together")
398
404
  from langchain_together import ChatTogether
399
405
 
400
406
  return ChatTogether(model=model, **kwargs)
401
- elif model_provider == "mistralai":
407
+ if model_provider == "mistralai":
402
408
  _check_pkg("langchain_mistralai")
403
409
  from langchain_mistralai import ChatMistralAI
404
410
 
405
411
  return ChatMistralAI(model=model, **kwargs) # type: ignore[call-arg,unused-ignore]
406
- elif model_provider == "huggingface":
412
+ if model_provider == "huggingface":
407
413
  _check_pkg("langchain_huggingface")
408
414
  from langchain_huggingface import ChatHuggingFace
409
415
 
410
416
  return ChatHuggingFace(model_id=model, **kwargs)
411
- elif model_provider == "groq":
417
+ if model_provider == "groq":
412
418
  _check_pkg("langchain_groq")
413
419
  from langchain_groq import ChatGroq
414
420
 
415
421
  return ChatGroq(model=model, **kwargs)
416
- elif model_provider == "bedrock":
422
+ if model_provider == "bedrock":
417
423
  _check_pkg("langchain_aws")
418
424
  from langchain_aws import ChatBedrock
419
425
 
420
426
  # TODO: update to use model= once ChatBedrock supports
421
427
  return ChatBedrock(model_id=model, **kwargs)
422
- elif model_provider == "bedrock_converse":
428
+ if model_provider == "bedrock_converse":
423
429
  _check_pkg("langchain_aws")
424
430
  from langchain_aws import ChatBedrockConverse
425
431
 
426
432
  return ChatBedrockConverse(model=model, **kwargs)
427
- elif model_provider == "google_anthropic_vertex":
433
+ if model_provider == "google_anthropic_vertex":
428
434
  _check_pkg("langchain_google_vertexai")
429
435
  from langchain_google_vertexai.model_garden import ChatAnthropicVertex
430
436
 
431
437
  return ChatAnthropicVertex(model=model, **kwargs)
432
- elif model_provider == "deepseek":
438
+ if model_provider == "deepseek":
433
439
  _check_pkg("langchain_deepseek", pkg_kebab="langchain-deepseek")
434
440
  from langchain_deepseek import ChatDeepSeek
435
441
 
436
442
  return ChatDeepSeek(model=model, **kwargs)
437
- elif model_provider == "nvidia":
443
+ if model_provider == "nvidia":
438
444
  _check_pkg("langchain_nvidia_ai_endpoints")
439
445
  from langchain_nvidia_ai_endpoints import ChatNVIDIA
440
446
 
441
447
  return ChatNVIDIA(model=model, **kwargs)
442
- elif model_provider == "ibm":
448
+ if model_provider == "ibm":
443
449
  _check_pkg("langchain_ibm")
444
450
  from langchain_ibm import ChatWatsonx
445
451
 
446
452
  return ChatWatsonx(model_id=model, **kwargs)
447
- elif model_provider == "xai":
453
+ if model_provider == "xai":
448
454
  _check_pkg("langchain_xai")
449
455
  from langchain_xai import ChatXAI
450
456
 
451
457
  return ChatXAI(model=model, **kwargs)
452
- elif model_provider == "perplexity":
458
+ if model_provider == "perplexity":
453
459
  _check_pkg("langchain_perplexity")
454
460
  from langchain_perplexity import ChatPerplexity
455
461
 
456
462
  return ChatPerplexity(model=model, **kwargs)
457
- else:
458
- supported = ", ".join(_SUPPORTED_PROVIDERS)
459
- raise ValueError(
460
- f"Unsupported {model_provider=}.\n\nSupported model providers are: "
461
- f"{supported}"
462
- )
463
+ supported = ", ".join(_SUPPORTED_PROVIDERS)
464
+ msg = (
465
+ f"Unsupported {model_provider=}.\n\nSupported model providers are: {supported}"
466
+ )
467
+ raise ValueError(msg)
463
468
 
464
469
 
465
470
  _SUPPORTED_PROVIDERS = {
@@ -489,26 +494,25 @@ _SUPPORTED_PROVIDERS = {
489
494
  def _attempt_infer_model_provider(model_name: str) -> Optional[str]:
490
495
  if any(model_name.startswith(pre) for pre in ("gpt-3", "gpt-4", "o1", "o3")):
491
496
  return "openai"
492
- elif model_name.startswith("claude"):
497
+ if model_name.startswith("claude"):
493
498
  return "anthropic"
494
- elif model_name.startswith("command"):
499
+ if model_name.startswith("command"):
495
500
  return "cohere"
496
- elif model_name.startswith("accounts/fireworks"):
501
+ if model_name.startswith("accounts/fireworks"):
497
502
  return "fireworks"
498
- elif model_name.startswith("gemini"):
503
+ if model_name.startswith("gemini"):
499
504
  return "google_vertexai"
500
- elif model_name.startswith("amazon."):
505
+ if model_name.startswith("amazon."):
501
506
  return "bedrock"
502
- elif model_name.startswith("mistral"):
507
+ if model_name.startswith("mistral"):
503
508
  return "mistralai"
504
- elif model_name.startswith("deepseek"):
509
+ if model_name.startswith("deepseek"):
505
510
  return "deepseek"
506
- elif model_name.startswith("grok"):
511
+ if model_name.startswith("grok"):
507
512
  return "xai"
508
- elif model_name.startswith("sonar"):
513
+ if model_name.startswith("sonar"):
509
514
  return "perplexity"
510
- else:
511
- return None
515
+ return None
512
516
 
513
517
 
514
518
  def _parse_model(model: str, model_provider: Optional[str]) -> tuple[str, str]:
@@ -521,10 +525,11 @@ def _parse_model(model: str, model_provider: Optional[str]) -> tuple[str, str]:
521
525
  model = ":".join(model.split(":")[1:])
522
526
  model_provider = model_provider or _attempt_infer_model_provider(model)
523
527
  if not model_provider:
524
- raise ValueError(
528
+ msg = (
525
529
  f"Unable to infer model provider for {model=}, please specify "
526
530
  f"model_provider directly."
527
531
  )
532
+ raise ValueError(msg)
528
533
  model_provider = model_provider.replace("-", "_").lower()
529
534
  return model, model_provider
530
535
 
@@ -532,9 +537,10 @@ def _parse_model(model: str, model_provider: Optional[str]) -> tuple[str, str]:
532
537
  def _check_pkg(pkg: str, *, pkg_kebab: Optional[str] = None) -> None:
533
538
  if not util.find_spec(pkg):
534
539
  pkg_kebab = pkg_kebab if pkg_kebab is not None else pkg.replace("_", "-")
535
- raise ImportError(
540
+ msg = (
536
541
  f"Unable to import {pkg}. Please install with `pip install -U {pkg_kebab}`"
537
542
  )
543
+ raise ImportError(msg)
538
544
 
539
545
 
540
546
  def _remove_prefix(s: str, prefix: str) -> str:
@@ -567,7 +573,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
567
573
  else config_prefix
568
574
  )
569
575
  self._queued_declarative_operations: list[tuple[str, tuple, dict]] = list(
570
- queued_declarative_operations
576
+ queued_declarative_operations,
571
577
  )
572
578
 
573
579
  def __getattr__(self, name: str) -> Any:
@@ -579,7 +585,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
579
585
  # self._model()).
580
586
  def queue(*args: Any, **kwargs: Any) -> _ConfigurableModel:
581
587
  queued_declarative_operations = list(
582
- self._queued_declarative_operations
588
+ self._queued_declarative_operations,
583
589
  )
584
590
  queued_declarative_operations.append((name, args, kwargs))
585
591
  return _ConfigurableModel(
@@ -592,14 +598,13 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
592
598
  )
593
599
 
594
600
  return queue
595
- elif self._default_config and (model := self._model()) and hasattr(model, name):
601
+ if self._default_config and (model := self._model()) and hasattr(model, name):
596
602
  return getattr(model, name)
597
- else:
598
- msg = f"{name} is not a BaseChatModel attribute"
599
- if self._default_config:
600
- msg += " and is not implemented on the default model"
601
- msg += "."
602
- raise AttributeError(msg)
603
+ msg = f"{name} is not a BaseChatModel attribute"
604
+ if self._default_config:
605
+ msg += " and is not implemented on the default model"
606
+ msg += "."
607
+ raise AttributeError(msg)
603
608
 
604
609
  def _model(self, config: Optional[RunnableConfig] = None) -> Runnable:
605
610
  params = {**self._default_config, **self._model_params(config)}
@@ -642,7 +647,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
642
647
  "with_config",
643
648
  (),
644
649
  {"config": remaining_config},
645
- )
650
+ ),
646
651
  )
647
652
  return _ConfigurableModel(
648
653
  default_config={**self._default_config, **model_params},
@@ -670,6 +675,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
670
675
  list[AnyMessage],
671
676
  ]
672
677
 
678
+ @override
673
679
  def invoke(
674
680
  self,
675
681
  input: LanguageModelInput,
@@ -678,6 +684,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
678
684
  ) -> Any:
679
685
  return self._model(config).invoke(input, config=config, **kwargs)
680
686
 
687
+ @override
681
688
  async def ainvoke(
682
689
  self,
683
690
  input: LanguageModelInput,
@@ -686,6 +693,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
686
693
  ) -> Any:
687
694
  return await self._model(config).ainvoke(input, config=config, **kwargs)
688
695
 
696
+ @override
689
697
  def stream(
690
698
  self,
691
699
  input: LanguageModelInput,
@@ -694,6 +702,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
694
702
  ) -> Iterator[Any]:
695
703
  yield from self._model(config).stream(input, config=config, **kwargs)
696
704
 
705
+ @override
697
706
  async def astream(
698
707
  self,
699
708
  input: LanguageModelInput,
@@ -717,14 +726,19 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
717
726
  if isinstance(config, list):
718
727
  config = config[0]
719
728
  return self._model(config).batch(
720
- inputs, config=config, return_exceptions=return_exceptions, **kwargs
729
+ inputs,
730
+ config=config,
731
+ return_exceptions=return_exceptions,
732
+ **kwargs,
721
733
  )
722
734
  # If multiple configs default to Runnable.batch which uses executor to invoke
723
735
  # in parallel.
724
- else:
725
- return super().batch(
726
- inputs, config=config, return_exceptions=return_exceptions, **kwargs
727
- )
736
+ return super().batch(
737
+ inputs,
738
+ config=config,
739
+ return_exceptions=return_exceptions,
740
+ **kwargs,
741
+ )
728
742
 
729
743
  async def abatch(
730
744
  self,
@@ -740,14 +754,19 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
740
754
  if isinstance(config, list):
741
755
  config = config[0]
742
756
  return await self._model(config).abatch(
743
- inputs, config=config, return_exceptions=return_exceptions, **kwargs
757
+ inputs,
758
+ config=config,
759
+ return_exceptions=return_exceptions,
760
+ **kwargs,
744
761
  )
745
762
  # If multiple configs default to Runnable.batch which uses executor to invoke
746
763
  # in parallel.
747
- else:
748
- return await super().abatch(
749
- inputs, config=config, return_exceptions=return_exceptions, **kwargs
750
- )
764
+ return await super().abatch(
765
+ inputs,
766
+ config=config,
767
+ return_exceptions=return_exceptions,
768
+ **kwargs,
769
+ )
751
770
 
752
771
  def batch_as_completed(
753
772
  self,
@@ -763,13 +782,19 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
763
782
  if isinstance(config, list):
764
783
  config = config[0]
765
784
  yield from self._model(cast(RunnableConfig, config)).batch_as_completed( # type: ignore[call-overload]
766
- inputs, config=config, return_exceptions=return_exceptions, **kwargs
785
+ inputs,
786
+ config=config,
787
+ return_exceptions=return_exceptions,
788
+ **kwargs,
767
789
  )
768
790
  # If multiple configs default to Runnable.batch which uses executor to invoke
769
791
  # in parallel.
770
792
  else:
771
793
  yield from super().batch_as_completed( # type: ignore[call-overload]
772
- inputs, config=config, return_exceptions=return_exceptions, **kwargs
794
+ inputs,
795
+ config=config,
796
+ return_exceptions=return_exceptions,
797
+ **kwargs,
773
798
  )
774
799
 
775
800
  async def abatch_as_completed(
@@ -786,19 +811,26 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
786
811
  if isinstance(config, list):
787
812
  config = config[0]
788
813
  async for x in self._model(
789
- cast(RunnableConfig, config)
814
+ cast(RunnableConfig, config),
790
815
  ).abatch_as_completed( # type: ignore[call-overload]
791
- inputs, config=config, return_exceptions=return_exceptions, **kwargs
816
+ inputs,
817
+ config=config,
818
+ return_exceptions=return_exceptions,
819
+ **kwargs,
792
820
  ):
793
821
  yield x
794
822
  # If multiple configs default to Runnable.batch which uses executor to invoke
795
823
  # in parallel.
796
824
  else:
797
825
  async for x in super().abatch_as_completed( # type: ignore[call-overload]
798
- inputs, config=config, return_exceptions=return_exceptions, **kwargs
826
+ inputs,
827
+ config=config,
828
+ return_exceptions=return_exceptions,
829
+ **kwargs,
799
830
  ):
800
831
  yield x
801
832
 
833
+ @override
802
834
  def transform(
803
835
  self,
804
836
  input: Iterator[LanguageModelInput],
@@ -807,6 +839,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
807
839
  ) -> Iterator[Any]:
808
840
  yield from self._model(config).transform(input, config=config, **kwargs)
809
841
 
842
+ @override
810
843
  async def atransform(
811
844
  self,
812
845
  input: AsyncIterator[LanguageModelInput],
@@ -850,6 +883,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
850
883
  **kwargs: Any,
851
884
  ) -> AsyncIterator[RunLog]: ...
852
885
 
886
+ @override
853
887
  async def astream_log(
854
888
  self,
855
889
  input: Any,
@@ -880,6 +914,7 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
880
914
  ):
881
915
  yield x
882
916
 
917
+ @override
883
918
  async def astream_events(
884
919
  self,
885
920
  input: Any,
@@ -918,6 +953,8 @@ class _ConfigurableModel(Runnable[LanguageModelInput, Any]):
918
953
 
919
954
  # Explicitly added to satisfy downstream linters.
920
955
  def with_structured_output(
921
- self, schema: Union[dict, type[BaseModel]], **kwargs: Any
956
+ self,
957
+ schema: Union[dict, type[BaseModel]],
958
+ **kwargs: Any,
922
959
  ) -> Runnable[LanguageModelInput, Union[dict, BaseModel]]:
923
960
  return self.__getattr__("with_structured_output")(schema, **kwargs)
@@ -22,6 +22,6 @@ def __getattr__(name: str) -> Any:
22
22
 
23
23
 
24
24
  __all__ = [
25
- "ChatPromptAdapter",
26
25
  "BedrockChat",
26
+ "ChatPromptAdapter",
27
27
  ]
@@ -25,6 +25,6 @@ def __getattr__(name: str) -> Any:
25
25
 
26
26
 
27
27
  __all__ = [
28
- "FakeMessagesListChatModel",
29
28
  "FakeListChatModel",
29
+ "FakeMessagesListChatModel",
30
30
  ]
@@ -9,7 +9,7 @@ if TYPE_CHECKING:
9
9
  # Used to consolidate logic for raising deprecation warnings and
10
10
  # handling optional imports.
11
11
  DEPRECATED_LOOKUP = {
12
- "convert_messages_to_prompt_llama": "langchain_community.chat_models.meta"
12
+ "convert_messages_to_prompt_llama": "langchain_community.chat_models.meta",
13
13
  }
14
14
 
15
15
  _import_attribute = create_importer(__package__, deprecated_lookups=DEPRECATED_LOOKUP)
@@ -9,7 +9,7 @@ if TYPE_CHECKING:
9
9
  # Used to consolidate logic for raising deprecation warnings and
10
10
  # handling optional imports.
11
11
  DEPRECATED_LOOKUP = {
12
- "PaiEasChatEndpoint": "langchain_community.chat_models.pai_eas_endpoint"
12
+ "PaiEasChatEndpoint": "langchain_community.chat_models.pai_eas_endpoint",
13
13
  }
14
14
 
15
15
  _import_attribute = create_importer(__package__, deprecated_lookups=DEPRECATED_LOOKUP)
@@ -9,7 +9,7 @@ if TYPE_CHECKING:
9
9
  # Used to consolidate logic for raising deprecation warnings and
10
10
  # handling optional imports.
11
11
  DEPRECATED_LOOKUP = {
12
- "PromptLayerChatOpenAI": "langchain_community.chat_models.promptlayer_openai"
12
+ "PromptLayerChatOpenAI": "langchain_community.chat_models.promptlayer_openai",
13
13
  }
14
14
 
15
15
  _import_attribute = create_importer(__package__, deprecated_lookups=DEPRECATED_LOOKUP)
@@ -25,6 +25,6 @@ def __getattr__(name: str) -> Any:
25
25
 
26
26
 
27
27
  __all__ = [
28
- "convert_dict_to_message",
29
28
  "VolcEngineMaasChat",
29
+ "convert_dict_to_message",
30
30
  ]
@@ -22,6 +22,6 @@ def __getattr__(name: str) -> Any:
22
22
 
23
23
 
24
24
  __all__ = [
25
- "Docstore",
26
25
  "AddableMixin",
26
+ "Docstore",
27
27
  ]