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
@@ -27,7 +27,7 @@ from langchain.chains.router.base import RouterChain
27
27
  message=(
28
28
  "Use RunnableLambda to select from multiple prompt templates. See example "
29
29
  "in API reference: "
30
- "https://api.python.langchain.com/en/latest/chains/langchain.chains.router.llm_router.LLMRouterChain.html" # noqa: E501
30
+ "https://api.python.langchain.com/en/latest/chains/langchain.chains.router.llm_router.LLMRouterChain.html"
31
31
  ),
32
32
  )
33
33
  class LLMRouterChain(RouterChain):
@@ -105,12 +105,13 @@ class LLMRouterChain(RouterChain):
105
105
  def validate_prompt(self) -> Self:
106
106
  prompt = self.llm_chain.prompt
107
107
  if prompt.output_parser is None:
108
- raise ValueError(
108
+ msg = (
109
109
  "LLMRouterChain requires base llm_chain prompt to have an output"
110
110
  " parser that converts LLM text output to a dictionary with keys"
111
111
  " 'destination' and 'next_inputs'. Received a prompt with no output"
112
112
  " parser."
113
113
  )
114
+ raise ValueError(msg)
114
115
  return self
115
116
 
116
117
  @property
@@ -124,7 +125,7 @@ class LLMRouterChain(RouterChain):
124
125
  def _validate_outputs(self, outputs: dict[str, Any]) -> None:
125
126
  super()._validate_outputs(outputs)
126
127
  if not isinstance(outputs["next_inputs"], dict):
127
- raise ValueError
128
+ raise ValueError # noqa: TRY004
128
129
 
129
130
  def _call(
130
131
  self,
@@ -135,11 +136,10 @@ class LLMRouterChain(RouterChain):
135
136
  callbacks = _run_manager.get_child()
136
137
 
137
138
  prediction = self.llm_chain.predict(callbacks=callbacks, **inputs)
138
- output = cast(
139
+ return cast(
139
140
  dict[str, Any],
140
141
  self.llm_chain.prompt.output_parser.parse(prediction),
141
142
  )
142
- return output
143
143
 
144
144
  async def _acall(
145
145
  self,
@@ -148,15 +148,17 @@ class LLMRouterChain(RouterChain):
148
148
  ) -> dict[str, Any]:
149
149
  _run_manager = run_manager or CallbackManagerForChainRun.get_noop_manager()
150
150
  callbacks = _run_manager.get_child()
151
- output = cast(
151
+ return cast(
152
152
  dict[str, Any],
153
153
  await self.llm_chain.apredict_and_parse(callbacks=callbacks, **inputs),
154
154
  )
155
- return output
156
155
 
157
156
  @classmethod
158
157
  def from_llm(
159
- cls, llm: BaseLanguageModel, prompt: BasePromptTemplate, **kwargs: Any
158
+ cls,
159
+ llm: BaseLanguageModel,
160
+ prompt: BasePromptTemplate,
161
+ **kwargs: Any,
160
162
  ) -> LLMRouterChain:
161
163
  """Convenience constructor."""
162
164
  llm_chain = LLMChain(llm=llm, prompt=prompt)
@@ -175,11 +177,11 @@ class RouterOutputParser(BaseOutputParser[dict[str, str]]):
175
177
  expected_keys = ["destination", "next_inputs"]
176
178
  parsed = parse_and_check_json_markdown(text, expected_keys)
177
179
  if not isinstance(parsed["destination"], str):
178
- raise ValueError("Expected 'destination' to be a string.")
180
+ msg = "Expected 'destination' to be a string."
181
+ raise TypeError(msg)
179
182
  if not isinstance(parsed["next_inputs"], self.next_inputs_type):
180
- raise ValueError(
181
- f"Expected 'next_inputs' to be {self.next_inputs_type}."
182
- )
183
+ msg = f"Expected 'next_inputs' to be {self.next_inputs_type}."
184
+ raise TypeError(msg)
183
185
  parsed["next_inputs"] = {self.next_inputs_inner_key: parsed["next_inputs"]}
184
186
  if (
185
187
  parsed["destination"].strip().lower()
@@ -188,8 +190,7 @@ class RouterOutputParser(BaseOutputParser[dict[str, str]]):
188
190
  parsed["destination"] = None
189
191
  else:
190
192
  parsed["destination"] = parsed["destination"].strip()
191
- return parsed
192
193
  except Exception as e:
193
- raise OutputParserException(
194
- f"Parsing text\n{text}\n raised following error:\n{e}"
195
- )
194
+ msg = f"Parsing text\n{text}\n raised following error:\n{e}"
195
+ raise OutputParserException(msg) from e
196
+ return parsed
@@ -21,7 +21,7 @@ from langchain.chains.router.multi_prompt_prompt import MULTI_PROMPT_ROUTER_TEMP
21
21
  removal="1.0",
22
22
  message=(
23
23
  "Please see migration guide here for recommended implementation: "
24
- "https://python.langchain.com/docs/versions/migrating_chains/multi_prompt_chain/" # noqa: E501
24
+ "https://python.langchain.com/docs/versions/migrating_chains/multi_prompt_chain/"
25
25
  ),
26
26
  )
27
27
  class MultiPromptChain(MultiRouteChain):
@@ -157,7 +157,7 @@ class MultiPromptChain(MultiRouteChain):
157
157
  destinations = [f"{p['name']}: {p['description']}" for p in prompt_infos]
158
158
  destinations_str = "\n".join(destinations)
159
159
  router_template = MULTI_PROMPT_ROUTER_TEMPLATE.format(
160
- destinations=destinations_str
160
+ destinations=destinations_str,
161
161
  )
162
162
  router_prompt = PromptTemplate(
163
163
  template=router_template,
@@ -48,14 +48,15 @@ class MultiRetrievalQAChain(MultiRouteChain):
48
48
  **kwargs: Any,
49
49
  ) -> MultiRetrievalQAChain:
50
50
  if default_prompt and not default_retriever:
51
- raise ValueError(
51
+ msg = (
52
52
  "`default_retriever` must be specified if `default_prompt` is "
53
53
  "provided. Received only `default_prompt`."
54
54
  )
55
+ raise ValueError(msg)
55
56
  destinations = [f"{r['name']}: {r['description']}" for r in retriever_infos]
56
57
  destinations_str = "\n".join(destinations)
57
58
  router_template = MULTI_RETRIEVAL_ROUTER_TEMPLATE.format(
58
- destinations=destinations_str
59
+ destinations=destinations_str,
59
60
  )
60
61
  router_prompt = PromptTemplate(
61
62
  template=router_template,
@@ -74,15 +75,18 @@ class MultiRetrievalQAChain(MultiRouteChain):
74
75
  _default_chain = default_chain
75
76
  elif default_retriever:
76
77
  _default_chain = RetrievalQA.from_llm(
77
- llm, prompt=default_prompt, retriever=default_retriever
78
+ llm,
79
+ prompt=default_prompt,
80
+ retriever=default_retriever,
78
81
  )
79
82
  else:
80
83
  prompt_template = DEFAULT_TEMPLATE.replace("input", "query")
81
84
  prompt = PromptTemplate(
82
- template=prompt_template, input_variables=["history", "query"]
85
+ template=prompt_template,
86
+ input_variables=["history", "query"],
83
87
  )
84
88
  if default_chain_llm is None:
85
- raise NotImplementedError(
89
+ msg = (
86
90
  "conversation_llm must be provided if default_chain is not "
87
91
  "specified. This API has been changed to avoid instantiating "
88
92
  "default LLMs on behalf of users."
@@ -90,6 +94,7 @@ class MultiRetrievalQAChain(MultiRouteChain):
90
94
  "from langchain_openai import ChatOpenAI\n"
91
95
  "llm = ChatOpenAI()"
92
96
  )
97
+ raise NotImplementedError(msg)
93
98
  _default_chain = ConversationChain(
94
99
  llm=default_chain_llm,
95
100
  prompt=prompt,
@@ -48,17 +48,18 @@ class SequentialChain(Chain):
48
48
  """Validate that the correct inputs exist for all chains."""
49
49
  chains = values["chains"]
50
50
  input_variables = values["input_variables"]
51
- memory_keys = list()
51
+ memory_keys = []
52
52
  if "memory" in values and values["memory"] is not None:
53
53
  """Validate that prompt input variables are consistent."""
54
54
  memory_keys = values["memory"].memory_variables
55
55
  if set(input_variables).intersection(set(memory_keys)):
56
56
  overlapping_keys = set(input_variables) & set(memory_keys)
57
- raise ValueError(
57
+ msg = (
58
58
  f"The input key(s) {''.join(overlapping_keys)} are found "
59
59
  f"in the Memory keys ({memory_keys}) - please use input and "
60
60
  f"memory keys that don't overlap."
61
61
  )
62
+ raise ValueError(msg)
62
63
 
63
64
  known_variables = set(input_variables + memory_keys)
64
65
 
@@ -68,15 +69,15 @@ class SequentialChain(Chain):
68
69
  missing_vars = missing_vars.difference(chain.memory.memory_variables)
69
70
 
70
71
  if missing_vars:
71
- raise ValueError(
72
+ msg = (
72
73
  f"Missing required input keys: {missing_vars}, "
73
74
  f"only had {known_variables}"
74
75
  )
76
+ raise ValueError(msg)
75
77
  overlapping_keys = known_variables.intersection(chain.output_keys)
76
78
  if overlapping_keys:
77
- raise ValueError(
78
- f"Chain returned keys that already exist: {overlapping_keys}"
79
- )
79
+ msg = f"Chain returned keys that already exist: {overlapping_keys}"
80
+ raise ValueError(msg)
80
81
 
81
82
  known_variables |= set(chain.output_keys)
82
83
 
@@ -89,9 +90,8 @@ class SequentialChain(Chain):
89
90
  else:
90
91
  missing_vars = set(values["output_variables"]).difference(known_variables)
91
92
  if missing_vars:
92
- raise ValueError(
93
- f"Expected output variables that were not found: {missing_vars}."
94
- )
93
+ msg = f"Expected output variables that were not found: {missing_vars}."
94
+ raise ValueError(msg)
95
95
 
96
96
  return values
97
97
 
@@ -102,7 +102,7 @@ class SequentialChain(Chain):
102
102
  ) -> dict[str, str]:
103
103
  known_values = inputs.copy()
104
104
  _run_manager = run_manager or CallbackManagerForChainRun.get_noop_manager()
105
- for i, chain in enumerate(self.chains):
105
+ for _i, chain in enumerate(self.chains):
106
106
  callbacks = _run_manager.get_child()
107
107
  outputs = chain(known_values, return_only_outputs=True, callbacks=callbacks)
108
108
  known_values.update(outputs)
@@ -116,9 +116,11 @@ class SequentialChain(Chain):
116
116
  known_values = inputs.copy()
117
117
  _run_manager = run_manager or AsyncCallbackManagerForChainRun.get_noop_manager()
118
118
  callbacks = _run_manager.get_child()
119
- for i, chain in enumerate(self.chains):
119
+ for _i, chain in enumerate(self.chains):
120
120
  outputs = await chain.acall(
121
- known_values, return_only_outputs=True, callbacks=callbacks
121
+ known_values,
122
+ return_only_outputs=True,
123
+ callbacks=callbacks,
122
124
  )
123
125
  known_values.update(outputs)
124
126
  return {k: known_values[k] for k in self.output_variables}
@@ -158,15 +160,17 @@ class SimpleSequentialChain(Chain):
158
160
  """Validate that chains are all single input/output."""
159
161
  for chain in self.chains:
160
162
  if len(chain.input_keys) != 1:
161
- raise ValueError(
163
+ msg = (
162
164
  "Chains used in SimplePipeline should all have one input, got "
163
165
  f"{chain} with {len(chain.input_keys)} inputs."
164
166
  )
167
+ raise ValueError(msg)
165
168
  if len(chain.output_keys) != 1:
166
- raise ValueError(
169
+ msg = (
167
170
  "Chains used in SimplePipeline should all have one output, got "
168
171
  f"{chain} with {len(chain.output_keys)} outputs."
169
172
  )
173
+ raise ValueError(msg)
170
174
  return self
171
175
 
172
176
  def _call(
@@ -179,12 +183,16 @@ class SimpleSequentialChain(Chain):
179
183
  color_mapping = get_color_mapping([str(i) for i in range(len(self.chains))])
180
184
  for i, chain in enumerate(self.chains):
181
185
  _input = chain.run(
182
- _input, callbacks=_run_manager.get_child(f"step_{i + 1}")
186
+ _input,
187
+ callbacks=_run_manager.get_child(f"step_{i + 1}"),
183
188
  )
184
189
  if self.strip_outputs:
185
190
  _input = _input.strip()
186
191
  _run_manager.on_text(
187
- _input, color=color_mapping[str(i)], end="\n", verbose=self.verbose
192
+ _input,
193
+ color=color_mapping[str(i)],
194
+ end="\n",
195
+ verbose=self.verbose,
188
196
  )
189
197
  return {self.output_key: _input}
190
198
 
@@ -198,11 +206,15 @@ class SimpleSequentialChain(Chain):
198
206
  color_mapping = get_color_mapping([str(i) for i in range(len(self.chains))])
199
207
  for i, chain in enumerate(self.chains):
200
208
  _input = await chain.arun(
201
- _input, callbacks=_run_manager.get_child(f"step_{i + 1}")
209
+ _input,
210
+ callbacks=_run_manager.get_child(f"step_{i + 1}"),
202
211
  )
203
212
  if self.strip_outputs:
204
213
  _input = _input.strip()
205
214
  await _run_manager.on_text(
206
- _input, color=color_mapping[str(i)], end="\n", verbose=self.verbose
215
+ _input,
216
+ color=color_mapping[str(i)],
217
+ end="\n",
218
+ verbose=self.verbose,
207
219
  )
208
220
  return {self.output_key: _input}
@@ -1,8 +1,6 @@
1
- # flake8: noqa
2
1
  from langchain_core.output_parsers.list import CommaSeparatedListOutputParser
3
2
  from langchain_core.prompts.prompt import PromptTemplate
4
3
 
5
-
6
4
  PROMPT_SUFFIX = """Only use the following tables:
7
5
  {table_info}
8
6
 
@@ -21,7 +19,7 @@ SQLQuery: SQL Query to run
21
19
  SQLResult: Result of the SQLQuery
22
20
  Answer: Final answer here
23
21
 
24
- """
22
+ """ # noqa: E501
25
23
 
26
24
  PROMPT = PromptTemplate(
27
25
  input_variables=["input", "table_info", "dialect", "top_k"],
@@ -35,7 +33,7 @@ Question: {query}
35
33
 
36
34
  Table Names: {table_names}
37
35
 
38
- Relevant Table Names:"""
36
+ Relevant Table Names:""" # noqa: E501
39
37
  DECIDER_PROMPT = PromptTemplate(
40
38
  input_variables=["query", "table_names"],
41
39
  template=_DECIDER_TEMPLATE,
@@ -46,7 +44,7 @@ _cratedb_prompt = """You are a CrateDB expert. Given an input question, first cr
46
44
  Unless the user specifies in the question a specific number of examples to obtain, query for at most {top_k} results using the LIMIT clause as per CrateDB. You can order the results to return the most informative data in the database.
47
45
  Never query for all columns from a table. You must query only the columns that are needed to answer the question. Wrap each column name in double quotes (") to denote them as delimited identifiers.
48
46
  Pay attention to use only the column names you can see in the tables below. Be careful to not query for columns that do not exist. Also, pay attention to which column is in which table.
49
- Pay attention to use CURRENT_DATE function to get the current date, if the question involves "today".
47
+ Pay attention to use CURRENT_DATE function to get the current date, if the question involves "today".
50
48
 
51
49
  Use the following format:
52
50
 
@@ -55,7 +53,7 @@ SQLQuery: SQL Query to run
55
53
  SQLResult: Result of the SQLQuery
56
54
  Answer: Final answer here
57
55
 
58
- """
56
+ """ # noqa: E501
59
57
 
60
58
  CRATEDB_PROMPT = PromptTemplate(
61
59
  input_variables=["input", "table_info", "top_k"],
@@ -75,7 +73,7 @@ SQLQuery: SQL Query to run
75
73
  SQLResult: Result of the SQLQuery
76
74
  Answer: Final answer here
77
75
 
78
- """
76
+ """ # noqa: E501
79
77
 
80
78
  DUCKDB_PROMPT = PromptTemplate(
81
79
  input_variables=["input", "table_info", "top_k"],
@@ -95,7 +93,7 @@ SQLQuery: SQL Query to run
95
93
  SQLResult: Result of the SQLQuery
96
94
  Answer: Final answer here
97
95
 
98
- """
96
+ """ # noqa: E501
99
97
 
100
98
  GOOGLESQL_PROMPT = PromptTemplate(
101
99
  input_variables=["input", "table_info", "top_k"],
@@ -116,7 +114,7 @@ SQLQuery: SQL Query to run
116
114
  SQLResult: Result of the SQLQuery
117
115
  Answer: Final answer here
118
116
 
119
- """
117
+ """ # noqa: E501
120
118
 
121
119
  MSSQL_PROMPT = PromptTemplate(
122
120
  input_variables=["input", "table_info", "top_k"],
@@ -137,7 +135,7 @@ SQLQuery: SQL Query to run
137
135
  SQLResult: Result of the SQLQuery
138
136
  Answer: Final answer here
139
137
 
140
- """
138
+ """ # noqa: E501
141
139
 
142
140
  MYSQL_PROMPT = PromptTemplate(
143
141
  input_variables=["input", "table_info", "top_k"],
@@ -158,7 +156,7 @@ SQLQuery: SQL Query to run
158
156
  SQLResult: Result of the SQLQuery
159
157
  Answer: Final answer here
160
158
 
161
- """
159
+ """ # noqa: E501
162
160
 
163
161
  MARIADB_PROMPT = PromptTemplate(
164
162
  input_variables=["input", "table_info", "top_k"],
@@ -179,7 +177,7 @@ SQLQuery: SQL Query to run
179
177
  SQLResult: Result of the SQLQuery
180
178
  Answer: Final answer here
181
179
 
182
- """
180
+ """ # noqa: E501
183
181
 
184
182
  ORACLE_PROMPT = PromptTemplate(
185
183
  input_variables=["input", "table_info", "top_k"],
@@ -200,7 +198,7 @@ SQLQuery: SQL Query to run
200
198
  SQLResult: Result of the SQLQuery
201
199
  Answer: Final answer here
202
200
 
203
- """
201
+ """ # noqa: E501
204
202
 
205
203
  POSTGRES_PROMPT = PromptTemplate(
206
204
  input_variables=["input", "table_info", "top_k"],
@@ -221,7 +219,7 @@ SQLQuery: SQL Query to run
221
219
  SQLResult: Result of the SQLQuery
222
220
  Answer: Final answer here
223
221
 
224
- """
222
+ """ # noqa: E501
225
223
 
226
224
  SQLITE_PROMPT = PromptTemplate(
227
225
  input_variables=["input", "table_info", "top_k"],
@@ -241,7 +239,7 @@ SQLQuery: "SQL Query to run"
241
239
  SQLResult: "Result of the SQLQuery"
242
240
  Answer: "Final answer here"
243
241
 
244
- """
242
+ """ # noqa: E501
245
243
 
246
244
  CLICKHOUSE_PROMPT = PromptTemplate(
247
245
  input_variables=["input", "table_info", "top_k"],
@@ -261,7 +259,7 @@ SQLQuery: "SQL Query to run"
261
259
  SQLResult: "Result of the SQLQuery"
262
260
  Answer: "Final answer here"
263
261
 
264
- """
262
+ """ # noqa: E501
265
263
 
266
264
  PRESTODB_PROMPT = PromptTemplate(
267
265
  input_variables=["input", "table_info", "top_k"],
@@ -121,26 +121,27 @@ def create_sql_query_chain(
121
121
  else:
122
122
  prompt_to_use = PROMPT
123
123
  if {"input", "top_k", "table_info"}.difference(
124
- prompt_to_use.input_variables + list(prompt_to_use.partial_variables)
124
+ prompt_to_use.input_variables + list(prompt_to_use.partial_variables),
125
125
  ):
126
- raise ValueError(
126
+ msg = (
127
127
  f"Prompt must have input variables: 'input', 'top_k', "
128
128
  f"'table_info'. Received prompt with input variables: "
129
129
  f"{prompt_to_use.input_variables}. Full prompt:\n\n{prompt_to_use}"
130
130
  )
131
+ raise ValueError(msg)
131
132
  if "dialect" in prompt_to_use.input_variables:
132
133
  prompt_to_use = prompt_to_use.partial(dialect=db.dialect)
133
134
 
134
135
  table_info_kwargs = {}
135
136
  if get_col_comments:
136
137
  if db.dialect not in ("postgresql", "mysql", "oracle"):
137
- raise ValueError(
138
+ msg = (
138
139
  f"get_col_comments=True is only supported for dialects "
139
140
  f"'postgresql', 'mysql', and 'oracle'. Received dialect: "
140
141
  f"{db.dialect}"
141
142
  )
142
- else:
143
- table_info_kwargs["get_col_comments"] = True
143
+ raise ValueError(msg)
144
+ table_info_kwargs["get_col_comments"] = True
144
145
 
145
146
  inputs = {
146
147
  "input": lambda x: x["question"] + "\nSQLQuery: ",
@@ -3,4 +3,4 @@ from langchain.chains.structured_output.base import (
3
3
  create_structured_output_runnable,
4
4
  )
5
5
 
6
- __all__ = ["create_structured_output_runnable", "create_openai_fn_runnable"]
6
+ __all__ = ["create_openai_fn_runnable", "create_structured_output_runnable"]