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

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

Potentially problematic release.


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

Files changed (580) hide show
  1. langchain/__init__.py +110 -96
  2. langchain/_api/__init__.py +2 -2
  3. langchain/_api/deprecation.py +3 -3
  4. langchain/_api/module_import.py +51 -46
  5. langchain/_api/path.py +1 -1
  6. langchain/adapters/openai.py +8 -8
  7. langchain/agents/__init__.py +15 -12
  8. langchain/agents/agent.py +160 -133
  9. langchain/agents/agent_iterator.py +31 -14
  10. langchain/agents/agent_toolkits/__init__.py +7 -6
  11. langchain/agents/agent_toolkits/ainetwork/toolkit.py +1 -1
  12. langchain/agents/agent_toolkits/amadeus/toolkit.py +1 -1
  13. langchain/agents/agent_toolkits/azure_cognitive_services.py +1 -1
  14. langchain/agents/agent_toolkits/clickup/toolkit.py +1 -1
  15. langchain/agents/agent_toolkits/conversational_retrieval/openai_functions.py +6 -4
  16. langchain/agents/agent_toolkits/csv/__init__.py +4 -2
  17. langchain/agents/agent_toolkits/file_management/__init__.py +1 -1
  18. langchain/agents/agent_toolkits/file_management/toolkit.py +1 -1
  19. langchain/agents/agent_toolkits/github/toolkit.py +9 -9
  20. langchain/agents/agent_toolkits/gitlab/toolkit.py +1 -1
  21. langchain/agents/agent_toolkits/json/base.py +1 -1
  22. langchain/agents/agent_toolkits/multion/toolkit.py +1 -1
  23. langchain/agents/agent_toolkits/office365/toolkit.py +1 -1
  24. langchain/agents/agent_toolkits/openapi/base.py +1 -1
  25. langchain/agents/agent_toolkits/openapi/planner.py +2 -2
  26. langchain/agents/agent_toolkits/openapi/planner_prompt.py +10 -10
  27. langchain/agents/agent_toolkits/openapi/prompt.py +1 -1
  28. langchain/agents/agent_toolkits/openapi/toolkit.py +1 -1
  29. langchain/agents/agent_toolkits/pandas/__init__.py +4 -2
  30. langchain/agents/agent_toolkits/playwright/__init__.py +1 -1
  31. langchain/agents/agent_toolkits/playwright/toolkit.py +1 -1
  32. langchain/agents/agent_toolkits/powerbi/base.py +1 -1
  33. langchain/agents/agent_toolkits/powerbi/chat_base.py +1 -1
  34. langchain/agents/agent_toolkits/powerbi/prompt.py +2 -2
  35. langchain/agents/agent_toolkits/powerbi/toolkit.py +1 -1
  36. langchain/agents/agent_toolkits/python/__init__.py +4 -2
  37. langchain/agents/agent_toolkits/spark/__init__.py +4 -2
  38. langchain/agents/agent_toolkits/spark_sql/base.py +1 -1
  39. langchain/agents/agent_toolkits/spark_sql/toolkit.py +1 -1
  40. langchain/agents/agent_toolkits/sql/prompt.py +1 -1
  41. langchain/agents/agent_toolkits/sql/toolkit.py +1 -1
  42. langchain/agents/agent_toolkits/vectorstore/base.py +2 -2
  43. langchain/agents/agent_toolkits/vectorstore/prompt.py +2 -4
  44. langchain/agents/agent_toolkits/vectorstore/toolkit.py +12 -11
  45. langchain/agents/agent_toolkits/xorbits/__init__.py +4 -2
  46. langchain/agents/agent_toolkits/zapier/toolkit.py +1 -1
  47. langchain/agents/agent_types.py +6 -6
  48. langchain/agents/chat/base.py +6 -12
  49. langchain/agents/chat/output_parser.py +9 -6
  50. langchain/agents/chat/prompt.py +3 -4
  51. langchain/agents/conversational/base.py +9 -5
  52. langchain/agents/conversational/output_parser.py +4 -2
  53. langchain/agents/conversational/prompt.py +2 -3
  54. langchain/agents/conversational_chat/base.py +7 -5
  55. langchain/agents/conversational_chat/output_parser.py +9 -11
  56. langchain/agents/conversational_chat/prompt.py +5 -6
  57. langchain/agents/format_scratchpad/__init__.py +3 -3
  58. langchain/agents/format_scratchpad/log_to_messages.py +1 -1
  59. langchain/agents/format_scratchpad/openai_functions.py +8 -6
  60. langchain/agents/format_scratchpad/tools.py +5 -3
  61. langchain/agents/format_scratchpad/xml.py +33 -2
  62. langchain/agents/initialize.py +16 -8
  63. langchain/agents/json_chat/base.py +18 -18
  64. langchain/agents/json_chat/prompt.py +2 -3
  65. langchain/agents/load_tools.py +2 -1
  66. langchain/agents/loading.py +28 -18
  67. langchain/agents/mrkl/base.py +9 -4
  68. langchain/agents/mrkl/output_parser.py +17 -13
  69. langchain/agents/mrkl/prompt.py +1 -2
  70. langchain/agents/openai_assistant/base.py +80 -70
  71. langchain/agents/openai_functions_agent/base.py +46 -37
  72. langchain/agents/openai_functions_multi_agent/base.py +39 -26
  73. langchain/agents/openai_tools/base.py +8 -8
  74. langchain/agents/output_parsers/__init__.py +3 -3
  75. langchain/agents/output_parsers/json.py +6 -6
  76. langchain/agents/output_parsers/openai_functions.py +15 -7
  77. langchain/agents/output_parsers/openai_tools.py +9 -4
  78. langchain/agents/output_parsers/react_json_single_input.py +10 -5
  79. langchain/agents/output_parsers/react_single_input.py +15 -11
  80. langchain/agents/output_parsers/self_ask.py +3 -2
  81. langchain/agents/output_parsers/tools.py +18 -13
  82. langchain/agents/output_parsers/xml.py +99 -28
  83. langchain/agents/react/agent.py +4 -4
  84. langchain/agents/react/base.py +22 -17
  85. langchain/agents/react/output_parser.py +5 -6
  86. langchain/agents/react/textworld_prompt.py +0 -1
  87. langchain/agents/react/wiki_prompt.py +14 -15
  88. langchain/agents/schema.py +3 -2
  89. langchain/agents/self_ask_with_search/base.py +19 -15
  90. langchain/agents/self_ask_with_search/prompt.py +0 -1
  91. langchain/agents/structured_chat/base.py +14 -11
  92. langchain/agents/structured_chat/output_parser.py +16 -18
  93. langchain/agents/structured_chat/prompt.py +3 -4
  94. langchain/agents/tool_calling_agent/base.py +7 -6
  95. langchain/agents/tools.py +2 -2
  96. langchain/agents/utils.py +2 -3
  97. langchain/agents/xml/base.py +5 -5
  98. langchain/agents/xml/prompt.py +1 -2
  99. langchain/cache.py +12 -12
  100. langchain/callbacks/__init__.py +11 -11
  101. langchain/callbacks/aim_callback.py +2 -2
  102. langchain/callbacks/argilla_callback.py +1 -1
  103. langchain/callbacks/arize_callback.py +1 -1
  104. langchain/callbacks/arthur_callback.py +1 -1
  105. langchain/callbacks/base.py +7 -7
  106. langchain/callbacks/clearml_callback.py +1 -1
  107. langchain/callbacks/comet_ml_callback.py +1 -1
  108. langchain/callbacks/confident_callback.py +1 -1
  109. langchain/callbacks/context_callback.py +1 -1
  110. langchain/callbacks/flyte_callback.py +1 -1
  111. langchain/callbacks/human.py +2 -2
  112. langchain/callbacks/infino_callback.py +1 -1
  113. langchain/callbacks/labelstudio_callback.py +1 -1
  114. langchain/callbacks/llmonitor_callback.py +1 -1
  115. langchain/callbacks/manager.py +5 -5
  116. langchain/callbacks/mlflow_callback.py +2 -2
  117. langchain/callbacks/openai_info.py +1 -1
  118. langchain/callbacks/promptlayer_callback.py +1 -1
  119. langchain/callbacks/sagemaker_callback.py +1 -1
  120. langchain/callbacks/streaming_aiter.py +4 -1
  121. langchain/callbacks/streaming_aiter_final_only.py +5 -3
  122. langchain/callbacks/streaming_stdout_final_only.py +5 -3
  123. langchain/callbacks/streamlit/__init__.py +3 -2
  124. langchain/callbacks/streamlit/mutable_expander.py +1 -1
  125. langchain/callbacks/streamlit/streamlit_callback_handler.py +3 -3
  126. langchain/callbacks/tracers/__init__.py +1 -1
  127. langchain/callbacks/tracers/comet.py +1 -1
  128. langchain/callbacks/tracers/evaluation.py +1 -1
  129. langchain/callbacks/tracers/log_stream.py +1 -1
  130. langchain/callbacks/tracers/logging.py +1 -1
  131. langchain/callbacks/tracers/stdout.py +1 -1
  132. langchain/callbacks/trubrics_callback.py +1 -1
  133. langchain/callbacks/utils.py +4 -4
  134. langchain/callbacks/wandb_callback.py +1 -1
  135. langchain/callbacks/whylabs_callback.py +1 -1
  136. langchain/chains/api/base.py +36 -22
  137. langchain/chains/api/news_docs.py +1 -2
  138. langchain/chains/api/open_meteo_docs.py +1 -2
  139. langchain/chains/api/openapi/requests_chain.py +1 -1
  140. langchain/chains/api/openapi/response_chain.py +1 -1
  141. langchain/chains/api/podcast_docs.py +1 -2
  142. langchain/chains/api/prompt.py +1 -2
  143. langchain/chains/api/tmdb_docs.py +1 -2
  144. langchain/chains/base.py +88 -54
  145. langchain/chains/chat_vector_db/prompts.py +2 -3
  146. langchain/chains/combine_documents/__init__.py +1 -1
  147. langchain/chains/combine_documents/base.py +23 -10
  148. langchain/chains/combine_documents/map_reduce.py +38 -30
  149. langchain/chains/combine_documents/map_rerank.py +33 -20
  150. langchain/chains/combine_documents/reduce.py +47 -26
  151. langchain/chains/combine_documents/refine.py +26 -17
  152. langchain/chains/combine_documents/stuff.py +19 -12
  153. langchain/chains/constitutional_ai/base.py +4 -4
  154. langchain/chains/constitutional_ai/principles.py +22 -25
  155. langchain/chains/constitutional_ai/prompts.py +25 -28
  156. langchain/chains/conversation/base.py +5 -3
  157. langchain/chains/conversation/memory.py +5 -5
  158. langchain/chains/conversation/prompt.py +5 -5
  159. langchain/chains/conversational_retrieval/base.py +41 -20
  160. langchain/chains/conversational_retrieval/prompts.py +2 -3
  161. langchain/chains/elasticsearch_database/base.py +8 -9
  162. langchain/chains/elasticsearch_database/prompts.py +2 -3
  163. langchain/chains/ernie_functions/__init__.py +2 -2
  164. langchain/chains/example_generator.py +3 -1
  165. langchain/chains/flare/base.py +26 -12
  166. langchain/chains/graph_qa/cypher.py +2 -2
  167. langchain/chains/graph_qa/falkordb.py +1 -1
  168. langchain/chains/graph_qa/gremlin.py +1 -1
  169. langchain/chains/graph_qa/neptune_sparql.py +1 -1
  170. langchain/chains/graph_qa/prompts.py +2 -2
  171. langchain/chains/history_aware_retriever.py +2 -1
  172. langchain/chains/hyde/base.py +6 -5
  173. langchain/chains/hyde/prompts.py +5 -6
  174. langchain/chains/llm.py +77 -61
  175. langchain/chains/llm_bash/__init__.py +2 -1
  176. langchain/chains/llm_checker/base.py +7 -5
  177. langchain/chains/llm_checker/prompt.py +3 -4
  178. langchain/chains/llm_math/base.py +16 -9
  179. langchain/chains/llm_math/prompt.py +1 -2
  180. langchain/chains/llm_summarization_checker/base.py +9 -6
  181. langchain/chains/llm_symbolic_math/__init__.py +2 -1
  182. langchain/chains/loading.py +151 -95
  183. langchain/chains/mapreduce.py +4 -3
  184. langchain/chains/moderation.py +8 -9
  185. langchain/chains/natbot/base.py +8 -8
  186. langchain/chains/natbot/crawler.py +73 -76
  187. langchain/chains/natbot/prompt.py +2 -3
  188. langchain/chains/openai_functions/__init__.py +7 -7
  189. langchain/chains/openai_functions/base.py +13 -10
  190. langchain/chains/openai_functions/citation_fuzzy_match.py +12 -11
  191. langchain/chains/openai_functions/extraction.py +19 -19
  192. langchain/chains/openai_functions/openapi.py +35 -35
  193. langchain/chains/openai_functions/qa_with_structure.py +19 -12
  194. langchain/chains/openai_functions/tagging.py +2 -4
  195. langchain/chains/openai_tools/extraction.py +7 -8
  196. langchain/chains/qa_generation/base.py +4 -3
  197. langchain/chains/qa_generation/prompt.py +5 -5
  198. langchain/chains/qa_with_sources/base.py +14 -6
  199. langchain/chains/qa_with_sources/loading.py +16 -8
  200. langchain/chains/qa_with_sources/map_reduce_prompt.py +8 -9
  201. langchain/chains/qa_with_sources/refine_prompts.py +0 -1
  202. langchain/chains/qa_with_sources/retrieval.py +14 -5
  203. langchain/chains/qa_with_sources/stuff_prompt.py +6 -7
  204. langchain/chains/qa_with_sources/vector_db.py +17 -6
  205. langchain/chains/query_constructor/base.py +34 -33
  206. langchain/chains/query_constructor/ir.py +4 -4
  207. langchain/chains/query_constructor/parser.py +37 -32
  208. langchain/chains/query_constructor/prompt.py +5 -6
  209. langchain/chains/question_answering/chain.py +21 -10
  210. langchain/chains/question_answering/map_reduce_prompt.py +14 -14
  211. langchain/chains/question_answering/map_rerank_prompt.py +3 -3
  212. langchain/chains/question_answering/refine_prompts.py +2 -5
  213. langchain/chains/question_answering/stuff_prompt.py +5 -5
  214. langchain/chains/retrieval.py +1 -3
  215. langchain/chains/retrieval_qa/base.py +34 -27
  216. langchain/chains/retrieval_qa/prompt.py +1 -2
  217. langchain/chains/router/__init__.py +3 -3
  218. langchain/chains/router/base.py +24 -20
  219. langchain/chains/router/embedding_router.py +12 -8
  220. langchain/chains/router/llm_router.py +17 -16
  221. langchain/chains/router/multi_prompt.py +2 -2
  222. langchain/chains/router/multi_retrieval_qa.py +10 -5
  223. langchain/chains/sequential.py +30 -18
  224. langchain/chains/sql_database/prompt.py +14 -16
  225. langchain/chains/sql_database/query.py +6 -5
  226. langchain/chains/structured_output/__init__.py +1 -1
  227. langchain/chains/structured_output/base.py +75 -67
  228. langchain/chains/summarize/chain.py +11 -5
  229. langchain/chains/summarize/map_reduce_prompt.py +0 -1
  230. langchain/chains/summarize/stuff_prompt.py +0 -1
  231. langchain/chains/transform.py +5 -6
  232. langchain/chat_loaders/facebook_messenger.py +1 -1
  233. langchain/chat_loaders/langsmith.py +1 -1
  234. langchain/chat_loaders/utils.py +3 -3
  235. langchain/chat_models/__init__.py +20 -19
  236. langchain/chat_models/anthropic.py +1 -1
  237. langchain/chat_models/azureml_endpoint.py +1 -1
  238. langchain/chat_models/baidu_qianfan_endpoint.py +1 -1
  239. langchain/chat_models/base.py +160 -123
  240. langchain/chat_models/bedrock.py +1 -1
  241. langchain/chat_models/fake.py +1 -1
  242. langchain/chat_models/meta.py +1 -1
  243. langchain/chat_models/pai_eas_endpoint.py +1 -1
  244. langchain/chat_models/promptlayer_openai.py +1 -1
  245. langchain/chat_models/volcengine_maas.py +1 -1
  246. langchain/docstore/base.py +1 -1
  247. langchain/document_loaders/__init__.py +9 -9
  248. langchain/document_loaders/airbyte.py +3 -3
  249. langchain/document_loaders/assemblyai.py +1 -1
  250. langchain/document_loaders/azure_blob_storage_container.py +1 -1
  251. langchain/document_loaders/azure_blob_storage_file.py +1 -1
  252. langchain/document_loaders/baiducloud_bos_file.py +1 -1
  253. langchain/document_loaders/base.py +1 -1
  254. langchain/document_loaders/blob_loaders/__init__.py +1 -1
  255. langchain/document_loaders/blockchain.py +1 -1
  256. langchain/document_loaders/chatgpt.py +1 -1
  257. langchain/document_loaders/college_confidential.py +1 -1
  258. langchain/document_loaders/confluence.py +1 -1
  259. langchain/document_loaders/email.py +1 -1
  260. langchain/document_loaders/facebook_chat.py +1 -1
  261. langchain/document_loaders/markdown.py +1 -1
  262. langchain/document_loaders/notebook.py +1 -1
  263. langchain/document_loaders/org_mode.py +1 -1
  264. langchain/document_loaders/parsers/__init__.py +1 -1
  265. langchain/document_loaders/parsers/docai.py +1 -1
  266. langchain/document_loaders/parsers/generic.py +1 -1
  267. langchain/document_loaders/parsers/html/__init__.py +1 -1
  268. langchain/document_loaders/parsers/html/bs4.py +1 -1
  269. langchain/document_loaders/parsers/language/cobol.py +1 -1
  270. langchain/document_loaders/parsers/language/python.py +1 -1
  271. langchain/document_loaders/parsers/msword.py +1 -1
  272. langchain/document_loaders/parsers/pdf.py +5 -5
  273. langchain/document_loaders/parsers/registry.py +1 -1
  274. langchain/document_loaders/pdf.py +8 -8
  275. langchain/document_loaders/powerpoint.py +1 -1
  276. langchain/document_loaders/pyspark_dataframe.py +1 -1
  277. langchain/document_loaders/telegram.py +2 -2
  278. langchain/document_loaders/tencent_cos_directory.py +1 -1
  279. langchain/document_loaders/unstructured.py +5 -5
  280. langchain/document_loaders/url_playwright.py +1 -1
  281. langchain/document_loaders/whatsapp_chat.py +1 -1
  282. langchain/document_loaders/youtube.py +2 -2
  283. langchain/document_transformers/__init__.py +3 -3
  284. langchain/document_transformers/beautiful_soup_transformer.py +1 -1
  285. langchain/document_transformers/doctran_text_extract.py +1 -1
  286. langchain/document_transformers/doctran_text_qa.py +1 -1
  287. langchain/document_transformers/doctran_text_translate.py +1 -1
  288. langchain/document_transformers/embeddings_redundant_filter.py +3 -3
  289. langchain/document_transformers/google_translate.py +1 -1
  290. langchain/document_transformers/html2text.py +1 -1
  291. langchain/document_transformers/nuclia_text_transform.py +1 -1
  292. langchain/embeddings/__init__.py +5 -5
  293. langchain/embeddings/base.py +33 -24
  294. langchain/embeddings/cache.py +36 -31
  295. langchain/embeddings/fake.py +1 -1
  296. langchain/embeddings/huggingface.py +2 -2
  297. langchain/evaluation/__init__.py +22 -22
  298. langchain/evaluation/agents/trajectory_eval_chain.py +23 -23
  299. langchain/evaluation/agents/trajectory_eval_prompt.py +6 -9
  300. langchain/evaluation/comparison/__init__.py +1 -1
  301. langchain/evaluation/comparison/eval_chain.py +20 -13
  302. langchain/evaluation/comparison/prompt.py +1 -2
  303. langchain/evaluation/criteria/__init__.py +1 -1
  304. langchain/evaluation/criteria/eval_chain.py +20 -11
  305. langchain/evaluation/criteria/prompt.py +2 -3
  306. langchain/evaluation/embedding_distance/base.py +23 -20
  307. langchain/evaluation/loading.py +15 -11
  308. langchain/evaluation/parsing/base.py +4 -1
  309. langchain/evaluation/parsing/json_distance.py +5 -2
  310. langchain/evaluation/parsing/json_schema.py +12 -8
  311. langchain/evaluation/qa/__init__.py +1 -1
  312. langchain/evaluation/qa/eval_chain.py +12 -5
  313. langchain/evaluation/qa/eval_prompt.py +7 -8
  314. langchain/evaluation/qa/generate_chain.py +2 -1
  315. langchain/evaluation/qa/generate_prompt.py +2 -4
  316. langchain/evaluation/schema.py +38 -30
  317. langchain/evaluation/scoring/__init__.py +1 -1
  318. langchain/evaluation/scoring/eval_chain.py +22 -15
  319. langchain/evaluation/scoring/prompt.py +0 -1
  320. langchain/evaluation/string_distance/base.py +14 -9
  321. langchain/globals.py +12 -11
  322. langchain/graphs/__init__.py +6 -6
  323. langchain/graphs/graph_document.py +1 -1
  324. langchain/graphs/networkx_graph.py +2 -2
  325. langchain/hub.py +9 -11
  326. langchain/indexes/__init__.py +3 -3
  327. langchain/indexes/_sql_record_manager.py +63 -46
  328. langchain/indexes/prompts/entity_extraction.py +1 -2
  329. langchain/indexes/prompts/entity_summarization.py +1 -2
  330. langchain/indexes/prompts/knowledge_triplet_extraction.py +1 -3
  331. langchain/indexes/vectorstore.py +35 -19
  332. langchain/llms/__init__.py +13 -13
  333. langchain/llms/ai21.py +1 -1
  334. langchain/llms/azureml_endpoint.py +4 -4
  335. langchain/llms/base.py +15 -7
  336. langchain/llms/bedrock.py +1 -1
  337. langchain/llms/cloudflare_workersai.py +1 -1
  338. langchain/llms/gradient_ai.py +1 -1
  339. langchain/llms/loading.py +1 -1
  340. langchain/llms/openai.py +1 -1
  341. langchain/llms/sagemaker_endpoint.py +1 -1
  342. langchain/load/dump.py +1 -1
  343. langchain/load/load.py +1 -1
  344. langchain/load/serializable.py +3 -3
  345. langchain/memory/__init__.py +3 -3
  346. langchain/memory/buffer.py +9 -7
  347. langchain/memory/chat_memory.py +14 -8
  348. langchain/memory/chat_message_histories/__init__.py +1 -1
  349. langchain/memory/chat_message_histories/astradb.py +1 -1
  350. langchain/memory/chat_message_histories/cassandra.py +1 -1
  351. langchain/memory/chat_message_histories/cosmos_db.py +1 -1
  352. langchain/memory/chat_message_histories/dynamodb.py +1 -1
  353. langchain/memory/chat_message_histories/elasticsearch.py +1 -1
  354. langchain/memory/chat_message_histories/file.py +1 -1
  355. langchain/memory/chat_message_histories/firestore.py +1 -1
  356. langchain/memory/chat_message_histories/momento.py +1 -1
  357. langchain/memory/chat_message_histories/mongodb.py +1 -1
  358. langchain/memory/chat_message_histories/neo4j.py +1 -1
  359. langchain/memory/chat_message_histories/postgres.py +1 -1
  360. langchain/memory/chat_message_histories/redis.py +1 -1
  361. langchain/memory/chat_message_histories/rocksetdb.py +1 -1
  362. langchain/memory/chat_message_histories/singlestoredb.py +1 -1
  363. langchain/memory/chat_message_histories/streamlit.py +1 -1
  364. langchain/memory/chat_message_histories/upstash_redis.py +1 -1
  365. langchain/memory/chat_message_histories/xata.py +1 -1
  366. langchain/memory/chat_message_histories/zep.py +1 -1
  367. langchain/memory/combined.py +13 -12
  368. langchain/memory/entity.py +84 -61
  369. langchain/memory/prompt.py +10 -11
  370. langchain/memory/readonly.py +0 -2
  371. langchain/memory/simple.py +1 -3
  372. langchain/memory/summary.py +13 -11
  373. langchain/memory/summary_buffer.py +17 -8
  374. langchain/memory/utils.py +3 -2
  375. langchain/memory/vectorstore.py +12 -5
  376. langchain/memory/vectorstore_token_buffer_memory.py +5 -5
  377. langchain/model_laboratory.py +12 -11
  378. langchain/output_parsers/__init__.py +4 -4
  379. langchain/output_parsers/boolean.py +7 -4
  380. langchain/output_parsers/combining.py +10 -5
  381. langchain/output_parsers/datetime.py +32 -31
  382. langchain/output_parsers/enum.py +5 -3
  383. langchain/output_parsers/fix.py +52 -52
  384. langchain/output_parsers/format_instructions.py +6 -8
  385. langchain/output_parsers/json.py +2 -2
  386. langchain/output_parsers/list.py +2 -2
  387. langchain/output_parsers/loading.py +9 -9
  388. langchain/output_parsers/openai_functions.py +3 -3
  389. langchain/output_parsers/openai_tools.py +1 -1
  390. langchain/output_parsers/pandas_dataframe.py +43 -47
  391. langchain/output_parsers/prompts.py +1 -2
  392. langchain/output_parsers/rail_parser.py +1 -1
  393. langchain/output_parsers/regex.py +7 -8
  394. langchain/output_parsers/regex_dict.py +7 -10
  395. langchain/output_parsers/retry.py +77 -78
  396. langchain/output_parsers/structured.py +11 -6
  397. langchain/output_parsers/yaml.py +15 -11
  398. langchain/prompts/__init__.py +5 -3
  399. langchain/prompts/base.py +5 -5
  400. langchain/prompts/chat.py +8 -8
  401. langchain/prompts/example_selector/__init__.py +3 -1
  402. langchain/prompts/example_selector/semantic_similarity.py +2 -2
  403. langchain/prompts/few_shot.py +1 -1
  404. langchain/prompts/loading.py +3 -3
  405. langchain/prompts/prompt.py +1 -1
  406. langchain/retrievers/__init__.py +5 -5
  407. langchain/retrievers/bedrock.py +2 -2
  408. langchain/retrievers/bm25.py +1 -1
  409. langchain/retrievers/contextual_compression.py +14 -8
  410. langchain/retrievers/docarray.py +1 -1
  411. langchain/retrievers/document_compressors/__init__.py +5 -4
  412. langchain/retrievers/document_compressors/base.py +12 -6
  413. langchain/retrievers/document_compressors/chain_extract.py +2 -2
  414. langchain/retrievers/document_compressors/chain_extract_prompt.py +2 -3
  415. langchain/retrievers/document_compressors/chain_filter.py +9 -9
  416. langchain/retrievers/document_compressors/chain_filter_prompt.py +1 -2
  417. langchain/retrievers/document_compressors/cohere_rerank.py +15 -15
  418. langchain/retrievers/document_compressors/embeddings_filter.py +21 -17
  419. langchain/retrievers/document_compressors/flashrank_rerank.py +1 -1
  420. langchain/retrievers/document_compressors/listwise_rerank.py +7 -5
  421. langchain/retrievers/ensemble.py +28 -25
  422. langchain/retrievers/google_cloud_documentai_warehouse.py +1 -1
  423. langchain/retrievers/google_vertex_ai_search.py +2 -2
  424. langchain/retrievers/kendra.py +10 -10
  425. langchain/retrievers/llama_index.py +1 -1
  426. langchain/retrievers/merger_retriever.py +11 -11
  427. langchain/retrievers/milvus.py +1 -1
  428. langchain/retrievers/multi_query.py +32 -26
  429. langchain/retrievers/multi_vector.py +20 -8
  430. langchain/retrievers/parent_document_retriever.py +18 -9
  431. langchain/retrievers/re_phraser.py +6 -5
  432. langchain/retrievers/self_query/base.py +138 -127
  433. langchain/retrievers/time_weighted_retriever.py +18 -7
  434. langchain/retrievers/zilliz.py +1 -1
  435. langchain/runnables/openai_functions.py +6 -2
  436. langchain/schema/__init__.py +23 -23
  437. langchain/schema/cache.py +1 -1
  438. langchain/schema/callbacks/base.py +7 -7
  439. langchain/schema/callbacks/manager.py +19 -19
  440. langchain/schema/callbacks/tracers/base.py +1 -1
  441. langchain/schema/callbacks/tracers/evaluation.py +1 -1
  442. langchain/schema/callbacks/tracers/langchain.py +1 -1
  443. langchain/schema/callbacks/tracers/langchain_v1.py +1 -1
  444. langchain/schema/callbacks/tracers/log_stream.py +1 -1
  445. langchain/schema/callbacks/tracers/schemas.py +8 -8
  446. langchain/schema/callbacks/tracers/stdout.py +3 -3
  447. langchain/schema/document.py +1 -1
  448. langchain/schema/language_model.py +2 -2
  449. langchain/schema/messages.py +12 -12
  450. langchain/schema/output.py +3 -3
  451. langchain/schema/output_parser.py +3 -3
  452. langchain/schema/runnable/__init__.py +3 -3
  453. langchain/schema/runnable/base.py +9 -9
  454. langchain/schema/runnable/config.py +5 -5
  455. langchain/schema/runnable/configurable.py +1 -1
  456. langchain/schema/runnable/history.py +1 -1
  457. langchain/schema/runnable/passthrough.py +1 -1
  458. langchain/schema/runnable/utils.py +16 -16
  459. langchain/schema/vectorstore.py +1 -1
  460. langchain/smith/__init__.py +1 -1
  461. langchain/smith/evaluation/__init__.py +2 -2
  462. langchain/smith/evaluation/config.py +10 -7
  463. langchain/smith/evaluation/name_generation.py +3 -3
  464. langchain/smith/evaluation/progress.py +11 -2
  465. langchain/smith/evaluation/runner_utils.py +179 -127
  466. langchain/smith/evaluation/string_run_evaluator.py +75 -68
  467. langchain/storage/__init__.py +2 -2
  468. langchain/storage/_lc_store.py +4 -2
  469. langchain/storage/encoder_backed.py +6 -2
  470. langchain/storage/file_system.py +19 -16
  471. langchain/storage/in_memory.py +1 -1
  472. langchain/storage/upstash_redis.py +1 -1
  473. langchain/text_splitter.py +15 -15
  474. langchain/tools/__init__.py +28 -26
  475. langchain/tools/ainetwork/app.py +1 -1
  476. langchain/tools/ainetwork/base.py +1 -1
  477. langchain/tools/ainetwork/owner.py +1 -1
  478. langchain/tools/ainetwork/rule.py +1 -1
  479. langchain/tools/ainetwork/transfer.py +1 -1
  480. langchain/tools/ainetwork/value.py +1 -1
  481. langchain/tools/amadeus/closest_airport.py +1 -1
  482. langchain/tools/amadeus/flight_search.py +1 -1
  483. langchain/tools/azure_cognitive_services/__init__.py +1 -1
  484. langchain/tools/base.py +4 -4
  485. langchain/tools/bearly/tool.py +1 -1
  486. langchain/tools/bing_search/__init__.py +1 -1
  487. langchain/tools/bing_search/tool.py +1 -1
  488. langchain/tools/dataforseo_api_search/__init__.py +1 -1
  489. langchain/tools/dataforseo_api_search/tool.py +1 -1
  490. langchain/tools/ddg_search/tool.py +1 -1
  491. langchain/tools/e2b_data_analysis/tool.py +2 -2
  492. langchain/tools/edenai/__init__.py +1 -1
  493. langchain/tools/file_management/__init__.py +1 -1
  494. langchain/tools/file_management/copy.py +1 -1
  495. langchain/tools/file_management/delete.py +1 -1
  496. langchain/tools/gmail/__init__.py +2 -2
  497. langchain/tools/gmail/get_message.py +1 -1
  498. langchain/tools/gmail/search.py +1 -1
  499. langchain/tools/gmail/send_message.py +1 -1
  500. langchain/tools/google_finance/__init__.py +1 -1
  501. langchain/tools/google_finance/tool.py +1 -1
  502. langchain/tools/google_scholar/__init__.py +1 -1
  503. langchain/tools/google_scholar/tool.py +1 -1
  504. langchain/tools/google_search/__init__.py +1 -1
  505. langchain/tools/google_search/tool.py +1 -1
  506. langchain/tools/google_serper/__init__.py +1 -1
  507. langchain/tools/google_serper/tool.py +1 -1
  508. langchain/tools/google_trends/__init__.py +1 -1
  509. langchain/tools/google_trends/tool.py +1 -1
  510. langchain/tools/jira/tool.py +20 -1
  511. langchain/tools/json/tool.py +25 -3
  512. langchain/tools/memorize/tool.py +1 -1
  513. langchain/tools/multion/__init__.py +1 -1
  514. langchain/tools/multion/update_session.py +1 -1
  515. langchain/tools/office365/__init__.py +2 -2
  516. langchain/tools/office365/events_search.py +1 -1
  517. langchain/tools/office365/messages_search.py +1 -1
  518. langchain/tools/office365/send_event.py +1 -1
  519. langchain/tools/office365/send_message.py +1 -1
  520. langchain/tools/openapi/utils/api_models.py +6 -6
  521. langchain/tools/playwright/__init__.py +5 -5
  522. langchain/tools/playwright/click.py +1 -1
  523. langchain/tools/playwright/extract_hyperlinks.py +1 -1
  524. langchain/tools/playwright/get_elements.py +1 -1
  525. langchain/tools/playwright/navigate.py +1 -1
  526. langchain/tools/plugin.py +2 -2
  527. langchain/tools/powerbi/tool.py +1 -1
  528. langchain/tools/python/__init__.py +2 -1
  529. langchain/tools/reddit_search/tool.py +1 -1
  530. langchain/tools/render.py +2 -2
  531. langchain/tools/requests/tool.py +2 -2
  532. langchain/tools/searchapi/tool.py +1 -1
  533. langchain/tools/searx_search/tool.py +1 -1
  534. langchain/tools/slack/get_message.py +1 -1
  535. langchain/tools/spark_sql/tool.py +1 -1
  536. langchain/tools/sql_database/tool.py +1 -1
  537. langchain/tools/tavily_search/__init__.py +1 -1
  538. langchain/tools/tavily_search/tool.py +1 -1
  539. langchain/tools/zapier/__init__.py +1 -1
  540. langchain/tools/zapier/tool.py +24 -2
  541. langchain/utilities/__init__.py +4 -4
  542. langchain/utilities/arcee.py +4 -4
  543. langchain/utilities/clickup.py +4 -4
  544. langchain/utilities/dalle_image_generator.py +1 -1
  545. langchain/utilities/dataforseo_api_search.py +1 -1
  546. langchain/utilities/opaqueprompts.py +1 -1
  547. langchain/utilities/reddit_search.py +1 -1
  548. langchain/utilities/sql_database.py +1 -1
  549. langchain/utilities/tavily_search.py +1 -1
  550. langchain/utilities/vertexai.py +2 -2
  551. langchain/utils/__init__.py +1 -1
  552. langchain/utils/aiter.py +1 -1
  553. langchain/utils/html.py +3 -3
  554. langchain/utils/input.py +1 -1
  555. langchain/utils/iter.py +1 -1
  556. langchain/utils/json_schema.py +1 -3
  557. langchain/utils/strings.py +1 -1
  558. langchain/utils/utils.py +6 -6
  559. langchain/vectorstores/__init__.py +5 -5
  560. langchain/vectorstores/alibabacloud_opensearch.py +1 -1
  561. langchain/vectorstores/azure_cosmos_db.py +1 -1
  562. langchain/vectorstores/clickhouse.py +1 -1
  563. langchain/vectorstores/elastic_vector_search.py +1 -1
  564. langchain/vectorstores/elasticsearch.py +2 -2
  565. langchain/vectorstores/myscale.py +1 -1
  566. langchain/vectorstores/neo4j_vector.py +1 -1
  567. langchain/vectorstores/pgembedding.py +1 -1
  568. langchain/vectorstores/qdrant.py +1 -1
  569. langchain/vectorstores/redis/__init__.py +1 -1
  570. langchain/vectorstores/redis/base.py +1 -1
  571. langchain/vectorstores/redis/filters.py +4 -4
  572. langchain/vectorstores/redis/schema.py +6 -6
  573. langchain/vectorstores/sklearn.py +2 -2
  574. langchain/vectorstores/starrocks.py +1 -1
  575. langchain/vectorstores/utils.py +1 -1
  576. {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/METADATA +4 -4
  577. {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/RECORD +580 -580
  578. {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/WHEEL +1 -1
  579. {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/entry_points.txt +0 -0
  580. {langchain-0.3.26.dist-info → langchain-0.3.27.dist-info}/licenses/LICENSE +0 -0
@@ -27,7 +27,7 @@ def __getattr__(name: str) -> Any:
27
27
 
28
28
 
29
29
  __all__ = [
30
- "GoogleVertexAISearchRetriever",
31
- "GoogleVertexAIMultiTurnSearchRetriever",
32
30
  "GoogleCloudEnterpriseSearchRetriever",
31
+ "GoogleVertexAIMultiTurnSearchRetriever",
32
+ "GoogleVertexAISearchRetriever",
33
33
  ]
@@ -49,18 +49,18 @@ def __getattr__(name: str) -> Any:
49
49
 
50
50
 
51
51
  __all__ = [
52
- "clean_excerpt",
53
- "combined_text",
54
- "Highlight",
55
- "TextWithHighLights",
56
- "AdditionalResultAttributeValue",
57
52
  "AdditionalResultAttribute",
58
- "DocumentAttributeValue",
53
+ "AdditionalResultAttributeValue",
54
+ "AmazonKendraRetriever",
59
55
  "DocumentAttribute",
60
- "ResultItem",
61
- "QueryResultItem",
62
- "RetrieveResultItem",
56
+ "DocumentAttributeValue",
57
+ "Highlight",
63
58
  "QueryResult",
59
+ "QueryResultItem",
60
+ "ResultItem",
64
61
  "RetrieveResult",
65
- "AmazonKendraRetriever",
62
+ "RetrieveResultItem",
63
+ "TextWithHighLights",
64
+ "clean_excerpt",
65
+ "combined_text",
66
66
  ]
@@ -25,6 +25,6 @@ def __getattr__(name: str) -> Any:
25
25
 
26
26
 
27
27
  __all__ = [
28
- "LlamaIndexRetriever",
29
28
  "LlamaIndexGraphRetriever",
29
+ "LlamaIndexRetriever",
30
30
  ]
@@ -31,9 +31,7 @@ class MergerRetriever(BaseRetriever):
31
31
  """
32
32
 
33
33
  # Merge the results of the retrievers.
34
- merged_documents = self.merge_documents(query, run_manager)
35
-
36
- return merged_documents
34
+ return self.merge_documents(query, run_manager)
37
35
 
38
36
  async def _aget_relevant_documents(
39
37
  self,
@@ -52,12 +50,12 @@ class MergerRetriever(BaseRetriever):
52
50
  """
53
51
 
54
52
  # Merge the results of the retrievers.
55
- merged_documents = await self.amerge_documents(query, run_manager)
56
-
57
- return merged_documents
53
+ return await self.amerge_documents(query, run_manager)
58
54
 
59
55
  def merge_documents(
60
- self, query: str, run_manager: CallbackManagerForRetrieverRun
56
+ self,
57
+ query: str,
58
+ run_manager: CallbackManagerForRetrieverRun,
61
59
  ) -> list[Document]:
62
60
  """
63
61
  Merge the results of the retrievers.
@@ -82,14 +80,16 @@ class MergerRetriever(BaseRetriever):
82
80
  merged_documents = []
83
81
  max_docs = max(map(len, retriever_docs), default=0)
84
82
  for i in range(max_docs):
85
- for retriever, doc in zip(self.retrievers, retriever_docs):
83
+ for _retriever, doc in zip(self.retrievers, retriever_docs):
86
84
  if i < len(doc):
87
85
  merged_documents.append(doc[i])
88
86
 
89
87
  return merged_documents
90
88
 
91
89
  async def amerge_documents(
92
- self, query: str, run_manager: AsyncCallbackManagerForRetrieverRun
90
+ self,
91
+ query: str,
92
+ run_manager: AsyncCallbackManagerForRetrieverRun,
93
93
  ) -> list[Document]:
94
94
  """
95
95
  Asynchronously merge the results of the retrievers.
@@ -109,14 +109,14 @@ class MergerRetriever(BaseRetriever):
109
109
  config={"callbacks": run_manager.get_child(f"retriever_{i + 1}")},
110
110
  )
111
111
  for i, retriever in enumerate(self.retrievers)
112
- )
112
+ ),
113
113
  )
114
114
 
115
115
  # Merge the results of the retrievers.
116
116
  merged_documents = []
117
117
  max_docs = max(map(len, retriever_docs), default=0)
118
118
  for i in range(max_docs):
119
- for retriever, doc in zip(self.retrievers, retriever_docs):
119
+ for _retriever, doc in zip(self.retrievers, retriever_docs):
120
120
  if i < len(doc):
121
121
  merged_documents.append(doc[i])
122
122
 
@@ -23,6 +23,6 @@ def __getattr__(name: str) -> Any:
23
23
 
24
24
 
25
25
  __all__ = [
26
- "MilvusRetriever",
27
26
  "MilvusRetreiver",
27
+ "MilvusRetriever",
28
28
  ]
@@ -31,12 +31,12 @@ class LineListOutputParser(BaseOutputParser[list[str]]):
31
31
  # Default prompt
32
32
  DEFAULT_QUERY_PROMPT = PromptTemplate(
33
33
  input_variables=["question"],
34
- template="""You are an AI language model assistant. Your task is
35
- to generate 3 different versions of the given user
36
- question to retrieve relevant documents from a vector database.
37
- By generating multiple perspectives on the user question,
38
- your goal is to help the user overcome some of the limitations
39
- of distance-based similarity search. Provide these alternative
34
+ template="""You are an AI language model assistant. Your task is
35
+ to generate 3 different versions of the given user
36
+ question to retrieve relevant documents from a vector database.
37
+ By generating multiple perspectives on the user question,
38
+ your goal is to help the user overcome some of the limitations
39
+ of distance-based similarity search. Provide these alternative
40
40
  questions separated by newlines. Original question: {question}""",
41
41
  )
42
42
 
@@ -66,7 +66,7 @@ class MultiQueryRetriever(BaseRetriever):
66
66
  llm: BaseLanguageModel,
67
67
  prompt: BasePromptTemplate = DEFAULT_QUERY_PROMPT,
68
68
  parser_key: Optional[str] = None,
69
- include_original: bool = False,
69
+ include_original: bool = False, # noqa: FBT001,FBT002
70
70
  ) -> "MultiQueryRetriever":
71
71
  """Initialize from llm using default template.
72
72
 
@@ -110,7 +110,9 @@ class MultiQueryRetriever(BaseRetriever):
110
110
  return self.unique_union(documents)
111
111
 
112
112
  async def agenerate_queries(
113
- self, question: str, run_manager: AsyncCallbackManagerForRetrieverRun
113
+ self,
114
+ question: str,
115
+ run_manager: AsyncCallbackManagerForRetrieverRun,
114
116
  ) -> list[str]:
115
117
  """Generate queries based upon user input.
116
118
 
@@ -121,18 +123,18 @@ class MultiQueryRetriever(BaseRetriever):
121
123
  List of LLM generated queries that are similar to the user input
122
124
  """
123
125
  response = await self.llm_chain.ainvoke(
124
- {"question": question}, config={"callbacks": run_manager.get_child()}
126
+ {"question": question},
127
+ config={"callbacks": run_manager.get_child()},
125
128
  )
126
- if isinstance(self.llm_chain, LLMChain):
127
- lines = response["text"]
128
- else:
129
- lines = response
129
+ lines = response["text"] if isinstance(self.llm_chain, LLMChain) else response
130
130
  if self.verbose:
131
- logger.info(f"Generated queries: {lines}")
131
+ logger.info("Generated queries: %s", lines)
132
132
  return lines
133
133
 
134
134
  async def aretrieve_documents(
135
- self, queries: list[str], run_manager: AsyncCallbackManagerForRetrieverRun
135
+ self,
136
+ queries: list[str],
137
+ run_manager: AsyncCallbackManagerForRetrieverRun,
136
138
  ) -> list[Document]:
137
139
  """Run all LLM generated queries.
138
140
 
@@ -145,10 +147,11 @@ class MultiQueryRetriever(BaseRetriever):
145
147
  document_lists = await asyncio.gather(
146
148
  *(
147
149
  self.retriever.ainvoke(
148
- query, config={"callbacks": run_manager.get_child()}
150
+ query,
151
+ config={"callbacks": run_manager.get_child()},
149
152
  )
150
153
  for query in queries
151
- )
154
+ ),
152
155
  )
153
156
  return [doc for docs in document_lists for doc in docs]
154
157
 
@@ -173,7 +176,9 @@ class MultiQueryRetriever(BaseRetriever):
173
176
  return self.unique_union(documents)
174
177
 
175
178
  def generate_queries(
176
- self, question: str, run_manager: CallbackManagerForRetrieverRun
179
+ self,
180
+ question: str,
181
+ run_manager: CallbackManagerForRetrieverRun,
177
182
  ) -> list[str]:
178
183
  """Generate queries based upon user input.
179
184
 
@@ -184,18 +189,18 @@ class MultiQueryRetriever(BaseRetriever):
184
189
  List of LLM generated queries that are similar to the user input
185
190
  """
186
191
  response = self.llm_chain.invoke(
187
- {"question": question}, config={"callbacks": run_manager.get_child()}
192
+ {"question": question},
193
+ config={"callbacks": run_manager.get_child()},
188
194
  )
189
- if isinstance(self.llm_chain, LLMChain):
190
- lines = response["text"]
191
- else:
192
- lines = response
195
+ lines = response["text"] if isinstance(self.llm_chain, LLMChain) else response
193
196
  if self.verbose:
194
- logger.info(f"Generated queries: {lines}")
197
+ logger.info("Generated queries: %s", lines)
195
198
  return lines
196
199
 
197
200
  def retrieve_documents(
198
- self, queries: list[str], run_manager: CallbackManagerForRetrieverRun
201
+ self,
202
+ queries: list[str],
203
+ run_manager: CallbackManagerForRetrieverRun,
199
204
  ) -> list[Document]:
200
205
  """Run all LLM generated queries.
201
206
 
@@ -208,7 +213,8 @@ class MultiQueryRetriever(BaseRetriever):
208
213
  documents = []
209
214
  for query in queries:
210
215
  docs = self.retriever.invoke(
211
- query, config={"callbacks": run_manager.get_child()}
216
+ query,
217
+ config={"callbacks": run_manager.get_child()},
212
218
  )
213
219
  documents.extend(docs)
214
220
  return documents
@@ -49,12 +49,16 @@ class MultiVectorRetriever(BaseRetriever):
49
49
  if byte_store is not None:
50
50
  docstore = create_kv_docstore(byte_store)
51
51
  elif docstore is None:
52
- raise Exception("You must pass a `byte_store` parameter.")
52
+ msg = "You must pass a `byte_store` parameter."
53
+ raise ValueError(msg)
53
54
  values["docstore"] = docstore
54
55
  return values
55
56
 
56
57
  def _get_relevant_documents(
57
- self, query: str, *, run_manager: CallbackManagerForRetrieverRun
58
+ self,
59
+ query: str,
60
+ *,
61
+ run_manager: CallbackManagerForRetrieverRun,
58
62
  ) -> list[Document]:
59
63
  """Get documents relevant to a query.
60
64
  Args:
@@ -65,12 +69,14 @@ class MultiVectorRetriever(BaseRetriever):
65
69
  """
66
70
  if self.search_type == SearchType.mmr:
67
71
  sub_docs = self.vectorstore.max_marginal_relevance_search(
68
- query, **self.search_kwargs
72
+ query,
73
+ **self.search_kwargs,
69
74
  )
70
75
  elif self.search_type == SearchType.similarity_score_threshold:
71
76
  sub_docs_and_similarities = (
72
77
  self.vectorstore.similarity_search_with_relevance_scores(
73
- query, **self.search_kwargs
78
+ query,
79
+ **self.search_kwargs,
74
80
  )
75
81
  )
76
82
  sub_docs = [sub_doc for sub_doc, _ in sub_docs_and_similarities]
@@ -86,7 +92,10 @@ class MultiVectorRetriever(BaseRetriever):
86
92
  return [d for d in docs if d is not None]
87
93
 
88
94
  async def _aget_relevant_documents(
89
- self, query: str, *, run_manager: AsyncCallbackManagerForRetrieverRun
95
+ self,
96
+ query: str,
97
+ *,
98
+ run_manager: AsyncCallbackManagerForRetrieverRun,
90
99
  ) -> list[Document]:
91
100
  """Asynchronously get documents relevant to a query.
92
101
  Args:
@@ -97,18 +106,21 @@ class MultiVectorRetriever(BaseRetriever):
97
106
  """
98
107
  if self.search_type == SearchType.mmr:
99
108
  sub_docs = await self.vectorstore.amax_marginal_relevance_search(
100
- query, **self.search_kwargs
109
+ query,
110
+ **self.search_kwargs,
101
111
  )
102
112
  elif self.search_type == SearchType.similarity_score_threshold:
103
113
  sub_docs_and_similarities = (
104
114
  await self.vectorstore.asimilarity_search_with_relevance_scores(
105
- query, **self.search_kwargs
115
+ query,
116
+ **self.search_kwargs,
106
117
  )
107
118
  )
108
119
  sub_docs = [sub_doc for sub_doc, _ in sub_docs_and_similarities]
109
120
  else:
110
121
  sub_docs = await self.vectorstore.asimilarity_search(
111
- query, **self.search_kwargs
122
+ query,
123
+ **self.search_kwargs,
112
124
  )
113
125
 
114
126
  # We do this to maintain the order of the ids that are returned
@@ -66,7 +66,7 @@ class ParentDocumentRetriever(MultiVectorRetriever):
66
66
  If none, then the parent documents will be the raw documents passed in."""
67
67
 
68
68
  child_metadata_fields: Optional[Sequence[str]] = None
69
- """Metadata fields to leave in child documents. If None, leave all parent document
69
+ """Metadata fields to leave in child documents. If None, leave all parent document
70
70
  metadata.
71
71
  """
72
72
 
@@ -74,6 +74,7 @@ class ParentDocumentRetriever(MultiVectorRetriever):
74
74
  self,
75
75
  documents: list[Document],
76
76
  ids: Optional[list[str]] = None,
77
+ *,
77
78
  add_to_docstore: bool = True,
78
79
  ) -> tuple[list[Document], list[tuple[str, Document]]]:
79
80
  if self.parent_splitter is not None:
@@ -81,15 +82,15 @@ class ParentDocumentRetriever(MultiVectorRetriever):
81
82
  if ids is None:
82
83
  doc_ids = [str(uuid.uuid4()) for _ in documents]
83
84
  if not add_to_docstore:
84
- raise ValueError(
85
- "If ids are not passed in, `add_to_docstore` MUST be True"
86
- )
85
+ msg = "If ids are not passed in, `add_to_docstore` MUST be True"
86
+ raise ValueError(msg)
87
87
  else:
88
88
  if len(documents) != len(ids):
89
- raise ValueError(
89
+ msg = (
90
90
  "Got uneven list of documents and ids. "
91
91
  "If `ids` is provided, should be same length as `documents`."
92
92
  )
93
+ raise ValueError(msg)
93
94
  doc_ids = ids
94
95
 
95
96
  docs = []
@@ -113,7 +114,7 @@ class ParentDocumentRetriever(MultiVectorRetriever):
113
114
  self,
114
115
  documents: list[Document],
115
116
  ids: Optional[list[str]] = None,
116
- add_to_docstore: bool = True,
117
+ add_to_docstore: bool = True, # noqa: FBT001,FBT002
117
118
  **kwargs: Any,
118
119
  ) -> None:
119
120
  """Adds documents to the docstore and vectorstores.
@@ -130,7 +131,11 @@ class ParentDocumentRetriever(MultiVectorRetriever):
130
131
  to set this to False if the documents are already in the docstore
131
132
  and you don't want to re-add them.
132
133
  """
133
- docs, full_docs = self._split_docs_for_adding(documents, ids, add_to_docstore)
134
+ docs, full_docs = self._split_docs_for_adding(
135
+ documents,
136
+ ids,
137
+ add_to_docstore=add_to_docstore,
138
+ )
134
139
  self.vectorstore.add_documents(docs, **kwargs)
135
140
  if add_to_docstore:
136
141
  self.docstore.mset(full_docs)
@@ -139,10 +144,14 @@ class ParentDocumentRetriever(MultiVectorRetriever):
139
144
  self,
140
145
  documents: list[Document],
141
146
  ids: Optional[list[str]] = None,
142
- add_to_docstore: bool = True,
147
+ add_to_docstore: bool = True, # noqa: FBT001,FBT002
143
148
  **kwargs: Any,
144
149
  ) -> None:
145
- docs, full_docs = self._split_docs_for_adding(documents, ids, add_to_docstore)
150
+ docs, full_docs = self._split_docs_for_adding(
151
+ documents,
152
+ ids,
153
+ add_to_docstore=add_to_docstore,
154
+ )
146
155
  await self.vectorstore.aadd_documents(docs, **kwargs)
147
156
  if add_to_docstore:
148
157
  await self.docstore.amset(full_docs)
@@ -71,13 +71,14 @@ class RePhraseQueryRetriever(BaseRetriever):
71
71
  Relevant documents for re-phrased question
72
72
  """
73
73
  re_phrased_question = self.llm_chain.invoke(
74
- query, {"callbacks": run_manager.get_child()}
74
+ query,
75
+ {"callbacks": run_manager.get_child()},
75
76
  )
76
- logger.info(f"Re-phrased question: {re_phrased_question}")
77
- docs = self.retriever.invoke(
78
- re_phrased_question, config={"callbacks": run_manager.get_child()}
77
+ logger.info("Re-phrased question: %s", re_phrased_question)
78
+ return self.retriever.invoke(
79
+ re_phrased_question,
80
+ config={"callbacks": run_manager.get_child()},
79
81
  )
80
- return docs
81
82
 
82
83
  async def _aget_relevant_documents(
83
84
  self,