langchain 0.3.25__py3-none-any.whl → 0.3.27__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (582) hide show
  1. langchain/__init__.py +110 -96
  2. langchain/_api/__init__.py +2 -2
  3. langchain/_api/deprecation.py +3 -3
  4. langchain/_api/module_import.py +51 -46
  5. langchain/_api/path.py +1 -1
  6. langchain/adapters/openai.py +8 -8
  7. langchain/agents/__init__.py +15 -12
  8. langchain/agents/agent.py +160 -133
  9. langchain/agents/agent_iterator.py +31 -14
  10. langchain/agents/agent_toolkits/__init__.py +7 -6
  11. langchain/agents/agent_toolkits/ainetwork/toolkit.py +1 -1
  12. langchain/agents/agent_toolkits/amadeus/toolkit.py +1 -1
  13. langchain/agents/agent_toolkits/azure_cognitive_services.py +1 -1
  14. langchain/agents/agent_toolkits/clickup/toolkit.py +1 -1
  15. langchain/agents/agent_toolkits/conversational_retrieval/openai_functions.py +6 -4
  16. langchain/agents/agent_toolkits/csv/__init__.py +4 -2
  17. langchain/agents/agent_toolkits/file_management/__init__.py +1 -1
  18. langchain/agents/agent_toolkits/file_management/toolkit.py +1 -1
  19. langchain/agents/agent_toolkits/github/toolkit.py +9 -9
  20. langchain/agents/agent_toolkits/gitlab/toolkit.py +1 -1
  21. langchain/agents/agent_toolkits/json/base.py +1 -1
  22. langchain/agents/agent_toolkits/multion/toolkit.py +1 -1
  23. langchain/agents/agent_toolkits/office365/toolkit.py +1 -1
  24. langchain/agents/agent_toolkits/openapi/base.py +1 -1
  25. langchain/agents/agent_toolkits/openapi/planner.py +2 -2
  26. langchain/agents/agent_toolkits/openapi/planner_prompt.py +10 -10
  27. langchain/agents/agent_toolkits/openapi/prompt.py +1 -1
  28. langchain/agents/agent_toolkits/openapi/toolkit.py +1 -1
  29. langchain/agents/agent_toolkits/pandas/__init__.py +4 -2
  30. langchain/agents/agent_toolkits/playwright/__init__.py +1 -1
  31. langchain/agents/agent_toolkits/playwright/toolkit.py +1 -1
  32. langchain/agents/agent_toolkits/powerbi/base.py +1 -1
  33. langchain/agents/agent_toolkits/powerbi/chat_base.py +1 -1
  34. langchain/agents/agent_toolkits/powerbi/prompt.py +2 -2
  35. langchain/agents/agent_toolkits/powerbi/toolkit.py +1 -1
  36. langchain/agents/agent_toolkits/python/__init__.py +4 -2
  37. langchain/agents/agent_toolkits/spark/__init__.py +4 -2
  38. langchain/agents/agent_toolkits/spark_sql/base.py +1 -1
  39. langchain/agents/agent_toolkits/spark_sql/toolkit.py +1 -1
  40. langchain/agents/agent_toolkits/sql/prompt.py +1 -1
  41. langchain/agents/agent_toolkits/sql/toolkit.py +1 -1
  42. langchain/agents/agent_toolkits/vectorstore/base.py +2 -2
  43. langchain/agents/agent_toolkits/vectorstore/prompt.py +2 -4
  44. langchain/agents/agent_toolkits/vectorstore/toolkit.py +12 -11
  45. langchain/agents/agent_toolkits/xorbits/__init__.py +4 -2
  46. langchain/agents/agent_toolkits/zapier/toolkit.py +1 -1
  47. langchain/agents/agent_types.py +7 -7
  48. langchain/agents/chat/base.py +6 -12
  49. langchain/agents/chat/output_parser.py +9 -6
  50. langchain/agents/chat/prompt.py +3 -4
  51. langchain/agents/conversational/base.py +9 -5
  52. langchain/agents/conversational/output_parser.py +4 -2
  53. langchain/agents/conversational/prompt.py +2 -3
  54. langchain/agents/conversational_chat/base.py +7 -5
  55. langchain/agents/conversational_chat/output_parser.py +9 -11
  56. langchain/agents/conversational_chat/prompt.py +5 -6
  57. langchain/agents/format_scratchpad/__init__.py +3 -3
  58. langchain/agents/format_scratchpad/log_to_messages.py +1 -1
  59. langchain/agents/format_scratchpad/openai_functions.py +8 -6
  60. langchain/agents/format_scratchpad/tools.py +5 -3
  61. langchain/agents/format_scratchpad/xml.py +33 -2
  62. langchain/agents/initialize.py +18 -9
  63. langchain/agents/json_chat/base.py +18 -18
  64. langchain/agents/json_chat/prompt.py +2 -3
  65. langchain/agents/load_tools.py +2 -1
  66. langchain/agents/loading.py +28 -18
  67. langchain/agents/mrkl/base.py +9 -4
  68. langchain/agents/mrkl/output_parser.py +17 -13
  69. langchain/agents/mrkl/prompt.py +1 -2
  70. langchain/agents/openai_assistant/base.py +80 -70
  71. langchain/agents/openai_functions_agent/base.py +47 -38
  72. langchain/agents/openai_functions_multi_agent/base.py +40 -27
  73. langchain/agents/openai_tools/base.py +8 -8
  74. langchain/agents/output_parsers/__init__.py +3 -3
  75. langchain/agents/output_parsers/json.py +7 -7
  76. langchain/agents/output_parsers/openai_functions.py +15 -7
  77. langchain/agents/output_parsers/openai_tools.py +9 -4
  78. langchain/agents/output_parsers/react_json_single_input.py +10 -5
  79. langchain/agents/output_parsers/react_single_input.py +15 -11
  80. langchain/agents/output_parsers/self_ask.py +3 -2
  81. langchain/agents/output_parsers/tools.py +18 -13
  82. langchain/agents/output_parsers/xml.py +99 -28
  83. langchain/agents/react/agent.py +4 -4
  84. langchain/agents/react/base.py +22 -17
  85. langchain/agents/react/output_parser.py +5 -6
  86. langchain/agents/react/textworld_prompt.py +0 -1
  87. langchain/agents/react/wiki_prompt.py +14 -15
  88. langchain/agents/schema.py +3 -2
  89. langchain/agents/self_ask_with_search/base.py +19 -15
  90. langchain/agents/self_ask_with_search/prompt.py +0 -1
  91. langchain/agents/structured_chat/base.py +14 -11
  92. langchain/agents/structured_chat/output_parser.py +16 -18
  93. langchain/agents/structured_chat/prompt.py +3 -4
  94. langchain/agents/tool_calling_agent/base.py +7 -6
  95. langchain/agents/tools.py +2 -2
  96. langchain/agents/utils.py +2 -3
  97. langchain/agents/xml/base.py +5 -5
  98. langchain/agents/xml/prompt.py +1 -2
  99. langchain/cache.py +12 -12
  100. langchain/callbacks/__init__.py +11 -11
  101. langchain/callbacks/aim_callback.py +2 -2
  102. langchain/callbacks/argilla_callback.py +1 -1
  103. langchain/callbacks/arize_callback.py +1 -1
  104. langchain/callbacks/arthur_callback.py +1 -1
  105. langchain/callbacks/base.py +7 -7
  106. langchain/callbacks/clearml_callback.py +1 -1
  107. langchain/callbacks/comet_ml_callback.py +1 -1
  108. langchain/callbacks/confident_callback.py +1 -1
  109. langchain/callbacks/context_callback.py +1 -1
  110. langchain/callbacks/flyte_callback.py +1 -1
  111. langchain/callbacks/human.py +2 -2
  112. langchain/callbacks/infino_callback.py +1 -1
  113. langchain/callbacks/labelstudio_callback.py +1 -1
  114. langchain/callbacks/llmonitor_callback.py +1 -1
  115. langchain/callbacks/manager.py +6 -6
  116. langchain/callbacks/mlflow_callback.py +2 -2
  117. langchain/callbacks/openai_info.py +1 -1
  118. langchain/callbacks/promptlayer_callback.py +1 -1
  119. langchain/callbacks/sagemaker_callback.py +1 -1
  120. langchain/callbacks/streaming_aiter.py +4 -1
  121. langchain/callbacks/streaming_aiter_final_only.py +5 -3
  122. langchain/callbacks/streaming_stdout_final_only.py +5 -3
  123. langchain/callbacks/streamlit/__init__.py +3 -2
  124. langchain/callbacks/streamlit/mutable_expander.py +1 -1
  125. langchain/callbacks/streamlit/streamlit_callback_handler.py +3 -3
  126. langchain/callbacks/tracers/__init__.py +1 -1
  127. langchain/callbacks/tracers/base.py +2 -1
  128. langchain/callbacks/tracers/comet.py +1 -1
  129. langchain/callbacks/tracers/evaluation.py +1 -1
  130. langchain/callbacks/tracers/log_stream.py +1 -1
  131. langchain/callbacks/tracers/logging.py +1 -1
  132. langchain/callbacks/tracers/stdout.py +1 -1
  133. langchain/callbacks/trubrics_callback.py +1 -1
  134. langchain/callbacks/utils.py +4 -4
  135. langchain/callbacks/wandb_callback.py +1 -1
  136. langchain/callbacks/whylabs_callback.py +1 -1
  137. langchain/chains/api/base.py +36 -22
  138. langchain/chains/api/news_docs.py +1 -2
  139. langchain/chains/api/open_meteo_docs.py +1 -2
  140. langchain/chains/api/openapi/requests_chain.py +1 -1
  141. langchain/chains/api/openapi/response_chain.py +1 -1
  142. langchain/chains/api/podcast_docs.py +1 -2
  143. langchain/chains/api/prompt.py +1 -2
  144. langchain/chains/api/tmdb_docs.py +1 -2
  145. langchain/chains/base.py +89 -55
  146. langchain/chains/chat_vector_db/prompts.py +2 -3
  147. langchain/chains/combine_documents/__init__.py +1 -1
  148. langchain/chains/combine_documents/base.py +24 -11
  149. langchain/chains/combine_documents/map_reduce.py +39 -31
  150. langchain/chains/combine_documents/map_rerank.py +34 -21
  151. langchain/chains/combine_documents/reduce.py +47 -26
  152. langchain/chains/combine_documents/refine.py +26 -17
  153. langchain/chains/combine_documents/stuff.py +19 -12
  154. langchain/chains/constitutional_ai/base.py +4 -4
  155. langchain/chains/constitutional_ai/principles.py +22 -25
  156. langchain/chains/constitutional_ai/prompts.py +25 -28
  157. langchain/chains/conversation/base.py +6 -7
  158. langchain/chains/conversation/memory.py +5 -5
  159. langchain/chains/conversation/prompt.py +5 -5
  160. langchain/chains/conversational_retrieval/base.py +41 -20
  161. langchain/chains/conversational_retrieval/prompts.py +2 -3
  162. langchain/chains/elasticsearch_database/base.py +8 -9
  163. langchain/chains/elasticsearch_database/prompts.py +2 -3
  164. langchain/chains/ernie_functions/__init__.py +2 -2
  165. langchain/chains/example_generator.py +3 -1
  166. langchain/chains/flare/base.py +26 -12
  167. langchain/chains/graph_qa/cypher.py +2 -2
  168. langchain/chains/graph_qa/falkordb.py +1 -1
  169. langchain/chains/graph_qa/gremlin.py +1 -1
  170. langchain/chains/graph_qa/neptune_sparql.py +1 -1
  171. langchain/chains/graph_qa/prompts.py +2 -2
  172. langchain/chains/history_aware_retriever.py +2 -1
  173. langchain/chains/hyde/base.py +6 -5
  174. langchain/chains/hyde/prompts.py +5 -6
  175. langchain/chains/llm.py +77 -61
  176. langchain/chains/llm_bash/__init__.py +2 -1
  177. langchain/chains/llm_checker/base.py +7 -5
  178. langchain/chains/llm_checker/prompt.py +3 -4
  179. langchain/chains/llm_math/base.py +16 -9
  180. langchain/chains/llm_math/prompt.py +1 -2
  181. langchain/chains/llm_summarization_checker/base.py +9 -6
  182. langchain/chains/llm_symbolic_math/__init__.py +2 -1
  183. langchain/chains/loading.py +170 -153
  184. langchain/chains/mapreduce.py +4 -3
  185. langchain/chains/moderation.py +8 -9
  186. langchain/chains/natbot/base.py +8 -8
  187. langchain/chains/natbot/crawler.py +73 -76
  188. langchain/chains/natbot/prompt.py +2 -3
  189. langchain/chains/openai_functions/__init__.py +7 -7
  190. langchain/chains/openai_functions/base.py +13 -10
  191. langchain/chains/openai_functions/citation_fuzzy_match.py +12 -11
  192. langchain/chains/openai_functions/extraction.py +19 -19
  193. langchain/chains/openai_functions/openapi.py +35 -35
  194. langchain/chains/openai_functions/qa_with_structure.py +19 -12
  195. langchain/chains/openai_functions/tagging.py +2 -4
  196. langchain/chains/openai_tools/extraction.py +7 -8
  197. langchain/chains/qa_generation/base.py +4 -3
  198. langchain/chains/qa_generation/prompt.py +5 -5
  199. langchain/chains/qa_with_sources/base.py +14 -6
  200. langchain/chains/qa_with_sources/loading.py +16 -8
  201. langchain/chains/qa_with_sources/map_reduce_prompt.py +8 -9
  202. langchain/chains/qa_with_sources/refine_prompts.py +0 -1
  203. langchain/chains/qa_with_sources/retrieval.py +14 -5
  204. langchain/chains/qa_with_sources/stuff_prompt.py +6 -7
  205. langchain/chains/qa_with_sources/vector_db.py +17 -6
  206. langchain/chains/query_constructor/base.py +34 -33
  207. langchain/chains/query_constructor/ir.py +4 -4
  208. langchain/chains/query_constructor/parser.py +37 -32
  209. langchain/chains/query_constructor/prompt.py +5 -6
  210. langchain/chains/question_answering/chain.py +21 -10
  211. langchain/chains/question_answering/map_reduce_prompt.py +14 -14
  212. langchain/chains/question_answering/map_rerank_prompt.py +3 -3
  213. langchain/chains/question_answering/refine_prompts.py +2 -5
  214. langchain/chains/question_answering/stuff_prompt.py +5 -5
  215. langchain/chains/retrieval.py +1 -3
  216. langchain/chains/retrieval_qa/base.py +34 -27
  217. langchain/chains/retrieval_qa/prompt.py +1 -2
  218. langchain/chains/router/__init__.py +3 -3
  219. langchain/chains/router/base.py +24 -20
  220. langchain/chains/router/embedding_router.py +12 -8
  221. langchain/chains/router/llm_router.py +17 -16
  222. langchain/chains/router/multi_prompt.py +2 -2
  223. langchain/chains/router/multi_retrieval_qa.py +10 -5
  224. langchain/chains/sequential.py +30 -18
  225. langchain/chains/sql_database/prompt.py +14 -16
  226. langchain/chains/sql_database/query.py +6 -5
  227. langchain/chains/structured_output/__init__.py +1 -1
  228. langchain/chains/structured_output/base.py +75 -67
  229. langchain/chains/summarize/chain.py +11 -5
  230. langchain/chains/summarize/map_reduce_prompt.py +0 -1
  231. langchain/chains/summarize/stuff_prompt.py +0 -1
  232. langchain/chains/transform.py +5 -6
  233. langchain/chat_loaders/facebook_messenger.py +1 -1
  234. langchain/chat_loaders/langsmith.py +1 -1
  235. langchain/chat_loaders/utils.py +3 -3
  236. langchain/chat_models/__init__.py +20 -19
  237. langchain/chat_models/anthropic.py +1 -1
  238. langchain/chat_models/azureml_endpoint.py +1 -1
  239. langchain/chat_models/baidu_qianfan_endpoint.py +1 -1
  240. langchain/chat_models/base.py +160 -123
  241. langchain/chat_models/bedrock.py +1 -1
  242. langchain/chat_models/fake.py +1 -1
  243. langchain/chat_models/meta.py +1 -1
  244. langchain/chat_models/pai_eas_endpoint.py +1 -1
  245. langchain/chat_models/promptlayer_openai.py +1 -1
  246. langchain/chat_models/volcengine_maas.py +1 -1
  247. langchain/docstore/base.py +1 -1
  248. langchain/document_loaders/__init__.py +9 -9
  249. langchain/document_loaders/airbyte.py +3 -3
  250. langchain/document_loaders/assemblyai.py +1 -1
  251. langchain/document_loaders/azure_blob_storage_container.py +1 -1
  252. langchain/document_loaders/azure_blob_storage_file.py +1 -1
  253. langchain/document_loaders/baiducloud_bos_file.py +1 -1
  254. langchain/document_loaders/base.py +1 -1
  255. langchain/document_loaders/blob_loaders/__init__.py +1 -1
  256. langchain/document_loaders/blockchain.py +1 -1
  257. langchain/document_loaders/chatgpt.py +1 -1
  258. langchain/document_loaders/college_confidential.py +1 -1
  259. langchain/document_loaders/confluence.py +1 -1
  260. langchain/document_loaders/email.py +1 -1
  261. langchain/document_loaders/facebook_chat.py +1 -1
  262. langchain/document_loaders/markdown.py +1 -1
  263. langchain/document_loaders/notebook.py +1 -1
  264. langchain/document_loaders/org_mode.py +1 -1
  265. langchain/document_loaders/parsers/__init__.py +1 -1
  266. langchain/document_loaders/parsers/docai.py +1 -1
  267. langchain/document_loaders/parsers/generic.py +1 -1
  268. langchain/document_loaders/parsers/html/__init__.py +1 -1
  269. langchain/document_loaders/parsers/html/bs4.py +1 -1
  270. langchain/document_loaders/parsers/language/cobol.py +1 -1
  271. langchain/document_loaders/parsers/language/python.py +1 -1
  272. langchain/document_loaders/parsers/msword.py +1 -1
  273. langchain/document_loaders/parsers/pdf.py +5 -5
  274. langchain/document_loaders/parsers/registry.py +1 -1
  275. langchain/document_loaders/pdf.py +8 -8
  276. langchain/document_loaders/powerpoint.py +1 -1
  277. langchain/document_loaders/pyspark_dataframe.py +1 -1
  278. langchain/document_loaders/telegram.py +2 -2
  279. langchain/document_loaders/tencent_cos_directory.py +1 -1
  280. langchain/document_loaders/unstructured.py +5 -5
  281. langchain/document_loaders/url_playwright.py +1 -1
  282. langchain/document_loaders/whatsapp_chat.py +1 -1
  283. langchain/document_loaders/youtube.py +2 -2
  284. langchain/document_transformers/__init__.py +3 -3
  285. langchain/document_transformers/beautiful_soup_transformer.py +1 -1
  286. langchain/document_transformers/doctran_text_extract.py +1 -1
  287. langchain/document_transformers/doctran_text_qa.py +1 -1
  288. langchain/document_transformers/doctran_text_translate.py +1 -1
  289. langchain/document_transformers/embeddings_redundant_filter.py +3 -3
  290. langchain/document_transformers/google_translate.py +1 -1
  291. langchain/document_transformers/html2text.py +1 -1
  292. langchain/document_transformers/nuclia_text_transform.py +1 -1
  293. langchain/embeddings/__init__.py +5 -5
  294. langchain/embeddings/base.py +33 -24
  295. langchain/embeddings/cache.py +117 -26
  296. langchain/embeddings/fake.py +1 -1
  297. langchain/embeddings/huggingface.py +2 -2
  298. langchain/evaluation/__init__.py +22 -22
  299. langchain/evaluation/agents/trajectory_eval_chain.py +24 -24
  300. langchain/evaluation/agents/trajectory_eval_prompt.py +6 -9
  301. langchain/evaluation/comparison/__init__.py +1 -1
  302. langchain/evaluation/comparison/eval_chain.py +21 -14
  303. langchain/evaluation/comparison/prompt.py +1 -2
  304. langchain/evaluation/criteria/__init__.py +1 -1
  305. langchain/evaluation/criteria/eval_chain.py +21 -12
  306. langchain/evaluation/criteria/prompt.py +2 -3
  307. langchain/evaluation/embedding_distance/base.py +24 -21
  308. langchain/evaluation/loading.py +15 -11
  309. langchain/evaluation/parsing/base.py +4 -1
  310. langchain/evaluation/parsing/json_distance.py +5 -2
  311. langchain/evaluation/parsing/json_schema.py +12 -8
  312. langchain/evaluation/qa/__init__.py +1 -1
  313. langchain/evaluation/qa/eval_chain.py +13 -6
  314. langchain/evaluation/qa/eval_prompt.py +7 -8
  315. langchain/evaluation/qa/generate_chain.py +2 -1
  316. langchain/evaluation/qa/generate_prompt.py +2 -4
  317. langchain/evaluation/schema.py +38 -30
  318. langchain/evaluation/scoring/__init__.py +1 -1
  319. langchain/evaluation/scoring/eval_chain.py +23 -16
  320. langchain/evaluation/scoring/prompt.py +0 -1
  321. langchain/evaluation/string_distance/base.py +15 -10
  322. langchain/globals.py +12 -11
  323. langchain/graphs/__init__.py +6 -6
  324. langchain/graphs/graph_document.py +1 -1
  325. langchain/graphs/networkx_graph.py +2 -2
  326. langchain/hub.py +9 -11
  327. langchain/indexes/__init__.py +3 -3
  328. langchain/indexes/_sql_record_manager.py +63 -46
  329. langchain/indexes/prompts/entity_extraction.py +1 -2
  330. langchain/indexes/prompts/entity_summarization.py +1 -2
  331. langchain/indexes/prompts/knowledge_triplet_extraction.py +1 -3
  332. langchain/indexes/vectorstore.py +35 -19
  333. langchain/llms/__init__.py +13 -13
  334. langchain/llms/ai21.py +1 -1
  335. langchain/llms/azureml_endpoint.py +4 -4
  336. langchain/llms/base.py +15 -7
  337. langchain/llms/bedrock.py +1 -1
  338. langchain/llms/cloudflare_workersai.py +1 -1
  339. langchain/llms/gradient_ai.py +1 -1
  340. langchain/llms/loading.py +1 -1
  341. langchain/llms/openai.py +1 -1
  342. langchain/llms/sagemaker_endpoint.py +1 -1
  343. langchain/load/dump.py +1 -1
  344. langchain/load/load.py +1 -1
  345. langchain/load/serializable.py +3 -3
  346. langchain/memory/__init__.py +3 -3
  347. langchain/memory/buffer.py +11 -8
  348. langchain/memory/chat_memory.py +14 -8
  349. langchain/memory/chat_message_histories/__init__.py +1 -1
  350. langchain/memory/chat_message_histories/astradb.py +1 -1
  351. langchain/memory/chat_message_histories/cassandra.py +1 -1
  352. langchain/memory/chat_message_histories/cosmos_db.py +1 -1
  353. langchain/memory/chat_message_histories/dynamodb.py +1 -1
  354. langchain/memory/chat_message_histories/elasticsearch.py +1 -1
  355. langchain/memory/chat_message_histories/file.py +1 -1
  356. langchain/memory/chat_message_histories/firestore.py +1 -1
  357. langchain/memory/chat_message_histories/momento.py +1 -1
  358. langchain/memory/chat_message_histories/mongodb.py +1 -1
  359. langchain/memory/chat_message_histories/neo4j.py +1 -1
  360. langchain/memory/chat_message_histories/postgres.py +1 -1
  361. langchain/memory/chat_message_histories/redis.py +1 -1
  362. langchain/memory/chat_message_histories/rocksetdb.py +1 -1
  363. langchain/memory/chat_message_histories/singlestoredb.py +1 -1
  364. langchain/memory/chat_message_histories/streamlit.py +1 -1
  365. langchain/memory/chat_message_histories/upstash_redis.py +1 -1
  366. langchain/memory/chat_message_histories/xata.py +1 -1
  367. langchain/memory/chat_message_histories/zep.py +1 -1
  368. langchain/memory/combined.py +13 -12
  369. langchain/memory/entity.py +84 -61
  370. langchain/memory/prompt.py +10 -11
  371. langchain/memory/readonly.py +0 -2
  372. langchain/memory/simple.py +1 -3
  373. langchain/memory/summary.py +13 -11
  374. langchain/memory/summary_buffer.py +17 -8
  375. langchain/memory/utils.py +3 -2
  376. langchain/memory/vectorstore.py +13 -6
  377. langchain/memory/vectorstore_token_buffer_memory.py +5 -5
  378. langchain/model_laboratory.py +12 -11
  379. langchain/output_parsers/__init__.py +4 -4
  380. langchain/output_parsers/boolean.py +7 -4
  381. langchain/output_parsers/combining.py +10 -5
  382. langchain/output_parsers/datetime.py +32 -31
  383. langchain/output_parsers/enum.py +5 -3
  384. langchain/output_parsers/fix.py +52 -52
  385. langchain/output_parsers/format_instructions.py +6 -8
  386. langchain/output_parsers/json.py +2 -2
  387. langchain/output_parsers/list.py +2 -2
  388. langchain/output_parsers/loading.py +9 -9
  389. langchain/output_parsers/openai_functions.py +3 -3
  390. langchain/output_parsers/openai_tools.py +1 -1
  391. langchain/output_parsers/pandas_dataframe.py +43 -47
  392. langchain/output_parsers/prompts.py +1 -2
  393. langchain/output_parsers/rail_parser.py +1 -1
  394. langchain/output_parsers/regex.py +7 -8
  395. langchain/output_parsers/regex_dict.py +7 -10
  396. langchain/output_parsers/retry.py +77 -78
  397. langchain/output_parsers/structured.py +11 -6
  398. langchain/output_parsers/yaml.py +15 -11
  399. langchain/prompts/__init__.py +5 -3
  400. langchain/prompts/base.py +5 -5
  401. langchain/prompts/chat.py +10 -9
  402. langchain/prompts/example_selector/__init__.py +3 -1
  403. langchain/prompts/example_selector/semantic_similarity.py +2 -2
  404. langchain/prompts/few_shot.py +1 -1
  405. langchain/prompts/loading.py +3 -3
  406. langchain/prompts/prompt.py +1 -1
  407. langchain/retrievers/__init__.py +5 -5
  408. langchain/retrievers/bedrock.py +2 -2
  409. langchain/retrievers/bm25.py +1 -1
  410. langchain/retrievers/contextual_compression.py +15 -13
  411. langchain/retrievers/docarray.py +1 -1
  412. langchain/retrievers/document_compressors/__init__.py +7 -5
  413. langchain/retrievers/document_compressors/base.py +13 -7
  414. langchain/retrievers/document_compressors/chain_extract.py +4 -5
  415. langchain/retrievers/document_compressors/chain_extract_prompt.py +2 -3
  416. langchain/retrievers/document_compressors/chain_filter.py +11 -12
  417. langchain/retrievers/document_compressors/chain_filter_prompt.py +1 -2
  418. langchain/retrievers/document_compressors/cohere_rerank.py +17 -19
  419. langchain/retrievers/document_compressors/embeddings_filter.py +23 -23
  420. langchain/retrievers/document_compressors/flashrank_rerank.py +1 -1
  421. langchain/retrievers/document_compressors/listwise_rerank.py +11 -6
  422. langchain/retrievers/ensemble.py +28 -25
  423. langchain/retrievers/google_cloud_documentai_warehouse.py +1 -1
  424. langchain/retrievers/google_vertex_ai_search.py +2 -2
  425. langchain/retrievers/kendra.py +10 -10
  426. langchain/retrievers/llama_index.py +1 -1
  427. langchain/retrievers/merger_retriever.py +11 -11
  428. langchain/retrievers/milvus.py +1 -1
  429. langchain/retrievers/multi_query.py +32 -26
  430. langchain/retrievers/multi_vector.py +20 -8
  431. langchain/retrievers/parent_document_retriever.py +18 -9
  432. langchain/retrievers/re_phraser.py +6 -5
  433. langchain/retrievers/self_query/base.py +138 -119
  434. langchain/retrievers/time_weighted_retriever.py +18 -7
  435. langchain/retrievers/zilliz.py +1 -1
  436. langchain/runnables/hub.py +2 -1
  437. langchain/runnables/openai_functions.py +6 -2
  438. langchain/schema/__init__.py +23 -23
  439. langchain/schema/cache.py +1 -1
  440. langchain/schema/callbacks/base.py +7 -7
  441. langchain/schema/callbacks/manager.py +19 -19
  442. langchain/schema/callbacks/tracers/base.py +3 -2
  443. langchain/schema/callbacks/tracers/evaluation.py +1 -1
  444. langchain/schema/callbacks/tracers/langchain.py +1 -1
  445. langchain/schema/callbacks/tracers/langchain_v1.py +1 -1
  446. langchain/schema/callbacks/tracers/log_stream.py +1 -1
  447. langchain/schema/callbacks/tracers/schemas.py +8 -8
  448. langchain/schema/callbacks/tracers/stdout.py +3 -3
  449. langchain/schema/document.py +1 -1
  450. langchain/schema/language_model.py +2 -2
  451. langchain/schema/messages.py +12 -12
  452. langchain/schema/output.py +3 -3
  453. langchain/schema/output_parser.py +3 -3
  454. langchain/schema/runnable/__init__.py +3 -3
  455. langchain/schema/runnable/base.py +9 -9
  456. langchain/schema/runnable/config.py +5 -5
  457. langchain/schema/runnable/configurable.py +1 -1
  458. langchain/schema/runnable/history.py +1 -1
  459. langchain/schema/runnable/passthrough.py +1 -1
  460. langchain/schema/runnable/utils.py +16 -16
  461. langchain/schema/vectorstore.py +1 -1
  462. langchain/smith/__init__.py +1 -1
  463. langchain/smith/evaluation/__init__.py +2 -2
  464. langchain/smith/evaluation/config.py +10 -7
  465. langchain/smith/evaluation/name_generation.py +3 -3
  466. langchain/smith/evaluation/progress.py +11 -2
  467. langchain/smith/evaluation/runner_utils.py +181 -129
  468. langchain/smith/evaluation/string_run_evaluator.py +75 -68
  469. langchain/storage/__init__.py +2 -2
  470. langchain/storage/_lc_store.py +4 -2
  471. langchain/storage/encoder_backed.py +6 -2
  472. langchain/storage/file_system.py +19 -16
  473. langchain/storage/in_memory.py +1 -1
  474. langchain/storage/upstash_redis.py +1 -1
  475. langchain/text_splitter.py +15 -15
  476. langchain/tools/__init__.py +28 -26
  477. langchain/tools/ainetwork/app.py +1 -1
  478. langchain/tools/ainetwork/base.py +1 -1
  479. langchain/tools/ainetwork/owner.py +1 -1
  480. langchain/tools/ainetwork/rule.py +1 -1
  481. langchain/tools/ainetwork/transfer.py +1 -1
  482. langchain/tools/ainetwork/value.py +1 -1
  483. langchain/tools/amadeus/closest_airport.py +1 -1
  484. langchain/tools/amadeus/flight_search.py +1 -1
  485. langchain/tools/azure_cognitive_services/__init__.py +1 -1
  486. langchain/tools/base.py +4 -4
  487. langchain/tools/bearly/tool.py +1 -1
  488. langchain/tools/bing_search/__init__.py +1 -1
  489. langchain/tools/bing_search/tool.py +1 -1
  490. langchain/tools/dataforseo_api_search/__init__.py +1 -1
  491. langchain/tools/dataforseo_api_search/tool.py +1 -1
  492. langchain/tools/ddg_search/tool.py +1 -1
  493. langchain/tools/e2b_data_analysis/tool.py +2 -2
  494. langchain/tools/edenai/__init__.py +1 -1
  495. langchain/tools/file_management/__init__.py +1 -1
  496. langchain/tools/file_management/copy.py +1 -1
  497. langchain/tools/file_management/delete.py +1 -1
  498. langchain/tools/gmail/__init__.py +2 -2
  499. langchain/tools/gmail/get_message.py +1 -1
  500. langchain/tools/gmail/search.py +1 -1
  501. langchain/tools/gmail/send_message.py +1 -1
  502. langchain/tools/google_finance/__init__.py +1 -1
  503. langchain/tools/google_finance/tool.py +1 -1
  504. langchain/tools/google_scholar/__init__.py +1 -1
  505. langchain/tools/google_scholar/tool.py +1 -1
  506. langchain/tools/google_search/__init__.py +1 -1
  507. langchain/tools/google_search/tool.py +1 -1
  508. langchain/tools/google_serper/__init__.py +1 -1
  509. langchain/tools/google_serper/tool.py +1 -1
  510. langchain/tools/google_trends/__init__.py +1 -1
  511. langchain/tools/google_trends/tool.py +1 -1
  512. langchain/tools/jira/tool.py +20 -1
  513. langchain/tools/json/tool.py +25 -3
  514. langchain/tools/memorize/tool.py +1 -1
  515. langchain/tools/multion/__init__.py +1 -1
  516. langchain/tools/multion/update_session.py +1 -1
  517. langchain/tools/office365/__init__.py +2 -2
  518. langchain/tools/office365/events_search.py +1 -1
  519. langchain/tools/office365/messages_search.py +1 -1
  520. langchain/tools/office365/send_event.py +1 -1
  521. langchain/tools/office365/send_message.py +1 -1
  522. langchain/tools/openapi/utils/api_models.py +6 -6
  523. langchain/tools/playwright/__init__.py +5 -5
  524. langchain/tools/playwright/click.py +1 -1
  525. langchain/tools/playwright/extract_hyperlinks.py +1 -1
  526. langchain/tools/playwright/get_elements.py +1 -1
  527. langchain/tools/playwright/navigate.py +1 -1
  528. langchain/tools/plugin.py +2 -2
  529. langchain/tools/powerbi/tool.py +1 -1
  530. langchain/tools/python/__init__.py +2 -1
  531. langchain/tools/reddit_search/tool.py +1 -1
  532. langchain/tools/render.py +2 -2
  533. langchain/tools/requests/tool.py +2 -2
  534. langchain/tools/searchapi/tool.py +1 -1
  535. langchain/tools/searx_search/tool.py +1 -1
  536. langchain/tools/slack/get_message.py +1 -1
  537. langchain/tools/spark_sql/tool.py +1 -1
  538. langchain/tools/sql_database/tool.py +1 -1
  539. langchain/tools/tavily_search/__init__.py +1 -1
  540. langchain/tools/tavily_search/tool.py +1 -1
  541. langchain/tools/zapier/__init__.py +1 -1
  542. langchain/tools/zapier/tool.py +24 -2
  543. langchain/utilities/__init__.py +4 -4
  544. langchain/utilities/arcee.py +4 -4
  545. langchain/utilities/clickup.py +4 -4
  546. langchain/utilities/dalle_image_generator.py +1 -1
  547. langchain/utilities/dataforseo_api_search.py +1 -1
  548. langchain/utilities/opaqueprompts.py +1 -1
  549. langchain/utilities/reddit_search.py +1 -1
  550. langchain/utilities/sql_database.py +1 -1
  551. langchain/utilities/tavily_search.py +1 -1
  552. langchain/utilities/vertexai.py +2 -2
  553. langchain/utils/__init__.py +1 -1
  554. langchain/utils/aiter.py +1 -1
  555. langchain/utils/html.py +3 -3
  556. langchain/utils/input.py +1 -1
  557. langchain/utils/iter.py +1 -1
  558. langchain/utils/json_schema.py +1 -3
  559. langchain/utils/strings.py +1 -1
  560. langchain/utils/utils.py +6 -6
  561. langchain/vectorstores/__init__.py +5 -5
  562. langchain/vectorstores/alibabacloud_opensearch.py +1 -1
  563. langchain/vectorstores/azure_cosmos_db.py +1 -1
  564. langchain/vectorstores/clickhouse.py +1 -1
  565. langchain/vectorstores/elastic_vector_search.py +1 -1
  566. langchain/vectorstores/elasticsearch.py +2 -2
  567. langchain/vectorstores/myscale.py +1 -1
  568. langchain/vectorstores/neo4j_vector.py +1 -1
  569. langchain/vectorstores/pgembedding.py +1 -1
  570. langchain/vectorstores/qdrant.py +1 -1
  571. langchain/vectorstores/redis/__init__.py +1 -1
  572. langchain/vectorstores/redis/base.py +1 -1
  573. langchain/vectorstores/redis/filters.py +4 -4
  574. langchain/vectorstores/redis/schema.py +6 -6
  575. langchain/vectorstores/sklearn.py +2 -2
  576. langchain/vectorstores/starrocks.py +1 -1
  577. langchain/vectorstores/utils.py +1 -1
  578. {langchain-0.3.25.dist-info → langchain-0.3.27.dist-info}/METADATA +5 -5
  579. {langchain-0.3.25.dist-info → langchain-0.3.27.dist-info}/RECORD +582 -582
  580. {langchain-0.3.25.dist-info → langchain-0.3.27.dist-info}/WHEEL +1 -1
  581. {langchain-0.3.25.dist-info → langchain-0.3.27.dist-info}/entry_points.txt +0 -0
  582. {langchain-0.3.25.dist-info → langchain-0.3.27.dist-info}/licenses/LICENSE +0 -0
langchain/prompts/chat.py CHANGED
@@ -2,7 +2,6 @@ from langchain_core.prompt_values import ChatPromptValue, ChatPromptValueConcret
2
2
  from langchain_core.prompts.chat import (
3
3
  AIMessagePromptTemplate,
4
4
  BaseChatPromptTemplate,
5
- BaseMessagePromptTemplate,
6
5
  BaseStringMessagePromptTemplate,
7
6
  ChatMessagePromptTemplate,
8
7
  ChatPromptTemplate,
@@ -17,20 +16,22 @@ from langchain_core.prompts.chat import (
17
16
  )
18
17
 
19
18
  __all__ = [
19
+ "AIMessagePromptTemplate",
20
+ "BaseChatPromptTemplate",
20
21
  "BaseMessagePromptTemplate",
21
- "MessagesPlaceholder",
22
22
  "BaseStringMessagePromptTemplate",
23
23
  "ChatMessagePromptTemplate",
24
- "HumanMessagePromptTemplate",
25
- "AIMessagePromptTemplate",
26
- "SystemMessagePromptTemplate",
27
- "BaseChatPromptTemplate",
28
24
  "ChatPromptTemplate",
29
25
  "ChatPromptValue",
30
26
  "ChatPromptValueConcrete",
31
- "_convert_to_message",
32
- "_create_template_from_message_type",
33
- "MessagePromptTemplateT",
27
+ "HumanMessagePromptTemplate",
34
28
  "MessageLike",
35
29
  "MessageLikeRepresentation",
30
+ "MessagePromptTemplateT",
31
+ "MessagesPlaceholder",
32
+ "SystemMessagePromptTemplate",
33
+ "_convert_to_message",
34
+ "_create_template_from_message_type",
36
35
  ]
36
+
37
+ from langchain_core.prompts.message import BaseMessagePromptTemplate
@@ -21,7 +21,9 @@ if TYPE_CHECKING:
21
21
  # Used to consolidate logic for raising deprecation warnings and
22
22
  # handling optional imports.
23
23
  DEPRECATED_LOOKUPS = {
24
- "NGramOverlapExampleSelector": "langchain_community.example_selectors.ngram_overlap"
24
+ "NGramOverlapExampleSelector": (
25
+ "langchain_community.example_selectors.ngram_overlap"
26
+ ),
25
27
  }
26
28
 
27
29
  _import_attribute = create_importer(__file__, deprecated_lookups=DEPRECATED_LOOKUPS)
@@ -5,7 +5,7 @@ from langchain_core.example_selectors.semantic_similarity import (
5
5
  )
6
6
 
7
7
  __all__ = [
8
- "sorted_values",
9
- "SemanticSimilarityExampleSelector",
10
8
  "MaxMarginalRelevanceExampleSelector",
9
+ "SemanticSimilarityExampleSelector",
10
+ "sorted_values",
11
11
  ]
@@ -5,7 +5,7 @@ from langchain_core.prompts.few_shot import (
5
5
  )
6
6
 
7
7
  __all__ = [
8
- "FewShotPromptTemplate",
9
8
  "FewShotChatMessagePromptTemplate",
9
+ "FewShotPromptTemplate",
10
10
  "_FewShotPromptTemplateMixin",
11
11
  ]
@@ -11,13 +11,13 @@ from langchain_core.prompts.loading import (
11
11
  from langchain_core.utils.loading import try_load_from_hub
12
12
 
13
13
  __all__ = [
14
- "load_prompt_from_config",
15
- "load_prompt",
16
- "try_load_from_hub",
17
14
  "_load_examples",
18
15
  "_load_few_shot_prompt",
19
16
  "_load_output_parser",
20
17
  "_load_prompt",
21
18
  "_load_prompt_from_file",
22
19
  "_load_template",
20
+ "load_prompt",
21
+ "load_prompt_from_config",
22
+ "try_load_from_hub",
23
23
  ]
@@ -3,4 +3,4 @@ from langchain_core.prompts.prompt import PromptTemplate
3
3
  # For backwards compatibility.
4
4
  Prompt = PromptTemplate
5
5
 
6
- __all__ = ["PromptTemplate", "Prompt"]
6
+ __all__ = ["Prompt", "PromptTemplate"]
@@ -148,8 +148,8 @@ __all__ = [
148
148
  "GoogleDocumentAIWarehouseRetriever",
149
149
  "GoogleVertexAIMultiTurnSearchRetriever",
150
150
  "GoogleVertexAISearchRetriever",
151
- "KayAiRetriever",
152
151
  "KNNRetriever",
152
+ "KayAiRetriever",
153
153
  "LlamaIndexGraphRetriever",
154
154
  "LlamaIndexRetriever",
155
155
  "MergerRetriever",
@@ -157,22 +157,22 @@ __all__ = [
157
157
  "MilvusRetriever",
158
158
  "MultiQueryRetriever",
159
159
  "MultiVectorRetriever",
160
+ "NeuralDBRetriever",
160
161
  "OutlineRetriever",
161
162
  "ParentDocumentRetriever",
162
163
  "PineconeHybridSearchRetriever",
163
164
  "PubMedRetriever",
164
- "RemoteLangChainRetriever",
165
165
  "RePhraseQueryRetriever",
166
- "SelfQueryRetriever",
166
+ "RemoteLangChainRetriever",
167
167
  "SVMRetriever",
168
- "TavilySearchAPIRetriever",
168
+ "SelfQueryRetriever",
169
169
  "TFIDFRetriever",
170
+ "TavilySearchAPIRetriever",
170
171
  "TimeWeightedVectorStoreRetriever",
171
172
  "VespaRetriever",
172
173
  "WeaviateHybridSearchRetriever",
173
174
  "WebResearchRetriever",
174
175
  "WikipediaRetriever",
175
176
  "ZepRetriever",
176
- "NeuralDBRetriever",
177
177
  "ZillizRetriever",
178
178
  ]
@@ -27,7 +27,7 @@ def __getattr__(name: str) -> Any:
27
27
 
28
28
 
29
29
  __all__ = [
30
- "VectorSearchConfig",
31
- "RetrievalConfig",
32
30
  "AmazonKnowledgeBasesRetriever",
31
+ "RetrievalConfig",
32
+ "VectorSearchConfig",
33
33
  ]
@@ -23,6 +23,6 @@ def __getattr__(name: str) -> Any:
23
23
 
24
24
 
25
25
  __all__ = [
26
- "default_preprocessing_func",
27
26
  "BM25Retriever",
27
+ "default_preprocessing_func",
28
28
  ]
@@ -4,14 +4,10 @@ from langchain_core.callbacks import (
4
4
  AsyncCallbackManagerForRetrieverRun,
5
5
  CallbackManagerForRetrieverRun,
6
6
  )
7
- from langchain_core.documents import Document
7
+ from langchain_core.documents import BaseDocumentCompressor, Document
8
8
  from langchain_core.retrievers import BaseRetriever, RetrieverLike
9
9
  from pydantic import ConfigDict
10
10
 
11
- from langchain.retrievers.document_compressors.base import (
12
- BaseDocumentCompressor,
13
- )
14
-
15
11
 
16
12
  class ContextualCompressionRetriever(BaseRetriever):
17
13
  """Retriever that wraps a base retriever and compresses the results."""
@@ -42,15 +38,18 @@ class ContextualCompressionRetriever(BaseRetriever):
42
38
  Sequence of relevant documents
43
39
  """
44
40
  docs = self.base_retriever.invoke(
45
- query, config={"callbacks": run_manager.get_child()}, **kwargs
41
+ query,
42
+ config={"callbacks": run_manager.get_child()},
43
+ **kwargs,
46
44
  )
47
45
  if docs:
48
46
  compressed_docs = self.base_compressor.compress_documents(
49
- docs, query, callbacks=run_manager.get_child()
47
+ docs,
48
+ query,
49
+ callbacks=run_manager.get_child(),
50
50
  )
51
51
  return list(compressed_docs)
52
- else:
53
- return []
52
+ return []
54
53
 
55
54
  async def _aget_relevant_documents(
56
55
  self,
@@ -68,12 +67,15 @@ class ContextualCompressionRetriever(BaseRetriever):
68
67
  List of relevant documents
69
68
  """
70
69
  docs = await self.base_retriever.ainvoke(
71
- query, config={"callbacks": run_manager.get_child()}, **kwargs
70
+ query,
71
+ config={"callbacks": run_manager.get_child()},
72
+ **kwargs,
72
73
  )
73
74
  if docs:
74
75
  compressed_docs = await self.base_compressor.acompress_documents(
75
- docs, query, callbacks=run_manager.get_child()
76
+ docs,
77
+ query,
78
+ callbacks=run_manager.get_child(),
76
79
  )
77
80
  return list(compressed_docs)
78
- else:
79
- return []
81
+ return []
@@ -23,6 +23,6 @@ def __getattr__(name: str) -> Any:
23
23
 
24
24
 
25
25
  __all__ = [
26
- "SearchType",
27
26
  "DocArrayRetriever",
27
+ "SearchType",
28
28
  ]
@@ -28,15 +28,17 @@ def __getattr__(name: str) -> Any:
28
28
  if name in _module_lookup:
29
29
  module = importlib.import_module(_module_lookup[name])
30
30
  return getattr(module, name)
31
- raise AttributeError(f"module {__name__} has no attribute {name}")
31
+ msg = f"module {__name__} has no attribute {name}"
32
+ raise AttributeError(msg)
32
33
 
33
34
 
34
35
  __all__ = [
36
+ "CohereRerank",
37
+ "CrossEncoderReranker",
35
38
  "DocumentCompressorPipeline",
36
39
  "EmbeddingsFilter",
37
- "LLMListwiseRerank",
40
+ "FlashrankRerank",
38
41
  "LLMChainExtractor",
39
42
  "LLMChainFilter",
40
- "CohereRerank",
41
- "CrossEncoderReranker",
42
- ] + list(_module_lookup.keys())
43
+ "LLMListwiseRerank",
44
+ ]
@@ -2,7 +2,7 @@ from collections.abc import Sequence
2
2
  from inspect import signature
3
3
  from typing import Optional, Union
4
4
 
5
- from langchain_core.callbacks.manager import Callbacks
5
+ from langchain_core.callbacks import Callbacks
6
6
  from langchain_core.documents import (
7
7
  BaseDocumentCompressor,
8
8
  BaseDocumentTransformer,
@@ -32,20 +32,23 @@ class DocumentCompressorPipeline(BaseDocumentCompressor):
32
32
  if isinstance(_transformer, BaseDocumentCompressor):
33
33
  accepts_callbacks = (
34
34
  signature(_transformer.compress_documents).parameters.get(
35
- "callbacks"
35
+ "callbacks",
36
36
  )
37
37
  is not None
38
38
  )
39
39
  if accepts_callbacks:
40
40
  documents = _transformer.compress_documents(
41
- documents, query, callbacks=callbacks
41
+ documents,
42
+ query,
43
+ callbacks=callbacks,
42
44
  )
43
45
  else:
44
46
  documents = _transformer.compress_documents(documents, query)
45
47
  elif isinstance(_transformer, BaseDocumentTransformer):
46
48
  documents = _transformer.transform_documents(documents)
47
49
  else:
48
- raise ValueError(f"Got unexpected transformer type: {_transformer}")
50
+ msg = f"Got unexpected transformer type: {_transformer}"
51
+ raise ValueError(msg) # noqa: TRY004
49
52
  return documents
50
53
 
51
54
  async def acompress_documents(
@@ -59,18 +62,21 @@ class DocumentCompressorPipeline(BaseDocumentCompressor):
59
62
  if isinstance(_transformer, BaseDocumentCompressor):
60
63
  accepts_callbacks = (
61
64
  signature(_transformer.acompress_documents).parameters.get(
62
- "callbacks"
65
+ "callbacks",
63
66
  )
64
67
  is not None
65
68
  )
66
69
  if accepts_callbacks:
67
70
  documents = await _transformer.acompress_documents(
68
- documents, query, callbacks=callbacks
71
+ documents,
72
+ query,
73
+ callbacks=callbacks,
69
74
  )
70
75
  else:
71
76
  documents = await _transformer.acompress_documents(documents, query)
72
77
  elif isinstance(_transformer, BaseDocumentTransformer):
73
78
  documents = await _transformer.atransform_documents(documents)
74
79
  else:
75
- raise ValueError(f"Got unexpected transformer type: {_transformer}")
80
+ msg = f"Got unexpected transformer type: {_transformer}"
81
+ raise ValueError(msg) # noqa: TRY004
76
82
  return documents
@@ -5,8 +5,8 @@ from __future__ import annotations
5
5
  from collections.abc import Sequence
6
6
  from typing import Any, Callable, Optional, cast
7
7
 
8
- from langchain_core.callbacks.manager import Callbacks
9
- from langchain_core.documents import Document
8
+ from langchain_core.callbacks import Callbacks
9
+ from langchain_core.documents import BaseDocumentCompressor, Document
10
10
  from langchain_core.language_models import BaseLanguageModel
11
11
  from langchain_core.output_parsers import BaseOutputParser, StrOutputParser
12
12
  from langchain_core.prompts import PromptTemplate
@@ -14,7 +14,6 @@ from langchain_core.runnables import Runnable
14
14
  from pydantic import ConfigDict
15
15
 
16
16
  from langchain.chains.llm import LLMChain
17
- from langchain.retrievers.document_compressors.base import BaseDocumentCompressor
18
17
  from langchain.retrievers.document_compressors.chain_extract_prompt import (
19
18
  prompt_template,
20
19
  )
@@ -81,7 +80,7 @@ class LLMChainExtractor(BaseDocumentCompressor):
81
80
  if len(output) == 0:
82
81
  continue
83
82
  compressed_docs.append(
84
- Document(page_content=cast(str, output), metadata=doc.metadata)
83
+ Document(page_content=cast(str, output), metadata=doc.metadata),
85
84
  )
86
85
  return compressed_docs
87
86
 
@@ -99,7 +98,7 @@ class LLMChainExtractor(BaseDocumentCompressor):
99
98
  if len(outputs[i]) == 0:
100
99
  continue
101
100
  compressed_docs.append(
102
- Document(page_content=outputs[i], metadata=doc.metadata)
101
+ Document(page_content=outputs[i], metadata=doc.metadata),
103
102
  )
104
103
  return compressed_docs
105
104
 
@@ -1,5 +1,4 @@
1
- # flake8: noqa
2
- prompt_template = """Given the following question and context, extract any part of the context *AS IS* that is relevant to answer the question. If none of the context is relevant return {no_output_str}.
1
+ prompt_template = """Given the following question and context, extract any part of the context *AS IS* that is relevant to answer the question. If none of the context is relevant return {no_output_str}.
3
2
 
4
3
  Remember, *DO NOT* edit the extracted parts of the context.
5
4
 
@@ -8,4 +7,4 @@ Remember, *DO NOT* edit the extracted parts of the context.
8
7
  >>>
9
8
  {{context}}
10
9
  >>>
11
- Extracted relevant parts:"""
10
+ Extracted relevant parts:""" # noqa: E501
@@ -3,8 +3,8 @@
3
3
  from collections.abc import Sequence
4
4
  from typing import Any, Callable, Optional
5
5
 
6
- from langchain_core.callbacks.manager import Callbacks
7
- from langchain_core.documents import Document
6
+ from langchain_core.callbacks import Callbacks
7
+ from langchain_core.documents import BaseDocumentCompressor, Document
8
8
  from langchain_core.language_models import BaseLanguageModel
9
9
  from langchain_core.output_parsers import StrOutputParser
10
10
  from langchain_core.prompts import BasePromptTemplate, PromptTemplate
@@ -14,7 +14,6 @@ from pydantic import ConfigDict
14
14
 
15
15
  from langchain.chains import LLMChain
16
16
  from langchain.output_parsers.boolean import BooleanOutputParser
17
- from langchain.retrievers.document_compressors.base import BaseDocumentCompressor
18
17
  from langchain.retrievers.document_compressors.chain_filter_prompt import (
19
18
  prompt_template,
20
19
  )
@@ -37,7 +36,7 @@ class LLMChainFilter(BaseDocumentCompressor):
37
36
  """Filter that drops documents that aren't relevant to the query."""
38
37
 
39
38
  llm_chain: Runnable
40
- """LLM wrapper to use for filtering documents.
39
+ """LLM wrapper to use for filtering documents.
41
40
  The chain prompt is expected to have a BooleanOutputParser."""
42
41
 
43
42
  get_input: Callable[[str, Document], dict] = default_get_input
@@ -59,7 +58,8 @@ class LLMChainFilter(BaseDocumentCompressor):
59
58
  config = RunnableConfig(callbacks=callbacks)
60
59
  outputs = zip(
61
60
  self.llm_chain.batch(
62
- [self.get_input(query, doc) for doc in documents], config=config
61
+ [self.get_input(query, doc) for doc in documents],
62
+ config=config,
63
63
  ),
64
64
  documents,
65
65
  )
@@ -70,9 +70,8 @@ class LLMChainFilter(BaseDocumentCompressor):
70
70
  output = output_[self.llm_chain.output_key]
71
71
  if self.llm_chain.prompt.output_parser is not None:
72
72
  include_doc = self.llm_chain.prompt.output_parser.parse(output)
73
- else:
74
- if isinstance(output_, bool):
75
- include_doc = output_
73
+ elif isinstance(output_, bool):
74
+ include_doc = output_
76
75
  if include_doc:
77
76
  filtered_docs.append(doc)
78
77
 
@@ -90,7 +89,8 @@ class LLMChainFilter(BaseDocumentCompressor):
90
89
  config = RunnableConfig(callbacks=callbacks)
91
90
  outputs = zip(
92
91
  await self.llm_chain.abatch(
93
- [self.get_input(query, doc) for doc in documents], config=config
92
+ [self.get_input(query, doc) for doc in documents],
93
+ config=config,
94
94
  ),
95
95
  documents,
96
96
  )
@@ -100,9 +100,8 @@ class LLMChainFilter(BaseDocumentCompressor):
100
100
  output = output_[self.llm_chain.output_key]
101
101
  if self.llm_chain.prompt.output_parser is not None:
102
102
  include_doc = self.llm_chain.prompt.output_parser.parse(output)
103
- else:
104
- if isinstance(output_, bool):
105
- include_doc = output_
103
+ elif isinstance(output_, bool):
104
+ include_doc = output_
106
105
  if include_doc:
107
106
  filtered_docs.append(doc)
108
107
 
@@ -1,4 +1,3 @@
1
- # flake8: noqa
2
1
  prompt_template = """Given the following question and context, return YES if the context is relevant to the question and NO if it isn't.
3
2
 
4
3
  > Question: {question}
@@ -6,4 +5,4 @@ prompt_template = """Given the following question and context, return YES if the
6
5
  >>>
7
6
  {context}
8
7
  >>>
9
- > Relevant (YES / NO):"""
8
+ > Relevant (YES / NO):""" # noqa: E501
@@ -5,16 +5,16 @@ from copy import deepcopy
5
5
  from typing import Any, Optional, Union
6
6
 
7
7
  from langchain_core._api.deprecation import deprecated
8
- from langchain_core.callbacks.manager import Callbacks
9
- from langchain_core.documents import Document
8
+ from langchain_core.callbacks import Callbacks
9
+ from langchain_core.documents import BaseDocumentCompressor, Document
10
10
  from langchain_core.utils import get_from_dict_or_env
11
11
  from pydantic import ConfigDict, model_validator
12
12
 
13
- from langchain.retrievers.document_compressors.base import BaseDocumentCompressor
14
-
15
13
 
16
14
  @deprecated(
17
- since="0.0.30", removal="1.0", alternative_import="langchain_cohere.CohereRerank"
15
+ since="0.0.30",
16
+ removal="1.0",
17
+ alternative_import="langchain_cohere.CohereRerank",
18
18
  )
19
19
  class CohereRerank(BaseDocumentCompressor):
20
20
  """Document compressor that uses `Cohere Rerank API`."""
@@ -26,7 +26,7 @@ class CohereRerank(BaseDocumentCompressor):
26
26
  model: str = "rerank-english-v2.0"
27
27
  """Model to use for reranking."""
28
28
  cohere_api_key: Optional[str] = None
29
- """Cohere API key. Must be specified directly or via environment variable
29
+ """Cohere API key. Must be specified directly or via environment variable
30
30
  COHERE_API_KEY."""
31
31
  user_agent: str = "langchain"
32
32
  """Identifier for the application making the request."""
@@ -43,13 +43,16 @@ class CohereRerank(BaseDocumentCompressor):
43
43
  if not values.get("client"):
44
44
  try:
45
45
  import cohere
46
- except ImportError:
47
- raise ImportError(
46
+ except ImportError as e:
47
+ msg = (
48
48
  "Could not import cohere python package. "
49
49
  "Please install it with `pip install cohere`."
50
50
  )
51
+ raise ImportError(msg) from e
51
52
  cohere_api_key = get_from_dict_or_env(
52
- values, "cohere_api_key", "COHERE_API_KEY"
53
+ values,
54
+ "cohere_api_key",
55
+ "COHERE_API_KEY",
53
56
  )
54
57
  client_name = values.get("user_agent", "langchain")
55
58
  values["client"] = cohere.Client(cohere_api_key, client_name=client_name)
@@ -89,16 +92,11 @@ class CohereRerank(BaseDocumentCompressor):
89
92
  max_chunks_per_doc=max_chunks_per_doc,
90
93
  )
91
94
  if hasattr(results, "results"):
92
- results = getattr(results, "results")
93
- result_dicts = []
94
- for res in results:
95
- result_dicts.append(
96
- {
97
- "index": res.index,
98
- "relevance_score": res.relevance_score,
99
- }
100
- )
101
- return result_dicts
95
+ results = results.results
96
+ return [
97
+ {"index": res.index, "relevance_score": res.relevance_score}
98
+ for res in results
99
+ ]
102
100
 
103
101
  def compress_documents(
104
102
  self,
@@ -1,25 +1,22 @@
1
1
  from collections.abc import Sequence
2
2
  from typing import Callable, Optional
3
3
 
4
- from langchain_core.callbacks.manager import Callbacks
5
- from langchain_core.documents import Document
4
+ from langchain_core.callbacks import Callbacks
5
+ from langchain_core.documents import BaseDocumentCompressor, Document
6
6
  from langchain_core.embeddings import Embeddings
7
7
  from langchain_core.utils import pre_init
8
8
  from pydantic import ConfigDict, Field
9
9
 
10
- from langchain.retrievers.document_compressors.base import (
11
- BaseDocumentCompressor,
12
- )
13
-
14
10
 
15
11
  def _get_similarity_function() -> Callable:
16
12
  try:
17
13
  from langchain_community.utils.math import cosine_similarity
18
- except ImportError:
19
- raise ImportError(
14
+ except ImportError as e:
15
+ msg = (
20
16
  "To use please install langchain-community "
21
17
  "with `pip install langchain-community`."
22
18
  )
19
+ raise ImportError(msg) from e
23
20
  return cosine_similarity
24
21
 
25
22
 
@@ -49,7 +46,8 @@ class EmbeddingsFilter(BaseDocumentCompressor):
49
46
  def validate_params(cls, values: dict) -> dict:
50
47
  """Validate similarity parameters."""
51
48
  if values["k"] is None and values["similarity_threshold"] is None:
52
- raise ValueError("Must specify one of `k` or `similarity_threshold`.")
49
+ msg = "Must specify one of `k` or `similarity_threshold`."
50
+ raise ValueError(msg)
53
51
  return values
54
52
 
55
53
  def compress_documents(
@@ -64,21 +62,22 @@ class EmbeddingsFilter(BaseDocumentCompressor):
64
62
  _get_embeddings_from_stateful_docs,
65
63
  get_stateful_documents,
66
64
  )
67
- except ImportError:
68
- raise ImportError(
65
+ except ImportError as e:
66
+ msg = (
69
67
  "To use please install langchain-community "
70
68
  "with `pip install langchain-community`."
71
69
  )
70
+ raise ImportError(msg) from e
72
71
 
73
72
  try:
74
73
  import numpy as np
75
74
  except ImportError as e:
76
- raise ImportError(
77
- "Could not import numpy, please install with `pip install numpy`."
78
- ) from e
75
+ msg = "Could not import numpy, please install with `pip install numpy`."
76
+ raise ImportError(msg) from e
79
77
  stateful_documents = get_stateful_documents(documents)
80
78
  embedded_documents = _get_embeddings_from_stateful_docs(
81
- self.embeddings, stateful_documents
79
+ self.embeddings,
80
+ stateful_documents,
82
81
  )
83
82
  embedded_query = self.embeddings.embed_query(query)
84
83
  similarity = self.similarity_fn([embedded_query], embedded_documents)[0]
@@ -87,7 +86,7 @@ class EmbeddingsFilter(BaseDocumentCompressor):
87
86
  included_idxs = np.argsort(similarity)[::-1][: self.k]
88
87
  if self.similarity_threshold is not None:
89
88
  similar_enough = np.where(
90
- similarity[included_idxs] > self.similarity_threshold
89
+ similarity[included_idxs] > self.similarity_threshold,
91
90
  )
92
91
  included_idxs = included_idxs[similar_enough]
93
92
  for i in included_idxs:
@@ -106,21 +105,22 @@ class EmbeddingsFilter(BaseDocumentCompressor):
106
105
  _aget_embeddings_from_stateful_docs,
107
106
  get_stateful_documents,
108
107
  )
109
- except ImportError:
110
- raise ImportError(
108
+ except ImportError as e:
109
+ msg = (
111
110
  "To use please install langchain-community "
112
111
  "with `pip install langchain-community`."
113
112
  )
113
+ raise ImportError(msg) from e
114
114
 
115
115
  try:
116
116
  import numpy as np
117
117
  except ImportError as e:
118
- raise ImportError(
119
- "Could not import numpy, please install with `pip install numpy`."
120
- ) from e
118
+ msg = "Could not import numpy, please install with `pip install numpy`."
119
+ raise ImportError(msg) from e
121
120
  stateful_documents = get_stateful_documents(documents)
122
121
  embedded_documents = await _aget_embeddings_from_stateful_docs(
123
- self.embeddings, stateful_documents
122
+ self.embeddings,
123
+ stateful_documents,
124
124
  )
125
125
  embedded_query = await self.embeddings.aembed_query(query)
126
126
  similarity = self.similarity_fn([embedded_query], embedded_documents)[0]
@@ -129,7 +129,7 @@ class EmbeddingsFilter(BaseDocumentCompressor):
129
129
  included_idxs = np.argsort(similarity)[::-1][: self.k]
130
130
  if self.similarity_threshold is not None:
131
131
  similar_enough = np.where(
132
- similarity[included_idxs] > self.similarity_threshold
132
+ similarity[included_idxs] > self.similarity_threshold,
133
133
  )
134
134
  included_idxs = included_idxs[similar_enough]
135
135
  for i in included_idxs:
@@ -11,7 +11,7 @@ if TYPE_CHECKING:
11
11
  # Used to consolidate logic for raising deprecation warnings and
12
12
  # handling optional imports.
13
13
  DEPRECATED_LOOKUP = {
14
- "FlashrankRerank": "langchain_community.document_compressors.flashrank_rerank"
14
+ "FlashrankRerank": "langchain_community.document_compressors.flashrank_rerank",
15
15
  }
16
16
 
17
17
  _import_attribute = create_importer(__package__, deprecated_lookups=DEPRECATED_LOOKUP)