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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. langchain/__init__.py +110 -96
  2. langchain/_api/__init__.py +2 -2
  3. langchain/_api/deprecation.py +3 -3
  4. langchain/_api/module_import.py +51 -46
  5. langchain/_api/path.py +1 -1
  6. langchain/adapters/openai.py +8 -8
  7. langchain/agents/__init__.py +15 -12
  8. langchain/agents/agent.py +174 -151
  9. langchain/agents/agent_iterator.py +50 -26
  10. langchain/agents/agent_toolkits/__init__.py +7 -6
  11. langchain/agents/agent_toolkits/ainetwork/toolkit.py +1 -1
  12. langchain/agents/agent_toolkits/amadeus/toolkit.py +1 -1
  13. langchain/agents/agent_toolkits/azure_cognitive_services.py +1 -1
  14. langchain/agents/agent_toolkits/clickup/toolkit.py +1 -1
  15. langchain/agents/agent_toolkits/conversational_retrieval/openai_functions.py +6 -4
  16. langchain/agents/agent_toolkits/csv/__init__.py +4 -2
  17. langchain/agents/agent_toolkits/file_management/__init__.py +1 -1
  18. langchain/agents/agent_toolkits/file_management/toolkit.py +1 -1
  19. langchain/agents/agent_toolkits/github/toolkit.py +9 -9
  20. langchain/agents/agent_toolkits/gitlab/toolkit.py +1 -1
  21. langchain/agents/agent_toolkits/json/base.py +1 -1
  22. langchain/agents/agent_toolkits/multion/toolkit.py +1 -1
  23. langchain/agents/agent_toolkits/office365/toolkit.py +1 -1
  24. langchain/agents/agent_toolkits/openapi/base.py +1 -1
  25. langchain/agents/agent_toolkits/openapi/planner.py +2 -2
  26. langchain/agents/agent_toolkits/openapi/planner_prompt.py +10 -10
  27. langchain/agents/agent_toolkits/openapi/prompt.py +1 -1
  28. langchain/agents/agent_toolkits/openapi/toolkit.py +1 -1
  29. langchain/agents/agent_toolkits/pandas/__init__.py +4 -2
  30. langchain/agents/agent_toolkits/playwright/__init__.py +1 -1
  31. langchain/agents/agent_toolkits/playwright/toolkit.py +1 -1
  32. langchain/agents/agent_toolkits/powerbi/base.py +1 -1
  33. langchain/agents/agent_toolkits/powerbi/chat_base.py +1 -1
  34. langchain/agents/agent_toolkits/powerbi/prompt.py +2 -2
  35. langchain/agents/agent_toolkits/powerbi/toolkit.py +1 -1
  36. langchain/agents/agent_toolkits/python/__init__.py +4 -2
  37. langchain/agents/agent_toolkits/spark/__init__.py +4 -2
  38. langchain/agents/agent_toolkits/spark_sql/base.py +1 -1
  39. langchain/agents/agent_toolkits/spark_sql/toolkit.py +1 -1
  40. langchain/agents/agent_toolkits/sql/prompt.py +1 -1
  41. langchain/agents/agent_toolkits/sql/toolkit.py +1 -1
  42. langchain/agents/agent_toolkits/vectorstore/base.py +4 -2
  43. langchain/agents/agent_toolkits/vectorstore/prompt.py +2 -4
  44. langchain/agents/agent_toolkits/vectorstore/toolkit.py +12 -11
  45. langchain/agents/agent_toolkits/xorbits/__init__.py +4 -2
  46. langchain/agents/agent_toolkits/zapier/toolkit.py +1 -1
  47. langchain/agents/agent_types.py +6 -6
  48. langchain/agents/chat/base.py +8 -12
  49. langchain/agents/chat/output_parser.py +9 -6
  50. langchain/agents/chat/prompt.py +3 -4
  51. langchain/agents/conversational/base.py +11 -5
  52. langchain/agents/conversational/output_parser.py +4 -2
  53. langchain/agents/conversational/prompt.py +2 -3
  54. langchain/agents/conversational_chat/base.py +9 -5
  55. langchain/agents/conversational_chat/output_parser.py +9 -11
  56. langchain/agents/conversational_chat/prompt.py +5 -6
  57. langchain/agents/format_scratchpad/__init__.py +3 -3
  58. langchain/agents/format_scratchpad/log_to_messages.py +1 -1
  59. langchain/agents/format_scratchpad/openai_functions.py +8 -6
  60. langchain/agents/format_scratchpad/tools.py +5 -3
  61. langchain/agents/format_scratchpad/xml.py +33 -2
  62. langchain/agents/initialize.py +17 -9
  63. langchain/agents/json_chat/base.py +19 -18
  64. langchain/agents/json_chat/prompt.py +2 -3
  65. langchain/agents/load_tools.py +2 -1
  66. langchain/agents/loading.py +28 -18
  67. langchain/agents/mrkl/base.py +11 -4
  68. langchain/agents/mrkl/output_parser.py +17 -13
  69. langchain/agents/mrkl/prompt.py +1 -2
  70. langchain/agents/openai_assistant/base.py +81 -71
  71. langchain/agents/openai_functions_agent/agent_token_buffer_memory.py +2 -0
  72. langchain/agents/openai_functions_agent/base.py +47 -37
  73. langchain/agents/openai_functions_multi_agent/base.py +40 -27
  74. langchain/agents/openai_tools/base.py +9 -8
  75. langchain/agents/output_parsers/__init__.py +3 -3
  76. langchain/agents/output_parsers/json.py +8 -6
  77. langchain/agents/output_parsers/openai_functions.py +24 -9
  78. langchain/agents/output_parsers/openai_tools.py +16 -4
  79. langchain/agents/output_parsers/react_json_single_input.py +13 -5
  80. langchain/agents/output_parsers/react_single_input.py +18 -11
  81. langchain/agents/output_parsers/self_ask.py +5 -2
  82. langchain/agents/output_parsers/tools.py +32 -13
  83. langchain/agents/output_parsers/xml.py +102 -28
  84. langchain/agents/react/agent.py +5 -4
  85. langchain/agents/react/base.py +26 -17
  86. langchain/agents/react/output_parser.py +7 -6
  87. langchain/agents/react/textworld_prompt.py +0 -1
  88. langchain/agents/react/wiki_prompt.py +14 -15
  89. langchain/agents/schema.py +5 -2
  90. langchain/agents/self_ask_with_search/base.py +23 -15
  91. langchain/agents/self_ask_with_search/prompt.py +0 -1
  92. langchain/agents/structured_chat/base.py +19 -11
  93. langchain/agents/structured_chat/output_parser.py +29 -18
  94. langchain/agents/structured_chat/prompt.py +3 -4
  95. langchain/agents/tool_calling_agent/base.py +8 -6
  96. langchain/agents/tools.py +5 -2
  97. langchain/agents/utils.py +2 -3
  98. langchain/agents/xml/base.py +12 -6
  99. langchain/agents/xml/prompt.py +1 -2
  100. langchain/cache.py +12 -12
  101. langchain/callbacks/__init__.py +11 -11
  102. langchain/callbacks/aim_callback.py +2 -2
  103. langchain/callbacks/argilla_callback.py +1 -1
  104. langchain/callbacks/arize_callback.py +1 -1
  105. langchain/callbacks/arthur_callback.py +1 -1
  106. langchain/callbacks/base.py +7 -7
  107. langchain/callbacks/clearml_callback.py +1 -1
  108. langchain/callbacks/comet_ml_callback.py +1 -1
  109. langchain/callbacks/confident_callback.py +1 -1
  110. langchain/callbacks/context_callback.py +1 -1
  111. langchain/callbacks/flyte_callback.py +1 -1
  112. langchain/callbacks/human.py +2 -2
  113. langchain/callbacks/infino_callback.py +1 -1
  114. langchain/callbacks/labelstudio_callback.py +1 -1
  115. langchain/callbacks/llmonitor_callback.py +1 -1
  116. langchain/callbacks/manager.py +5 -5
  117. langchain/callbacks/mlflow_callback.py +2 -2
  118. langchain/callbacks/openai_info.py +1 -1
  119. langchain/callbacks/promptlayer_callback.py +1 -1
  120. langchain/callbacks/sagemaker_callback.py +1 -1
  121. langchain/callbacks/streaming_aiter.py +17 -3
  122. langchain/callbacks/streaming_aiter_final_only.py +16 -5
  123. langchain/callbacks/streaming_stdout_final_only.py +10 -3
  124. langchain/callbacks/streamlit/__init__.py +3 -2
  125. langchain/callbacks/streamlit/mutable_expander.py +1 -1
  126. langchain/callbacks/streamlit/streamlit_callback_handler.py +3 -3
  127. langchain/callbacks/tracers/__init__.py +1 -1
  128. langchain/callbacks/tracers/comet.py +1 -1
  129. langchain/callbacks/tracers/evaluation.py +1 -1
  130. langchain/callbacks/tracers/log_stream.py +1 -1
  131. langchain/callbacks/tracers/logging.py +12 -1
  132. langchain/callbacks/tracers/stdout.py +1 -1
  133. langchain/callbacks/trubrics_callback.py +1 -1
  134. langchain/callbacks/utils.py +4 -4
  135. langchain/callbacks/wandb_callback.py +1 -1
  136. langchain/callbacks/whylabs_callback.py +1 -1
  137. langchain/chains/api/base.py +41 -23
  138. langchain/chains/api/news_docs.py +1 -2
  139. langchain/chains/api/open_meteo_docs.py +1 -2
  140. langchain/chains/api/openapi/requests_chain.py +1 -1
  141. langchain/chains/api/openapi/response_chain.py +1 -1
  142. langchain/chains/api/podcast_docs.py +1 -2
  143. langchain/chains/api/prompt.py +1 -2
  144. langchain/chains/api/tmdb_docs.py +1 -2
  145. langchain/chains/base.py +96 -56
  146. langchain/chains/chat_vector_db/prompts.py +2 -3
  147. langchain/chains/combine_documents/__init__.py +1 -1
  148. langchain/chains/combine_documents/base.py +30 -11
  149. langchain/chains/combine_documents/map_reduce.py +41 -30
  150. langchain/chains/combine_documents/map_rerank.py +39 -24
  151. langchain/chains/combine_documents/reduce.py +48 -26
  152. langchain/chains/combine_documents/refine.py +27 -17
  153. langchain/chains/combine_documents/stuff.py +24 -13
  154. langchain/chains/constitutional_ai/base.py +11 -4
  155. langchain/chains/constitutional_ai/principles.py +22 -25
  156. langchain/chains/constitutional_ai/prompts.py +25 -28
  157. langchain/chains/conversation/base.py +9 -4
  158. langchain/chains/conversation/memory.py +5 -5
  159. langchain/chains/conversation/prompt.py +5 -5
  160. langchain/chains/conversational_retrieval/base.py +108 -79
  161. langchain/chains/conversational_retrieval/prompts.py +2 -3
  162. langchain/chains/elasticsearch_database/base.py +10 -10
  163. langchain/chains/elasticsearch_database/prompts.py +2 -3
  164. langchain/chains/ernie_functions/__init__.py +2 -2
  165. langchain/chains/example_generator.py +3 -1
  166. langchain/chains/flare/base.py +28 -12
  167. langchain/chains/flare/prompts.py +2 -0
  168. langchain/chains/graph_qa/cypher.py +2 -2
  169. langchain/chains/graph_qa/falkordb.py +1 -1
  170. langchain/chains/graph_qa/gremlin.py +1 -1
  171. langchain/chains/graph_qa/neptune_sparql.py +1 -1
  172. langchain/chains/graph_qa/prompts.py +2 -2
  173. langchain/chains/history_aware_retriever.py +2 -1
  174. langchain/chains/hyde/base.py +6 -5
  175. langchain/chains/hyde/prompts.py +5 -6
  176. langchain/chains/llm.py +82 -61
  177. langchain/chains/llm_bash/__init__.py +3 -2
  178. langchain/chains/llm_checker/base.py +19 -6
  179. langchain/chains/llm_checker/prompt.py +3 -4
  180. langchain/chains/llm_math/base.py +25 -10
  181. langchain/chains/llm_math/prompt.py +1 -2
  182. langchain/chains/llm_summarization_checker/base.py +22 -7
  183. langchain/chains/llm_symbolic_math/__init__.py +3 -2
  184. langchain/chains/loading.py +155 -97
  185. langchain/chains/mapreduce.py +4 -3
  186. langchain/chains/moderation.py +11 -9
  187. langchain/chains/natbot/base.py +11 -9
  188. langchain/chains/natbot/crawler.py +102 -76
  189. langchain/chains/natbot/prompt.py +2 -3
  190. langchain/chains/openai_functions/__init__.py +7 -7
  191. langchain/chains/openai_functions/base.py +15 -10
  192. langchain/chains/openai_functions/citation_fuzzy_match.py +21 -11
  193. langchain/chains/openai_functions/extraction.py +19 -19
  194. langchain/chains/openai_functions/openapi.py +39 -35
  195. langchain/chains/openai_functions/qa_with_structure.py +22 -15
  196. langchain/chains/openai_functions/tagging.py +4 -4
  197. langchain/chains/openai_tools/extraction.py +7 -8
  198. langchain/chains/qa_generation/base.py +8 -3
  199. langchain/chains/qa_generation/prompt.py +5 -5
  200. langchain/chains/qa_with_sources/base.py +17 -6
  201. langchain/chains/qa_with_sources/loading.py +16 -8
  202. langchain/chains/qa_with_sources/map_reduce_prompt.py +8 -9
  203. langchain/chains/qa_with_sources/refine_prompts.py +0 -1
  204. langchain/chains/qa_with_sources/retrieval.py +15 -6
  205. langchain/chains/qa_with_sources/stuff_prompt.py +6 -7
  206. langchain/chains/qa_with_sources/vector_db.py +21 -8
  207. langchain/chains/query_constructor/base.py +37 -34
  208. langchain/chains/query_constructor/ir.py +4 -4
  209. langchain/chains/query_constructor/parser.py +101 -34
  210. langchain/chains/query_constructor/prompt.py +5 -6
  211. langchain/chains/question_answering/chain.py +21 -10
  212. langchain/chains/question_answering/map_reduce_prompt.py +14 -14
  213. langchain/chains/question_answering/map_rerank_prompt.py +3 -3
  214. langchain/chains/question_answering/refine_prompts.py +2 -5
  215. langchain/chains/question_answering/stuff_prompt.py +5 -5
  216. langchain/chains/retrieval.py +1 -3
  217. langchain/chains/retrieval_qa/base.py +38 -27
  218. langchain/chains/retrieval_qa/prompt.py +1 -2
  219. langchain/chains/router/__init__.py +3 -3
  220. langchain/chains/router/base.py +38 -22
  221. langchain/chains/router/embedding_router.py +15 -8
  222. langchain/chains/router/llm_router.py +23 -20
  223. langchain/chains/router/multi_prompt.py +5 -2
  224. langchain/chains/router/multi_retrieval_qa.py +28 -5
  225. langchain/chains/sequential.py +30 -18
  226. langchain/chains/sql_database/prompt.py +14 -16
  227. langchain/chains/sql_database/query.py +7 -5
  228. langchain/chains/structured_output/__init__.py +1 -1
  229. langchain/chains/structured_output/base.py +77 -67
  230. langchain/chains/summarize/chain.py +11 -5
  231. langchain/chains/summarize/map_reduce_prompt.py +0 -1
  232. langchain/chains/summarize/stuff_prompt.py +0 -1
  233. langchain/chains/transform.py +9 -6
  234. langchain/chat_loaders/facebook_messenger.py +1 -1
  235. langchain/chat_loaders/langsmith.py +1 -1
  236. langchain/chat_loaders/utils.py +3 -3
  237. langchain/chat_models/__init__.py +20 -19
  238. langchain/chat_models/anthropic.py +1 -1
  239. langchain/chat_models/azureml_endpoint.py +1 -1
  240. langchain/chat_models/baidu_qianfan_endpoint.py +1 -1
  241. langchain/chat_models/base.py +213 -139
  242. langchain/chat_models/bedrock.py +1 -1
  243. langchain/chat_models/fake.py +1 -1
  244. langchain/chat_models/meta.py +1 -1
  245. langchain/chat_models/pai_eas_endpoint.py +1 -1
  246. langchain/chat_models/promptlayer_openai.py +1 -1
  247. langchain/chat_models/volcengine_maas.py +1 -1
  248. langchain/docstore/base.py +1 -1
  249. langchain/document_loaders/__init__.py +9 -9
  250. langchain/document_loaders/airbyte.py +3 -3
  251. langchain/document_loaders/assemblyai.py +1 -1
  252. langchain/document_loaders/azure_blob_storage_container.py +1 -1
  253. langchain/document_loaders/azure_blob_storage_file.py +1 -1
  254. langchain/document_loaders/baiducloud_bos_file.py +1 -1
  255. langchain/document_loaders/base.py +1 -1
  256. langchain/document_loaders/blob_loaders/__init__.py +1 -1
  257. langchain/document_loaders/blob_loaders/schema.py +1 -4
  258. langchain/document_loaders/blockchain.py +1 -1
  259. langchain/document_loaders/chatgpt.py +1 -1
  260. langchain/document_loaders/college_confidential.py +1 -1
  261. langchain/document_loaders/confluence.py +1 -1
  262. langchain/document_loaders/email.py +1 -1
  263. langchain/document_loaders/facebook_chat.py +1 -1
  264. langchain/document_loaders/markdown.py +1 -1
  265. langchain/document_loaders/notebook.py +1 -1
  266. langchain/document_loaders/org_mode.py +1 -1
  267. langchain/document_loaders/parsers/__init__.py +1 -1
  268. langchain/document_loaders/parsers/docai.py +1 -1
  269. langchain/document_loaders/parsers/generic.py +1 -1
  270. langchain/document_loaders/parsers/html/__init__.py +1 -1
  271. langchain/document_loaders/parsers/html/bs4.py +1 -1
  272. langchain/document_loaders/parsers/language/cobol.py +1 -1
  273. langchain/document_loaders/parsers/language/python.py +1 -1
  274. langchain/document_loaders/parsers/msword.py +1 -1
  275. langchain/document_loaders/parsers/pdf.py +5 -5
  276. langchain/document_loaders/parsers/registry.py +1 -1
  277. langchain/document_loaders/pdf.py +8 -8
  278. langchain/document_loaders/powerpoint.py +1 -1
  279. langchain/document_loaders/pyspark_dataframe.py +1 -1
  280. langchain/document_loaders/telegram.py +2 -2
  281. langchain/document_loaders/tencent_cos_directory.py +1 -1
  282. langchain/document_loaders/unstructured.py +5 -5
  283. langchain/document_loaders/url_playwright.py +1 -1
  284. langchain/document_loaders/whatsapp_chat.py +1 -1
  285. langchain/document_loaders/youtube.py +2 -2
  286. langchain/document_transformers/__init__.py +3 -3
  287. langchain/document_transformers/beautiful_soup_transformer.py +1 -1
  288. langchain/document_transformers/doctran_text_extract.py +1 -1
  289. langchain/document_transformers/doctran_text_qa.py +1 -1
  290. langchain/document_transformers/doctran_text_translate.py +1 -1
  291. langchain/document_transformers/embeddings_redundant_filter.py +3 -3
  292. langchain/document_transformers/google_translate.py +1 -1
  293. langchain/document_transformers/html2text.py +1 -1
  294. langchain/document_transformers/nuclia_text_transform.py +1 -1
  295. langchain/embeddings/__init__.py +5 -5
  296. langchain/embeddings/base.py +35 -24
  297. langchain/embeddings/cache.py +37 -32
  298. langchain/embeddings/fake.py +1 -1
  299. langchain/embeddings/huggingface.py +2 -2
  300. langchain/evaluation/__init__.py +22 -22
  301. langchain/evaluation/agents/trajectory_eval_chain.py +26 -25
  302. langchain/evaluation/agents/trajectory_eval_prompt.py +6 -9
  303. langchain/evaluation/comparison/__init__.py +1 -1
  304. langchain/evaluation/comparison/eval_chain.py +21 -13
  305. langchain/evaluation/comparison/prompt.py +1 -2
  306. langchain/evaluation/criteria/__init__.py +1 -1
  307. langchain/evaluation/criteria/eval_chain.py +23 -11
  308. langchain/evaluation/criteria/prompt.py +2 -3
  309. langchain/evaluation/embedding_distance/base.py +34 -20
  310. langchain/evaluation/exact_match/base.py +14 -1
  311. langchain/evaluation/loading.py +16 -11
  312. langchain/evaluation/parsing/base.py +20 -4
  313. langchain/evaluation/parsing/json_distance.py +24 -10
  314. langchain/evaluation/parsing/json_schema.py +13 -12
  315. langchain/evaluation/qa/__init__.py +1 -1
  316. langchain/evaluation/qa/eval_chain.py +20 -5
  317. langchain/evaluation/qa/eval_prompt.py +7 -8
  318. langchain/evaluation/qa/generate_chain.py +4 -1
  319. langchain/evaluation/qa/generate_prompt.py +2 -4
  320. langchain/evaluation/regex_match/base.py +9 -1
  321. langchain/evaluation/schema.py +38 -30
  322. langchain/evaluation/scoring/__init__.py +1 -1
  323. langchain/evaluation/scoring/eval_chain.py +23 -15
  324. langchain/evaluation/scoring/prompt.py +0 -1
  325. langchain/evaluation/string_distance/base.py +20 -9
  326. langchain/globals.py +12 -11
  327. langchain/graphs/__init__.py +6 -6
  328. langchain/graphs/graph_document.py +1 -1
  329. langchain/graphs/networkx_graph.py +2 -2
  330. langchain/hub.py +9 -11
  331. langchain/indexes/__init__.py +3 -3
  332. langchain/indexes/_sql_record_manager.py +63 -46
  333. langchain/indexes/prompts/entity_extraction.py +1 -2
  334. langchain/indexes/prompts/entity_summarization.py +1 -2
  335. langchain/indexes/prompts/knowledge_triplet_extraction.py +1 -3
  336. langchain/indexes/vectorstore.py +35 -19
  337. langchain/llms/__init__.py +13 -13
  338. langchain/llms/ai21.py +1 -1
  339. langchain/llms/azureml_endpoint.py +4 -4
  340. langchain/llms/base.py +15 -7
  341. langchain/llms/bedrock.py +1 -1
  342. langchain/llms/cloudflare_workersai.py +1 -1
  343. langchain/llms/gradient_ai.py +1 -1
  344. langchain/llms/loading.py +1 -1
  345. langchain/llms/openai.py +1 -1
  346. langchain/llms/sagemaker_endpoint.py +1 -1
  347. langchain/load/dump.py +1 -1
  348. langchain/load/load.py +1 -1
  349. langchain/load/serializable.py +3 -3
  350. langchain/memory/__init__.py +3 -3
  351. langchain/memory/buffer.py +14 -7
  352. langchain/memory/buffer_window.py +2 -0
  353. langchain/memory/chat_memory.py +14 -8
  354. langchain/memory/chat_message_histories/__init__.py +1 -1
  355. langchain/memory/chat_message_histories/astradb.py +1 -1
  356. langchain/memory/chat_message_histories/cassandra.py +1 -1
  357. langchain/memory/chat_message_histories/cosmos_db.py +1 -1
  358. langchain/memory/chat_message_histories/dynamodb.py +1 -1
  359. langchain/memory/chat_message_histories/elasticsearch.py +1 -1
  360. langchain/memory/chat_message_histories/file.py +1 -1
  361. langchain/memory/chat_message_histories/firestore.py +1 -1
  362. langchain/memory/chat_message_histories/momento.py +1 -1
  363. langchain/memory/chat_message_histories/mongodb.py +1 -1
  364. langchain/memory/chat_message_histories/neo4j.py +1 -1
  365. langchain/memory/chat_message_histories/postgres.py +1 -1
  366. langchain/memory/chat_message_histories/redis.py +1 -1
  367. langchain/memory/chat_message_histories/rocksetdb.py +1 -1
  368. langchain/memory/chat_message_histories/singlestoredb.py +1 -1
  369. langchain/memory/chat_message_histories/streamlit.py +1 -1
  370. langchain/memory/chat_message_histories/upstash_redis.py +1 -1
  371. langchain/memory/chat_message_histories/xata.py +1 -1
  372. langchain/memory/chat_message_histories/zep.py +1 -1
  373. langchain/memory/combined.py +14 -13
  374. langchain/memory/entity.py +131 -61
  375. langchain/memory/prompt.py +10 -11
  376. langchain/memory/readonly.py +0 -2
  377. langchain/memory/simple.py +4 -3
  378. langchain/memory/summary.py +43 -11
  379. langchain/memory/summary_buffer.py +20 -8
  380. langchain/memory/token_buffer.py +2 -0
  381. langchain/memory/utils.py +3 -2
  382. langchain/memory/vectorstore.py +12 -5
  383. langchain/memory/vectorstore_token_buffer_memory.py +5 -5
  384. langchain/model_laboratory.py +12 -11
  385. langchain/output_parsers/__init__.py +4 -4
  386. langchain/output_parsers/boolean.py +7 -4
  387. langchain/output_parsers/combining.py +14 -7
  388. langchain/output_parsers/datetime.py +32 -31
  389. langchain/output_parsers/enum.py +10 -4
  390. langchain/output_parsers/fix.py +60 -53
  391. langchain/output_parsers/format_instructions.py +6 -8
  392. langchain/output_parsers/json.py +2 -2
  393. langchain/output_parsers/list.py +2 -2
  394. langchain/output_parsers/loading.py +9 -9
  395. langchain/output_parsers/openai_functions.py +3 -3
  396. langchain/output_parsers/openai_tools.py +1 -1
  397. langchain/output_parsers/pandas_dataframe.py +59 -48
  398. langchain/output_parsers/prompts.py +1 -2
  399. langchain/output_parsers/rail_parser.py +1 -1
  400. langchain/output_parsers/regex.py +9 -8
  401. langchain/output_parsers/regex_dict.py +7 -10
  402. langchain/output_parsers/retry.py +99 -80
  403. langchain/output_parsers/structured.py +21 -6
  404. langchain/output_parsers/yaml.py +19 -11
  405. langchain/prompts/__init__.py +5 -3
  406. langchain/prompts/base.py +5 -5
  407. langchain/prompts/chat.py +8 -8
  408. langchain/prompts/example_selector/__init__.py +3 -1
  409. langchain/prompts/example_selector/semantic_similarity.py +2 -2
  410. langchain/prompts/few_shot.py +1 -1
  411. langchain/prompts/loading.py +3 -3
  412. langchain/prompts/prompt.py +1 -1
  413. langchain/pydantic_v1/__init__.py +1 -1
  414. langchain/retrievers/__init__.py +5 -5
  415. langchain/retrievers/bedrock.py +2 -2
  416. langchain/retrievers/bm25.py +1 -1
  417. langchain/retrievers/contextual_compression.py +14 -8
  418. langchain/retrievers/docarray.py +1 -1
  419. langchain/retrievers/document_compressors/__init__.py +5 -4
  420. langchain/retrievers/document_compressors/base.py +12 -6
  421. langchain/retrievers/document_compressors/chain_extract.py +5 -3
  422. langchain/retrievers/document_compressors/chain_extract_prompt.py +2 -3
  423. langchain/retrievers/document_compressors/chain_filter.py +9 -9
  424. langchain/retrievers/document_compressors/chain_filter_prompt.py +1 -2
  425. langchain/retrievers/document_compressors/cohere_rerank.py +17 -15
  426. langchain/retrievers/document_compressors/cross_encoder_rerank.py +2 -0
  427. langchain/retrievers/document_compressors/embeddings_filter.py +24 -17
  428. langchain/retrievers/document_compressors/flashrank_rerank.py +1 -1
  429. langchain/retrievers/document_compressors/listwise_rerank.py +8 -5
  430. langchain/retrievers/ensemble.py +30 -27
  431. langchain/retrievers/google_cloud_documentai_warehouse.py +1 -1
  432. langchain/retrievers/google_vertex_ai_search.py +2 -2
  433. langchain/retrievers/kendra.py +10 -10
  434. langchain/retrievers/llama_index.py +1 -1
  435. langchain/retrievers/merger_retriever.py +11 -11
  436. langchain/retrievers/milvus.py +1 -1
  437. langchain/retrievers/multi_query.py +35 -27
  438. langchain/retrievers/multi_vector.py +24 -9
  439. langchain/retrievers/parent_document_retriever.py +33 -9
  440. langchain/retrievers/re_phraser.py +6 -5
  441. langchain/retrievers/self_query/base.py +157 -127
  442. langchain/retrievers/time_weighted_retriever.py +21 -7
  443. langchain/retrievers/zilliz.py +1 -1
  444. langchain/runnables/hub.py +12 -0
  445. langchain/runnables/openai_functions.py +12 -2
  446. langchain/schema/__init__.py +23 -23
  447. langchain/schema/cache.py +1 -1
  448. langchain/schema/callbacks/base.py +7 -7
  449. langchain/schema/callbacks/manager.py +19 -19
  450. langchain/schema/callbacks/tracers/base.py +1 -1
  451. langchain/schema/callbacks/tracers/evaluation.py +1 -1
  452. langchain/schema/callbacks/tracers/langchain.py +1 -1
  453. langchain/schema/callbacks/tracers/langchain_v1.py +1 -1
  454. langchain/schema/callbacks/tracers/log_stream.py +1 -1
  455. langchain/schema/callbacks/tracers/schemas.py +8 -8
  456. langchain/schema/callbacks/tracers/stdout.py +3 -3
  457. langchain/schema/document.py +1 -1
  458. langchain/schema/language_model.py +2 -2
  459. langchain/schema/messages.py +12 -12
  460. langchain/schema/output.py +3 -3
  461. langchain/schema/output_parser.py +3 -3
  462. langchain/schema/runnable/__init__.py +3 -3
  463. langchain/schema/runnable/base.py +9 -9
  464. langchain/schema/runnable/config.py +5 -5
  465. langchain/schema/runnable/configurable.py +1 -1
  466. langchain/schema/runnable/history.py +1 -1
  467. langchain/schema/runnable/passthrough.py +1 -1
  468. langchain/schema/runnable/utils.py +16 -16
  469. langchain/schema/vectorstore.py +1 -1
  470. langchain/smith/__init__.py +2 -1
  471. langchain/smith/evaluation/__init__.py +2 -2
  472. langchain/smith/evaluation/config.py +9 -23
  473. langchain/smith/evaluation/name_generation.py +3 -3
  474. langchain/smith/evaluation/progress.py +22 -4
  475. langchain/smith/evaluation/runner_utils.py +416 -247
  476. langchain/smith/evaluation/string_run_evaluator.py +102 -68
  477. langchain/storage/__init__.py +2 -2
  478. langchain/storage/_lc_store.py +4 -2
  479. langchain/storage/encoder_backed.py +7 -2
  480. langchain/storage/file_system.py +19 -16
  481. langchain/storage/in_memory.py +1 -1
  482. langchain/storage/upstash_redis.py +1 -1
  483. langchain/text_splitter.py +15 -15
  484. langchain/tools/__init__.py +28 -26
  485. langchain/tools/ainetwork/app.py +1 -1
  486. langchain/tools/ainetwork/base.py +1 -1
  487. langchain/tools/ainetwork/owner.py +1 -1
  488. langchain/tools/ainetwork/rule.py +1 -1
  489. langchain/tools/ainetwork/transfer.py +1 -1
  490. langchain/tools/ainetwork/value.py +1 -1
  491. langchain/tools/amadeus/closest_airport.py +1 -1
  492. langchain/tools/amadeus/flight_search.py +1 -1
  493. langchain/tools/azure_cognitive_services/__init__.py +1 -1
  494. langchain/tools/base.py +4 -4
  495. langchain/tools/bearly/tool.py +1 -1
  496. langchain/tools/bing_search/__init__.py +1 -1
  497. langchain/tools/bing_search/tool.py +1 -1
  498. langchain/tools/dataforseo_api_search/__init__.py +1 -1
  499. langchain/tools/dataforseo_api_search/tool.py +1 -1
  500. langchain/tools/ddg_search/tool.py +1 -1
  501. langchain/tools/e2b_data_analysis/tool.py +2 -2
  502. langchain/tools/edenai/__init__.py +1 -1
  503. langchain/tools/file_management/__init__.py +1 -1
  504. langchain/tools/file_management/copy.py +1 -1
  505. langchain/tools/file_management/delete.py +1 -1
  506. langchain/tools/gmail/__init__.py +2 -2
  507. langchain/tools/gmail/get_message.py +1 -1
  508. langchain/tools/gmail/search.py +1 -1
  509. langchain/tools/gmail/send_message.py +1 -1
  510. langchain/tools/google_finance/__init__.py +1 -1
  511. langchain/tools/google_finance/tool.py +1 -1
  512. langchain/tools/google_scholar/__init__.py +1 -1
  513. langchain/tools/google_scholar/tool.py +1 -1
  514. langchain/tools/google_search/__init__.py +1 -1
  515. langchain/tools/google_search/tool.py +1 -1
  516. langchain/tools/google_serper/__init__.py +1 -1
  517. langchain/tools/google_serper/tool.py +1 -1
  518. langchain/tools/google_trends/__init__.py +1 -1
  519. langchain/tools/google_trends/tool.py +1 -1
  520. langchain/tools/jira/tool.py +20 -1
  521. langchain/tools/json/tool.py +25 -3
  522. langchain/tools/memorize/tool.py +1 -1
  523. langchain/tools/multion/__init__.py +1 -1
  524. langchain/tools/multion/update_session.py +1 -1
  525. langchain/tools/office365/__init__.py +2 -2
  526. langchain/tools/office365/events_search.py +1 -1
  527. langchain/tools/office365/messages_search.py +1 -1
  528. langchain/tools/office365/send_event.py +1 -1
  529. langchain/tools/office365/send_message.py +1 -1
  530. langchain/tools/openapi/utils/api_models.py +6 -6
  531. langchain/tools/playwright/__init__.py +5 -5
  532. langchain/tools/playwright/click.py +1 -1
  533. langchain/tools/playwright/extract_hyperlinks.py +1 -1
  534. langchain/tools/playwright/get_elements.py +1 -1
  535. langchain/tools/playwright/navigate.py +1 -1
  536. langchain/tools/plugin.py +2 -2
  537. langchain/tools/powerbi/tool.py +1 -1
  538. langchain/tools/python/__init__.py +3 -2
  539. langchain/tools/reddit_search/tool.py +1 -1
  540. langchain/tools/render.py +2 -2
  541. langchain/tools/requests/tool.py +2 -2
  542. langchain/tools/searchapi/tool.py +1 -1
  543. langchain/tools/searx_search/tool.py +1 -1
  544. langchain/tools/slack/get_message.py +1 -1
  545. langchain/tools/spark_sql/tool.py +1 -1
  546. langchain/tools/sql_database/tool.py +1 -1
  547. langchain/tools/tavily_search/__init__.py +1 -1
  548. langchain/tools/tavily_search/tool.py +1 -1
  549. langchain/tools/zapier/__init__.py +1 -1
  550. langchain/tools/zapier/tool.py +24 -2
  551. langchain/utilities/__init__.py +4 -4
  552. langchain/utilities/arcee.py +4 -4
  553. langchain/utilities/clickup.py +4 -4
  554. langchain/utilities/dalle_image_generator.py +1 -1
  555. langchain/utilities/dataforseo_api_search.py +1 -1
  556. langchain/utilities/opaqueprompts.py +1 -1
  557. langchain/utilities/reddit_search.py +1 -1
  558. langchain/utilities/sql_database.py +1 -1
  559. langchain/utilities/tavily_search.py +1 -1
  560. langchain/utilities/vertexai.py +2 -2
  561. langchain/utils/__init__.py +1 -1
  562. langchain/utils/aiter.py +1 -1
  563. langchain/utils/html.py +3 -3
  564. langchain/utils/input.py +1 -1
  565. langchain/utils/iter.py +1 -1
  566. langchain/utils/json_schema.py +1 -3
  567. langchain/utils/strings.py +1 -1
  568. langchain/utils/utils.py +6 -6
  569. langchain/vectorstores/__init__.py +5 -5
  570. langchain/vectorstores/alibabacloud_opensearch.py +1 -1
  571. langchain/vectorstores/azure_cosmos_db.py +1 -1
  572. langchain/vectorstores/clickhouse.py +1 -1
  573. langchain/vectorstores/elastic_vector_search.py +1 -1
  574. langchain/vectorstores/elasticsearch.py +2 -2
  575. langchain/vectorstores/myscale.py +1 -1
  576. langchain/vectorstores/neo4j_vector.py +1 -1
  577. langchain/vectorstores/pgembedding.py +1 -1
  578. langchain/vectorstores/qdrant.py +1 -1
  579. langchain/vectorstores/redis/__init__.py +1 -1
  580. langchain/vectorstores/redis/base.py +1 -1
  581. langchain/vectorstores/redis/filters.py +4 -4
  582. langchain/vectorstores/redis/schema.py +6 -6
  583. langchain/vectorstores/sklearn.py +2 -2
  584. langchain/vectorstores/starrocks.py +1 -1
  585. langchain/vectorstores/utils.py +1 -1
  586. {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/METADATA +4 -14
  587. {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/RECORD +590 -591
  588. {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/WHEEL +1 -1
  589. langchain/smith/evaluation/utils.py +0 -0
  590. {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/entry_points.txt +0 -0
  591. {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/licenses/LICENSE +0 -0
@@ -6,6 +6,8 @@ from typing import Any, Literal, Union, cast
6
6
 
7
7
  from langchain_core.callbacks import AsyncCallbackHandler
8
8
  from langchain_core.outputs import LLMResult
9
+ from langchain_core.v1.messages import AIMessage
10
+ from typing_extensions import override
9
11
 
10
12
  # TODO If used by two LLM runs in parallel this won't work as expected
11
13
 
@@ -19,31 +21,43 @@ class AsyncIteratorCallbackHandler(AsyncCallbackHandler):
19
21
 
20
22
  @property
21
23
  def always_verbose(self) -> bool:
24
+ """Always verbose."""
22
25
  return True
23
26
 
24
27
  def __init__(self) -> None:
28
+ """Instantiate AsyncIteratorCallbackHandler."""
25
29
  self.queue = asyncio.Queue()
26
30
  self.done = asyncio.Event()
27
31
 
32
+ @override
28
33
  async def on_llm_start(
29
- self, serialized: dict[str, Any], prompts: list[str], **kwargs: Any
34
+ self,
35
+ serialized: dict[str, Any],
36
+ prompts: list[str],
37
+ **kwargs: Any,
30
38
  ) -> None:
31
39
  # If two calls are made in a row, this resets the state
32
40
  self.done.clear()
33
41
 
42
+ @override
34
43
  async def on_llm_new_token(self, token: str, **kwargs: Any) -> None:
35
44
  if token is not None and token != "":
36
45
  self.queue.put_nowait(token)
37
46
 
38
- async def on_llm_end(self, response: LLMResult, **kwargs: Any) -> None:
47
+ @override
48
+ async def on_llm_end(
49
+ self, response: Union[LLMResult, AIMessage], **kwargs: Any
50
+ ) -> None:
39
51
  self.done.set()
40
52
 
53
+ @override
41
54
  async def on_llm_error(self, error: BaseException, **kwargs: Any) -> None:
42
55
  self.done.set()
43
56
 
44
57
  # TODO implement the other methods
45
58
 
46
59
  async def aiter(self) -> AsyncIterator[str]:
60
+ """Asynchronous iterator that yields tokens."""
47
61
  while not self.queue.empty() or not self.done.is_set():
48
62
  # Wait for the next token in the queue,
49
63
  # but stop waiting if the done event is set
@@ -62,7 +76,7 @@ class AsyncIteratorCallbackHandler(AsyncCallbackHandler):
62
76
  other.pop().cancel()
63
77
 
64
78
  # Extract the value of the first completed task
65
- token_or_done = cast(Union[str, Literal[True]], done.pop().result())
79
+ token_or_done = cast("Union[str, Literal[True]]", done.pop().result())
66
80
 
67
81
  # If the extracted value is the boolean True, the done event was set
68
82
  if token_or_done is True:
@@ -1,8 +1,10 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Optional
3
+ from typing import Any, Optional, Union
4
4
 
5
5
  from langchain_core.outputs import LLMResult
6
+ from langchain_core.v1.messages import AIMessage
7
+ from typing_extensions import override
6
8
 
7
9
  from langchain.callbacks.streaming_aiter import AsyncIteratorCallbackHandler
8
10
 
@@ -15,6 +17,7 @@ class AsyncFinalIteratorCallbackHandler(AsyncIteratorCallbackHandler):
15
17
  """
16
18
 
17
19
  def append_to_last_tokens(self, token: str) -> None:
20
+ """Append token to the last tokens."""
18
21
  self.last_tokens.append(token)
19
22
  self.last_tokens_stripped.append(token.strip())
20
23
  if len(self.last_tokens) > len(self.answer_prefix_tokens):
@@ -22,10 +25,10 @@ class AsyncFinalIteratorCallbackHandler(AsyncIteratorCallbackHandler):
22
25
  self.last_tokens_stripped.pop(0)
23
26
 
24
27
  def check_if_answer_reached(self) -> bool:
28
+ """Check if the answer has been reached."""
25
29
  if self.strip_tokens:
26
30
  return self.last_tokens_stripped == self.answer_prefix_tokens_stripped
27
- else:
28
- return self.last_tokens == self.answer_prefix_tokens
31
+ return self.last_tokens == self.answer_prefix_tokens
29
32
 
30
33
  def __init__(
31
34
  self,
@@ -61,17 +64,25 @@ class AsyncFinalIteratorCallbackHandler(AsyncIteratorCallbackHandler):
61
64
  self.stream_prefix = stream_prefix
62
65
  self.answer_reached = False
63
66
 
67
+ @override
64
68
  async def on_llm_start(
65
- self, serialized: dict[str, Any], prompts: list[str], **kwargs: Any
69
+ self,
70
+ serialized: dict[str, Any],
71
+ prompts: list[str],
72
+ **kwargs: Any,
66
73
  ) -> None:
67
74
  # If two calls are made in a row, this resets the state
68
75
  self.done.clear()
69
76
  self.answer_reached = False
70
77
 
71
- async def on_llm_end(self, response: LLMResult, **kwargs: Any) -> None:
78
+ @override
79
+ async def on_llm_end(
80
+ self, response: Union[LLMResult, AIMessage], **kwargs: Any
81
+ ) -> None:
72
82
  if self.answer_reached:
73
83
  self.done.set()
74
84
 
85
+ @override
75
86
  async def on_llm_new_token(self, token: str, **kwargs: Any) -> None:
76
87
  # Remember the last n tokens, where n = len(answer_prefix_tokens)
77
88
  self.append_to_last_tokens(token)
@@ -4,6 +4,7 @@ import sys
4
4
  from typing import Any, Optional
5
5
 
6
6
  from langchain_core.callbacks import StreamingStdOutCallbackHandler
7
+ from typing_extensions import override
7
8
 
8
9
  DEFAULT_ANSWER_PREFIX_TOKENS = ["Final", "Answer", ":"]
9
10
 
@@ -16,6 +17,7 @@ class FinalStreamingStdOutCallbackHandler(StreamingStdOutCallbackHandler):
16
17
  """
17
18
 
18
19
  def append_to_last_tokens(self, token: str) -> None:
20
+ """Append token to the last tokens."""
19
21
  self.last_tokens.append(token)
20
22
  self.last_tokens_stripped.append(token.strip())
21
23
  if len(self.last_tokens) > len(self.answer_prefix_tokens):
@@ -23,10 +25,10 @@ class FinalStreamingStdOutCallbackHandler(StreamingStdOutCallbackHandler):
23
25
  self.last_tokens_stripped.pop(0)
24
26
 
25
27
  def check_if_answer_reached(self) -> bool:
28
+ """Check if the answer has been reached."""
26
29
  if self.strip_tokens:
27
30
  return self.last_tokens_stripped == self.answer_prefix_tokens_stripped
28
- else:
29
- return self.last_tokens == self.answer_prefix_tokens
31
+ return self.last_tokens == self.answer_prefix_tokens
30
32
 
31
33
  def __init__(
32
34
  self,
@@ -62,12 +64,17 @@ class FinalStreamingStdOutCallbackHandler(StreamingStdOutCallbackHandler):
62
64
  self.stream_prefix = stream_prefix
63
65
  self.answer_reached = False
64
66
 
67
+ @override
65
68
  def on_llm_start(
66
- self, serialized: dict[str, Any], prompts: list[str], **kwargs: Any
69
+ self,
70
+ serialized: dict[str, Any],
71
+ prompts: list[str],
72
+ **kwargs: Any,
67
73
  ) -> None:
68
74
  """Run when LLM starts running."""
69
75
  self.answer_reached = False
70
76
 
77
+ @override
71
78
  def on_llm_new_token(self, token: str, **kwargs: Any) -> None:
72
79
  """Run on new LLM token. Only available when streaming is enabled."""
73
80
 
@@ -70,11 +70,12 @@ def StreamlitCallbackHandler(
70
70
  from langchain_community.callbacks.streamlit.streamlit_callback_handler import ( # noqa: E501
71
71
  StreamlitCallbackHandler as _InternalStreamlitCallbackHandler,
72
72
  )
73
- except ImportError:
74
- raise ImportError(
73
+ except ImportError as e:
74
+ msg = (
75
75
  "To use the StreamlitCallbackHandler, please install "
76
76
  "langchain-community with `pip install langchain-community`."
77
77
  )
78
+ raise ImportError(msg) from e
78
79
 
79
80
  return _InternalStreamlitCallbackHandler(
80
81
  parent_container,
@@ -27,7 +27,7 @@ def __getattr__(name: str) -> Any:
27
27
 
28
28
 
29
29
  __all__ = [
30
- "ChildType",
31
30
  "ChildRecord",
31
+ "ChildType",
32
32
  "MutableExpander",
33
33
  ]
@@ -41,9 +41,9 @@ def __getattr__(name: str) -> Any:
41
41
 
42
42
 
43
43
  __all__ = [
44
- "LLMThoughtState",
45
- "ToolRecord",
46
- "LLMThoughtLabeler",
47
44
  "LLMThought",
45
+ "LLMThoughtLabeler",
46
+ "LLMThoughtState",
48
47
  "StreamlitCallbackHandler",
48
+ "ToolRecord",
49
49
  ]
@@ -31,8 +31,8 @@ def __getattr__(name: str) -> Any:
31
31
  __all__ = [
32
32
  "ConsoleCallbackHandler",
33
33
  "FunctionCallbackHandler",
34
- "LoggingCallbackHandler",
35
34
  "LangChainTracer",
36
35
  "LangChainTracerV1",
36
+ "LoggingCallbackHandler",
37
37
  "WandbTracer",
38
38
  ]
@@ -25,6 +25,6 @@ def __getattr__(name: str) -> Any:
25
25
 
26
26
 
27
27
  __all__ = [
28
- "import_comet_llm_api",
29
28
  "CometTracer",
29
+ "import_comet_llm_api",
30
30
  ]
@@ -5,4 +5,4 @@ from langchain_core.tracers.evaluation import (
5
5
  wait_for_all_evaluators,
6
6
  )
7
7
 
8
- __all__ = ["wait_for_all_evaluators", "EvaluatorCallbackHandler"]
8
+ __all__ = ["EvaluatorCallbackHandler", "wait_for_all_evaluators"]
@@ -6,4 +6,4 @@ from langchain_core.tracers.log_stream import (
6
6
  RunState,
7
7
  )
8
8
 
9
- __all__ = ["LogEntry", "RunState", "RunLog", "RunLogPatch", "LogStreamCallbackHandler"]
9
+ __all__ = ["LogEntry", "LogStreamCallbackHandler", "RunLog", "RunLogPatch", "RunState"]
@@ -7,6 +7,7 @@ from uuid import UUID
7
7
  from langchain_core.exceptions import TracerException
8
8
  from langchain_core.tracers.stdout import FunctionCallbackHandler
9
9
  from langchain_core.utils.input import get_bolded_text, get_colored_text
10
+ from typing_extensions import override
10
11
 
11
12
 
12
13
  class LoggingCallbackHandler(FunctionCallbackHandler):
@@ -21,6 +22,15 @@ class LoggingCallbackHandler(FunctionCallbackHandler):
21
22
  extra: Optional[dict] = None,
22
23
  **kwargs: Any,
23
24
  ) -> None:
25
+ """
26
+ Initialize the LoggingCallbackHandler.
27
+
28
+ Args:
29
+ logger: the logger to use for logging
30
+ log_level: the logging level (default: logging.INFO)
31
+ extra: the extra context to log (default: None)
32
+ **kwargs:
33
+ """
24
34
  log_method = getattr(logger, logging.getLevelName(level=log_level).lower())
25
35
 
26
36
  def callback(text: str) -> None:
@@ -28,6 +38,7 @@ class LoggingCallbackHandler(FunctionCallbackHandler):
28
38
 
29
39
  super().__init__(function=callback, **kwargs)
30
40
 
41
+ @override
31
42
  def on_text(
32
43
  self,
33
44
  text: str,
@@ -42,5 +53,5 @@ class LoggingCallbackHandler(FunctionCallbackHandler):
42
53
  crumbs_str = ""
43
54
  self.function_callback(
44
55
  f"{get_colored_text('[text]', color='blue')}"
45
- f" {get_bolded_text(f'{crumbs_str}New text:')}\n{text}"
56
+ f" {get_bolded_text(f'{crumbs_str}New text:')}\n{text}",
46
57
  )
@@ -3,4 +3,4 @@ from langchain_core.tracers.stdout import (
3
3
  FunctionCallbackHandler,
4
4
  )
5
5
 
6
- __all__ = ["FunctionCallbackHandler", "ConsoleCallbackHandler"]
6
+ __all__ = ["ConsoleCallbackHandler", "FunctionCallbackHandler"]
@@ -9,7 +9,7 @@ if TYPE_CHECKING:
9
9
  # Used to consolidate logic for raising deprecation warnings and
10
10
  # handling optional imports.
11
11
  DEPRECATED_LOOKUP = {
12
- "TrubricsCallbackHandler": "langchain_community.callbacks.trubrics_callback"
12
+ "TrubricsCallbackHandler": "langchain_community.callbacks.trubrics_callback",
13
13
  }
14
14
 
15
15
  _import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP)
@@ -37,12 +37,12 @@ def __getattr__(name: str) -> Any:
37
37
 
38
38
 
39
39
  __all__ = [
40
- "import_spacy",
41
- "import_pandas",
42
- "import_textstat",
40
+ "BaseMetadataCallbackHandler",
43
41
  "_flatten_dict",
44
42
  "flatten_dict",
45
43
  "hash_string",
44
+ "import_pandas",
45
+ "import_spacy",
46
+ "import_textstat",
46
47
  "load_json",
47
- "BaseMetadataCallbackHandler",
48
48
  ]
@@ -9,7 +9,7 @@ if TYPE_CHECKING:
9
9
  # Used to consolidate logic for raising deprecation warnings and
10
10
  # handling optional imports.
11
11
  DEPRECATED_LOOKUP = {
12
- "WandbCallbackHandler": "langchain_community.callbacks.wandb_callback"
12
+ "WandbCallbackHandler": "langchain_community.callbacks.wandb_callback",
13
13
  }
14
14
 
15
15
  _import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP)
@@ -9,7 +9,7 @@ if TYPE_CHECKING:
9
9
  # Used to consolidate logic for raising deprecation warnings and
10
10
  # handling optional imports.
11
11
  DEPRECATED_LOOKUP = {
12
- "WhyLabsCallbackHandler": "langchain_community.callbacks.whylabs_callback"
12
+ "WhyLabsCallbackHandler": "langchain_community.callbacks.whylabs_callback",
13
13
  }
14
14
 
15
15
  _import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUP)
@@ -47,8 +47,8 @@ def _check_in_allowed_domain(url: str, limit_to_domains: Sequence[str]) -> bool:
47
47
  scheme, domain = _extract_scheme_and_domain(url)
48
48
 
49
49
  for allowed_domain in limit_to_domains:
50
- allowed_scheme, allowed_domain = _extract_scheme_and_domain(allowed_domain)
51
- if scheme == allowed_scheme and domain == allowed_domain:
50
+ allowed_scheme, allowed_domain_ = _extract_scheme_and_domain(allowed_domain)
51
+ if scheme == allowed_scheme and domain == allowed_domain_:
52
52
  return True
53
53
  return False
54
54
 
@@ -61,7 +61,7 @@ try:
61
61
  message=(
62
62
  "This class is deprecated and will be removed in langchain 1.0. "
63
63
  "See API reference for replacement: "
64
- "https://api.python.langchain.com/en/latest/chains/langchain.chains.api.base.APIChain.html" # noqa: E501
64
+ "https://api.python.langchain.com/en/latest/chains/langchain.chains.api.base.APIChain.html"
65
65
  ),
66
66
  removal="1.0",
67
67
  )
@@ -191,6 +191,7 @@ try:
191
191
  )
192
192
  async for event in events:
193
193
  event["messages"][-1].pretty_print()
194
+
194
195
  """ # noqa: E501
195
196
 
196
197
  api_request_chain: LLMChain
@@ -201,10 +202,10 @@ try:
201
202
  output_key: str = "output" #: :meta private:
202
203
  limit_to_domains: Optional[Sequence[str]] = Field(default_factory=list) # type: ignore[arg-type]
203
204
  """Use to limit the domains that can be accessed by the API chain.
204
-
205
+
205
206
  * For example, to limit to just the domain `https://www.example.com`, set
206
207
  `limit_to_domains=["https://www.example.com"]`.
207
-
208
+
208
209
  * The default value is an empty tuple, which means that no domains are
209
210
  allowed by default. By design this will raise an error on instantiation.
210
211
  * Use a None if you want to allow all domains by default -- this is not
@@ -235,9 +236,8 @@ try:
235
236
  input_vars = self.api_request_chain.prompt.input_variables
236
237
  expected_vars = {"question", "api_docs"}
237
238
  if set(input_vars) != expected_vars:
238
- raise ValueError(
239
- f"Input variables should be {expected_vars}, got {input_vars}"
240
- )
239
+ msg = f"Input variables should be {expected_vars}, got {input_vars}"
240
+ raise ValueError(msg)
241
241
  return self
242
242
 
243
243
  @model_validator(mode="before")
@@ -247,18 +247,20 @@ try:
247
247
  # This check must be a pre=True check, so that a default of None
248
248
  # won't be set to limit_to_domains if it's not provided.
249
249
  if "limit_to_domains" not in values:
250
- raise ValueError(
250
+ msg = (
251
251
  "You must specify a list of domains to limit access using "
252
252
  "`limit_to_domains`"
253
253
  )
254
+ raise ValueError(msg)
254
255
  if (
255
256
  not values["limit_to_domains"]
256
257
  and values["limit_to_domains"] is not None
257
258
  ):
258
- raise ValueError(
259
+ msg = (
259
260
  "Please provide a list of domains to limit access using "
260
261
  "`limit_to_domains`."
261
262
  )
263
+ raise ValueError(msg)
262
264
  return values
263
265
 
264
266
  @model_validator(mode="after")
@@ -267,9 +269,8 @@ try:
267
269
  input_vars = self.api_answer_chain.prompt.input_variables
268
270
  expected_vars = {"question", "api_docs", "api_url", "api_response"}
269
271
  if set(input_vars) != expected_vars:
270
- raise ValueError(
271
- f"Input variables should be {expected_vars}, got {input_vars}"
272
- )
272
+ msg = f"Input variables should be {expected_vars}, got {input_vars}"
273
+ raise ValueError(msg)
273
274
  return self
274
275
 
275
276
  def _call(
@@ -287,14 +288,19 @@ try:
287
288
  _run_manager.on_text(api_url, color="green", end="\n", verbose=self.verbose)
288
289
  api_url = api_url.strip()
289
290
  if self.limit_to_domains and not _check_in_allowed_domain(
290
- api_url, self.limit_to_domains
291
+ api_url,
292
+ self.limit_to_domains,
291
293
  ):
292
- raise ValueError(
294
+ msg = (
293
295
  f"{api_url} is not in the allowed domains: {self.limit_to_domains}"
294
296
  )
297
+ raise ValueError(msg)
295
298
  api_response = self.requests_wrapper.get(api_url)
296
299
  _run_manager.on_text(
297
- str(api_response), color="yellow", end="\n", verbose=self.verbose
300
+ str(api_response),
301
+ color="yellow",
302
+ end="\n",
303
+ verbose=self.verbose,
298
304
  )
299
305
  answer = self.api_answer_chain.predict(
300
306
  question=question,
@@ -320,18 +326,26 @@ try:
320
326
  callbacks=_run_manager.get_child(),
321
327
  )
322
328
  await _run_manager.on_text(
323
- api_url, color="green", end="\n", verbose=self.verbose
329
+ api_url,
330
+ color="green",
331
+ end="\n",
332
+ verbose=self.verbose,
324
333
  )
325
334
  api_url = api_url.strip()
326
335
  if self.limit_to_domains and not _check_in_allowed_domain(
327
- api_url, self.limit_to_domains
336
+ api_url,
337
+ self.limit_to_domains,
328
338
  ):
329
- raise ValueError(
339
+ msg = (
330
340
  f"{api_url} is not in the allowed domains: {self.limit_to_domains}"
331
341
  )
342
+ raise ValueError(msg)
332
343
  api_response = await self.requests_wrapper.aget(api_url)
333
344
  await _run_manager.on_text(
334
- str(api_response), color="yellow", end="\n", verbose=self.verbose
345
+ str(api_response),
346
+ color="yellow",
347
+ end="\n",
348
+ verbose=self.verbose,
335
349
  )
336
350
  answer = await self.api_answer_chain.apredict(
337
351
  question=question,
@@ -350,7 +364,7 @@ try:
350
364
  headers: Optional[dict] = None,
351
365
  api_url_prompt: BasePromptTemplate = API_URL_PROMPT,
352
366
  api_response_prompt: BasePromptTemplate = API_RESPONSE_PROMPT,
353
- limit_to_domains: Optional[Sequence[str]] = tuple(),
367
+ limit_to_domains: Optional[Sequence[str]] = (),
354
368
  **kwargs: Any,
355
369
  ) -> APIChain:
356
370
  """Load chain from just an LLM and the api docs."""
@@ -373,8 +387,12 @@ try:
373
387
  except ImportError:
374
388
 
375
389
  class APIChain: # type: ignore[no-redef]
376
- def __init__(self, *args: Any, **kwargs: Any) -> None:
377
- raise ImportError(
390
+ """Raise an ImportError if APIChain is used without langchain_community."""
391
+
392
+ def __init__(self, *_: Any, **__: Any) -> None:
393
+ """Raise an ImportError if APIChain is used without langchain_community."""
394
+ msg = (
378
395
  "To use the APIChain, you must install the langchain_community package."
379
396
  "pip install langchain_community"
380
397
  )
398
+ raise ImportError(msg)
@@ -1,4 +1,3 @@
1
- # flake8: noqa
2
1
  NEWS_DOCS = """API documentation:
3
2
  Endpoint: https://newsapi.org
4
3
  Top headlines /v2/top-headlines
@@ -29,4 +28,4 @@ Response object
29
28
  content | string | The unformatted content of the article, where available. This is truncated to 200 chars.
30
29
 
31
30
  Use page size: 2
32
- """
31
+ """ # noqa: E501
@@ -1,4 +1,3 @@
1
- # flake8: noqa
2
1
  OPEN_METEO_DOCS = """BASE URL: https://api.open-meteo.com/
3
2
 
4
3
  API Documentation
@@ -30,4 +29,4 @@ showers Preceding hour sum mm (inch) Showers from convective precipitation in mi
30
29
  weathercode Instant WMO code Weather condition as a numeric code. Follow WMO weather interpretation codes. See table below for details.
31
30
  snow_depth Instant meters Snow depth on the ground
32
31
  freezinglevel_height Instant meters Altitude above sea level of the 0°C level
33
- visibility Instant meters Viewing distance in meters. Influenced by low clouds, humidity and aerosols. Maximum visibility is approximately 24 km."""
32
+ visibility Instant meters Viewing distance in meters. Influenced by low clouds, humidity and aerosols. Maximum visibility is approximately 24 km.""" # noqa: E501
@@ -26,4 +26,4 @@ def __getattr__(name: str) -> Any:
26
26
  return _import_attribute(name)
27
27
 
28
28
 
29
- __all__ = ["APIRequesterChain", "APIRequesterOutputParser", "REQUEST_TEMPLATE"]
29
+ __all__ = ["REQUEST_TEMPLATE", "APIRequesterChain", "APIRequesterOutputParser"]
@@ -26,4 +26,4 @@ def __getattr__(name: str) -> Any:
26
26
  return _import_attribute(name)
27
27
 
28
28
 
29
- __all__ = ["APIResponderChain", "APIResponderOutputParser", "RESPONSE_TEMPLATE"]
29
+ __all__ = ["RESPONSE_TEMPLATE", "APIResponderChain", "APIResponderOutputParser"]
@@ -1,4 +1,3 @@
1
- # flake8: noqa
2
1
  PODCAST_DOCS = """API documentation:
3
2
  Endpoint: https://listen-api.listennotes.com/api/v2
4
3
  GET /search
@@ -25,4 +24,4 @@ id | integer | optional
25
24
  title_highlighted | string | optional
26
25
 
27
26
  Use page_size: 3
28
- """
27
+ """ # noqa: E501
@@ -1,4 +1,3 @@
1
- # flake8: noqa
2
1
  from langchain_core.prompts.prompt import PromptTemplate
3
2
 
4
3
  API_URL_PROMPT_TEMPLATE = """You are given the below API Documentation:
@@ -7,7 +6,7 @@ Using this documentation, generate the full API url to call for answering the us
7
6
  You should build the API url in order to get a response that is as short as possible, while still getting the necessary information to answer the question. Pay attention to deliberately exclude any unnecessary pieces of data in the API call.
8
7
 
9
8
  Question:{question}
10
- API url:"""
9
+ API url:""" # noqa: E501
11
10
 
12
11
  API_URL_PROMPT = PromptTemplate(
13
12
  input_variables=[
@@ -1,4 +1,3 @@
1
- # flake8: noqa
2
1
  TMDB_DOCS = """API documentation:
3
2
  Endpoint: https://api.themoviedb.org/3
4
3
  GET /search/movie
@@ -34,4 +33,4 @@ backdrop_path | string or null | optional
34
33
  popularity | number | optional
35
34
  vote_count | integer | optional
36
35
  video | boolean | optional
37
- vote_average | number | optional"""
36
+ vote_average | number | optional""" # noqa: E501