langchain 0.3.27__py3-none-any.whl → 1.0.0__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 (1365) hide show
  1. langchain/__init__.py +2 -452
  2. langchain/agents/__init__.py +9 -178
  3. langchain/agents/factory.py +1582 -0
  4. langchain/agents/middleware/__init__.py +80 -0
  5. langchain/agents/middleware/_execution.py +388 -0
  6. langchain/agents/middleware/_redaction.py +350 -0
  7. langchain/agents/middleware/context_editing.py +274 -0
  8. langchain/agents/middleware/file_search.py +382 -0
  9. langchain/agents/middleware/human_in_the_loop.py +351 -0
  10. langchain/agents/middleware/model_call_limit.py +210 -0
  11. langchain/agents/middleware/model_fallback.py +137 -0
  12. langchain/agents/middleware/pii.py +317 -0
  13. langchain/agents/middleware/shell_tool.py +718 -0
  14. langchain/agents/middleware/summarization.py +249 -0
  15. langchain/agents/middleware/todo.py +219 -0
  16. langchain/agents/middleware/tool_call_limit.py +333 -0
  17. langchain/agents/middleware/tool_emulator.py +200 -0
  18. langchain/agents/middleware/tool_retry.py +384 -0
  19. langchain/agents/middleware/tool_selection.py +310 -0
  20. langchain/agents/middleware/types.py +1572 -0
  21. langchain/agents/structured_output.py +426 -0
  22. langchain/chat_models/__init__.py +7 -72
  23. langchain/chat_models/base.py +264 -317
  24. langchain/embeddings/__init__.py +7 -217
  25. langchain/embeddings/base.py +32 -42
  26. langchain/messages/__init__.py +72 -0
  27. langchain/rate_limiters/__init__.py +13 -0
  28. langchain/tools/__init__.py +17 -197
  29. langchain/tools/tool_node.py +1700 -0
  30. langchain-1.0.0.dist-info/METADATA +87 -0
  31. langchain-1.0.0.dist-info/RECORD +34 -0
  32. {langchain-0.3.27.dist-info → langchain-1.0.0.dist-info}/WHEEL +1 -1
  33. langchain/_api/__init__.py +0 -28
  34. langchain/_api/deprecation.py +0 -32
  35. langchain/_api/interactive_env.py +0 -5
  36. langchain/_api/module_import.py +0 -153
  37. langchain/_api/path.py +0 -3
  38. langchain/adapters/__init__.py +0 -0
  39. langchain/adapters/openai.py +0 -63
  40. langchain/agents/agent.py +0 -1828
  41. langchain/agents/agent_iterator.py +0 -431
  42. langchain/agents/agent_toolkits/__init__.py +0 -167
  43. langchain/agents/agent_toolkits/ainetwork/__init__.py +0 -1
  44. langchain/agents/agent_toolkits/ainetwork/toolkit.py +0 -25
  45. langchain/agents/agent_toolkits/amadeus/toolkit.py +0 -23
  46. langchain/agents/agent_toolkits/azure_cognitive_services.py +0 -29
  47. langchain/agents/agent_toolkits/base.py +0 -3
  48. langchain/agents/agent_toolkits/clickup/__init__.py +0 -0
  49. langchain/agents/agent_toolkits/clickup/toolkit.py +0 -25
  50. langchain/agents/agent_toolkits/conversational_retrieval/__init__.py +0 -0
  51. langchain/agents/agent_toolkits/conversational_retrieval/openai_functions.py +0 -87
  52. langchain/agents/agent_toolkits/conversational_retrieval/tool.py +0 -3
  53. langchain/agents/agent_toolkits/csv/__init__.py +0 -28
  54. langchain/agents/agent_toolkits/file_management/__init__.py +0 -31
  55. langchain/agents/agent_toolkits/file_management/toolkit.py +0 -29
  56. langchain/agents/agent_toolkits/github/__init__.py +0 -1
  57. langchain/agents/agent_toolkits/github/toolkit.py +0 -69
  58. langchain/agents/agent_toolkits/gitlab/__init__.py +0 -1
  59. langchain/agents/agent_toolkits/gitlab/toolkit.py +0 -25
  60. langchain/agents/agent_toolkits/gmail/__init__.py +0 -1
  61. langchain/agents/agent_toolkits/gmail/toolkit.py +0 -23
  62. langchain/agents/agent_toolkits/jira/__init__.py +0 -1
  63. langchain/agents/agent_toolkits/jira/toolkit.py +0 -23
  64. langchain/agents/agent_toolkits/json/__init__.py +0 -1
  65. langchain/agents/agent_toolkits/json/base.py +0 -25
  66. langchain/agents/agent_toolkits/json/prompt.py +0 -24
  67. langchain/agents/agent_toolkits/json/toolkit.py +0 -23
  68. langchain/agents/agent_toolkits/multion/__init__.py +0 -1
  69. langchain/agents/agent_toolkits/multion/toolkit.py +0 -25
  70. langchain/agents/agent_toolkits/nasa/__init__.py +0 -1
  71. langchain/agents/agent_toolkits/nasa/toolkit.py +0 -23
  72. langchain/agents/agent_toolkits/nla/__init__.py +0 -0
  73. langchain/agents/agent_toolkits/nla/tool.py +0 -23
  74. langchain/agents/agent_toolkits/nla/toolkit.py +0 -23
  75. langchain/agents/agent_toolkits/office365/__init__.py +0 -1
  76. langchain/agents/agent_toolkits/office365/toolkit.py +0 -25
  77. langchain/agents/agent_toolkits/openapi/__init__.py +0 -1
  78. langchain/agents/agent_toolkits/openapi/base.py +0 -25
  79. langchain/agents/agent_toolkits/openapi/planner.py +0 -52
  80. langchain/agents/agent_toolkits/openapi/planner_prompt.py +0 -103
  81. langchain/agents/agent_toolkits/openapi/prompt.py +0 -29
  82. langchain/agents/agent_toolkits/openapi/spec.py +0 -30
  83. langchain/agents/agent_toolkits/openapi/toolkit.py +0 -30
  84. langchain/agents/agent_toolkits/pandas/__init__.py +0 -28
  85. langchain/agents/agent_toolkits/playwright/__init__.py +0 -29
  86. langchain/agents/agent_toolkits/playwright/toolkit.py +0 -27
  87. langchain/agents/agent_toolkits/powerbi/__init__.py +0 -1
  88. langchain/agents/agent_toolkits/powerbi/base.py +0 -25
  89. langchain/agents/agent_toolkits/powerbi/chat_base.py +0 -27
  90. langchain/agents/agent_toolkits/powerbi/prompt.py +0 -36
  91. langchain/agents/agent_toolkits/powerbi/toolkit.py +0 -25
  92. langchain/agents/agent_toolkits/python/__init__.py +0 -28
  93. langchain/agents/agent_toolkits/slack/__init__.py +0 -1
  94. langchain/agents/agent_toolkits/slack/toolkit.py +0 -23
  95. langchain/agents/agent_toolkits/spark/__init__.py +0 -28
  96. langchain/agents/agent_toolkits/spark_sql/__init__.py +0 -1
  97. langchain/agents/agent_toolkits/spark_sql/base.py +0 -25
  98. langchain/agents/agent_toolkits/spark_sql/prompt.py +0 -27
  99. langchain/agents/agent_toolkits/spark_sql/toolkit.py +0 -25
  100. langchain/agents/agent_toolkits/sql/__init__.py +0 -1
  101. langchain/agents/agent_toolkits/sql/base.py +0 -23
  102. langchain/agents/agent_toolkits/sql/prompt.py +0 -29
  103. langchain/agents/agent_toolkits/sql/toolkit.py +0 -25
  104. langchain/agents/agent_toolkits/steam/__init__.py +0 -1
  105. langchain/agents/agent_toolkits/steam/toolkit.py +0 -23
  106. langchain/agents/agent_toolkits/vectorstore/__init__.py +0 -1
  107. langchain/agents/agent_toolkits/vectorstore/base.py +0 -217
  108. langchain/agents/agent_toolkits/vectorstore/prompt.py +0 -11
  109. langchain/agents/agent_toolkits/vectorstore/toolkit.py +0 -97
  110. langchain/agents/agent_toolkits/xorbits/__init__.py +0 -28
  111. langchain/agents/agent_toolkits/zapier/__init__.py +0 -1
  112. langchain/agents/agent_toolkits/zapier/toolkit.py +0 -25
  113. langchain/agents/agent_types.py +0 -57
  114. langchain/agents/chat/__init__.py +0 -0
  115. langchain/agents/chat/base.py +0 -178
  116. langchain/agents/chat/output_parser.py +0 -74
  117. langchain/agents/chat/prompt.py +0 -29
  118. langchain/agents/conversational/__init__.py +0 -1
  119. langchain/agents/conversational/base.py +0 -176
  120. langchain/agents/conversational/output_parser.py +0 -51
  121. langchain/agents/conversational/prompt.py +0 -35
  122. langchain/agents/conversational_chat/__init__.py +0 -1
  123. langchain/agents/conversational_chat/base.py +0 -181
  124. langchain/agents/conversational_chat/output_parser.py +0 -57
  125. langchain/agents/conversational_chat/prompt.py +0 -56
  126. langchain/agents/format_scratchpad/__init__.py +0 -25
  127. langchain/agents/format_scratchpad/log.py +0 -25
  128. langchain/agents/format_scratchpad/log_to_messages.py +0 -26
  129. langchain/agents/format_scratchpad/openai_functions.py +0 -80
  130. langchain/agents/format_scratchpad/openai_tools.py +0 -5
  131. langchain/agents/format_scratchpad/tools.py +0 -65
  132. langchain/agents/format_scratchpad/xml.py +0 -52
  133. langchain/agents/initialize.py +0 -105
  134. langchain/agents/json_chat/__init__.py +0 -0
  135. langchain/agents/json_chat/base.py +0 -195
  136. langchain/agents/json_chat/prompt.py +0 -8
  137. langchain/agents/load_tools.py +0 -13
  138. langchain/agents/loading.py +0 -148
  139. langchain/agents/mrkl/__init__.py +0 -1
  140. langchain/agents/mrkl/base.py +0 -216
  141. langchain/agents/mrkl/output_parser.py +0 -103
  142. langchain/agents/mrkl/prompt.py +0 -15
  143. langchain/agents/openai_assistant/__init__.py +0 -3
  144. langchain/agents/openai_assistant/base.py +0 -818
  145. langchain/agents/openai_functions_agent/__init__.py +0 -0
  146. langchain/agents/openai_functions_agent/agent_token_buffer_memory.py +0 -101
  147. langchain/agents/openai_functions_agent/base.py +0 -381
  148. langchain/agents/openai_functions_multi_agent/__init__.py +0 -0
  149. langchain/agents/openai_functions_multi_agent/base.py +0 -337
  150. langchain/agents/openai_tools/__init__.py +0 -0
  151. langchain/agents/openai_tools/base.py +0 -108
  152. langchain/agents/output_parsers/__init__.py +0 -35
  153. langchain/agents/output_parsers/json.py +0 -62
  154. langchain/agents/output_parsers/openai_functions.py +0 -96
  155. langchain/agents/output_parsers/openai_tools.py +0 -70
  156. langchain/agents/output_parsers/react_json_single_input.py +0 -84
  157. langchain/agents/output_parsers/react_single_input.py +0 -99
  158. langchain/agents/output_parsers/self_ask.py +0 -51
  159. langchain/agents/output_parsers/tools.py +0 -107
  160. langchain/agents/output_parsers/xml.py +0 -123
  161. langchain/agents/react/__init__.py +0 -1
  162. langchain/agents/react/agent.py +0 -144
  163. langchain/agents/react/base.py +0 -185
  164. langchain/agents/react/output_parser.py +0 -33
  165. langchain/agents/react/textworld_prompt.py +0 -51
  166. langchain/agents/react/wiki_prompt.py +0 -70
  167. langchain/agents/schema.py +0 -35
  168. langchain/agents/self_ask_with_search/__init__.py +0 -4
  169. langchain/agents/self_ask_with_search/base.py +0 -215
  170. langchain/agents/self_ask_with_search/output_parser.py +0 -4
  171. langchain/agents/self_ask_with_search/prompt.py +0 -43
  172. langchain/agents/structured_chat/__init__.py +0 -0
  173. langchain/agents/structured_chat/base.py +0 -304
  174. langchain/agents/structured_chat/output_parser.py +0 -99
  175. langchain/agents/structured_chat/prompt.py +0 -34
  176. langchain/agents/tool_calling_agent/__init__.py +0 -0
  177. langchain/agents/tool_calling_agent/base.py +0 -110
  178. langchain/agents/tools.py +0 -47
  179. langchain/agents/types.py +0 -27
  180. langchain/agents/utils.py +0 -19
  181. langchain/agents/xml/__init__.py +0 -0
  182. langchain/agents/xml/base.py +0 -231
  183. langchain/agents/xml/prompt.py +0 -21
  184. langchain/base_language.py +0 -7
  185. langchain/cache.py +0 -72
  186. langchain/callbacks/__init__.py +0 -139
  187. langchain/callbacks/aim_callback.py +0 -33
  188. langchain/callbacks/argilla_callback.py +0 -25
  189. langchain/callbacks/arize_callback.py +0 -25
  190. langchain/callbacks/arthur_callback.py +0 -25
  191. langchain/callbacks/base.py +0 -29
  192. langchain/callbacks/clearml_callback.py +0 -25
  193. langchain/callbacks/comet_ml_callback.py +0 -25
  194. langchain/callbacks/confident_callback.py +0 -25
  195. langchain/callbacks/context_callback.py +0 -25
  196. langchain/callbacks/file.py +0 -3
  197. langchain/callbacks/flyte_callback.py +0 -25
  198. langchain/callbacks/human.py +0 -33
  199. langchain/callbacks/infino_callback.py +0 -25
  200. langchain/callbacks/labelstudio_callback.py +0 -33
  201. langchain/callbacks/llmonitor_callback.py +0 -27
  202. langchain/callbacks/manager.py +0 -89
  203. langchain/callbacks/mlflow_callback.py +0 -38
  204. langchain/callbacks/openai_info.py +0 -25
  205. langchain/callbacks/promptlayer_callback.py +0 -27
  206. langchain/callbacks/sagemaker_callback.py +0 -27
  207. langchain/callbacks/stdout.py +0 -3
  208. langchain/callbacks/streaming_aiter.py +0 -75
  209. langchain/callbacks/streaming_aiter_final_only.py +0 -91
  210. langchain/callbacks/streaming_stdout.py +0 -5
  211. langchain/callbacks/streaming_stdout_final_only.py +0 -91
  212. langchain/callbacks/streamlit/__init__.py +0 -86
  213. langchain/callbacks/streamlit/mutable_expander.py +0 -33
  214. langchain/callbacks/streamlit/streamlit_callback_handler.py +0 -49
  215. langchain/callbacks/tracers/__init__.py +0 -38
  216. langchain/callbacks/tracers/base.py +0 -6
  217. langchain/callbacks/tracers/comet.py +0 -30
  218. langchain/callbacks/tracers/evaluation.py +0 -8
  219. langchain/callbacks/tracers/langchain.py +0 -8
  220. langchain/callbacks/tracers/langchain_v1.py +0 -3
  221. langchain/callbacks/tracers/log_stream.py +0 -9
  222. langchain/callbacks/tracers/logging.py +0 -46
  223. langchain/callbacks/tracers/root_listeners.py +0 -3
  224. langchain/callbacks/tracers/run_collector.py +0 -3
  225. langchain/callbacks/tracers/schemas.py +0 -27
  226. langchain/callbacks/tracers/stdout.py +0 -6
  227. langchain/callbacks/tracers/wandb.py +0 -27
  228. langchain/callbacks/trubrics_callback.py +0 -25
  229. langchain/callbacks/utils.py +0 -48
  230. langchain/callbacks/wandb_callback.py +0 -25
  231. langchain/callbacks/whylabs_callback.py +0 -25
  232. langchain/chains/__init__.py +0 -96
  233. langchain/chains/api/__init__.py +0 -1
  234. langchain/chains/api/base.py +0 -394
  235. langchain/chains/api/news_docs.py +0 -31
  236. langchain/chains/api/open_meteo_docs.py +0 -32
  237. langchain/chains/api/openapi/__init__.py +0 -0
  238. langchain/chains/api/openapi/chain.py +0 -23
  239. langchain/chains/api/openapi/prompts.py +0 -27
  240. langchain/chains/api/openapi/requests_chain.py +0 -29
  241. langchain/chains/api/openapi/response_chain.py +0 -29
  242. langchain/chains/api/podcast_docs.py +0 -27
  243. langchain/chains/api/prompt.py +0 -35
  244. langchain/chains/api/tmdb_docs.py +0 -36
  245. langchain/chains/base.py +0 -800
  246. langchain/chains/chat_vector_db/__init__.py +0 -0
  247. langchain/chains/chat_vector_db/prompts.py +0 -19
  248. langchain/chains/combine_documents/__init__.py +0 -15
  249. langchain/chains/combine_documents/base.py +0 -287
  250. langchain/chains/combine_documents/map_reduce.py +0 -300
  251. langchain/chains/combine_documents/map_rerank.py +0 -247
  252. langchain/chains/combine_documents/reduce.py +0 -381
  253. langchain/chains/combine_documents/refine.py +0 -236
  254. langchain/chains/combine_documents/stuff.py +0 -288
  255. langchain/chains/constitutional_ai/__init__.py +0 -2
  256. langchain/chains/constitutional_ai/base.py +0 -321
  257. langchain/chains/constitutional_ai/models.py +0 -11
  258. langchain/chains/constitutional_ai/principles.py +0 -278
  259. langchain/chains/constitutional_ai/prompts.py +0 -120
  260. langchain/chains/conversation/__init__.py +0 -1
  261. langchain/chains/conversation/base.py +0 -143
  262. langchain/chains/conversation/memory.py +0 -45
  263. langchain/chains/conversation/prompt.py +0 -28
  264. langchain/chains/conversational_retrieval/__init__.py +0 -1
  265. langchain/chains/conversational_retrieval/base.py +0 -568
  266. langchain/chains/conversational_retrieval/prompts.py +0 -19
  267. langchain/chains/elasticsearch_database/__init__.py +0 -3
  268. langchain/chains/elasticsearch_database/base.py +0 -211
  269. langchain/chains/elasticsearch_database/prompts.py +0 -35
  270. langchain/chains/ernie_functions/__init__.py +0 -44
  271. langchain/chains/ernie_functions/base.py +0 -49
  272. langchain/chains/example_generator.py +0 -22
  273. langchain/chains/flare/__init__.py +0 -1
  274. langchain/chains/flare/base.py +0 -282
  275. langchain/chains/flare/prompts.py +0 -44
  276. langchain/chains/graph_qa/__init__.py +0 -0
  277. langchain/chains/graph_qa/arangodb.py +0 -23
  278. langchain/chains/graph_qa/base.py +0 -23
  279. langchain/chains/graph_qa/cypher.py +0 -39
  280. langchain/chains/graph_qa/cypher_utils.py +0 -27
  281. langchain/chains/graph_qa/falkordb.py +0 -29
  282. langchain/chains/graph_qa/gremlin.py +0 -36
  283. langchain/chains/graph_qa/hugegraph.py +0 -23
  284. langchain/chains/graph_qa/kuzu.py +0 -29
  285. langchain/chains/graph_qa/nebulagraph.py +0 -23
  286. langchain/chains/graph_qa/neptune_cypher.py +0 -39
  287. langchain/chains/graph_qa/neptune_sparql.py +0 -36
  288. langchain/chains/graph_qa/ontotext_graphdb.py +0 -25
  289. langchain/chains/graph_qa/prompts.py +0 -96
  290. langchain/chains/graph_qa/sparql.py +0 -23
  291. langchain/chains/history_aware_retriever.py +0 -68
  292. langchain/chains/hyde/__init__.py +0 -4
  293. langchain/chains/hyde/base.py +0 -124
  294. langchain/chains/hyde/prompts.py +0 -46
  295. langchain/chains/llm.py +0 -442
  296. langchain/chains/llm_bash/__init__.py +0 -10
  297. langchain/chains/llm_checker/__init__.py +0 -4
  298. langchain/chains/llm_checker/base.py +0 -194
  299. langchain/chains/llm_checker/prompt.py +0 -30
  300. langchain/chains/llm_math/__init__.py +0 -4
  301. langchain/chains/llm_math/base.py +0 -311
  302. langchain/chains/llm_math/prompt.py +0 -43
  303. langchain/chains/llm_requests.py +0 -23
  304. langchain/chains/llm_summarization_checker/__init__.py +0 -7
  305. langchain/chains/llm_summarization_checker/base.py +0 -205
  306. langchain/chains/llm_summarization_checker/prompts/are_all_true_prompt.txt +0 -38
  307. langchain/chains/llm_summarization_checker/prompts/check_facts.txt +0 -10
  308. langchain/chains/llm_summarization_checker/prompts/create_facts.txt +0 -10
  309. langchain/chains/llm_summarization_checker/prompts/revise_summary.txt +0 -17
  310. langchain/chains/llm_symbolic_math/__init__.py +0 -10
  311. langchain/chains/loading.py +0 -732
  312. langchain/chains/mapreduce.py +0 -121
  313. langchain/chains/moderation.py +0 -132
  314. langchain/chains/natbot/__init__.py +0 -4
  315. langchain/chains/natbot/base.py +0 -163
  316. langchain/chains/natbot/crawler.py +0 -443
  317. langchain/chains/natbot/prompt.py +0 -143
  318. langchain/chains/openai_functions/__init__.py +0 -44
  319. langchain/chains/openai_functions/base.py +0 -235
  320. langchain/chains/openai_functions/citation_fuzzy_match.py +0 -160
  321. langchain/chains/openai_functions/extraction.py +0 -197
  322. langchain/chains/openai_functions/openapi.py +0 -405
  323. langchain/chains/openai_functions/qa_with_structure.py +0 -142
  324. langchain/chains/openai_functions/tagging.py +0 -172
  325. langchain/chains/openai_functions/utils.py +0 -40
  326. langchain/chains/openai_tools/__init__.py +0 -3
  327. langchain/chains/openai_tools/extraction.py +0 -79
  328. langchain/chains/prompt_selector.py +0 -65
  329. langchain/chains/qa_generation/__init__.py +0 -0
  330. langchain/chains/qa_generation/base.py +0 -124
  331. langchain/chains/qa_generation/prompt.py +0 -50
  332. langchain/chains/qa_with_sources/__init__.py +0 -5
  333. langchain/chains/qa_with_sources/base.py +0 -263
  334. langchain/chains/qa_with_sources/loading.py +0 -209
  335. langchain/chains/qa_with_sources/map_reduce_prompt.py +0 -54
  336. langchain/chains/qa_with_sources/refine_prompts.py +0 -37
  337. langchain/chains/qa_with_sources/retrieval.py +0 -75
  338. langchain/chains/qa_with_sources/stuff_prompt.py +0 -43
  339. langchain/chains/qa_with_sources/vector_db.py +0 -86
  340. langchain/chains/query_constructor/__init__.py +0 -3
  341. langchain/chains/query_constructor/base.py +0 -376
  342. langchain/chains/query_constructor/ir.py +0 -23
  343. langchain/chains/query_constructor/parser.py +0 -210
  344. langchain/chains/query_constructor/prompt.py +0 -226
  345. langchain/chains/query_constructor/schema.py +0 -14
  346. langchain/chains/question_answering/__init__.py +0 -6
  347. langchain/chains/question_answering/chain.py +0 -279
  348. langchain/chains/question_answering/map_reduce_prompt.py +0 -80
  349. langchain/chains/question_answering/map_rerank_prompt.py +0 -66
  350. langchain/chains/question_answering/refine_prompts.py +0 -72
  351. langchain/chains/question_answering/stuff_prompt.py +0 -33
  352. langchain/chains/retrieval.py +0 -67
  353. langchain/chains/retrieval_qa/__init__.py +0 -1
  354. langchain/chains/retrieval_qa/base.py +0 -370
  355. langchain/chains/retrieval_qa/prompt.py +0 -11
  356. langchain/chains/router/__init__.py +0 -12
  357. langchain/chains/router/base.py +0 -142
  358. langchain/chains/router/embedding_router.py +0 -93
  359. langchain/chains/router/llm_router.py +0 -196
  360. langchain/chains/router/multi_prompt.py +0 -181
  361. langchain/chains/router/multi_prompt_prompt.py +0 -32
  362. langchain/chains/router/multi_retrieval_prompt.py +0 -30
  363. langchain/chains/router/multi_retrieval_qa.py +0 -109
  364. langchain/chains/sequential.py +0 -220
  365. langchain/chains/sql_database/__init__.py +0 -1
  366. langchain/chains/sql_database/prompt.py +0 -282
  367. langchain/chains/sql_database/query.py +0 -166
  368. langchain/chains/structured_output/__init__.py +0 -6
  369. langchain/chains/structured_output/base.py +0 -582
  370. langchain/chains/summarize/__init__.py +0 -6
  371. langchain/chains/summarize/chain.py +0 -174
  372. langchain/chains/summarize/map_reduce_prompt.py +0 -10
  373. langchain/chains/summarize/refine_prompts.py +0 -23
  374. langchain/chains/summarize/stuff_prompt.py +0 -10
  375. langchain/chains/transform.py +0 -84
  376. langchain/chat_loaders/__init__.py +0 -19
  377. langchain/chat_loaders/base.py +0 -3
  378. langchain/chat_loaders/facebook_messenger.py +0 -32
  379. langchain/chat_loaders/gmail.py +0 -23
  380. langchain/chat_loaders/imessage.py +0 -23
  381. langchain/chat_loaders/langsmith.py +0 -30
  382. langchain/chat_loaders/slack.py +0 -23
  383. langchain/chat_loaders/telegram.py +0 -23
  384. langchain/chat_loaders/utils.py +0 -36
  385. langchain/chat_loaders/whatsapp.py +0 -23
  386. langchain/chat_models/anthropic.py +0 -30
  387. langchain/chat_models/anyscale.py +0 -23
  388. langchain/chat_models/azure_openai.py +0 -23
  389. langchain/chat_models/azureml_endpoint.py +0 -30
  390. langchain/chat_models/baichuan.py +0 -23
  391. langchain/chat_models/baidu_qianfan_endpoint.py +0 -27
  392. langchain/chat_models/bedrock.py +0 -27
  393. langchain/chat_models/cohere.py +0 -23
  394. langchain/chat_models/databricks.py +0 -23
  395. langchain/chat_models/ernie.py +0 -23
  396. langchain/chat_models/everlyai.py +0 -23
  397. langchain/chat_models/fake.py +0 -30
  398. langchain/chat_models/fireworks.py +0 -23
  399. langchain/chat_models/gigachat.py +0 -23
  400. langchain/chat_models/google_palm.py +0 -30
  401. langchain/chat_models/human.py +0 -23
  402. langchain/chat_models/hunyuan.py +0 -23
  403. langchain/chat_models/javelin_ai_gateway.py +0 -30
  404. langchain/chat_models/jinachat.py +0 -23
  405. langchain/chat_models/konko.py +0 -23
  406. langchain/chat_models/litellm.py +0 -30
  407. langchain/chat_models/meta.py +0 -25
  408. langchain/chat_models/minimax.py +0 -23
  409. langchain/chat_models/mlflow.py +0 -23
  410. langchain/chat_models/mlflow_ai_gateway.py +0 -30
  411. langchain/chat_models/ollama.py +0 -23
  412. langchain/chat_models/openai.py +0 -23
  413. langchain/chat_models/pai_eas_endpoint.py +0 -25
  414. langchain/chat_models/promptlayer_openai.py +0 -25
  415. langchain/chat_models/tongyi.py +0 -23
  416. langchain/chat_models/vertexai.py +0 -23
  417. langchain/chat_models/volcengine_maas.py +0 -30
  418. langchain/chat_models/yandex.py +0 -23
  419. langchain/docstore/__init__.py +0 -48
  420. langchain/docstore/arbitrary_fn.py +0 -23
  421. langchain/docstore/base.py +0 -27
  422. langchain/docstore/document.py +0 -3
  423. langchain/docstore/in_memory.py +0 -23
  424. langchain/docstore/wikipedia.py +0 -23
  425. langchain/document_loaders/__init__.py +0 -553
  426. langchain/document_loaders/acreom.py +0 -23
  427. langchain/document_loaders/airbyte.py +0 -48
  428. langchain/document_loaders/airbyte_json.py +0 -23
  429. langchain/document_loaders/airtable.py +0 -23
  430. langchain/document_loaders/apify_dataset.py +0 -23
  431. langchain/document_loaders/arcgis_loader.py +0 -23
  432. langchain/document_loaders/arxiv.py +0 -23
  433. langchain/document_loaders/assemblyai.py +0 -28
  434. langchain/document_loaders/async_html.py +0 -23
  435. langchain/document_loaders/azlyrics.py +0 -23
  436. langchain/document_loaders/azure_ai_data.py +0 -23
  437. langchain/document_loaders/azure_blob_storage_container.py +0 -25
  438. langchain/document_loaders/azure_blob_storage_file.py +0 -25
  439. langchain/document_loaders/baiducloud_bos_directory.py +0 -29
  440. langchain/document_loaders/baiducloud_bos_file.py +0 -27
  441. langchain/document_loaders/base.py +0 -3
  442. langchain/document_loaders/base_o365.py +0 -23
  443. langchain/document_loaders/bibtex.py +0 -23
  444. langchain/document_loaders/bigquery.py +0 -23
  445. langchain/document_loaders/bilibili.py +0 -23
  446. langchain/document_loaders/blackboard.py +0 -23
  447. langchain/document_loaders/blob_loaders/__init__.py +0 -36
  448. langchain/document_loaders/blob_loaders/file_system.py +0 -23
  449. langchain/document_loaders/blob_loaders/schema.py +0 -29
  450. langchain/document_loaders/blob_loaders/youtube_audio.py +0 -23
  451. langchain/document_loaders/blockchain.py +0 -28
  452. langchain/document_loaders/brave_search.py +0 -23
  453. langchain/document_loaders/browserless.py +0 -23
  454. langchain/document_loaders/chatgpt.py +0 -28
  455. langchain/document_loaders/chromium.py +0 -23
  456. langchain/document_loaders/college_confidential.py +0 -25
  457. langchain/document_loaders/concurrent.py +0 -23
  458. langchain/document_loaders/confluence.py +0 -28
  459. langchain/document_loaders/conllu.py +0 -23
  460. langchain/document_loaders/couchbase.py +0 -23
  461. langchain/document_loaders/csv_loader.py +0 -27
  462. langchain/document_loaders/cube_semantic.py +0 -23
  463. langchain/document_loaders/datadog_logs.py +0 -23
  464. langchain/document_loaders/dataframe.py +0 -28
  465. langchain/document_loaders/diffbot.py +0 -23
  466. langchain/document_loaders/directory.py +0 -23
  467. langchain/document_loaders/discord.py +0 -23
  468. langchain/document_loaders/docugami.py +0 -23
  469. langchain/document_loaders/docusaurus.py +0 -23
  470. langchain/document_loaders/dropbox.py +0 -23
  471. langchain/document_loaders/duckdb_loader.py +0 -23
  472. langchain/document_loaders/email.py +0 -30
  473. langchain/document_loaders/epub.py +0 -23
  474. langchain/document_loaders/etherscan.py +0 -23
  475. langchain/document_loaders/evernote.py +0 -23
  476. langchain/document_loaders/excel.py +0 -23
  477. langchain/document_loaders/facebook_chat.py +0 -28
  478. langchain/document_loaders/fauna.py +0 -23
  479. langchain/document_loaders/figma.py +0 -23
  480. langchain/document_loaders/gcs_directory.py +0 -23
  481. langchain/document_loaders/gcs_file.py +0 -23
  482. langchain/document_loaders/generic.py +0 -23
  483. langchain/document_loaders/geodataframe.py +0 -23
  484. langchain/document_loaders/git.py +0 -23
  485. langchain/document_loaders/gitbook.py +0 -23
  486. langchain/document_loaders/github.py +0 -28
  487. langchain/document_loaders/google_speech_to_text.py +0 -23
  488. langchain/document_loaders/googledrive.py +0 -23
  489. langchain/document_loaders/gutenberg.py +0 -23
  490. langchain/document_loaders/helpers.py +0 -30
  491. langchain/document_loaders/hn.py +0 -23
  492. langchain/document_loaders/html.py +0 -23
  493. langchain/document_loaders/html_bs.py +0 -23
  494. langchain/document_loaders/hugging_face_dataset.py +0 -23
  495. langchain/document_loaders/ifixit.py +0 -23
  496. langchain/document_loaders/image.py +0 -23
  497. langchain/document_loaders/image_captions.py +0 -23
  498. langchain/document_loaders/imsdb.py +0 -23
  499. langchain/document_loaders/iugu.py +0 -23
  500. langchain/document_loaders/joplin.py +0 -23
  501. langchain/document_loaders/json_loader.py +0 -23
  502. langchain/document_loaders/lakefs.py +0 -33
  503. langchain/document_loaders/larksuite.py +0 -23
  504. langchain/document_loaders/markdown.py +0 -25
  505. langchain/document_loaders/mastodon.py +0 -23
  506. langchain/document_loaders/max_compute.py +0 -23
  507. langchain/document_loaders/mediawikidump.py +0 -23
  508. langchain/document_loaders/merge.py +0 -23
  509. langchain/document_loaders/mhtml.py +0 -23
  510. langchain/document_loaders/modern_treasury.py +0 -23
  511. langchain/document_loaders/mongodb.py +0 -23
  512. langchain/document_loaders/news.py +0 -23
  513. langchain/document_loaders/notebook.py +0 -33
  514. langchain/document_loaders/notion.py +0 -23
  515. langchain/document_loaders/notiondb.py +0 -23
  516. langchain/document_loaders/nuclia.py +0 -23
  517. langchain/document_loaders/obs_directory.py +0 -23
  518. langchain/document_loaders/obs_file.py +0 -23
  519. langchain/document_loaders/obsidian.py +0 -23
  520. langchain/document_loaders/odt.py +0 -23
  521. langchain/document_loaders/onedrive.py +0 -23
  522. langchain/document_loaders/onedrive_file.py +0 -23
  523. langchain/document_loaders/onenote.py +0 -23
  524. langchain/document_loaders/open_city_data.py +0 -23
  525. langchain/document_loaders/org_mode.py +0 -25
  526. langchain/document_loaders/parsers/__init__.py +0 -58
  527. langchain/document_loaders/parsers/audio.py +0 -33
  528. langchain/document_loaders/parsers/docai.py +0 -30
  529. langchain/document_loaders/parsers/generic.py +0 -25
  530. langchain/document_loaders/parsers/grobid.py +0 -30
  531. langchain/document_loaders/parsers/html/__init__.py +0 -25
  532. langchain/document_loaders/parsers/html/bs4.py +0 -25
  533. langchain/document_loaders/parsers/language/__init__.py +0 -29
  534. langchain/document_loaders/parsers/language/cobol.py +0 -27
  535. langchain/document_loaders/parsers/language/code_segmenter.py +0 -29
  536. langchain/document_loaders/parsers/language/javascript.py +0 -29
  537. langchain/document_loaders/parsers/language/language_parser.py +0 -29
  538. langchain/document_loaders/parsers/language/python.py +0 -27
  539. langchain/document_loaders/parsers/msword.py +0 -25
  540. langchain/document_loaders/parsers/pdf.py +0 -50
  541. langchain/document_loaders/parsers/registry.py +0 -25
  542. langchain/document_loaders/parsers/txt.py +0 -23
  543. langchain/document_loaders/pdf.py +0 -65
  544. langchain/document_loaders/polars_dataframe.py +0 -23
  545. langchain/document_loaders/powerpoint.py +0 -25
  546. langchain/document_loaders/psychic.py +0 -23
  547. langchain/document_loaders/pubmed.py +0 -23
  548. langchain/document_loaders/pyspark_dataframe.py +0 -26
  549. langchain/document_loaders/python.py +0 -22
  550. langchain/document_loaders/quip.py +0 -23
  551. langchain/document_loaders/readthedocs.py +0 -23
  552. langchain/document_loaders/recursive_url_loader.py +0 -23
  553. langchain/document_loaders/reddit.py +0 -23
  554. langchain/document_loaders/roam.py +0 -23
  555. langchain/document_loaders/rocksetdb.py +0 -23
  556. langchain/document_loaders/rspace.py +0 -23
  557. langchain/document_loaders/rss.py +0 -23
  558. langchain/document_loaders/rst.py +0 -23
  559. langchain/document_loaders/rtf.py +0 -23
  560. langchain/document_loaders/s3_directory.py +0 -23
  561. langchain/document_loaders/s3_file.py +0 -23
  562. langchain/document_loaders/sharepoint.py +0 -23
  563. langchain/document_loaders/sitemap.py +0 -23
  564. langchain/document_loaders/slack_directory.py +0 -23
  565. langchain/document_loaders/snowflake_loader.py +0 -23
  566. langchain/document_loaders/spreedly.py +0 -23
  567. langchain/document_loaders/srt.py +0 -23
  568. langchain/document_loaders/stripe.py +0 -23
  569. langchain/document_loaders/telegram.py +0 -38
  570. langchain/document_loaders/tencent_cos_directory.py +0 -25
  571. langchain/document_loaders/tencent_cos_file.py +0 -23
  572. langchain/document_loaders/tensorflow_datasets.py +0 -23
  573. langchain/document_loaders/text.py +0 -23
  574. langchain/document_loaders/tomarkdown.py +0 -23
  575. langchain/document_loaders/toml.py +0 -23
  576. langchain/document_loaders/trello.py +0 -23
  577. langchain/document_loaders/tsv.py +0 -23
  578. langchain/document_loaders/twitter.py +0 -23
  579. langchain/document_loaders/unstructured.py +0 -54
  580. langchain/document_loaders/url.py +0 -23
  581. langchain/document_loaders/url_playwright.py +0 -33
  582. langchain/document_loaders/url_selenium.py +0 -23
  583. langchain/document_loaders/weather.py +0 -23
  584. langchain/document_loaders/web_base.py +0 -23
  585. langchain/document_loaders/whatsapp_chat.py +0 -28
  586. langchain/document_loaders/wikipedia.py +0 -23
  587. langchain/document_loaders/word_document.py +0 -30
  588. langchain/document_loaders/xml.py +0 -23
  589. langchain/document_loaders/xorbits.py +0 -23
  590. langchain/document_loaders/youtube.py +0 -33
  591. langchain/document_transformers/__init__.py +0 -77
  592. langchain/document_transformers/beautiful_soup_transformer.py +0 -25
  593. langchain/document_transformers/doctran_text_extract.py +0 -25
  594. langchain/document_transformers/doctran_text_qa.py +0 -25
  595. langchain/document_transformers/doctran_text_translate.py +0 -25
  596. langchain/document_transformers/embeddings_redundant_filter.py +0 -50
  597. langchain/document_transformers/google_translate.py +0 -25
  598. langchain/document_transformers/html2text.py +0 -25
  599. langchain/document_transformers/long_context_reorder.py +0 -23
  600. langchain/document_transformers/nuclia_text_transform.py +0 -25
  601. langchain/document_transformers/openai_functions.py +0 -32
  602. langchain/document_transformers/xsl/html_chunks_with_headers.xslt +0 -199
  603. langchain/embeddings/aleph_alpha.py +0 -30
  604. langchain/embeddings/awa.py +0 -23
  605. langchain/embeddings/azure_openai.py +0 -23
  606. langchain/embeddings/baidu_qianfan_endpoint.py +0 -23
  607. langchain/embeddings/bedrock.py +0 -23
  608. langchain/embeddings/bookend.py +0 -23
  609. langchain/embeddings/cache.py +0 -368
  610. langchain/embeddings/clarifai.py +0 -23
  611. langchain/embeddings/cloudflare_workersai.py +0 -29
  612. langchain/embeddings/cohere.py +0 -23
  613. langchain/embeddings/dashscope.py +0 -23
  614. langchain/embeddings/databricks.py +0 -23
  615. langchain/embeddings/deepinfra.py +0 -23
  616. langchain/embeddings/edenai.py +0 -23
  617. langchain/embeddings/elasticsearch.py +0 -23
  618. langchain/embeddings/embaas.py +0 -23
  619. langchain/embeddings/ernie.py +0 -23
  620. langchain/embeddings/fake.py +0 -30
  621. langchain/embeddings/fastembed.py +0 -23
  622. langchain/embeddings/google_palm.py +0 -23
  623. langchain/embeddings/gpt4all.py +0 -23
  624. langchain/embeddings/gradient_ai.py +0 -23
  625. langchain/embeddings/huggingface.py +0 -36
  626. langchain/embeddings/huggingface_hub.py +0 -23
  627. langchain/embeddings/infinity.py +0 -30
  628. langchain/embeddings/javelin_ai_gateway.py +0 -23
  629. langchain/embeddings/jina.py +0 -23
  630. langchain/embeddings/johnsnowlabs.py +0 -23
  631. langchain/embeddings/llamacpp.py +0 -23
  632. langchain/embeddings/llm_rails.py +0 -23
  633. langchain/embeddings/localai.py +0 -23
  634. langchain/embeddings/minimax.py +0 -23
  635. langchain/embeddings/mlflow.py +0 -23
  636. langchain/embeddings/mlflow_gateway.py +0 -23
  637. langchain/embeddings/modelscope_hub.py +0 -23
  638. langchain/embeddings/mosaicml.py +0 -23
  639. langchain/embeddings/nlpcloud.py +0 -23
  640. langchain/embeddings/octoai_embeddings.py +0 -23
  641. langchain/embeddings/ollama.py +0 -23
  642. langchain/embeddings/openai.py +0 -23
  643. langchain/embeddings/sagemaker_endpoint.py +0 -30
  644. langchain/embeddings/self_hosted.py +0 -23
  645. langchain/embeddings/self_hosted_hugging_face.py +0 -30
  646. langchain/embeddings/sentence_transformer.py +0 -21
  647. langchain/embeddings/spacy_embeddings.py +0 -23
  648. langchain/embeddings/tensorflow_hub.py +0 -23
  649. langchain/embeddings/vertexai.py +0 -23
  650. langchain/embeddings/voyageai.py +0 -23
  651. langchain/embeddings/xinference.py +0 -23
  652. langchain/env.py +0 -17
  653. langchain/evaluation/__init__.py +0 -128
  654. langchain/evaluation/agents/__init__.py +0 -5
  655. langchain/evaluation/agents/trajectory_eval_chain.py +0 -415
  656. langchain/evaluation/agents/trajectory_eval_prompt.py +0 -146
  657. langchain/evaluation/comparison/__init__.py +0 -36
  658. langchain/evaluation/comparison/eval_chain.py +0 -461
  659. langchain/evaluation/comparison/prompt.py +0 -59
  660. langchain/evaluation/criteria/__init__.py +0 -56
  661. langchain/evaluation/criteria/eval_chain.py +0 -603
  662. langchain/evaluation/criteria/prompt.py +0 -37
  663. langchain/evaluation/embedding_distance/__init__.py +0 -13
  664. langchain/evaluation/embedding_distance/base.py +0 -602
  665. langchain/evaluation/exact_match/__init__.py +0 -0
  666. langchain/evaluation/exact_match/base.py +0 -97
  667. langchain/evaluation/loading.py +0 -206
  668. langchain/evaluation/parsing/__init__.py +0 -0
  669. langchain/evaluation/parsing/base.py +0 -162
  670. langchain/evaluation/parsing/json_distance.py +0 -97
  671. langchain/evaluation/parsing/json_schema.py +0 -100
  672. langchain/evaluation/qa/__init__.py +0 -10
  673. langchain/evaluation/qa/eval_chain.py +0 -364
  674. langchain/evaluation/qa/eval_prompt.py +0 -78
  675. langchain/evaluation/qa/generate_chain.py +0 -34
  676. langchain/evaluation/qa/generate_prompt.py +0 -21
  677. langchain/evaluation/regex_match/__init__.py +0 -0
  678. langchain/evaluation/regex_match/base.py +0 -86
  679. langchain/evaluation/schema.py +0 -491
  680. langchain/evaluation/scoring/__init__.py +0 -31
  681. langchain/evaluation/scoring/eval_chain.py +0 -475
  682. langchain/evaluation/scoring/prompt.py +0 -53
  683. langchain/evaluation/string_distance/__init__.py +0 -13
  684. langchain/evaluation/string_distance/base.py +0 -466
  685. langchain/example_generator.py +0 -5
  686. langchain/formatting.py +0 -5
  687. langchain/globals.py +0 -180
  688. langchain/graphs/__init__.py +0 -57
  689. langchain/graphs/arangodb_graph.py +0 -28
  690. langchain/graphs/falkordb_graph.py +0 -23
  691. langchain/graphs/graph_document.py +0 -33
  692. langchain/graphs/graph_store.py +0 -23
  693. langchain/graphs/hugegraph.py +0 -23
  694. langchain/graphs/kuzu_graph.py +0 -23
  695. langchain/graphs/memgraph_graph.py +0 -23
  696. langchain/graphs/nebula_graph.py +0 -23
  697. langchain/graphs/neo4j_graph.py +0 -23
  698. langchain/graphs/neptune_graph.py +0 -23
  699. langchain/graphs/networkx_graph.py +0 -36
  700. langchain/graphs/rdf_graph.py +0 -23
  701. langchain/hub.py +0 -131
  702. langchain/indexes/__init__.py +0 -50
  703. langchain/indexes/_api.py +0 -5
  704. langchain/indexes/_sql_record_manager.py +0 -539
  705. langchain/indexes/graph.py +0 -28
  706. langchain/indexes/prompts/__init__.py +0 -13
  707. langchain/indexes/prompts/entity_extraction.py +0 -39
  708. langchain/indexes/prompts/entity_summarization.py +0 -24
  709. langchain/indexes/prompts/knowledge_triplet_extraction.py +0 -36
  710. langchain/indexes/vectorstore.py +0 -269
  711. langchain/input.py +0 -15
  712. langchain/llms/__init__.py +0 -734
  713. langchain/llms/ai21.py +0 -28
  714. langchain/llms/aleph_alpha.py +0 -23
  715. langchain/llms/amazon_api_gateway.py +0 -23
  716. langchain/llms/anthropic.py +0 -23
  717. langchain/llms/anyscale.py +0 -23
  718. langchain/llms/arcee.py +0 -23
  719. langchain/llms/aviary.py +0 -23
  720. langchain/llms/azureml_endpoint.py +0 -48
  721. langchain/llms/baidu_qianfan_endpoint.py +0 -23
  722. langchain/llms/bananadev.py +0 -23
  723. langchain/llms/base.py +0 -20
  724. langchain/llms/baseten.py +0 -23
  725. langchain/llms/beam.py +0 -23
  726. langchain/llms/bedrock.py +0 -28
  727. langchain/llms/bittensor.py +0 -23
  728. langchain/llms/cerebriumai.py +0 -23
  729. langchain/llms/chatglm.py +0 -23
  730. langchain/llms/clarifai.py +0 -23
  731. langchain/llms/cloudflare_workersai.py +0 -25
  732. langchain/llms/cohere.py +0 -23
  733. langchain/llms/ctransformers.py +0 -23
  734. langchain/llms/ctranslate2.py +0 -23
  735. langchain/llms/databricks.py +0 -23
  736. langchain/llms/deepinfra.py +0 -23
  737. langchain/llms/deepsparse.py +0 -23
  738. langchain/llms/edenai.py +0 -23
  739. langchain/llms/fake.py +0 -28
  740. langchain/llms/fireworks.py +0 -23
  741. langchain/llms/forefrontai.py +0 -23
  742. langchain/llms/gigachat.py +0 -23
  743. langchain/llms/google_palm.py +0 -23
  744. langchain/llms/gooseai.py +0 -23
  745. langchain/llms/gpt4all.py +0 -23
  746. langchain/llms/gradient_ai.py +0 -28
  747. langchain/llms/grammars/json.gbnf +0 -29
  748. langchain/llms/grammars/list.gbnf +0 -14
  749. langchain/llms/huggingface_endpoint.py +0 -23
  750. langchain/llms/huggingface_hub.py +0 -23
  751. langchain/llms/huggingface_pipeline.py +0 -23
  752. langchain/llms/huggingface_text_gen_inference.py +0 -23
  753. langchain/llms/human.py +0 -23
  754. langchain/llms/javelin_ai_gateway.py +0 -28
  755. langchain/llms/koboldai.py +0 -23
  756. langchain/llms/llamacpp.py +0 -23
  757. langchain/llms/loading.py +0 -27
  758. langchain/llms/manifest.py +0 -23
  759. langchain/llms/minimax.py +0 -23
  760. langchain/llms/mlflow.py +0 -23
  761. langchain/llms/mlflow_ai_gateway.py +0 -23
  762. langchain/llms/modal.py +0 -23
  763. langchain/llms/mosaicml.py +0 -23
  764. langchain/llms/nlpcloud.py +0 -23
  765. langchain/llms/octoai_endpoint.py +0 -23
  766. langchain/llms/ollama.py +0 -23
  767. langchain/llms/opaqueprompts.py +0 -23
  768. langchain/llms/openai.py +0 -32
  769. langchain/llms/openllm.py +0 -23
  770. langchain/llms/openlm.py +0 -23
  771. langchain/llms/pai_eas_endpoint.py +0 -23
  772. langchain/llms/petals.py +0 -23
  773. langchain/llms/pipelineai.py +0 -23
  774. langchain/llms/predibase.py +0 -23
  775. langchain/llms/predictionguard.py +0 -23
  776. langchain/llms/promptlayer_openai.py +0 -27
  777. langchain/llms/replicate.py +0 -23
  778. langchain/llms/rwkv.py +0 -23
  779. langchain/llms/sagemaker_endpoint.py +0 -28
  780. langchain/llms/self_hosted.py +0 -23
  781. langchain/llms/self_hosted_hugging_face.py +0 -23
  782. langchain/llms/stochasticai.py +0 -23
  783. langchain/llms/symblai_nebula.py +0 -23
  784. langchain/llms/textgen.py +0 -23
  785. langchain/llms/titan_takeoff.py +0 -23
  786. langchain/llms/titan_takeoff_pro.py +0 -23
  787. langchain/llms/together.py +0 -23
  788. langchain/llms/tongyi.py +0 -23
  789. langchain/llms/utils.py +0 -23
  790. langchain/llms/vertexai.py +0 -27
  791. langchain/llms/vllm.py +0 -27
  792. langchain/llms/volcengine_maas.py +0 -28
  793. langchain/llms/watsonxllm.py +0 -23
  794. langchain/llms/writer.py +0 -23
  795. langchain/llms/xinference.py +0 -23
  796. langchain/llms/yandex.py +0 -23
  797. langchain/load/__init__.py +0 -11
  798. langchain/load/dump.py +0 -3
  799. langchain/load/load.py +0 -3
  800. langchain/load/serializable.py +0 -19
  801. langchain/memory/__init__.py +0 -153
  802. langchain/memory/buffer.py +0 -173
  803. langchain/memory/buffer_window.py +0 -60
  804. langchain/memory/chat_memory.py +0 -104
  805. langchain/memory/chat_message_histories/__init__.py +0 -84
  806. langchain/memory/chat_message_histories/astradb.py +0 -25
  807. langchain/memory/chat_message_histories/cassandra.py +0 -25
  808. langchain/memory/chat_message_histories/cosmos_db.py +0 -25
  809. langchain/memory/chat_message_histories/dynamodb.py +0 -25
  810. langchain/memory/chat_message_histories/elasticsearch.py +0 -27
  811. langchain/memory/chat_message_histories/file.py +0 -25
  812. langchain/memory/chat_message_histories/firestore.py +0 -25
  813. langchain/memory/chat_message_histories/in_memory.py +0 -5
  814. langchain/memory/chat_message_histories/momento.py +0 -25
  815. langchain/memory/chat_message_histories/mongodb.py +0 -25
  816. langchain/memory/chat_message_histories/neo4j.py +0 -25
  817. langchain/memory/chat_message_histories/postgres.py +0 -25
  818. langchain/memory/chat_message_histories/redis.py +0 -25
  819. langchain/memory/chat_message_histories/rocksetdb.py +0 -25
  820. langchain/memory/chat_message_histories/singlestoredb.py +0 -27
  821. langchain/memory/chat_message_histories/sql.py +0 -33
  822. langchain/memory/chat_message_histories/streamlit.py +0 -25
  823. langchain/memory/chat_message_histories/upstash_redis.py +0 -27
  824. langchain/memory/chat_message_histories/xata.py +0 -25
  825. langchain/memory/chat_message_histories/zep.py +0 -25
  826. langchain/memory/combined.py +0 -85
  827. langchain/memory/entity.py +0 -564
  828. langchain/memory/kg.py +0 -23
  829. langchain/memory/motorhead_memory.py +0 -23
  830. langchain/memory/prompt.py +0 -164
  831. langchain/memory/readonly.py +0 -24
  832. langchain/memory/simple.py +0 -24
  833. langchain/memory/summary.py +0 -140
  834. langchain/memory/summary_buffer.py +0 -148
  835. langchain/memory/token_buffer.py +0 -72
  836. langchain/memory/utils.py +0 -21
  837. langchain/memory/vectorstore.py +0 -120
  838. langchain/memory/vectorstore_token_buffer_memory.py +0 -184
  839. langchain/memory/zep_memory.py +0 -23
  840. langchain/model_laboratory.py +0 -99
  841. langchain/output_parsers/__init__.py +0 -87
  842. langchain/output_parsers/boolean.py +0 -54
  843. langchain/output_parsers/combining.py +0 -57
  844. langchain/output_parsers/datetime.py +0 -58
  845. langchain/output_parsers/enum.py +0 -41
  846. langchain/output_parsers/ernie_functions.py +0 -45
  847. langchain/output_parsers/fix.py +0 -148
  848. langchain/output_parsers/format_instructions.py +0 -79
  849. langchain/output_parsers/json.py +0 -15
  850. langchain/output_parsers/list.py +0 -13
  851. langchain/output_parsers/loading.py +0 -22
  852. langchain/output_parsers/openai_functions.py +0 -13
  853. langchain/output_parsers/openai_tools.py +0 -7
  854. langchain/output_parsers/pandas_dataframe.py +0 -156
  855. langchain/output_parsers/prompts.py +0 -21
  856. langchain/output_parsers/pydantic.py +0 -3
  857. langchain/output_parsers/rail_parser.py +0 -25
  858. langchain/output_parsers/regex.py +0 -39
  859. langchain/output_parsers/regex_dict.py +0 -43
  860. langchain/output_parsers/retry.py +0 -296
  861. langchain/output_parsers/structured.py +0 -106
  862. langchain/output_parsers/xml.py +0 -3
  863. langchain/output_parsers/yaml.py +0 -73
  864. langchain/prompts/__init__.py +0 -102
  865. langchain/prompts/base.py +0 -21
  866. langchain/prompts/chat.py +0 -37
  867. langchain/prompts/example_selector/__init__.py +0 -42
  868. langchain/prompts/example_selector/base.py +0 -3
  869. langchain/prompts/example_selector/length_based.py +0 -5
  870. langchain/prompts/example_selector/ngram_overlap.py +0 -32
  871. langchain/prompts/example_selector/semantic_similarity.py +0 -11
  872. langchain/prompts/few_shot.py +0 -11
  873. langchain/prompts/few_shot_with_templates.py +0 -3
  874. langchain/prompts/loading.py +0 -23
  875. langchain/prompts/pipeline.py +0 -3
  876. langchain/prompts/prompt.py +0 -6
  877. langchain/pydantic_v1/__init__.py +0 -38
  878. langchain/pydantic_v1/dataclasses.py +0 -20
  879. langchain/pydantic_v1/main.py +0 -20
  880. langchain/python.py +0 -19
  881. langchain/requests.py +0 -35
  882. langchain/retrievers/__init__.py +0 -178
  883. langchain/retrievers/arcee.py +0 -23
  884. langchain/retrievers/arxiv.py +0 -23
  885. langchain/retrievers/azure_ai_search.py +0 -30
  886. langchain/retrievers/bedrock.py +0 -33
  887. langchain/retrievers/bm25.py +0 -28
  888. langchain/retrievers/chaindesk.py +0 -23
  889. langchain/retrievers/chatgpt_plugin_retriever.py +0 -23
  890. langchain/retrievers/cohere_rag_retriever.py +0 -23
  891. langchain/retrievers/contextual_compression.py +0 -81
  892. langchain/retrievers/databerry.py +0 -23
  893. langchain/retrievers/docarray.py +0 -28
  894. langchain/retrievers/document_compressors/__init__.py +0 -44
  895. langchain/retrievers/document_compressors/base.py +0 -82
  896. langchain/retrievers/document_compressors/chain_extract.py +0 -121
  897. langchain/retrievers/document_compressors/chain_extract_prompt.py +0 -10
  898. langchain/retrievers/document_compressors/chain_filter.py +0 -133
  899. langchain/retrievers/document_compressors/chain_filter_prompt.py +0 -8
  900. langchain/retrievers/document_compressors/cohere_rerank.py +0 -124
  901. langchain/retrievers/document_compressors/cross_encoder.py +0 -16
  902. langchain/retrievers/document_compressors/cross_encoder_rerank.py +0 -48
  903. langchain/retrievers/document_compressors/embeddings_filter.py +0 -137
  904. langchain/retrievers/document_compressors/flashrank_rerank.py +0 -27
  905. langchain/retrievers/document_compressors/listwise_rerank.py +0 -144
  906. langchain/retrievers/elastic_search_bm25.py +0 -23
  907. langchain/retrievers/embedchain.py +0 -23
  908. langchain/retrievers/ensemble.py +0 -336
  909. langchain/retrievers/google_cloud_documentai_warehouse.py +0 -25
  910. langchain/retrievers/google_vertex_ai_search.py +0 -33
  911. langchain/retrievers/kay.py +0 -23
  912. langchain/retrievers/kendra.py +0 -66
  913. langchain/retrievers/knn.py +0 -23
  914. langchain/retrievers/llama_index.py +0 -30
  915. langchain/retrievers/merger_retriever.py +0 -123
  916. langchain/retrievers/metal.py +0 -23
  917. langchain/retrievers/milvus.py +0 -28
  918. langchain/retrievers/multi_query.py +0 -231
  919. langchain/retrievers/multi_vector.py +0 -132
  920. langchain/retrievers/outline.py +0 -23
  921. langchain/retrievers/parent_document_retriever.py +0 -157
  922. langchain/retrievers/pinecone_hybrid_search.py +0 -23
  923. langchain/retrievers/pubmed.py +0 -23
  924. langchain/retrievers/pupmed.py +0 -23
  925. langchain/retrievers/re_phraser.py +0 -89
  926. langchain/retrievers/remote_retriever.py +0 -23
  927. langchain/retrievers/self_query/__init__.py +0 -0
  928. langchain/retrievers/self_query/astradb.py +0 -23
  929. langchain/retrievers/self_query/base.py +0 -397
  930. langchain/retrievers/self_query/chroma.py +0 -23
  931. langchain/retrievers/self_query/dashvector.py +0 -23
  932. langchain/retrievers/self_query/databricks_vector_search.py +0 -27
  933. langchain/retrievers/self_query/deeplake.py +0 -27
  934. langchain/retrievers/self_query/dingo.py +0 -23
  935. langchain/retrievers/self_query/elasticsearch.py +0 -25
  936. langchain/retrievers/self_query/milvus.py +0 -27
  937. langchain/retrievers/self_query/mongodb_atlas.py +0 -25
  938. langchain/retrievers/self_query/myscale.py +0 -23
  939. langchain/retrievers/self_query/opensearch.py +0 -23
  940. langchain/retrievers/self_query/pgvector.py +0 -23
  941. langchain/retrievers/self_query/pinecone.py +0 -23
  942. langchain/retrievers/self_query/qdrant.py +0 -23
  943. langchain/retrievers/self_query/redis.py +0 -23
  944. langchain/retrievers/self_query/supabase.py +0 -23
  945. langchain/retrievers/self_query/tencentvectordb.py +0 -27
  946. langchain/retrievers/self_query/timescalevector.py +0 -27
  947. langchain/retrievers/self_query/vectara.py +0 -27
  948. langchain/retrievers/self_query/weaviate.py +0 -23
  949. langchain/retrievers/svm.py +0 -23
  950. langchain/retrievers/tavily_search_api.py +0 -28
  951. langchain/retrievers/tfidf.py +0 -23
  952. langchain/retrievers/time_weighted_retriever.py +0 -193
  953. langchain/retrievers/vespa_retriever.py +0 -23
  954. langchain/retrievers/weaviate_hybrid_search.py +0 -23
  955. langchain/retrievers/web_research.py +0 -29
  956. langchain/retrievers/wikipedia.py +0 -23
  957. langchain/retrievers/you.py +0 -23
  958. langchain/retrievers/zep.py +0 -30
  959. langchain/retrievers/zilliz.py +0 -28
  960. langchain/runnables/__init__.py +0 -18
  961. langchain/runnables/hub.py +0 -32
  962. langchain/runnables/openai_functions.py +0 -51
  963. langchain/schema/__init__.py +0 -82
  964. langchain/schema/agent.py +0 -3
  965. langchain/schema/cache.py +0 -3
  966. langchain/schema/callbacks/__init__.py +0 -0
  967. langchain/schema/callbacks/base.py +0 -23
  968. langchain/schema/callbacks/manager.py +0 -55
  969. langchain/schema/callbacks/stdout.py +0 -3
  970. langchain/schema/callbacks/streaming_stdout.py +0 -3
  971. langchain/schema/callbacks/tracers/__init__.py +0 -0
  972. langchain/schema/callbacks/tracers/base.py +0 -4
  973. langchain/schema/callbacks/tracers/evaluation.py +0 -6
  974. langchain/schema/callbacks/tracers/langchain.py +0 -8
  975. langchain/schema/callbacks/tracers/langchain_v1.py +0 -3
  976. langchain/schema/callbacks/tracers/log_stream.py +0 -9
  977. langchain/schema/callbacks/tracers/root_listeners.py +0 -3
  978. langchain/schema/callbacks/tracers/run_collector.py +0 -3
  979. langchain/schema/callbacks/tracers/schemas.py +0 -27
  980. langchain/schema/callbacks/tracers/stdout.py +0 -13
  981. langchain/schema/chat.py +0 -3
  982. langchain/schema/chat_history.py +0 -3
  983. langchain/schema/document.py +0 -3
  984. langchain/schema/embeddings.py +0 -3
  985. langchain/schema/exceptions.py +0 -3
  986. langchain/schema/language_model.py +0 -15
  987. langchain/schema/memory.py +0 -3
  988. langchain/schema/messages.py +0 -51
  989. langchain/schema/output.py +0 -19
  990. langchain/schema/output_parser.py +0 -25
  991. langchain/schema/prompt.py +0 -3
  992. langchain/schema/prompt_template.py +0 -3
  993. langchain/schema/retriever.py +0 -3
  994. langchain/schema/runnable/__init__.py +0 -58
  995. langchain/schema/runnable/base.py +0 -38
  996. langchain/schema/runnable/branch.py +0 -3
  997. langchain/schema/runnable/config.py +0 -27
  998. langchain/schema/runnable/configurable.py +0 -15
  999. langchain/schema/runnable/fallbacks.py +0 -3
  1000. langchain/schema/runnable/history.py +0 -11
  1001. langchain/schema/runnable/passthrough.py +0 -8
  1002. langchain/schema/runnable/retry.py +0 -3
  1003. langchain/schema/runnable/router.py +0 -3
  1004. langchain/schema/runnable/utils.py +0 -51
  1005. langchain/schema/storage.py +0 -3
  1006. langchain/schema/vectorstore.py +0 -3
  1007. langchain/serpapi.py +0 -25
  1008. langchain/smith/__init__.py +0 -102
  1009. langchain/smith/evaluation/__init__.py +0 -68
  1010. langchain/smith/evaluation/config.py +0 -382
  1011. langchain/smith/evaluation/name_generation.py +0 -727
  1012. langchain/smith/evaluation/progress.py +0 -137
  1013. langchain/smith/evaluation/runner_utils.py +0 -1572
  1014. langchain/smith/evaluation/string_run_evaluator.py +0 -440
  1015. langchain/smith/evaluation/utils.py +0 -0
  1016. langchain/sql_database.py +0 -25
  1017. langchain/storage/__init__.py +0 -57
  1018. langchain/storage/_lc_store.py +0 -91
  1019. langchain/storage/encoder_backed.py +0 -127
  1020. langchain/storage/exceptions.py +0 -3
  1021. langchain/storage/file_system.py +0 -176
  1022. langchain/storage/in_memory.py +0 -13
  1023. langchain/storage/redis.py +0 -23
  1024. langchain/storage/upstash_redis.py +0 -27
  1025. langchain/text_splitter.py +0 -50
  1026. langchain/tools/ainetwork/__init__.py +0 -0
  1027. langchain/tools/ainetwork/app.py +0 -30
  1028. langchain/tools/ainetwork/base.py +0 -27
  1029. langchain/tools/ainetwork/owner.py +0 -28
  1030. langchain/tools/ainetwork/rule.py +0 -28
  1031. langchain/tools/ainetwork/transfer.py +0 -28
  1032. langchain/tools/ainetwork/value.py +0 -28
  1033. langchain/tools/amadeus/__init__.py +0 -30
  1034. langchain/tools/amadeus/base.py +0 -23
  1035. langchain/tools/amadeus/closest_airport.py +0 -30
  1036. langchain/tools/amadeus/flight_search.py +0 -30
  1037. langchain/tools/arxiv/__init__.py +0 -1
  1038. langchain/tools/arxiv/tool.py +0 -28
  1039. langchain/tools/azure_cognitive_services/__init__.py +0 -41
  1040. langchain/tools/azure_cognitive_services/form_recognizer.py +0 -23
  1041. langchain/tools/azure_cognitive_services/image_analysis.py +0 -23
  1042. langchain/tools/azure_cognitive_services/speech2text.py +0 -23
  1043. langchain/tools/azure_cognitive_services/text2speech.py +0 -23
  1044. langchain/tools/azure_cognitive_services/text_analytics_health.py +0 -23
  1045. langchain/tools/base.py +0 -19
  1046. langchain/tools/bearly/__init__.py +0 -0
  1047. langchain/tools/bearly/tool.py +0 -33
  1048. langchain/tools/bing_search/__init__.py +0 -29
  1049. langchain/tools/bing_search/tool.py +0 -27
  1050. langchain/tools/brave_search/__init__.py +0 -0
  1051. langchain/tools/brave_search/tool.py +0 -23
  1052. langchain/tools/clickup/__init__.py +0 -0
  1053. langchain/tools/clickup/tool.py +0 -23
  1054. langchain/tools/convert_to_openai.py +0 -4
  1055. langchain/tools/dataforseo_api_search/__init__.py +0 -34
  1056. langchain/tools/dataforseo_api_search/tool.py +0 -32
  1057. langchain/tools/ddg_search/__init__.py +0 -25
  1058. langchain/tools/ddg_search/tool.py +0 -32
  1059. langchain/tools/e2b_data_analysis/__init__.py +0 -0
  1060. langchain/tools/e2b_data_analysis/tool.py +0 -33
  1061. langchain/tools/edenai/__init__.py +0 -50
  1062. langchain/tools/edenai/audio_speech_to_text.py +0 -23
  1063. langchain/tools/edenai/audio_text_to_speech.py +0 -23
  1064. langchain/tools/edenai/edenai_base_tool.py +0 -23
  1065. langchain/tools/edenai/image_explicitcontent.py +0 -23
  1066. langchain/tools/edenai/image_objectdetection.py +0 -23
  1067. langchain/tools/edenai/ocr_identityparser.py +0 -23
  1068. langchain/tools/edenai/ocr_invoiceparser.py +0 -23
  1069. langchain/tools/edenai/text_moderation.py +0 -23
  1070. langchain/tools/eleven_labs/__init__.py +0 -25
  1071. langchain/tools/eleven_labs/models.py +0 -23
  1072. langchain/tools/eleven_labs/text2speech.py +0 -23
  1073. langchain/tools/file_management/__init__.py +0 -47
  1074. langchain/tools/file_management/copy.py +0 -28
  1075. langchain/tools/file_management/delete.py +0 -28
  1076. langchain/tools/file_management/file_search.py +0 -28
  1077. langchain/tools/file_management/list_dir.py +0 -28
  1078. langchain/tools/file_management/move.py +0 -28
  1079. langchain/tools/file_management/read.py +0 -28
  1080. langchain/tools/file_management/write.py +0 -28
  1081. langchain/tools/github/__init__.py +0 -1
  1082. langchain/tools/github/tool.py +0 -23
  1083. langchain/tools/gitlab/__init__.py +0 -1
  1084. langchain/tools/gitlab/tool.py +0 -23
  1085. langchain/tools/gmail/__init__.py +0 -41
  1086. langchain/tools/gmail/base.py +0 -23
  1087. langchain/tools/gmail/create_draft.py +0 -28
  1088. langchain/tools/gmail/get_message.py +0 -28
  1089. langchain/tools/gmail/get_thread.py +0 -28
  1090. langchain/tools/gmail/search.py +0 -30
  1091. langchain/tools/gmail/send_message.py +0 -28
  1092. langchain/tools/golden_query/__init__.py +0 -25
  1093. langchain/tools/golden_query/tool.py +0 -23
  1094. langchain/tools/google_cloud/__init__.py +0 -25
  1095. langchain/tools/google_cloud/texttospeech.py +0 -23
  1096. langchain/tools/google_finance/__init__.py +0 -27
  1097. langchain/tools/google_finance/tool.py +0 -25
  1098. langchain/tools/google_jobs/__init__.py +0 -25
  1099. langchain/tools/google_jobs/tool.py +0 -23
  1100. langchain/tools/google_lens/__init__.py +0 -25
  1101. langchain/tools/google_lens/tool.py +0 -23
  1102. langchain/tools/google_places/__init__.py +0 -25
  1103. langchain/tools/google_places/tool.py +0 -28
  1104. langchain/tools/google_scholar/__init__.py +0 -27
  1105. langchain/tools/google_scholar/tool.py +0 -25
  1106. langchain/tools/google_search/__init__.py +0 -29
  1107. langchain/tools/google_search/tool.py +0 -27
  1108. langchain/tools/google_serper/__init__.py +0 -30
  1109. langchain/tools/google_serper/tool.py +0 -27
  1110. langchain/tools/google_trends/__init__.py +0 -27
  1111. langchain/tools/google_trends/tool.py +0 -25
  1112. langchain/tools/graphql/__init__.py +0 -1
  1113. langchain/tools/graphql/tool.py +0 -23
  1114. langchain/tools/human/__init__.py +0 -25
  1115. langchain/tools/human/tool.py +0 -23
  1116. langchain/tools/ifttt.py +0 -23
  1117. langchain/tools/interaction/__init__.py +0 -1
  1118. langchain/tools/interaction/tool.py +0 -23
  1119. langchain/tools/jira/__init__.py +0 -1
  1120. langchain/tools/jira/tool.py +0 -42
  1121. langchain/tools/json/__init__.py +0 -1
  1122. langchain/tools/json/tool.py +0 -52
  1123. langchain/tools/memorize/__init__.py +0 -25
  1124. langchain/tools/memorize/tool.py +0 -27
  1125. langchain/tools/merriam_webster/__init__.py +0 -1
  1126. langchain/tools/merriam_webster/tool.py +0 -23
  1127. langchain/tools/metaphor_search/__init__.py +0 -25
  1128. langchain/tools/metaphor_search/tool.py +0 -23
  1129. langchain/tools/multion/__init__.py +0 -33
  1130. langchain/tools/multion/close_session.py +0 -30
  1131. langchain/tools/multion/create_session.py +0 -30
  1132. langchain/tools/multion/update_session.py +0 -30
  1133. langchain/tools/nasa/__init__.py +0 -0
  1134. langchain/tools/nasa/tool.py +0 -23
  1135. langchain/tools/nuclia/__init__.py +0 -23
  1136. langchain/tools/nuclia/tool.py +0 -27
  1137. langchain/tools/office365/__init__.py +0 -41
  1138. langchain/tools/office365/base.py +0 -23
  1139. langchain/tools/office365/create_draft_message.py +0 -32
  1140. langchain/tools/office365/events_search.py +0 -28
  1141. langchain/tools/office365/messages_search.py +0 -28
  1142. langchain/tools/office365/send_event.py +0 -28
  1143. langchain/tools/office365/send_message.py +0 -28
  1144. langchain/tools/openapi/__init__.py +0 -0
  1145. langchain/tools/openapi/utils/__init__.py +0 -0
  1146. langchain/tools/openapi/utils/api_models.py +0 -54
  1147. langchain/tools/openapi/utils/openapi_utils.py +0 -30
  1148. langchain/tools/openweathermap/__init__.py +0 -25
  1149. langchain/tools/openweathermap/tool.py +0 -23
  1150. langchain/tools/playwright/__init__.py +0 -47
  1151. langchain/tools/playwright/base.py +0 -23
  1152. langchain/tools/playwright/click.py +0 -28
  1153. langchain/tools/playwright/current_page.py +0 -23
  1154. langchain/tools/playwright/extract_hyperlinks.py +0 -32
  1155. langchain/tools/playwright/extract_text.py +0 -23
  1156. langchain/tools/playwright/get_elements.py +0 -28
  1157. langchain/tools/playwright/navigate.py +0 -28
  1158. langchain/tools/playwright/navigate_back.py +0 -23
  1159. langchain/tools/plugin.py +0 -32
  1160. langchain/tools/powerbi/__init__.py +0 -1
  1161. langchain/tools/powerbi/tool.py +0 -33
  1162. langchain/tools/pubmed/__init__.py +0 -1
  1163. langchain/tools/pubmed/tool.py +0 -23
  1164. langchain/tools/python/__init__.py +0 -13
  1165. langchain/tools/reddit_search/__init__.py +0 -0
  1166. langchain/tools/reddit_search/tool.py +0 -27
  1167. langchain/tools/render.py +0 -23
  1168. langchain/tools/requests/__init__.py +0 -1
  1169. langchain/tools/requests/tool.py +0 -42
  1170. langchain/tools/retriever.py +0 -11
  1171. langchain/tools/scenexplain/__init__.py +0 -1
  1172. langchain/tools/scenexplain/tool.py +0 -28
  1173. langchain/tools/searchapi/__init__.py +0 -30
  1174. langchain/tools/searchapi/tool.py +0 -27
  1175. langchain/tools/searx_search/__init__.py +0 -0
  1176. langchain/tools/searx_search/tool.py +0 -27
  1177. langchain/tools/shell/__init__.py +0 -25
  1178. langchain/tools/shell/tool.py +0 -28
  1179. langchain/tools/slack/__init__.py +0 -38
  1180. langchain/tools/slack/base.py +0 -23
  1181. langchain/tools/slack/get_channel.py +0 -23
  1182. langchain/tools/slack/get_message.py +0 -28
  1183. langchain/tools/slack/schedule_message.py +0 -28
  1184. langchain/tools/slack/send_message.py +0 -28
  1185. langchain/tools/sleep/__init__.py +0 -1
  1186. langchain/tools/sleep/tool.py +0 -28
  1187. langchain/tools/spark_sql/__init__.py +0 -1
  1188. langchain/tools/spark_sql/tool.py +0 -39
  1189. langchain/tools/sql_database/__init__.py +0 -1
  1190. langchain/tools/sql_database/prompt.py +0 -24
  1191. langchain/tools/sql_database/tool.py +0 -39
  1192. langchain/tools/stackexchange/__init__.py +0 -1
  1193. langchain/tools/stackexchange/tool.py +0 -23
  1194. langchain/tools/steam/__init__.py +0 -1
  1195. langchain/tools/steam/tool.py +0 -23
  1196. langchain/tools/steamship_image_generation/__init__.py +0 -25
  1197. langchain/tools/steamship_image_generation/tool.py +0 -28
  1198. langchain/tools/tavily_search/__init__.py +0 -32
  1199. langchain/tools/tavily_search/tool.py +0 -33
  1200. langchain/tools/vectorstore/__init__.py +0 -1
  1201. langchain/tools/vectorstore/tool.py +0 -30
  1202. langchain/tools/wikipedia/__init__.py +0 -1
  1203. langchain/tools/wikipedia/tool.py +0 -23
  1204. langchain/tools/wolfram_alpha/__init__.py +0 -25
  1205. langchain/tools/wolfram_alpha/tool.py +0 -23
  1206. langchain/tools/yahoo_finance_news.py +0 -23
  1207. langchain/tools/youtube/__init__.py +0 -0
  1208. langchain/tools/youtube/search.py +0 -23
  1209. langchain/tools/zapier/__init__.py +0 -29
  1210. langchain/tools/zapier/tool.py +0 -49
  1211. langchain/utilities/__init__.py +0 -168
  1212. langchain/utilities/alpha_vantage.py +0 -23
  1213. langchain/utilities/anthropic.py +0 -30
  1214. langchain/utilities/apify.py +0 -23
  1215. langchain/utilities/arcee.py +0 -45
  1216. langchain/utilities/arxiv.py +0 -23
  1217. langchain/utilities/asyncio.py +0 -11
  1218. langchain/utilities/awslambda.py +0 -23
  1219. langchain/utilities/bibtex.py +0 -23
  1220. langchain/utilities/bing_search.py +0 -23
  1221. langchain/utilities/brave_search.py +0 -23
  1222. langchain/utilities/clickup.py +0 -45
  1223. langchain/utilities/dalle_image_generator.py +0 -25
  1224. langchain/utilities/dataforseo_api_search.py +0 -25
  1225. langchain/utilities/duckduckgo_search.py +0 -23
  1226. langchain/utilities/github.py +0 -23
  1227. langchain/utilities/gitlab.py +0 -23
  1228. langchain/utilities/golden_query.py +0 -23
  1229. langchain/utilities/google_finance.py +0 -23
  1230. langchain/utilities/google_jobs.py +0 -23
  1231. langchain/utilities/google_lens.py +0 -23
  1232. langchain/utilities/google_places_api.py +0 -23
  1233. langchain/utilities/google_scholar.py +0 -23
  1234. langchain/utilities/google_search.py +0 -23
  1235. langchain/utilities/google_serper.py +0 -23
  1236. langchain/utilities/google_trends.py +0 -23
  1237. langchain/utilities/graphql.py +0 -23
  1238. langchain/utilities/jira.py +0 -23
  1239. langchain/utilities/loading.py +0 -4
  1240. langchain/utilities/max_compute.py +0 -23
  1241. langchain/utilities/merriam_webster.py +0 -23
  1242. langchain/utilities/metaphor_search.py +0 -23
  1243. langchain/utilities/nasa.py +0 -23
  1244. langchain/utilities/opaqueprompts.py +0 -27
  1245. langchain/utilities/openapi.py +0 -28
  1246. langchain/utilities/openweathermap.py +0 -23
  1247. langchain/utilities/outline.py +0 -23
  1248. langchain/utilities/portkey.py +0 -23
  1249. langchain/utilities/powerbi.py +0 -23
  1250. langchain/utilities/pubmed.py +0 -23
  1251. langchain/utilities/python.py +0 -19
  1252. langchain/utilities/reddit_search.py +0 -25
  1253. langchain/utilities/redis.py +0 -33
  1254. langchain/utilities/requests.py +0 -27
  1255. langchain/utilities/scenexplain.py +0 -23
  1256. langchain/utilities/searchapi.py +0 -23
  1257. langchain/utilities/searx_search.py +0 -28
  1258. langchain/utilities/serpapi.py +0 -28
  1259. langchain/utilities/spark_sql.py +0 -23
  1260. langchain/utilities/sql_database.py +0 -28
  1261. langchain/utilities/stackexchange.py +0 -23
  1262. langchain/utilities/steam.py +0 -23
  1263. langchain/utilities/tavily_search.py +0 -25
  1264. langchain/utilities/tensorflow_datasets.py +0 -23
  1265. langchain/utilities/twilio.py +0 -23
  1266. langchain/utilities/vertexai.py +0 -36
  1267. langchain/utilities/wikipedia.py +0 -23
  1268. langchain/utilities/wolfram_alpha.py +0 -23
  1269. langchain/utilities/zapier.py +0 -23
  1270. langchain/utils/__init__.py +0 -77
  1271. langchain/utils/aiter.py +0 -3
  1272. langchain/utils/env.py +0 -3
  1273. langchain/utils/ernie_functions.py +0 -36
  1274. langchain/utils/formatting.py +0 -3
  1275. langchain/utils/html.py +0 -19
  1276. langchain/utils/input.py +0 -8
  1277. langchain/utils/iter.py +0 -3
  1278. langchain/utils/json_schema.py +0 -11
  1279. langchain/utils/loading.py +0 -3
  1280. langchain/utils/math.py +0 -32
  1281. langchain/utils/openai.py +0 -23
  1282. langchain/utils/openai_functions.py +0 -13
  1283. langchain/utils/pydantic.py +0 -3
  1284. langchain/utils/strings.py +0 -3
  1285. langchain/utils/utils.py +0 -21
  1286. langchain/vectorstores/__init__.py +0 -262
  1287. langchain/vectorstores/alibabacloud_opensearch.py +0 -30
  1288. langchain/vectorstores/analyticdb.py +0 -23
  1289. langchain/vectorstores/annoy.py +0 -23
  1290. langchain/vectorstores/astradb.py +0 -23
  1291. langchain/vectorstores/atlas.py +0 -23
  1292. langchain/vectorstores/awadb.py +0 -23
  1293. langchain/vectorstores/azure_cosmos_db.py +0 -28
  1294. langchain/vectorstores/azuresearch.py +0 -30
  1295. langchain/vectorstores/bageldb.py +0 -23
  1296. langchain/vectorstores/baiducloud_vector_search.py +0 -23
  1297. langchain/vectorstores/base.py +0 -3
  1298. langchain/vectorstores/cassandra.py +0 -23
  1299. langchain/vectorstores/chroma.py +0 -23
  1300. langchain/vectorstores/clarifai.py +0 -23
  1301. langchain/vectorstores/clickhouse.py +0 -27
  1302. langchain/vectorstores/dashvector.py +0 -23
  1303. langchain/vectorstores/databricks_vector_search.py +0 -23
  1304. langchain/vectorstores/deeplake.py +0 -23
  1305. langchain/vectorstores/dingo.py +0 -23
  1306. langchain/vectorstores/docarray/__init__.py +0 -30
  1307. langchain/vectorstores/docarray/base.py +0 -23
  1308. langchain/vectorstores/docarray/hnsw.py +0 -23
  1309. langchain/vectorstores/docarray/in_memory.py +0 -23
  1310. langchain/vectorstores/elastic_vector_search.py +0 -27
  1311. langchain/vectorstores/elasticsearch.py +0 -39
  1312. langchain/vectorstores/epsilla.py +0 -23
  1313. langchain/vectorstores/faiss.py +0 -23
  1314. langchain/vectorstores/hippo.py +0 -23
  1315. langchain/vectorstores/hologres.py +0 -23
  1316. langchain/vectorstores/lancedb.py +0 -23
  1317. langchain/vectorstores/llm_rails.py +0 -28
  1318. langchain/vectorstores/marqo.py +0 -23
  1319. langchain/vectorstores/matching_engine.py +0 -23
  1320. langchain/vectorstores/meilisearch.py +0 -23
  1321. langchain/vectorstores/milvus.py +0 -23
  1322. langchain/vectorstores/momento_vector_index.py +0 -23
  1323. langchain/vectorstores/mongodb_atlas.py +0 -23
  1324. langchain/vectorstores/myscale.py +0 -30
  1325. langchain/vectorstores/neo4j_vector.py +0 -28
  1326. langchain/vectorstores/nucliadb.py +0 -23
  1327. langchain/vectorstores/opensearch_vector_search.py +0 -23
  1328. langchain/vectorstores/pgembedding.py +0 -36
  1329. langchain/vectorstores/pgvecto_rs.py +0 -23
  1330. langchain/vectorstores/pgvector.py +0 -28
  1331. langchain/vectorstores/pinecone.py +0 -23
  1332. langchain/vectorstores/qdrant.py +0 -28
  1333. langchain/vectorstores/redis/__init__.py +0 -42
  1334. langchain/vectorstores/redis/base.py +0 -33
  1335. langchain/vectorstores/redis/filters.py +0 -48
  1336. langchain/vectorstores/redis/schema.py +0 -54
  1337. langchain/vectorstores/rocksetdb.py +0 -23
  1338. langchain/vectorstores/scann.py +0 -23
  1339. langchain/vectorstores/semadb.py +0 -23
  1340. langchain/vectorstores/singlestoredb.py +0 -23
  1341. langchain/vectorstores/sklearn.py +0 -42
  1342. langchain/vectorstores/sqlitevss.py +0 -23
  1343. langchain/vectorstores/starrocks.py +0 -28
  1344. langchain/vectorstores/supabase.py +0 -23
  1345. langchain/vectorstores/tair.py +0 -23
  1346. langchain/vectorstores/tencentvectordb.py +0 -33
  1347. langchain/vectorstores/tigris.py +0 -23
  1348. langchain/vectorstores/tiledb.py +0 -23
  1349. langchain/vectorstores/timescalevector.py +0 -23
  1350. langchain/vectorstores/typesense.py +0 -23
  1351. langchain/vectorstores/usearch.py +0 -23
  1352. langchain/vectorstores/utils.py +0 -33
  1353. langchain/vectorstores/vald.py +0 -23
  1354. langchain/vectorstores/vearch.py +0 -23
  1355. langchain/vectorstores/vectara.py +0 -28
  1356. langchain/vectorstores/vespa.py +0 -23
  1357. langchain/vectorstores/weaviate.py +0 -23
  1358. langchain/vectorstores/xata.py +0 -23
  1359. langchain/vectorstores/yellowbrick.py +0 -23
  1360. langchain/vectorstores/zep.py +0 -28
  1361. langchain/vectorstores/zilliz.py +0 -23
  1362. langchain-0.3.27.dist-info/METADATA +0 -144
  1363. langchain-0.3.27.dist-info/RECORD +0 -1342
  1364. langchain-0.3.27.dist-info/entry_points.txt +0 -4
  1365. {langchain-0.3.27.dist-info → langchain-1.0.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,384 @@
1
+ """Tool retry middleware for agents."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ import random
7
+ import time
8
+ from typing import TYPE_CHECKING, Literal
9
+
10
+ from langchain_core.messages import ToolMessage
11
+
12
+ from langchain.agents.middleware.types import AgentMiddleware
13
+
14
+ if TYPE_CHECKING:
15
+ from collections.abc import Awaitable, Callable
16
+
17
+ from langgraph.types import Command
18
+
19
+ from langchain.tools import BaseTool
20
+ from langchain.tools.tool_node import ToolCallRequest
21
+
22
+
23
+ class ToolRetryMiddleware(AgentMiddleware):
24
+ """Middleware that automatically retries failed tool calls with configurable backoff.
25
+
26
+ Supports retrying on specific exceptions and exponential backoff.
27
+
28
+ Examples:
29
+ Basic usage with default settings (2 retries, exponential backoff):
30
+ ```python
31
+ from langchain.agents import create_agent
32
+ from langchain.agents.middleware import ToolRetryMiddleware
33
+
34
+ agent = create_agent(model, tools=[search_tool], middleware=[ToolRetryMiddleware()])
35
+ ```
36
+
37
+ Retry specific exceptions only:
38
+ ```python
39
+ from requests.exceptions import RequestException, Timeout
40
+
41
+ retry = ToolRetryMiddleware(
42
+ max_retries=4,
43
+ retry_on=(RequestException, Timeout),
44
+ backoff_factor=1.5,
45
+ )
46
+ ```
47
+
48
+ Custom exception filtering:
49
+ ```python
50
+ from requests.exceptions import HTTPError
51
+
52
+
53
+ def should_retry(exc: Exception) -> bool:
54
+ # Only retry on 5xx errors
55
+ if isinstance(exc, HTTPError):
56
+ return 500 <= exc.status_code < 600
57
+ return False
58
+
59
+
60
+ retry = ToolRetryMiddleware(
61
+ max_retries=3,
62
+ retry_on=should_retry,
63
+ )
64
+ ```
65
+
66
+ Apply to specific tools with custom error handling:
67
+ ```python
68
+ def format_error(exc: Exception) -> str:
69
+ return "Database temporarily unavailable. Please try again later."
70
+
71
+
72
+ retry = ToolRetryMiddleware(
73
+ max_retries=4,
74
+ tools=["search_database"],
75
+ on_failure=format_error,
76
+ )
77
+ ```
78
+
79
+ Apply to specific tools using BaseTool instances:
80
+ ```python
81
+ from langchain_core.tools import tool
82
+
83
+
84
+ @tool
85
+ def search_database(query: str) -> str:
86
+ '''Search the database.'''
87
+ return results
88
+
89
+
90
+ retry = ToolRetryMiddleware(
91
+ max_retries=4,
92
+ tools=[search_database], # Pass BaseTool instance
93
+ )
94
+ ```
95
+
96
+ Constant backoff (no exponential growth):
97
+ ```python
98
+ retry = ToolRetryMiddleware(
99
+ max_retries=5,
100
+ backoff_factor=0.0, # No exponential growth
101
+ initial_delay=2.0, # Always wait 2 seconds
102
+ )
103
+ ```
104
+
105
+ Raise exception on failure:
106
+ ```python
107
+ retry = ToolRetryMiddleware(
108
+ max_retries=2,
109
+ on_failure="raise", # Re-raise exception instead of returning message
110
+ )
111
+ ```
112
+ """
113
+
114
+ def __init__(
115
+ self,
116
+ *,
117
+ max_retries: int = 2,
118
+ tools: list[BaseTool | str] | None = None,
119
+ retry_on: tuple[type[Exception], ...] | Callable[[Exception], bool] = (Exception,),
120
+ on_failure: (
121
+ Literal["raise", "return_message"] | Callable[[Exception], str]
122
+ ) = "return_message",
123
+ backoff_factor: float = 2.0,
124
+ initial_delay: float = 1.0,
125
+ max_delay: float = 60.0,
126
+ jitter: bool = True,
127
+ ) -> None:
128
+ """Initialize ToolRetryMiddleware.
129
+
130
+ Args:
131
+ max_retries: Maximum number of retry attempts after the initial call.
132
+ Default is 2 retries (3 total attempts). Must be >= 0.
133
+ tools: Optional list of tools or tool names to apply retry logic to.
134
+ Can be a list of `BaseTool` instances or tool name strings.
135
+ If `None`, applies to all tools. Default is `None`.
136
+ retry_on: Either a tuple of exception types to retry on, or a callable
137
+ that takes an exception and returns `True` if it should be retried.
138
+ Default is to retry on all exceptions.
139
+ on_failure: Behavior when all retries are exhausted. Options:
140
+ - `"return_message"` (default): Return a ToolMessage with error details,
141
+ allowing the LLM to handle the failure and potentially recover.
142
+ - `"raise"`: Re-raise the exception, stopping agent execution.
143
+ - Custom callable: Function that takes the exception and returns a string
144
+ for the ToolMessage content, allowing custom error formatting.
145
+ backoff_factor: Multiplier for exponential backoff. Each retry waits
146
+ `initial_delay * (backoff_factor ** retry_number)` seconds.
147
+ Set to 0.0 for constant delay. Default is 2.0.
148
+ initial_delay: Initial delay in seconds before first retry. Default is 1.0.
149
+ max_delay: Maximum delay in seconds between retries. Caps exponential
150
+ backoff growth. Default is 60.0.
151
+ jitter: Whether to add random jitter (±25%) to delay to avoid thundering herd.
152
+ Default is `True`.
153
+
154
+ Raises:
155
+ ValueError: If max_retries < 0 or delays are negative.
156
+ """
157
+ super().__init__()
158
+
159
+ # Validate parameters
160
+ if max_retries < 0:
161
+ msg = "max_retries must be >= 0"
162
+ raise ValueError(msg)
163
+ if initial_delay < 0:
164
+ msg = "initial_delay must be >= 0"
165
+ raise ValueError(msg)
166
+ if max_delay < 0:
167
+ msg = "max_delay must be >= 0"
168
+ raise ValueError(msg)
169
+ if backoff_factor < 0:
170
+ msg = "backoff_factor must be >= 0"
171
+ raise ValueError(msg)
172
+
173
+ self.max_retries = max_retries
174
+
175
+ # Extract tool names from BaseTool instances or strings
176
+ self._tool_filter: list[str] | None
177
+ if tools is not None:
178
+ self._tool_filter = [tool.name if not isinstance(tool, str) else tool for tool in tools]
179
+ else:
180
+ self._tool_filter = None
181
+
182
+ self.tools = [] # No additional tools registered by this middleware
183
+ self.retry_on = retry_on
184
+ self.on_failure = on_failure
185
+ self.backoff_factor = backoff_factor
186
+ self.initial_delay = initial_delay
187
+ self.max_delay = max_delay
188
+ self.jitter = jitter
189
+
190
+ def _should_retry_tool(self, tool_name: str) -> bool:
191
+ """Check if retry logic should apply to this tool.
192
+
193
+ Args:
194
+ tool_name: Name of the tool being called.
195
+
196
+ Returns:
197
+ `True` if retry logic should apply, `False` otherwise.
198
+ """
199
+ if self._tool_filter is None:
200
+ return True
201
+ return tool_name in self._tool_filter
202
+
203
+ def _should_retry_exception(self, exc: Exception) -> bool:
204
+ """Check if the exception should trigger a retry.
205
+
206
+ Args:
207
+ exc: The exception that occurred.
208
+
209
+ Returns:
210
+ `True` if the exception should be retried, `False` otherwise.
211
+ """
212
+ if callable(self.retry_on):
213
+ return self.retry_on(exc)
214
+ return isinstance(exc, self.retry_on)
215
+
216
+ def _calculate_delay(self, retry_number: int) -> float:
217
+ """Calculate delay for the given retry attempt.
218
+
219
+ Args:
220
+ retry_number: The retry attempt number (0-indexed).
221
+
222
+ Returns:
223
+ Delay in seconds before next retry.
224
+ """
225
+ if self.backoff_factor == 0.0:
226
+ delay = self.initial_delay
227
+ else:
228
+ delay = self.initial_delay * (self.backoff_factor**retry_number)
229
+
230
+ # Cap at max_delay
231
+ delay = min(delay, self.max_delay)
232
+
233
+ if self.jitter and delay > 0:
234
+ jitter_amount = delay * 0.25
235
+ delay = delay + random.uniform(-jitter_amount, jitter_amount) # noqa: S311
236
+ # Ensure delay is not negative after jitter
237
+ delay = max(0, delay)
238
+
239
+ return delay
240
+
241
+ def _format_failure_message(self, tool_name: str, exc: Exception, attempts_made: int) -> str:
242
+ """Format the failure message when retries are exhausted.
243
+
244
+ Args:
245
+ tool_name: Name of the tool that failed.
246
+ exc: The exception that caused the failure.
247
+ attempts_made: Number of attempts actually made.
248
+
249
+ Returns:
250
+ Formatted error message string.
251
+ """
252
+ exc_type = type(exc).__name__
253
+ attempt_word = "attempt" if attempts_made == 1 else "attempts"
254
+ return f"Tool '{tool_name}' failed after {attempts_made} {attempt_word} with {exc_type}"
255
+
256
+ def _handle_failure(
257
+ self, tool_name: str, tool_call_id: str | None, exc: Exception, attempts_made: int
258
+ ) -> ToolMessage:
259
+ """Handle failure when all retries are exhausted.
260
+
261
+ Args:
262
+ tool_name: Name of the tool that failed.
263
+ tool_call_id: ID of the tool call (may be None).
264
+ exc: The exception that caused the failure.
265
+ attempts_made: Number of attempts actually made.
266
+
267
+ Returns:
268
+ ToolMessage with error details.
269
+
270
+ Raises:
271
+ Exception: If on_failure is "raise", re-raises the exception.
272
+ """
273
+ if self.on_failure == "raise":
274
+ raise exc
275
+
276
+ if callable(self.on_failure):
277
+ content = self.on_failure(exc)
278
+ else:
279
+ content = self._format_failure_message(tool_name, exc, attempts_made)
280
+
281
+ return ToolMessage(
282
+ content=content,
283
+ tool_call_id=tool_call_id,
284
+ name=tool_name,
285
+ status="error",
286
+ )
287
+
288
+ def wrap_tool_call(
289
+ self,
290
+ request: ToolCallRequest,
291
+ handler: Callable[[ToolCallRequest], ToolMessage | Command],
292
+ ) -> ToolMessage | Command:
293
+ """Intercept tool execution and retry on failure.
294
+
295
+ Args:
296
+ request: Tool call request with call dict, BaseTool, state, and runtime.
297
+ handler: Callable to execute the tool (can be called multiple times).
298
+
299
+ Returns:
300
+ ToolMessage or Command (the final result).
301
+ """
302
+ tool_name = request.tool.name if request.tool else request.tool_call["name"]
303
+
304
+ # Check if retry should apply to this tool
305
+ if not self._should_retry_tool(tool_name):
306
+ return handler(request)
307
+
308
+ tool_call_id = request.tool_call["id"]
309
+
310
+ # Initial attempt + retries
311
+ for attempt in range(self.max_retries + 1):
312
+ try:
313
+ return handler(request)
314
+ except Exception as exc: # noqa: BLE001
315
+ attempts_made = attempt + 1 # attempt is 0-indexed
316
+
317
+ # Check if we should retry this exception
318
+ if not self._should_retry_exception(exc):
319
+ # Exception is not retryable, handle failure immediately
320
+ return self._handle_failure(tool_name, tool_call_id, exc, attempts_made)
321
+
322
+ # Check if we have more retries left
323
+ if attempt < self.max_retries:
324
+ # Calculate and apply backoff delay
325
+ delay = self._calculate_delay(attempt)
326
+ if delay > 0:
327
+ time.sleep(delay)
328
+ # Continue to next retry
329
+ else:
330
+ # No more retries, handle failure
331
+ return self._handle_failure(tool_name, tool_call_id, exc, attempts_made)
332
+
333
+ # Unreachable: loop always returns via handler success or _handle_failure
334
+ msg = "Unexpected: retry loop completed without returning"
335
+ raise RuntimeError(msg)
336
+
337
+ async def awrap_tool_call(
338
+ self,
339
+ request: ToolCallRequest,
340
+ handler: Callable[[ToolCallRequest], Awaitable[ToolMessage | Command]],
341
+ ) -> ToolMessage | Command:
342
+ """Intercept and control async tool execution with retry logic.
343
+
344
+ Args:
345
+ request: Tool call request with call dict, BaseTool, state, and runtime.
346
+ handler: Async callable to execute the tool and returns ToolMessage or Command.
347
+
348
+ Returns:
349
+ ToolMessage or Command (the final result).
350
+ """
351
+ tool_name = request.tool.name if request.tool else request.tool_call["name"]
352
+
353
+ # Check if retry should apply to this tool
354
+ if not self._should_retry_tool(tool_name):
355
+ return await handler(request)
356
+
357
+ tool_call_id = request.tool_call["id"]
358
+
359
+ # Initial attempt + retries
360
+ for attempt in range(self.max_retries + 1):
361
+ try:
362
+ return await handler(request)
363
+ except Exception as exc: # noqa: BLE001
364
+ attempts_made = attempt + 1 # attempt is 0-indexed
365
+
366
+ # Check if we should retry this exception
367
+ if not self._should_retry_exception(exc):
368
+ # Exception is not retryable, handle failure immediately
369
+ return self._handle_failure(tool_name, tool_call_id, exc, attempts_made)
370
+
371
+ # Check if we have more retries left
372
+ if attempt < self.max_retries:
373
+ # Calculate and apply backoff delay
374
+ delay = self._calculate_delay(attempt)
375
+ if delay > 0:
376
+ await asyncio.sleep(delay)
377
+ # Continue to next retry
378
+ else:
379
+ # No more retries, handle failure
380
+ return self._handle_failure(tool_name, tool_call_id, exc, attempts_made)
381
+
382
+ # Unreachable: loop always returns via handler success or _handle_failure
383
+ msg = "Unexpected: retry loop completed without returning"
384
+ raise RuntimeError(msg)
@@ -0,0 +1,310 @@
1
+ """LLM-based tool selector middleware."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import logging
6
+ from dataclasses import dataclass
7
+ from typing import TYPE_CHECKING, Annotated, Literal, Union
8
+
9
+ if TYPE_CHECKING:
10
+ from collections.abc import Awaitable, Callable
11
+
12
+ from langchain.tools import BaseTool
13
+
14
+ from langchain_core.language_models.chat_models import BaseChatModel
15
+ from langchain_core.messages import HumanMessage
16
+ from pydantic import Field, TypeAdapter
17
+ from typing_extensions import TypedDict
18
+
19
+ from langchain.agents.middleware.types import (
20
+ AgentMiddleware,
21
+ ModelCallResult,
22
+ ModelRequest,
23
+ ModelResponse,
24
+ )
25
+ from langchain.chat_models.base import init_chat_model
26
+
27
+ logger = logging.getLogger(__name__)
28
+
29
+ DEFAULT_SYSTEM_PROMPT = (
30
+ "Your goal is to select the most relevant tools for answering the user's query."
31
+ )
32
+
33
+
34
+ @dataclass
35
+ class _SelectionRequest:
36
+ """Prepared inputs for tool selection."""
37
+
38
+ available_tools: list[BaseTool]
39
+ system_message: str
40
+ last_user_message: HumanMessage
41
+ model: BaseChatModel
42
+ valid_tool_names: list[str]
43
+
44
+
45
+ def _create_tool_selection_response(tools: list[BaseTool]) -> TypeAdapter:
46
+ """Create a structured output schema for tool selection.
47
+
48
+ Args:
49
+ tools: Available tools to include in the schema.
50
+
51
+ Returns:
52
+ TypeAdapter for a schema where each tool name is a Literal with its description.
53
+ """
54
+ if not tools:
55
+ msg = "Invalid usage: tools must be non-empty"
56
+ raise AssertionError(msg)
57
+
58
+ # Create a Union of Annotated Literal types for each tool name with description
59
+ # Example: Union[Annotated[Literal["tool1"], Field(description="...")], ...] noqa: ERA001
60
+ literals = [
61
+ Annotated[Literal[tool.name], Field(description=tool.description)] for tool in tools
62
+ ]
63
+ selected_tool_type = Union[tuple(literals)] # type: ignore[valid-type] # noqa: UP007
64
+
65
+ description = "Tools to use. Place the most relevant tools first."
66
+
67
+ class ToolSelectionResponse(TypedDict):
68
+ """Use to select relevant tools."""
69
+
70
+ tools: Annotated[list[selected_tool_type], Field(description=description)] # type: ignore[valid-type]
71
+
72
+ return TypeAdapter(ToolSelectionResponse)
73
+
74
+
75
+ def _render_tool_list(tools: list[BaseTool]) -> str:
76
+ """Format tools as markdown list.
77
+
78
+ Args:
79
+ tools: Tools to format.
80
+
81
+ Returns:
82
+ Markdown string with each tool on a new line.
83
+ """
84
+ return "\n".join(f"- {tool.name}: {tool.description}" for tool in tools)
85
+
86
+
87
+ class LLMToolSelectorMiddleware(AgentMiddleware):
88
+ """Uses an LLM to select relevant tools before calling the main model.
89
+
90
+ When an agent has many tools available, this middleware filters them down
91
+ to only the most relevant ones for the user's query. This reduces token usage
92
+ and helps the main model focus on the right tools.
93
+
94
+ Examples:
95
+ Limit to 3 tools:
96
+ ```python
97
+ from langchain.agents.middleware import LLMToolSelectorMiddleware
98
+
99
+ middleware = LLMToolSelectorMiddleware(max_tools=3)
100
+
101
+ agent = create_agent(
102
+ model="openai:gpt-4o",
103
+ tools=[tool1, tool2, tool3, tool4, tool5],
104
+ middleware=[middleware],
105
+ )
106
+ ```
107
+
108
+ Use a smaller model for selection:
109
+ ```python
110
+ middleware = LLMToolSelectorMiddleware(model="openai:gpt-4o-mini", max_tools=2)
111
+ ```
112
+ """
113
+
114
+ def __init__(
115
+ self,
116
+ *,
117
+ model: str | BaseChatModel | None = None,
118
+ system_prompt: str = DEFAULT_SYSTEM_PROMPT,
119
+ max_tools: int | None = None,
120
+ always_include: list[str] | None = None,
121
+ ) -> None:
122
+ """Initialize the tool selector.
123
+
124
+ Args:
125
+ model: Model to use for selection. If not provided, uses the agent's main model.
126
+ Can be a model identifier string or BaseChatModel instance.
127
+ system_prompt: Instructions for the selection model.
128
+ max_tools: Maximum number of tools to select. If the model selects more,
129
+ only the first max_tools will be used. No limit if not specified.
130
+ always_include: Tool names to always include regardless of selection.
131
+ These do not count against the max_tools limit.
132
+ """
133
+ super().__init__()
134
+ self.system_prompt = system_prompt
135
+ self.max_tools = max_tools
136
+ self.always_include = always_include or []
137
+
138
+ if isinstance(model, (BaseChatModel, type(None))):
139
+ self.model: BaseChatModel | None = model
140
+ else:
141
+ self.model = init_chat_model(model)
142
+
143
+ def _prepare_selection_request(self, request: ModelRequest) -> _SelectionRequest | None:
144
+ """Prepare inputs for tool selection.
145
+
146
+ Returns:
147
+ SelectionRequest with prepared inputs, or None if no selection is needed.
148
+ """
149
+ # If no tools available, return None
150
+ if not request.tools or len(request.tools) == 0:
151
+ return None
152
+
153
+ # Filter to only BaseTool instances (exclude provider-specific tool dicts)
154
+ base_tools = [tool for tool in request.tools if not isinstance(tool, dict)]
155
+
156
+ # Validate that always_include tools exist
157
+ if self.always_include:
158
+ available_tool_names = {tool.name for tool in base_tools}
159
+ missing_tools = [
160
+ name for name in self.always_include if name not in available_tool_names
161
+ ]
162
+ if missing_tools:
163
+ msg = (
164
+ f"Tools in always_include not found in request: {missing_tools}. "
165
+ f"Available tools: {sorted(available_tool_names)}"
166
+ )
167
+ raise ValueError(msg)
168
+
169
+ # Separate tools that are always included from those available for selection
170
+ available_tools = [tool for tool in base_tools if tool.name not in self.always_include]
171
+
172
+ # If no tools available for selection, return None
173
+ if not available_tools:
174
+ return None
175
+
176
+ system_message = self.system_prompt
177
+ # If there's a max_tools limit, append instructions to the system prompt
178
+ if self.max_tools is not None:
179
+ system_message += (
180
+ f"\nIMPORTANT: List the tool names in order of relevance, "
181
+ f"with the most relevant first. "
182
+ f"If you exceed the maximum number of tools, "
183
+ f"only the first {self.max_tools} will be used."
184
+ )
185
+
186
+ # Get the last user message from the conversation history
187
+ last_user_message: HumanMessage
188
+ for message in reversed(request.messages):
189
+ if isinstance(message, HumanMessage):
190
+ last_user_message = message
191
+ break
192
+ else:
193
+ msg = "No user message found in request messages"
194
+ raise AssertionError(msg)
195
+
196
+ model = self.model or request.model
197
+ valid_tool_names = [tool.name for tool in available_tools]
198
+
199
+ return _SelectionRequest(
200
+ available_tools=available_tools,
201
+ system_message=system_message,
202
+ last_user_message=last_user_message,
203
+ model=model,
204
+ valid_tool_names=valid_tool_names,
205
+ )
206
+
207
+ def _process_selection_response(
208
+ self,
209
+ response: dict,
210
+ available_tools: list[BaseTool],
211
+ valid_tool_names: list[str],
212
+ request: ModelRequest,
213
+ ) -> ModelRequest:
214
+ """Process the selection response and return filtered ModelRequest."""
215
+ selected_tool_names: list[str] = []
216
+ invalid_tool_selections = []
217
+
218
+ for tool_name in response["tools"]:
219
+ if tool_name not in valid_tool_names:
220
+ invalid_tool_selections.append(tool_name)
221
+ continue
222
+
223
+ # Only add if not already selected and within max_tools limit
224
+ if tool_name not in selected_tool_names and (
225
+ self.max_tools is None or len(selected_tool_names) < self.max_tools
226
+ ):
227
+ selected_tool_names.append(tool_name)
228
+
229
+ if invalid_tool_selections:
230
+ msg = f"Model selected invalid tools: {invalid_tool_selections}"
231
+ raise ValueError(msg)
232
+
233
+ # Filter tools based on selection and append always-included tools
234
+ selected_tools: list[BaseTool] = [
235
+ tool for tool in available_tools if tool.name in selected_tool_names
236
+ ]
237
+ always_included_tools: list[BaseTool] = [
238
+ tool
239
+ for tool in request.tools
240
+ if not isinstance(tool, dict) and tool.name in self.always_include
241
+ ]
242
+ selected_tools.extend(always_included_tools)
243
+
244
+ # Also preserve any provider-specific tool dicts from the original request
245
+ provider_tools = [tool for tool in request.tools if isinstance(tool, dict)]
246
+
247
+ request.tools = [*selected_tools, *provider_tools]
248
+ return request
249
+
250
+ def wrap_model_call(
251
+ self,
252
+ request: ModelRequest,
253
+ handler: Callable[[ModelRequest], ModelResponse],
254
+ ) -> ModelCallResult:
255
+ """Filter tools based on LLM selection before invoking the model via handler."""
256
+ selection_request = self._prepare_selection_request(request)
257
+ if selection_request is None:
258
+ return handler(request)
259
+
260
+ # Create dynamic response model with Literal enum of available tool names
261
+ type_adapter = _create_tool_selection_response(selection_request.available_tools)
262
+ schema = type_adapter.json_schema()
263
+ structured_model = selection_request.model.with_structured_output(schema)
264
+
265
+ response = structured_model.invoke(
266
+ [
267
+ {"role": "system", "content": selection_request.system_message},
268
+ selection_request.last_user_message,
269
+ ]
270
+ )
271
+
272
+ # Response should be a dict since we're passing a schema (not a Pydantic model class)
273
+ if not isinstance(response, dict):
274
+ msg = f"Expected dict response, got {type(response)}"
275
+ raise AssertionError(msg)
276
+ modified_request = self._process_selection_response(
277
+ response, selection_request.available_tools, selection_request.valid_tool_names, request
278
+ )
279
+ return handler(modified_request)
280
+
281
+ async def awrap_model_call(
282
+ self,
283
+ request: ModelRequest,
284
+ handler: Callable[[ModelRequest], Awaitable[ModelResponse]],
285
+ ) -> ModelCallResult:
286
+ """Filter tools based on LLM selection before invoking the model via handler."""
287
+ selection_request = self._prepare_selection_request(request)
288
+ if selection_request is None:
289
+ return await handler(request)
290
+
291
+ # Create dynamic response model with Literal enum of available tool names
292
+ type_adapter = _create_tool_selection_response(selection_request.available_tools)
293
+ schema = type_adapter.json_schema()
294
+ structured_model = selection_request.model.with_structured_output(schema)
295
+
296
+ response = await structured_model.ainvoke(
297
+ [
298
+ {"role": "system", "content": selection_request.system_message},
299
+ selection_request.last_user_message,
300
+ ]
301
+ )
302
+
303
+ # Response should be a dict since we're passing a schema (not a Pydantic model class)
304
+ if not isinstance(response, dict):
305
+ msg = f"Expected dict response, got {type(response)}"
306
+ raise AssertionError(msg)
307
+ modified_request = self._process_selection_response(
308
+ response, selection_request.available_tools, selection_request.valid_tool_names, request
309
+ )
310
+ return await handler(modified_request)