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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. langchain/__init__.py +110 -96
  2. langchain/_api/__init__.py +2 -2
  3. langchain/_api/deprecation.py +3 -3
  4. langchain/_api/module_import.py +51 -46
  5. langchain/_api/path.py +1 -1
  6. langchain/adapters/openai.py +8 -8
  7. langchain/agents/__init__.py +15 -12
  8. langchain/agents/agent.py +174 -151
  9. langchain/agents/agent_iterator.py +50 -26
  10. langchain/agents/agent_toolkits/__init__.py +7 -6
  11. langchain/agents/agent_toolkits/ainetwork/toolkit.py +1 -1
  12. langchain/agents/agent_toolkits/amadeus/toolkit.py +1 -1
  13. langchain/agents/agent_toolkits/azure_cognitive_services.py +1 -1
  14. langchain/agents/agent_toolkits/clickup/toolkit.py +1 -1
  15. langchain/agents/agent_toolkits/conversational_retrieval/openai_functions.py +6 -4
  16. langchain/agents/agent_toolkits/csv/__init__.py +4 -2
  17. langchain/agents/agent_toolkits/file_management/__init__.py +1 -1
  18. langchain/agents/agent_toolkits/file_management/toolkit.py +1 -1
  19. langchain/agents/agent_toolkits/github/toolkit.py +9 -9
  20. langchain/agents/agent_toolkits/gitlab/toolkit.py +1 -1
  21. langchain/agents/agent_toolkits/json/base.py +1 -1
  22. langchain/agents/agent_toolkits/multion/toolkit.py +1 -1
  23. langchain/agents/agent_toolkits/office365/toolkit.py +1 -1
  24. langchain/agents/agent_toolkits/openapi/base.py +1 -1
  25. langchain/agents/agent_toolkits/openapi/planner.py +2 -2
  26. langchain/agents/agent_toolkits/openapi/planner_prompt.py +10 -10
  27. langchain/agents/agent_toolkits/openapi/prompt.py +1 -1
  28. langchain/agents/agent_toolkits/openapi/toolkit.py +1 -1
  29. langchain/agents/agent_toolkits/pandas/__init__.py +4 -2
  30. langchain/agents/agent_toolkits/playwright/__init__.py +1 -1
  31. langchain/agents/agent_toolkits/playwright/toolkit.py +1 -1
  32. langchain/agents/agent_toolkits/powerbi/base.py +1 -1
  33. langchain/agents/agent_toolkits/powerbi/chat_base.py +1 -1
  34. langchain/agents/agent_toolkits/powerbi/prompt.py +2 -2
  35. langchain/agents/agent_toolkits/powerbi/toolkit.py +1 -1
  36. langchain/agents/agent_toolkits/python/__init__.py +4 -2
  37. langchain/agents/agent_toolkits/spark/__init__.py +4 -2
  38. langchain/agents/agent_toolkits/spark_sql/base.py +1 -1
  39. langchain/agents/agent_toolkits/spark_sql/toolkit.py +1 -1
  40. langchain/agents/agent_toolkits/sql/prompt.py +1 -1
  41. langchain/agents/agent_toolkits/sql/toolkit.py +1 -1
  42. langchain/agents/agent_toolkits/vectorstore/base.py +4 -2
  43. langchain/agents/agent_toolkits/vectorstore/prompt.py +2 -4
  44. langchain/agents/agent_toolkits/vectorstore/toolkit.py +12 -11
  45. langchain/agents/agent_toolkits/xorbits/__init__.py +4 -2
  46. langchain/agents/agent_toolkits/zapier/toolkit.py +1 -1
  47. langchain/agents/agent_types.py +6 -6
  48. langchain/agents/chat/base.py +8 -12
  49. langchain/agents/chat/output_parser.py +9 -6
  50. langchain/agents/chat/prompt.py +3 -4
  51. langchain/agents/conversational/base.py +11 -5
  52. langchain/agents/conversational/output_parser.py +4 -2
  53. langchain/agents/conversational/prompt.py +2 -3
  54. langchain/agents/conversational_chat/base.py +9 -5
  55. langchain/agents/conversational_chat/output_parser.py +9 -11
  56. langchain/agents/conversational_chat/prompt.py +5 -6
  57. langchain/agents/format_scratchpad/__init__.py +3 -3
  58. langchain/agents/format_scratchpad/log_to_messages.py +1 -1
  59. langchain/agents/format_scratchpad/openai_functions.py +8 -6
  60. langchain/agents/format_scratchpad/tools.py +5 -3
  61. langchain/agents/format_scratchpad/xml.py +33 -2
  62. langchain/agents/initialize.py +17 -9
  63. langchain/agents/json_chat/base.py +19 -18
  64. langchain/agents/json_chat/prompt.py +2 -3
  65. langchain/agents/load_tools.py +2 -1
  66. langchain/agents/loading.py +28 -18
  67. langchain/agents/mrkl/base.py +11 -4
  68. langchain/agents/mrkl/output_parser.py +17 -13
  69. langchain/agents/mrkl/prompt.py +1 -2
  70. langchain/agents/openai_assistant/base.py +81 -71
  71. langchain/agents/openai_functions_agent/agent_token_buffer_memory.py +2 -0
  72. langchain/agents/openai_functions_agent/base.py +47 -37
  73. langchain/agents/openai_functions_multi_agent/base.py +40 -27
  74. langchain/agents/openai_tools/base.py +9 -8
  75. langchain/agents/output_parsers/__init__.py +3 -3
  76. langchain/agents/output_parsers/json.py +8 -6
  77. langchain/agents/output_parsers/openai_functions.py +24 -9
  78. langchain/agents/output_parsers/openai_tools.py +16 -4
  79. langchain/agents/output_parsers/react_json_single_input.py +13 -5
  80. langchain/agents/output_parsers/react_single_input.py +18 -11
  81. langchain/agents/output_parsers/self_ask.py +5 -2
  82. langchain/agents/output_parsers/tools.py +32 -13
  83. langchain/agents/output_parsers/xml.py +102 -28
  84. langchain/agents/react/agent.py +5 -4
  85. langchain/agents/react/base.py +26 -17
  86. langchain/agents/react/output_parser.py +7 -6
  87. langchain/agents/react/textworld_prompt.py +0 -1
  88. langchain/agents/react/wiki_prompt.py +14 -15
  89. langchain/agents/schema.py +5 -2
  90. langchain/agents/self_ask_with_search/base.py +23 -15
  91. langchain/agents/self_ask_with_search/prompt.py +0 -1
  92. langchain/agents/structured_chat/base.py +19 -11
  93. langchain/agents/structured_chat/output_parser.py +29 -18
  94. langchain/agents/structured_chat/prompt.py +3 -4
  95. langchain/agents/tool_calling_agent/base.py +8 -6
  96. langchain/agents/tools.py +5 -2
  97. langchain/agents/utils.py +2 -3
  98. langchain/agents/xml/base.py +12 -6
  99. langchain/agents/xml/prompt.py +1 -2
  100. langchain/cache.py +12 -12
  101. langchain/callbacks/__init__.py +11 -11
  102. langchain/callbacks/aim_callback.py +2 -2
  103. langchain/callbacks/argilla_callback.py +1 -1
  104. langchain/callbacks/arize_callback.py +1 -1
  105. langchain/callbacks/arthur_callback.py +1 -1
  106. langchain/callbacks/base.py +7 -7
  107. langchain/callbacks/clearml_callback.py +1 -1
  108. langchain/callbacks/comet_ml_callback.py +1 -1
  109. langchain/callbacks/confident_callback.py +1 -1
  110. langchain/callbacks/context_callback.py +1 -1
  111. langchain/callbacks/flyte_callback.py +1 -1
  112. langchain/callbacks/human.py +2 -2
  113. langchain/callbacks/infino_callback.py +1 -1
  114. langchain/callbacks/labelstudio_callback.py +1 -1
  115. langchain/callbacks/llmonitor_callback.py +1 -1
  116. langchain/callbacks/manager.py +5 -5
  117. langchain/callbacks/mlflow_callback.py +2 -2
  118. langchain/callbacks/openai_info.py +1 -1
  119. langchain/callbacks/promptlayer_callback.py +1 -1
  120. langchain/callbacks/sagemaker_callback.py +1 -1
  121. langchain/callbacks/streaming_aiter.py +17 -3
  122. langchain/callbacks/streaming_aiter_final_only.py +16 -5
  123. langchain/callbacks/streaming_stdout_final_only.py +10 -3
  124. langchain/callbacks/streamlit/__init__.py +3 -2
  125. langchain/callbacks/streamlit/mutable_expander.py +1 -1
  126. langchain/callbacks/streamlit/streamlit_callback_handler.py +3 -3
  127. langchain/callbacks/tracers/__init__.py +1 -1
  128. langchain/callbacks/tracers/comet.py +1 -1
  129. langchain/callbacks/tracers/evaluation.py +1 -1
  130. langchain/callbacks/tracers/log_stream.py +1 -1
  131. langchain/callbacks/tracers/logging.py +12 -1
  132. langchain/callbacks/tracers/stdout.py +1 -1
  133. langchain/callbacks/trubrics_callback.py +1 -1
  134. langchain/callbacks/utils.py +4 -4
  135. langchain/callbacks/wandb_callback.py +1 -1
  136. langchain/callbacks/whylabs_callback.py +1 -1
  137. langchain/chains/api/base.py +41 -23
  138. langchain/chains/api/news_docs.py +1 -2
  139. langchain/chains/api/open_meteo_docs.py +1 -2
  140. langchain/chains/api/openapi/requests_chain.py +1 -1
  141. langchain/chains/api/openapi/response_chain.py +1 -1
  142. langchain/chains/api/podcast_docs.py +1 -2
  143. langchain/chains/api/prompt.py +1 -2
  144. langchain/chains/api/tmdb_docs.py +1 -2
  145. langchain/chains/base.py +96 -56
  146. langchain/chains/chat_vector_db/prompts.py +2 -3
  147. langchain/chains/combine_documents/__init__.py +1 -1
  148. langchain/chains/combine_documents/base.py +30 -11
  149. langchain/chains/combine_documents/map_reduce.py +41 -30
  150. langchain/chains/combine_documents/map_rerank.py +39 -24
  151. langchain/chains/combine_documents/reduce.py +48 -26
  152. langchain/chains/combine_documents/refine.py +27 -17
  153. langchain/chains/combine_documents/stuff.py +24 -13
  154. langchain/chains/constitutional_ai/base.py +11 -4
  155. langchain/chains/constitutional_ai/principles.py +22 -25
  156. langchain/chains/constitutional_ai/prompts.py +25 -28
  157. langchain/chains/conversation/base.py +9 -4
  158. langchain/chains/conversation/memory.py +5 -5
  159. langchain/chains/conversation/prompt.py +5 -5
  160. langchain/chains/conversational_retrieval/base.py +108 -79
  161. langchain/chains/conversational_retrieval/prompts.py +2 -3
  162. langchain/chains/elasticsearch_database/base.py +10 -10
  163. langchain/chains/elasticsearch_database/prompts.py +2 -3
  164. langchain/chains/ernie_functions/__init__.py +2 -2
  165. langchain/chains/example_generator.py +3 -1
  166. langchain/chains/flare/base.py +28 -12
  167. langchain/chains/flare/prompts.py +2 -0
  168. langchain/chains/graph_qa/cypher.py +2 -2
  169. langchain/chains/graph_qa/falkordb.py +1 -1
  170. langchain/chains/graph_qa/gremlin.py +1 -1
  171. langchain/chains/graph_qa/neptune_sparql.py +1 -1
  172. langchain/chains/graph_qa/prompts.py +2 -2
  173. langchain/chains/history_aware_retriever.py +2 -1
  174. langchain/chains/hyde/base.py +6 -5
  175. langchain/chains/hyde/prompts.py +5 -6
  176. langchain/chains/llm.py +82 -61
  177. langchain/chains/llm_bash/__init__.py +3 -2
  178. langchain/chains/llm_checker/base.py +19 -6
  179. langchain/chains/llm_checker/prompt.py +3 -4
  180. langchain/chains/llm_math/base.py +25 -10
  181. langchain/chains/llm_math/prompt.py +1 -2
  182. langchain/chains/llm_summarization_checker/base.py +22 -7
  183. langchain/chains/llm_symbolic_math/__init__.py +3 -2
  184. langchain/chains/loading.py +155 -97
  185. langchain/chains/mapreduce.py +4 -3
  186. langchain/chains/moderation.py +11 -9
  187. langchain/chains/natbot/base.py +11 -9
  188. langchain/chains/natbot/crawler.py +102 -76
  189. langchain/chains/natbot/prompt.py +2 -3
  190. langchain/chains/openai_functions/__init__.py +7 -7
  191. langchain/chains/openai_functions/base.py +15 -10
  192. langchain/chains/openai_functions/citation_fuzzy_match.py +21 -11
  193. langchain/chains/openai_functions/extraction.py +19 -19
  194. langchain/chains/openai_functions/openapi.py +39 -35
  195. langchain/chains/openai_functions/qa_with_structure.py +22 -15
  196. langchain/chains/openai_functions/tagging.py +4 -4
  197. langchain/chains/openai_tools/extraction.py +7 -8
  198. langchain/chains/qa_generation/base.py +8 -3
  199. langchain/chains/qa_generation/prompt.py +5 -5
  200. langchain/chains/qa_with_sources/base.py +17 -6
  201. langchain/chains/qa_with_sources/loading.py +16 -8
  202. langchain/chains/qa_with_sources/map_reduce_prompt.py +8 -9
  203. langchain/chains/qa_with_sources/refine_prompts.py +0 -1
  204. langchain/chains/qa_with_sources/retrieval.py +15 -6
  205. langchain/chains/qa_with_sources/stuff_prompt.py +6 -7
  206. langchain/chains/qa_with_sources/vector_db.py +21 -8
  207. langchain/chains/query_constructor/base.py +37 -34
  208. langchain/chains/query_constructor/ir.py +4 -4
  209. langchain/chains/query_constructor/parser.py +101 -34
  210. langchain/chains/query_constructor/prompt.py +5 -6
  211. langchain/chains/question_answering/chain.py +21 -10
  212. langchain/chains/question_answering/map_reduce_prompt.py +14 -14
  213. langchain/chains/question_answering/map_rerank_prompt.py +3 -3
  214. langchain/chains/question_answering/refine_prompts.py +2 -5
  215. langchain/chains/question_answering/stuff_prompt.py +5 -5
  216. langchain/chains/retrieval.py +1 -3
  217. langchain/chains/retrieval_qa/base.py +38 -27
  218. langchain/chains/retrieval_qa/prompt.py +1 -2
  219. langchain/chains/router/__init__.py +3 -3
  220. langchain/chains/router/base.py +38 -22
  221. langchain/chains/router/embedding_router.py +15 -8
  222. langchain/chains/router/llm_router.py +23 -20
  223. langchain/chains/router/multi_prompt.py +5 -2
  224. langchain/chains/router/multi_retrieval_qa.py +28 -5
  225. langchain/chains/sequential.py +30 -18
  226. langchain/chains/sql_database/prompt.py +14 -16
  227. langchain/chains/sql_database/query.py +7 -5
  228. langchain/chains/structured_output/__init__.py +1 -1
  229. langchain/chains/structured_output/base.py +77 -67
  230. langchain/chains/summarize/chain.py +11 -5
  231. langchain/chains/summarize/map_reduce_prompt.py +0 -1
  232. langchain/chains/summarize/stuff_prompt.py +0 -1
  233. langchain/chains/transform.py +9 -6
  234. langchain/chat_loaders/facebook_messenger.py +1 -1
  235. langchain/chat_loaders/langsmith.py +1 -1
  236. langchain/chat_loaders/utils.py +3 -3
  237. langchain/chat_models/__init__.py +20 -19
  238. langchain/chat_models/anthropic.py +1 -1
  239. langchain/chat_models/azureml_endpoint.py +1 -1
  240. langchain/chat_models/baidu_qianfan_endpoint.py +1 -1
  241. langchain/chat_models/base.py +213 -139
  242. langchain/chat_models/bedrock.py +1 -1
  243. langchain/chat_models/fake.py +1 -1
  244. langchain/chat_models/meta.py +1 -1
  245. langchain/chat_models/pai_eas_endpoint.py +1 -1
  246. langchain/chat_models/promptlayer_openai.py +1 -1
  247. langchain/chat_models/volcengine_maas.py +1 -1
  248. langchain/docstore/base.py +1 -1
  249. langchain/document_loaders/__init__.py +9 -9
  250. langchain/document_loaders/airbyte.py +3 -3
  251. langchain/document_loaders/assemblyai.py +1 -1
  252. langchain/document_loaders/azure_blob_storage_container.py +1 -1
  253. langchain/document_loaders/azure_blob_storage_file.py +1 -1
  254. langchain/document_loaders/baiducloud_bos_file.py +1 -1
  255. langchain/document_loaders/base.py +1 -1
  256. langchain/document_loaders/blob_loaders/__init__.py +1 -1
  257. langchain/document_loaders/blob_loaders/schema.py +1 -4
  258. langchain/document_loaders/blockchain.py +1 -1
  259. langchain/document_loaders/chatgpt.py +1 -1
  260. langchain/document_loaders/college_confidential.py +1 -1
  261. langchain/document_loaders/confluence.py +1 -1
  262. langchain/document_loaders/email.py +1 -1
  263. langchain/document_loaders/facebook_chat.py +1 -1
  264. langchain/document_loaders/markdown.py +1 -1
  265. langchain/document_loaders/notebook.py +1 -1
  266. langchain/document_loaders/org_mode.py +1 -1
  267. langchain/document_loaders/parsers/__init__.py +1 -1
  268. langchain/document_loaders/parsers/docai.py +1 -1
  269. langchain/document_loaders/parsers/generic.py +1 -1
  270. langchain/document_loaders/parsers/html/__init__.py +1 -1
  271. langchain/document_loaders/parsers/html/bs4.py +1 -1
  272. langchain/document_loaders/parsers/language/cobol.py +1 -1
  273. langchain/document_loaders/parsers/language/python.py +1 -1
  274. langchain/document_loaders/parsers/msword.py +1 -1
  275. langchain/document_loaders/parsers/pdf.py +5 -5
  276. langchain/document_loaders/parsers/registry.py +1 -1
  277. langchain/document_loaders/pdf.py +8 -8
  278. langchain/document_loaders/powerpoint.py +1 -1
  279. langchain/document_loaders/pyspark_dataframe.py +1 -1
  280. langchain/document_loaders/telegram.py +2 -2
  281. langchain/document_loaders/tencent_cos_directory.py +1 -1
  282. langchain/document_loaders/unstructured.py +5 -5
  283. langchain/document_loaders/url_playwright.py +1 -1
  284. langchain/document_loaders/whatsapp_chat.py +1 -1
  285. langchain/document_loaders/youtube.py +2 -2
  286. langchain/document_transformers/__init__.py +3 -3
  287. langchain/document_transformers/beautiful_soup_transformer.py +1 -1
  288. langchain/document_transformers/doctran_text_extract.py +1 -1
  289. langchain/document_transformers/doctran_text_qa.py +1 -1
  290. langchain/document_transformers/doctran_text_translate.py +1 -1
  291. langchain/document_transformers/embeddings_redundant_filter.py +3 -3
  292. langchain/document_transformers/google_translate.py +1 -1
  293. langchain/document_transformers/html2text.py +1 -1
  294. langchain/document_transformers/nuclia_text_transform.py +1 -1
  295. langchain/embeddings/__init__.py +5 -5
  296. langchain/embeddings/base.py +35 -24
  297. langchain/embeddings/cache.py +37 -32
  298. langchain/embeddings/fake.py +1 -1
  299. langchain/embeddings/huggingface.py +2 -2
  300. langchain/evaluation/__init__.py +22 -22
  301. langchain/evaluation/agents/trajectory_eval_chain.py +26 -25
  302. langchain/evaluation/agents/trajectory_eval_prompt.py +6 -9
  303. langchain/evaluation/comparison/__init__.py +1 -1
  304. langchain/evaluation/comparison/eval_chain.py +21 -13
  305. langchain/evaluation/comparison/prompt.py +1 -2
  306. langchain/evaluation/criteria/__init__.py +1 -1
  307. langchain/evaluation/criteria/eval_chain.py +23 -11
  308. langchain/evaluation/criteria/prompt.py +2 -3
  309. langchain/evaluation/embedding_distance/base.py +34 -20
  310. langchain/evaluation/exact_match/base.py +14 -1
  311. langchain/evaluation/loading.py +16 -11
  312. langchain/evaluation/parsing/base.py +20 -4
  313. langchain/evaluation/parsing/json_distance.py +24 -10
  314. langchain/evaluation/parsing/json_schema.py +13 -12
  315. langchain/evaluation/qa/__init__.py +1 -1
  316. langchain/evaluation/qa/eval_chain.py +20 -5
  317. langchain/evaluation/qa/eval_prompt.py +7 -8
  318. langchain/evaluation/qa/generate_chain.py +4 -1
  319. langchain/evaluation/qa/generate_prompt.py +2 -4
  320. langchain/evaluation/regex_match/base.py +9 -1
  321. langchain/evaluation/schema.py +38 -30
  322. langchain/evaluation/scoring/__init__.py +1 -1
  323. langchain/evaluation/scoring/eval_chain.py +23 -15
  324. langchain/evaluation/scoring/prompt.py +0 -1
  325. langchain/evaluation/string_distance/base.py +20 -9
  326. langchain/globals.py +12 -11
  327. langchain/graphs/__init__.py +6 -6
  328. langchain/graphs/graph_document.py +1 -1
  329. langchain/graphs/networkx_graph.py +2 -2
  330. langchain/hub.py +9 -11
  331. langchain/indexes/__init__.py +3 -3
  332. langchain/indexes/_sql_record_manager.py +63 -46
  333. langchain/indexes/prompts/entity_extraction.py +1 -2
  334. langchain/indexes/prompts/entity_summarization.py +1 -2
  335. langchain/indexes/prompts/knowledge_triplet_extraction.py +1 -3
  336. langchain/indexes/vectorstore.py +35 -19
  337. langchain/llms/__init__.py +13 -13
  338. langchain/llms/ai21.py +1 -1
  339. langchain/llms/azureml_endpoint.py +4 -4
  340. langchain/llms/base.py +15 -7
  341. langchain/llms/bedrock.py +1 -1
  342. langchain/llms/cloudflare_workersai.py +1 -1
  343. langchain/llms/gradient_ai.py +1 -1
  344. langchain/llms/loading.py +1 -1
  345. langchain/llms/openai.py +1 -1
  346. langchain/llms/sagemaker_endpoint.py +1 -1
  347. langchain/load/dump.py +1 -1
  348. langchain/load/load.py +1 -1
  349. langchain/load/serializable.py +3 -3
  350. langchain/memory/__init__.py +3 -3
  351. langchain/memory/buffer.py +14 -7
  352. langchain/memory/buffer_window.py +2 -0
  353. langchain/memory/chat_memory.py +14 -8
  354. langchain/memory/chat_message_histories/__init__.py +1 -1
  355. langchain/memory/chat_message_histories/astradb.py +1 -1
  356. langchain/memory/chat_message_histories/cassandra.py +1 -1
  357. langchain/memory/chat_message_histories/cosmos_db.py +1 -1
  358. langchain/memory/chat_message_histories/dynamodb.py +1 -1
  359. langchain/memory/chat_message_histories/elasticsearch.py +1 -1
  360. langchain/memory/chat_message_histories/file.py +1 -1
  361. langchain/memory/chat_message_histories/firestore.py +1 -1
  362. langchain/memory/chat_message_histories/momento.py +1 -1
  363. langchain/memory/chat_message_histories/mongodb.py +1 -1
  364. langchain/memory/chat_message_histories/neo4j.py +1 -1
  365. langchain/memory/chat_message_histories/postgres.py +1 -1
  366. langchain/memory/chat_message_histories/redis.py +1 -1
  367. langchain/memory/chat_message_histories/rocksetdb.py +1 -1
  368. langchain/memory/chat_message_histories/singlestoredb.py +1 -1
  369. langchain/memory/chat_message_histories/streamlit.py +1 -1
  370. langchain/memory/chat_message_histories/upstash_redis.py +1 -1
  371. langchain/memory/chat_message_histories/xata.py +1 -1
  372. langchain/memory/chat_message_histories/zep.py +1 -1
  373. langchain/memory/combined.py +14 -13
  374. langchain/memory/entity.py +131 -61
  375. langchain/memory/prompt.py +10 -11
  376. langchain/memory/readonly.py +0 -2
  377. langchain/memory/simple.py +4 -3
  378. langchain/memory/summary.py +43 -11
  379. langchain/memory/summary_buffer.py +20 -8
  380. langchain/memory/token_buffer.py +2 -0
  381. langchain/memory/utils.py +3 -2
  382. langchain/memory/vectorstore.py +12 -5
  383. langchain/memory/vectorstore_token_buffer_memory.py +5 -5
  384. langchain/model_laboratory.py +12 -11
  385. langchain/output_parsers/__init__.py +4 -4
  386. langchain/output_parsers/boolean.py +7 -4
  387. langchain/output_parsers/combining.py +14 -7
  388. langchain/output_parsers/datetime.py +32 -31
  389. langchain/output_parsers/enum.py +10 -4
  390. langchain/output_parsers/fix.py +60 -53
  391. langchain/output_parsers/format_instructions.py +6 -8
  392. langchain/output_parsers/json.py +2 -2
  393. langchain/output_parsers/list.py +2 -2
  394. langchain/output_parsers/loading.py +9 -9
  395. langchain/output_parsers/openai_functions.py +3 -3
  396. langchain/output_parsers/openai_tools.py +1 -1
  397. langchain/output_parsers/pandas_dataframe.py +59 -48
  398. langchain/output_parsers/prompts.py +1 -2
  399. langchain/output_parsers/rail_parser.py +1 -1
  400. langchain/output_parsers/regex.py +9 -8
  401. langchain/output_parsers/regex_dict.py +7 -10
  402. langchain/output_parsers/retry.py +99 -80
  403. langchain/output_parsers/structured.py +21 -6
  404. langchain/output_parsers/yaml.py +19 -11
  405. langchain/prompts/__init__.py +5 -3
  406. langchain/prompts/base.py +5 -5
  407. langchain/prompts/chat.py +8 -8
  408. langchain/prompts/example_selector/__init__.py +3 -1
  409. langchain/prompts/example_selector/semantic_similarity.py +2 -2
  410. langchain/prompts/few_shot.py +1 -1
  411. langchain/prompts/loading.py +3 -3
  412. langchain/prompts/prompt.py +1 -1
  413. langchain/pydantic_v1/__init__.py +1 -1
  414. langchain/retrievers/__init__.py +5 -5
  415. langchain/retrievers/bedrock.py +2 -2
  416. langchain/retrievers/bm25.py +1 -1
  417. langchain/retrievers/contextual_compression.py +14 -8
  418. langchain/retrievers/docarray.py +1 -1
  419. langchain/retrievers/document_compressors/__init__.py +5 -4
  420. langchain/retrievers/document_compressors/base.py +12 -6
  421. langchain/retrievers/document_compressors/chain_extract.py +5 -3
  422. langchain/retrievers/document_compressors/chain_extract_prompt.py +2 -3
  423. langchain/retrievers/document_compressors/chain_filter.py +9 -9
  424. langchain/retrievers/document_compressors/chain_filter_prompt.py +1 -2
  425. langchain/retrievers/document_compressors/cohere_rerank.py +17 -15
  426. langchain/retrievers/document_compressors/cross_encoder_rerank.py +2 -0
  427. langchain/retrievers/document_compressors/embeddings_filter.py +24 -17
  428. langchain/retrievers/document_compressors/flashrank_rerank.py +1 -1
  429. langchain/retrievers/document_compressors/listwise_rerank.py +8 -5
  430. langchain/retrievers/ensemble.py +30 -27
  431. langchain/retrievers/google_cloud_documentai_warehouse.py +1 -1
  432. langchain/retrievers/google_vertex_ai_search.py +2 -2
  433. langchain/retrievers/kendra.py +10 -10
  434. langchain/retrievers/llama_index.py +1 -1
  435. langchain/retrievers/merger_retriever.py +11 -11
  436. langchain/retrievers/milvus.py +1 -1
  437. langchain/retrievers/multi_query.py +35 -27
  438. langchain/retrievers/multi_vector.py +24 -9
  439. langchain/retrievers/parent_document_retriever.py +33 -9
  440. langchain/retrievers/re_phraser.py +6 -5
  441. langchain/retrievers/self_query/base.py +157 -127
  442. langchain/retrievers/time_weighted_retriever.py +21 -7
  443. langchain/retrievers/zilliz.py +1 -1
  444. langchain/runnables/hub.py +12 -0
  445. langchain/runnables/openai_functions.py +12 -2
  446. langchain/schema/__init__.py +23 -23
  447. langchain/schema/cache.py +1 -1
  448. langchain/schema/callbacks/base.py +7 -7
  449. langchain/schema/callbacks/manager.py +19 -19
  450. langchain/schema/callbacks/tracers/base.py +1 -1
  451. langchain/schema/callbacks/tracers/evaluation.py +1 -1
  452. langchain/schema/callbacks/tracers/langchain.py +1 -1
  453. langchain/schema/callbacks/tracers/langchain_v1.py +1 -1
  454. langchain/schema/callbacks/tracers/log_stream.py +1 -1
  455. langchain/schema/callbacks/tracers/schemas.py +8 -8
  456. langchain/schema/callbacks/tracers/stdout.py +3 -3
  457. langchain/schema/document.py +1 -1
  458. langchain/schema/language_model.py +2 -2
  459. langchain/schema/messages.py +12 -12
  460. langchain/schema/output.py +3 -3
  461. langchain/schema/output_parser.py +3 -3
  462. langchain/schema/runnable/__init__.py +3 -3
  463. langchain/schema/runnable/base.py +9 -9
  464. langchain/schema/runnable/config.py +5 -5
  465. langchain/schema/runnable/configurable.py +1 -1
  466. langchain/schema/runnable/history.py +1 -1
  467. langchain/schema/runnable/passthrough.py +1 -1
  468. langchain/schema/runnable/utils.py +16 -16
  469. langchain/schema/vectorstore.py +1 -1
  470. langchain/smith/__init__.py +2 -1
  471. langchain/smith/evaluation/__init__.py +2 -2
  472. langchain/smith/evaluation/config.py +9 -23
  473. langchain/smith/evaluation/name_generation.py +3 -3
  474. langchain/smith/evaluation/progress.py +22 -4
  475. langchain/smith/evaluation/runner_utils.py +416 -247
  476. langchain/smith/evaluation/string_run_evaluator.py +102 -68
  477. langchain/storage/__init__.py +2 -2
  478. langchain/storage/_lc_store.py +4 -2
  479. langchain/storage/encoder_backed.py +7 -2
  480. langchain/storage/file_system.py +19 -16
  481. langchain/storage/in_memory.py +1 -1
  482. langchain/storage/upstash_redis.py +1 -1
  483. langchain/text_splitter.py +15 -15
  484. langchain/tools/__init__.py +28 -26
  485. langchain/tools/ainetwork/app.py +1 -1
  486. langchain/tools/ainetwork/base.py +1 -1
  487. langchain/tools/ainetwork/owner.py +1 -1
  488. langchain/tools/ainetwork/rule.py +1 -1
  489. langchain/tools/ainetwork/transfer.py +1 -1
  490. langchain/tools/ainetwork/value.py +1 -1
  491. langchain/tools/amadeus/closest_airport.py +1 -1
  492. langchain/tools/amadeus/flight_search.py +1 -1
  493. langchain/tools/azure_cognitive_services/__init__.py +1 -1
  494. langchain/tools/base.py +4 -4
  495. langchain/tools/bearly/tool.py +1 -1
  496. langchain/tools/bing_search/__init__.py +1 -1
  497. langchain/tools/bing_search/tool.py +1 -1
  498. langchain/tools/dataforseo_api_search/__init__.py +1 -1
  499. langchain/tools/dataforseo_api_search/tool.py +1 -1
  500. langchain/tools/ddg_search/tool.py +1 -1
  501. langchain/tools/e2b_data_analysis/tool.py +2 -2
  502. langchain/tools/edenai/__init__.py +1 -1
  503. langchain/tools/file_management/__init__.py +1 -1
  504. langchain/tools/file_management/copy.py +1 -1
  505. langchain/tools/file_management/delete.py +1 -1
  506. langchain/tools/gmail/__init__.py +2 -2
  507. langchain/tools/gmail/get_message.py +1 -1
  508. langchain/tools/gmail/search.py +1 -1
  509. langchain/tools/gmail/send_message.py +1 -1
  510. langchain/tools/google_finance/__init__.py +1 -1
  511. langchain/tools/google_finance/tool.py +1 -1
  512. langchain/tools/google_scholar/__init__.py +1 -1
  513. langchain/tools/google_scholar/tool.py +1 -1
  514. langchain/tools/google_search/__init__.py +1 -1
  515. langchain/tools/google_search/tool.py +1 -1
  516. langchain/tools/google_serper/__init__.py +1 -1
  517. langchain/tools/google_serper/tool.py +1 -1
  518. langchain/tools/google_trends/__init__.py +1 -1
  519. langchain/tools/google_trends/tool.py +1 -1
  520. langchain/tools/jira/tool.py +20 -1
  521. langchain/tools/json/tool.py +25 -3
  522. langchain/tools/memorize/tool.py +1 -1
  523. langchain/tools/multion/__init__.py +1 -1
  524. langchain/tools/multion/update_session.py +1 -1
  525. langchain/tools/office365/__init__.py +2 -2
  526. langchain/tools/office365/events_search.py +1 -1
  527. langchain/tools/office365/messages_search.py +1 -1
  528. langchain/tools/office365/send_event.py +1 -1
  529. langchain/tools/office365/send_message.py +1 -1
  530. langchain/tools/openapi/utils/api_models.py +6 -6
  531. langchain/tools/playwright/__init__.py +5 -5
  532. langchain/tools/playwright/click.py +1 -1
  533. langchain/tools/playwright/extract_hyperlinks.py +1 -1
  534. langchain/tools/playwright/get_elements.py +1 -1
  535. langchain/tools/playwright/navigate.py +1 -1
  536. langchain/tools/plugin.py +2 -2
  537. langchain/tools/powerbi/tool.py +1 -1
  538. langchain/tools/python/__init__.py +3 -2
  539. langchain/tools/reddit_search/tool.py +1 -1
  540. langchain/tools/render.py +2 -2
  541. langchain/tools/requests/tool.py +2 -2
  542. langchain/tools/searchapi/tool.py +1 -1
  543. langchain/tools/searx_search/tool.py +1 -1
  544. langchain/tools/slack/get_message.py +1 -1
  545. langchain/tools/spark_sql/tool.py +1 -1
  546. langchain/tools/sql_database/tool.py +1 -1
  547. langchain/tools/tavily_search/__init__.py +1 -1
  548. langchain/tools/tavily_search/tool.py +1 -1
  549. langchain/tools/zapier/__init__.py +1 -1
  550. langchain/tools/zapier/tool.py +24 -2
  551. langchain/utilities/__init__.py +4 -4
  552. langchain/utilities/arcee.py +4 -4
  553. langchain/utilities/clickup.py +4 -4
  554. langchain/utilities/dalle_image_generator.py +1 -1
  555. langchain/utilities/dataforseo_api_search.py +1 -1
  556. langchain/utilities/opaqueprompts.py +1 -1
  557. langchain/utilities/reddit_search.py +1 -1
  558. langchain/utilities/sql_database.py +1 -1
  559. langchain/utilities/tavily_search.py +1 -1
  560. langchain/utilities/vertexai.py +2 -2
  561. langchain/utils/__init__.py +1 -1
  562. langchain/utils/aiter.py +1 -1
  563. langchain/utils/html.py +3 -3
  564. langchain/utils/input.py +1 -1
  565. langchain/utils/iter.py +1 -1
  566. langchain/utils/json_schema.py +1 -3
  567. langchain/utils/strings.py +1 -1
  568. langchain/utils/utils.py +6 -6
  569. langchain/vectorstores/__init__.py +5 -5
  570. langchain/vectorstores/alibabacloud_opensearch.py +1 -1
  571. langchain/vectorstores/azure_cosmos_db.py +1 -1
  572. langchain/vectorstores/clickhouse.py +1 -1
  573. langchain/vectorstores/elastic_vector_search.py +1 -1
  574. langchain/vectorstores/elasticsearch.py +2 -2
  575. langchain/vectorstores/myscale.py +1 -1
  576. langchain/vectorstores/neo4j_vector.py +1 -1
  577. langchain/vectorstores/pgembedding.py +1 -1
  578. langchain/vectorstores/qdrant.py +1 -1
  579. langchain/vectorstores/redis/__init__.py +1 -1
  580. langchain/vectorstores/redis/base.py +1 -1
  581. langchain/vectorstores/redis/filters.py +4 -4
  582. langchain/vectorstores/redis/schema.py +6 -6
  583. langchain/vectorstores/sklearn.py +2 -2
  584. langchain/vectorstores/starrocks.py +1 -1
  585. langchain/vectorstores/utils.py +1 -1
  586. {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/METADATA +4 -14
  587. {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/RECORD +590 -591
  588. {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/WHEEL +1 -1
  589. langchain/smith/evaluation/utils.py +0 -0
  590. {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/entry_points.txt +0 -0
  591. {langchain-0.3.26.dist-info → langchain-0.4.0.dev0.dist-info}/licenses/LICENSE +0 -0
@@ -34,7 +34,7 @@ class EvaluatorType(str, Enum):
34
34
  """The pairwise string evaluator, which predicts the preferred prediction from
35
35
  between two models."""
36
36
  SCORE_STRING = "score_string"
37
- """The scored string evaluator, which gives a score between 1 and 10
37
+ """The scored string evaluator, which gives a score between 1 and 10
38
38
  to a prediction."""
39
39
  LABELED_PAIRWISE_STRING = "labeled_pairwise_string"
40
40
  """The labeled pairwise string evaluator, which predicts the preferred prediction
@@ -109,25 +109,27 @@ class _EvalArgsMixin:
109
109
  def _check_evaluation_args(
110
110
  self,
111
111
  reference: Optional[str] = None,
112
- input: Optional[str] = None,
112
+ input_: Optional[str] = None,
113
113
  ) -> None:
114
114
  """Check if the evaluation arguments are valid.
115
115
 
116
116
  Args:
117
117
  reference (Optional[str], optional): The reference label.
118
- input (Optional[str], optional): The input string.
118
+ input_ (Optional[str], optional): The input string.
119
119
  Raises:
120
120
  ValueError: If the evaluator requires an input string but none is provided,
121
121
  or if the evaluator requires a reference label but none is provided.
122
122
  """
123
- if self.requires_input and input is None:
124
- raise ValueError(f"{self.__class__.__name__} requires an input string.")
125
- elif input is not None and not self.requires_input:
126
- warn(self._skip_input_warning)
123
+ if self.requires_input and input_ is None:
124
+ msg = f"{self.__class__.__name__} requires an input string."
125
+ raise ValueError(msg)
126
+ if input_ is not None and not self.requires_input:
127
+ warn(self._skip_input_warning, stacklevel=3)
127
128
  if self.requires_reference and reference is None:
128
- raise ValueError(f"{self.__class__.__name__} requires a reference string.")
129
- elif reference is not None and not self.requires_reference:
130
- warn(self._skip_reference_warning)
129
+ msg = f"{self.__class__.__name__} requires a reference string."
130
+ raise ValueError(msg)
131
+ if reference is not None and not self.requires_reference:
132
+ warn(self._skip_reference_warning, stacklevel=3)
131
133
 
132
134
 
133
135
  class StringEvaluator(_EvalArgsMixin, ABC):
@@ -150,7 +152,7 @@ class StringEvaluator(_EvalArgsMixin, ABC):
150
152
  *,
151
153
  prediction: Union[str, Any],
152
154
  reference: Optional[Union[str, Any]] = None,
153
- input: Optional[Union[str, Any]] = None,
155
+ input: Optional[Union[str, Any]] = None, # noqa: A002
154
156
  **kwargs: Any,
155
157
  ) -> dict:
156
158
  """Evaluate Chain or LLM output, based on optional input and label.
@@ -173,7 +175,7 @@ class StringEvaluator(_EvalArgsMixin, ABC):
173
175
  *,
174
176
  prediction: Union[str, Any],
175
177
  reference: Optional[Union[str, Any]] = None,
176
- input: Optional[Union[str, Any]] = None,
178
+ input: Optional[Union[str, Any]] = None, # noqa: A002
177
179
  **kwargs: Any,
178
180
  ) -> dict:
179
181
  """Asynchronously evaluate Chain or LLM output, based on optional input and label.
@@ -204,7 +206,7 @@ class StringEvaluator(_EvalArgsMixin, ABC):
204
206
  *,
205
207
  prediction: str,
206
208
  reference: Optional[str] = None,
207
- input: Optional[str] = None,
209
+ input: Optional[str] = None, # noqa: A002
208
210
  **kwargs: Any,
209
211
  ) -> dict:
210
212
  """Evaluate Chain or LLM output, based on optional input and label.
@@ -217,9 +219,12 @@ class StringEvaluator(_EvalArgsMixin, ABC):
217
219
  Returns:
218
220
  dict: The evaluation results containing the score or value.
219
221
  """ # noqa: E501
220
- self._check_evaluation_args(reference=reference, input=input)
222
+ self._check_evaluation_args(reference=reference, input_=input)
221
223
  return self._evaluate_strings(
222
- prediction=prediction, reference=reference, input=input, **kwargs
224
+ prediction=prediction,
225
+ reference=reference,
226
+ input=input,
227
+ **kwargs,
223
228
  )
224
229
 
225
230
  async def aevaluate_strings(
@@ -227,7 +232,7 @@ class StringEvaluator(_EvalArgsMixin, ABC):
227
232
  *,
228
233
  prediction: str,
229
234
  reference: Optional[str] = None,
230
- input: Optional[str] = None,
235
+ input: Optional[str] = None, # noqa: A002
231
236
  **kwargs: Any,
232
237
  ) -> dict:
233
238
  """Asynchronously evaluate Chain or LLM output, based on optional input and label.
@@ -240,9 +245,12 @@ class StringEvaluator(_EvalArgsMixin, ABC):
240
245
  Returns:
241
246
  dict: The evaluation results containing the score or value.
242
247
  """ # noqa: E501
243
- self._check_evaluation_args(reference=reference, input=input)
248
+ self._check_evaluation_args(reference=reference, input_=input)
244
249
  return await self._aevaluate_strings(
245
- prediction=prediction, reference=reference, input=input, **kwargs
250
+ prediction=prediction,
251
+ reference=reference,
252
+ input=input,
253
+ **kwargs,
246
254
  )
247
255
 
248
256
 
@@ -256,7 +264,7 @@ class PairwiseStringEvaluator(_EvalArgsMixin, ABC):
256
264
  prediction: str,
257
265
  prediction_b: str,
258
266
  reference: Optional[str] = None,
259
- input: Optional[str] = None,
267
+ input: Optional[str] = None, # noqa: A002
260
268
  **kwargs: Any,
261
269
  ) -> dict:
262
270
  """Evaluate the output string pairs.
@@ -277,7 +285,7 @@ class PairwiseStringEvaluator(_EvalArgsMixin, ABC):
277
285
  prediction: str,
278
286
  prediction_b: str,
279
287
  reference: Optional[str] = None,
280
- input: Optional[str] = None,
288
+ input: Optional[str] = None, # noqa: A002
281
289
  **kwargs: Any,
282
290
  ) -> dict:
283
291
  """Asynchronously evaluate the output string pairs.
@@ -307,7 +315,7 @@ class PairwiseStringEvaluator(_EvalArgsMixin, ABC):
307
315
  prediction: str,
308
316
  prediction_b: str,
309
317
  reference: Optional[str] = None,
310
- input: Optional[str] = None,
318
+ input: Optional[str] = None, # noqa: A002
311
319
  **kwargs: Any,
312
320
  ) -> dict:
313
321
  """Evaluate the output string pairs.
@@ -321,7 +329,7 @@ class PairwiseStringEvaluator(_EvalArgsMixin, ABC):
321
329
  Returns:
322
330
  dict: A dictionary containing the preference, scores, and/or other information.
323
331
  """ # noqa: E501
324
- self._check_evaluation_args(reference=reference, input=input)
332
+ self._check_evaluation_args(reference=reference, input_=input)
325
333
  return self._evaluate_string_pairs(
326
334
  prediction=prediction,
327
335
  prediction_b=prediction_b,
@@ -336,7 +344,7 @@ class PairwiseStringEvaluator(_EvalArgsMixin, ABC):
336
344
  prediction: str,
337
345
  prediction_b: str,
338
346
  reference: Optional[str] = None,
339
- input: Optional[str] = None,
347
+ input: Optional[str] = None, # noqa: A002
340
348
  **kwargs: Any,
341
349
  ) -> dict:
342
350
  """Asynchronously evaluate the output string pairs.
@@ -350,7 +358,7 @@ class PairwiseStringEvaluator(_EvalArgsMixin, ABC):
350
358
  Returns:
351
359
  dict: A dictionary containing the preference, scores, and/or other information.
352
360
  """ # noqa: E501
353
- self._check_evaluation_args(reference=reference, input=input)
361
+ self._check_evaluation_args(reference=reference, input_=input)
354
362
  return await self._aevaluate_string_pairs(
355
363
  prediction=prediction,
356
364
  prediction_b=prediction_b,
@@ -374,7 +382,7 @@ class AgentTrajectoryEvaluator(_EvalArgsMixin, ABC):
374
382
  *,
375
383
  prediction: str,
376
384
  agent_trajectory: Sequence[tuple[AgentAction, str]],
377
- input: str,
385
+ input: str, # noqa: A002
378
386
  reference: Optional[str] = None,
379
387
  **kwargs: Any,
380
388
  ) -> dict:
@@ -396,7 +404,7 @@ class AgentTrajectoryEvaluator(_EvalArgsMixin, ABC):
396
404
  *,
397
405
  prediction: str,
398
406
  agent_trajectory: Sequence[tuple[AgentAction, str]],
399
- input: str,
407
+ input: str, # noqa: A002
400
408
  reference: Optional[str] = None,
401
409
  **kwargs: Any,
402
410
  ) -> dict:
@@ -427,7 +435,7 @@ class AgentTrajectoryEvaluator(_EvalArgsMixin, ABC):
427
435
  *,
428
436
  prediction: str,
429
437
  agent_trajectory: Sequence[tuple[AgentAction, str]],
430
- input: str,
438
+ input: str, # noqa: A002
431
439
  reference: Optional[str] = None,
432
440
  **kwargs: Any,
433
441
  ) -> dict:
@@ -443,7 +451,7 @@ class AgentTrajectoryEvaluator(_EvalArgsMixin, ABC):
443
451
  Returns:
444
452
  dict: The evaluation result.
445
453
  """
446
- self._check_evaluation_args(reference=reference, input=input)
454
+ self._check_evaluation_args(reference=reference, input_=input)
447
455
  return self._evaluate_agent_trajectory(
448
456
  prediction=prediction,
449
457
  input=input,
@@ -457,7 +465,7 @@ class AgentTrajectoryEvaluator(_EvalArgsMixin, ABC):
457
465
  *,
458
466
  prediction: str,
459
467
  agent_trajectory: Sequence[tuple[AgentAction, str]],
460
- input: str,
468
+ input: str, # noqa: A002
461
469
  reference: Optional[str] = None,
462
470
  **kwargs: Any,
463
471
  ) -> dict:
@@ -473,7 +481,7 @@ class AgentTrajectoryEvaluator(_EvalArgsMixin, ABC):
473
481
  Returns:
474
482
  dict: The evaluation result.
475
483
  """
476
- self._check_evaluation_args(reference=reference, input=input)
484
+ self._check_evaluation_args(reference=reference, input_=input)
477
485
  return await self._aevaluate_agent_trajectory(
478
486
  prediction=prediction,
479
487
  input=input,
@@ -28,4 +28,4 @@ from langchain.evaluation.scoring.eval_chain import (
28
28
  ScoreStringEvalChain,
29
29
  )
30
30
 
31
- __all__ = ["ScoreStringEvalChain", "LabeledScoreStringEvalChain"]
31
+ __all__ = ["LabeledScoreStringEvalChain", "ScoreStringEvalChain"]
@@ -11,6 +11,7 @@ from langchain_core.language_models import BaseLanguageModel
11
11
  from langchain_core.output_parsers import BaseOutputParser
12
12
  from langchain_core.prompts.prompt import PromptTemplate
13
13
  from pydantic import ConfigDict, Field
14
+ from typing_extensions import override
14
15
 
15
16
  from langchain.chains.constitutional_ai.models import ConstitutionalPrinciple
16
17
  from langchain.chains.llm import LLMChain
@@ -69,7 +70,7 @@ def resolve_criteria(
69
70
  Criteria.DEPTH,
70
71
  ]
71
72
  return {k.value: _SUPPORTED_CRITERIA[k] for k in _default_criteria}
72
- elif isinstance(criteria, Criteria):
73
+ if isinstance(criteria, Criteria):
73
74
  criteria_ = {criteria.value: _SUPPORTED_CRITERIA[criteria]}
74
75
  elif isinstance(criteria, str):
75
76
  if criteria in _SUPPORTED_CRITERIA:
@@ -86,11 +87,12 @@ def resolve_criteria(
86
87
  }
87
88
  else:
88
89
  if not criteria:
89
- raise ValueError(
90
+ msg = (
90
91
  "Criteria cannot be empty. "
91
92
  "Please provide a criterion name or a mapping of the criterion name"
92
93
  " to its description."
93
94
  )
95
+ raise ValueError(msg)
94
96
  criteria_ = dict(criteria)
95
97
  return criteria_
96
98
 
@@ -131,12 +133,13 @@ class ScoreStringResultOutputParser(BaseOutputParser[dict]):
131
133
  if match:
132
134
  verdict = match.group(1)
133
135
 
134
- if not match or verdict not in list("123456789") + ["10"]:
135
- raise ValueError(
136
+ if not match or verdict not in [*list("123456789"), "10"]:
137
+ msg = (
136
138
  f"Invalid output: {text}. "
137
139
  "Output must contain a double bracketed string\
138
140
  with the verdict between 1 and 10."
139
141
  )
142
+ raise ValueError(msg)
140
143
 
141
144
  return {
142
145
  "reasoning": text,
@@ -172,7 +175,7 @@ class ScoreStringEvalChain(StringEvaluator, LLMEvalChain, LLMChain):
172
175
 
173
176
  output_key: str = "results" #: :meta private:
174
177
  output_parser: BaseOutputParser = Field(
175
- default_factory=ScoreStringResultOutputParser
178
+ default_factory=ScoreStringResultOutputParser,
176
179
  )
177
180
  normalize_by: Optional[float] = None
178
181
  """The value to normalize the score by, if specified."""
@@ -184,6 +187,7 @@ class ScoreStringEvalChain(StringEvaluator, LLMEvalChain, LLMChain):
184
187
  )
185
188
 
186
189
  @classmethod
190
+ @override
187
191
  def is_lc_serializable(cls) -> bool:
188
192
  return False
189
193
 
@@ -259,16 +263,17 @@ class ScoreStringEvalChain(StringEvaluator, LLMEvalChain, LLMChain):
259
263
  if not (hasattr(llm, "model_name") and not llm.model_name.startswith("gpt-4")):
260
264
  logger.warning(
261
265
  "This chain was only tested with GPT-4. \
262
- Performance may be significantly worse with other models."
266
+ Performance may be significantly worse with other models.",
263
267
  )
264
268
 
265
269
  expected_input_vars = {"prediction", "input", "criteria"}
266
270
  prompt_ = prompt or SCORING_TEMPLATE.partial(reference="")
267
271
  if expected_input_vars != set(prompt_.input_variables):
268
- raise ValueError(
272
+ msg = (
269
273
  f"Input variables should be {expected_input_vars}, "
270
274
  f"but got {prompt_.input_variables}"
271
275
  )
276
+ raise ValueError(msg)
272
277
  criteria_ = resolve_criteria(criteria)
273
278
  criteria_str = "\n".join(
274
279
  f"{k}: {v}" if v else k for k, v in criteria_.items()
@@ -289,7 +294,7 @@ Performance may be significantly worse with other models."
289
294
  def _prepare_input(
290
295
  self,
291
296
  prediction: str,
292
- input: Optional[str],
297
+ input_: Optional[str],
293
298
  reference: Optional[str],
294
299
  ) -> dict:
295
300
  """Prepare the input for the chain.
@@ -297,20 +302,20 @@ Performance may be significantly worse with other models."
297
302
  Args:
298
303
  prediction (str): The output string from the first model.
299
304
  prediction_b (str): The output string from the second model.
300
- input (str, optional): The input or task string.
305
+ input_ (str, optional): The input or task string.
301
306
  reference (str, optional): The reference string, if any.
302
307
 
303
308
  Returns:
304
309
  dict: The prepared input for the chain.
305
310
 
306
311
  """
307
- input_ = {
312
+ input_dict = {
308
313
  "prediction": prediction,
309
- "input": input,
314
+ "input": input_,
310
315
  }
311
316
  if self.requires_reference:
312
- input_["reference"] = reference
313
- return input_
317
+ input_dict["reference"] = reference
318
+ return input_dict
314
319
 
315
320
  def _prepare_output(self, result: dict) -> dict:
316
321
  """Prepare the output."""
@@ -321,6 +326,7 @@ Performance may be significantly worse with other models."
321
326
  parsed["score"] = parsed["score"] / self.normalize_by
322
327
  return parsed
323
328
 
329
+ @override
324
330
  def _evaluate_strings(
325
331
  self,
326
332
  *,
@@ -358,7 +364,8 @@ Performance may be significantly worse with other models."
358
364
  )
359
365
  return self._prepare_output(result)
360
366
 
361
- async def _aevaluate_string_pairs(
367
+ @override
368
+ async def _aevaluate_strings(
362
369
  self,
363
370
  *,
364
371
  prediction: str,
@@ -448,10 +455,11 @@ class LabeledScoreStringEvalChain(ScoreStringEvalChain):
448
455
  }
449
456
  prompt_ = prompt or SCORING_TEMPLATE_WITH_REFERENCE
450
457
  if expected_input_vars != set(prompt_.input_variables):
451
- raise ValueError(
458
+ msg = (
452
459
  f"Input variables should be {expected_input_vars}, "
453
460
  f"but got {prompt_.input_variables}"
454
461
  )
462
+ raise ValueError(msg)
455
463
  criteria_ = resolve_criteria(criteria)
456
464
  criteria_str = "\n".join(f"{k}: {v}" for k, v in criteria_.items()).strip()
457
465
  criteria_str = (
@@ -5,7 +5,6 @@ and answers the question. The prompt is based on the paper from
5
5
  Zheng, et. al. https://arxiv.org/abs/2306.05685
6
6
  """
7
7
 
8
- # flake8: noqa
9
8
  from langchain_core.prompts.chat import ChatPromptTemplate
10
9
 
11
10
  SYSTEM_MESSAGE = "You are a helpful assistant."
@@ -10,6 +10,7 @@ from langchain_core.callbacks.manager import (
10
10
  )
11
11
  from langchain_core.utils import pre_init
12
12
  from pydantic import Field
13
+ from typing_extensions import override
13
14
 
14
15
  from langchain.chains.base import Chain
15
16
  from langchain.evaluation.schema import PairwiseStringEvaluator, StringEvaluator
@@ -28,11 +29,12 @@ def _load_rapidfuzz() -> Any:
28
29
  """
29
30
  try:
30
31
  import rapidfuzz
31
- except ImportError:
32
- raise ImportError(
32
+ except ImportError as e:
33
+ msg = (
33
34
  "Please install the rapidfuzz library to use the FuzzyMatchStringEvaluator."
34
35
  "Please install it with `pip install rapidfuzz`."
35
36
  )
37
+ raise ImportError(msg) from e
36
38
  return rapidfuzz.distance
37
39
 
38
40
 
@@ -104,7 +106,7 @@ class _RapidFuzzChainMixin(Chain):
104
106
  return result
105
107
 
106
108
  @staticmethod
107
- def _get_metric(distance: str, normalize_score: bool = False) -> Callable:
109
+ def _get_metric(distance: str, *, normalize_score: bool = False) -> Callable:
108
110
  """
109
111
  Get the distance metric function based on the distance type.
110
112
 
@@ -128,15 +130,15 @@ class _RapidFuzzChainMixin(Chain):
128
130
  StringDistance.INDEL: rf_distance.Indel,
129
131
  }
130
132
  if distance not in module_map:
131
- raise ValueError(
133
+ msg = (
132
134
  f"Invalid distance metric: {distance}"
133
135
  f"\nMust be one of: {list(StringDistance)}"
134
136
  )
137
+ raise ValueError(msg)
135
138
  module = module_map[distance]
136
139
  if normalize_score:
137
140
  return module.normalized_distance
138
- else:
139
- return module.distance
141
+ return module.distance
140
142
 
141
143
  @property
142
144
  def metric(self) -> Callable:
@@ -147,7 +149,8 @@ class _RapidFuzzChainMixin(Chain):
147
149
  Callable: The distance metric function.
148
150
  """
149
151
  return _RapidFuzzChainMixin._get_metric(
150
- self.distance, normalize_score=self.normalize_score
152
+ self.distance,
153
+ normalize_score=self.normalize_score,
151
154
  )
152
155
 
153
156
  def compute_metric(self, a: str, b: str) -> float:
@@ -221,6 +224,7 @@ class StringDistanceEvalChain(StringEvaluator, _RapidFuzzChainMixin):
221
224
  """
222
225
  return f"{self.distance.value}_distance"
223
226
 
227
+ @override
224
228
  def _call(
225
229
  self,
226
230
  inputs: dict[str, Any],
@@ -239,6 +243,7 @@ class StringDistanceEvalChain(StringEvaluator, _RapidFuzzChainMixin):
239
243
  """
240
244
  return {"score": self.compute_metric(inputs["reference"], inputs["prediction"])}
241
245
 
246
+ @override
242
247
  async def _acall(
243
248
  self,
244
249
  inputs: dict[str, Any],
@@ -258,6 +263,7 @@ class StringDistanceEvalChain(StringEvaluator, _RapidFuzzChainMixin):
258
263
  """
259
264
  return {"score": self.compute_metric(inputs["reference"], inputs["prediction"])}
260
265
 
266
+ @override
261
267
  def _evaluate_strings(
262
268
  self,
263
269
  *,
@@ -293,6 +299,7 @@ class StringDistanceEvalChain(StringEvaluator, _RapidFuzzChainMixin):
293
299
 
294
300
  return self._prepare_output(result)
295
301
 
302
+ @override
296
303
  async def _aevaluate_strings(
297
304
  self,
298
305
  *,
@@ -352,6 +359,7 @@ class PairwiseStringDistanceEvalChain(PairwiseStringEvaluator, _RapidFuzzChainMi
352
359
  """
353
360
  return f"pairwise_{self.distance.value}_distance"
354
361
 
362
+ @override
355
363
  def _call(
356
364
  self,
357
365
  inputs: dict[str, Any],
@@ -369,9 +377,10 @@ class PairwiseStringDistanceEvalChain(PairwiseStringEvaluator, _RapidFuzzChainMi
369
377
  Dict[str, Any]: The evaluation results containing the score.
370
378
  """
371
379
  return {
372
- "score": self.compute_metric(inputs["prediction"], inputs["prediction_b"])
380
+ "score": self.compute_metric(inputs["prediction"], inputs["prediction_b"]),
373
381
  }
374
382
 
383
+ @override
375
384
  async def _acall(
376
385
  self,
377
386
  inputs: dict[str, Any],
@@ -389,9 +398,10 @@ class PairwiseStringDistanceEvalChain(PairwiseStringEvaluator, _RapidFuzzChainMi
389
398
  Dict[str, Any]: The evaluation results containing the score.
390
399
  """
391
400
  return {
392
- "score": self.compute_metric(inputs["prediction"], inputs["prediction_b"])
401
+ "score": self.compute_metric(inputs["prediction"], inputs["prediction_b"]),
393
402
  }
394
403
 
404
+ @override
395
405
  def _evaluate_string_pairs(
396
406
  self,
397
407
  *,
@@ -426,6 +436,7 @@ class PairwiseStringDistanceEvalChain(PairwiseStringEvaluator, _RapidFuzzChainMi
426
436
  )
427
437
  return self._prepare_output(result)
428
438
 
439
+ @override
429
440
  async def _aevaluate_string_pairs(
430
441
  self,
431
442
  *,
langchain/globals.py CHANGED
@@ -16,7 +16,9 @@ _debug: bool = False
16
16
  _llm_cache: Optional["BaseCache"] = None
17
17
 
18
18
 
19
- def set_verbose(value: bool) -> None:
19
+ def set_verbose(
20
+ value: bool, # noqa: FBT001
21
+ ) -> None:
20
22
  """Set a new value for the `verbose` global setting."""
21
23
  import langchain
22
24
 
@@ -37,7 +39,7 @@ def set_verbose(value: bool) -> None:
37
39
  # have migrated to using `set_verbose()` here.
38
40
  langchain.verbose = value
39
41
 
40
- global _verbose
42
+ global _verbose # noqa: PLW0603
41
43
  _verbose = value
42
44
 
43
45
 
@@ -64,14 +66,15 @@ def get_verbose() -> bool:
64
66
  # In the meantime, the `verbose` setting is considered True if either the old
65
67
  # or the new value are True. This accommodates users who haven't migrated
66
68
  # to using `set_verbose()` yet. Those users are getting deprecation warnings
67
- # directing them to use `set_verbose()` when they import `langhchain.verbose`.
69
+ # directing them to use `set_verbose()` when they import `langchain.verbose`.
68
70
  old_verbose = langchain.verbose
69
71
 
70
- global _verbose
71
72
  return _verbose or old_verbose
72
73
 
73
74
 
74
- def set_debug(value: bool) -> None:
75
+ def set_debug(
76
+ value: bool, # noqa: FBT001
77
+ ) -> None:
75
78
  """Set a new value for the `debug` global setting."""
76
79
  import langchain
77
80
 
@@ -90,7 +93,7 @@ def set_debug(value: bool) -> None:
90
93
  # have migrated to using `set_debug()` here.
91
94
  langchain.debug = value
92
95
 
93
- global _debug
96
+ global _debug # noqa: PLW0603
94
97
  _debug = value
95
98
 
96
99
 
@@ -115,10 +118,9 @@ def get_debug() -> bool:
115
118
  # In the meantime, the `debug` setting is considered True if either the old
116
119
  # or the new value are True. This accommodates users who haven't migrated
117
120
  # to using `set_debug()` yet. Those users are getting deprecation warnings
118
- # directing them to use `set_debug()` when they import `langhchain.debug`.
121
+ # directing them to use `set_debug()` when they import `langchain.debug`.
119
122
  old_debug = langchain.debug
120
123
 
121
- global _debug
122
124
  return _debug or old_debug
123
125
 
124
126
 
@@ -143,7 +145,7 @@ def set_llm_cache(value: Optional["BaseCache"]) -> None:
143
145
  # once all users have migrated to using `set_llm_cache()` here.
144
146
  langchain.llm_cache = value
145
147
 
146
- global _llm_cache
148
+ global _llm_cache # noqa: PLW0603
147
149
  _llm_cache = value
148
150
 
149
151
 
@@ -172,8 +174,7 @@ def get_llm_cache() -> "BaseCache":
172
174
  # or the old value if both are falsy. This accommodates users
173
175
  # who haven't migrated to using `set_llm_cache()` yet.
174
176
  # Those users are getting deprecation warnings directing them
175
- # to use `set_llm_cache()` when they import `langhchain.llm_cache`.
177
+ # to use `set_llm_cache()` when they import `langchain.llm_cache`.
176
178
  old_llm_cache = langchain.llm_cache
177
179
 
178
- global _llm_cache
179
180
  return _llm_cache or old_llm_cache
@@ -44,14 +44,14 @@ def __getattr__(name: str) -> Any:
44
44
 
45
45
 
46
46
  __all__ = [
47
+ "ArangoGraph",
48
+ "FalkorDBGraph",
49
+ "HugeGraph",
50
+ "KuzuGraph",
47
51
  "MemgraphGraph",
48
- "NetworkxEntityGraph",
49
- "Neo4jGraph",
50
52
  "NebulaGraph",
53
+ "Neo4jGraph",
51
54
  "NeptuneGraph",
52
- "KuzuGraph",
53
- "HugeGraph",
55
+ "NetworkxEntityGraph",
54
56
  "RdfGraph",
55
- "ArangoGraph",
56
- "FalkorDBGraph",
57
57
  ]
@@ -27,7 +27,7 @@ def __getattr__(name: str) -> Any:
27
27
 
28
28
 
29
29
  __all__ = [
30
+ "GraphDocument",
30
31
  "Node",
31
32
  "Relationship",
32
- "GraphDocument",
33
33
  ]
@@ -30,7 +30,7 @@ def __getattr__(name: str) -> Any:
30
30
 
31
31
  __all__ = [
32
32
  "KnowledgeTriple",
33
- "parse_triples",
34
- "get_entities",
35
33
  "NetworkxEntityGraph",
34
+ "get_entities",
35
+ "parse_triples",
36
36
  ]