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

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

Potentially problematic release.


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

Files changed (1364) hide show
  1. langchain/__init__.py +2 -452
  2. langchain/agents/__init__.py +9 -178
  3. langchain/agents/factory.py +1582 -0
  4. langchain/agents/middleware/__init__.py +80 -0
  5. langchain/agents/middleware/_execution.py +388 -0
  6. langchain/agents/middleware/_redaction.py +350 -0
  7. langchain/agents/middleware/context_editing.py +274 -0
  8. langchain/agents/middleware/file_search.py +382 -0
  9. langchain/agents/middleware/human_in_the_loop.py +351 -0
  10. langchain/agents/middleware/model_call_limit.py +210 -0
  11. langchain/agents/middleware/model_fallback.py +137 -0
  12. langchain/agents/middleware/pii.py +317 -0
  13. langchain/agents/middleware/shell_tool.py +718 -0
  14. langchain/agents/middleware/summarization.py +249 -0
  15. langchain/agents/middleware/todo.py +219 -0
  16. langchain/agents/middleware/tool_call_limit.py +333 -0
  17. langchain/agents/middleware/tool_emulator.py +200 -0
  18. langchain/agents/middleware/tool_retry.py +384 -0
  19. langchain/agents/middleware/tool_selection.py +310 -0
  20. langchain/agents/middleware/types.py +1572 -0
  21. langchain/agents/structured_output.py +426 -0
  22. langchain/chat_models/__init__.py +7 -72
  23. langchain/chat_models/base.py +268 -358
  24. langchain/embeddings/__init__.py +7 -217
  25. langchain/embeddings/base.py +31 -43
  26. langchain/messages/__init__.py +72 -0
  27. langchain/rate_limiters/__init__.py +13 -0
  28. langchain/tools/__init__.py +17 -197
  29. langchain/tools/tool_node.py +1700 -0
  30. langchain-1.0.0.dist-info/METADATA +87 -0
  31. langchain-1.0.0.dist-info/RECORD +34 -0
  32. {langchain-0.4.0.dev0.dist-info → langchain-1.0.0.dist-info}/WHEEL +1 -1
  33. langchain/_api/__init__.py +0 -28
  34. langchain/_api/deprecation.py +0 -32
  35. langchain/_api/interactive_env.py +0 -5
  36. langchain/_api/module_import.py +0 -153
  37. langchain/_api/path.py +0 -3
  38. langchain/adapters/__init__.py +0 -0
  39. langchain/adapters/openai.py +0 -63
  40. langchain/agents/agent.py +0 -1824
  41. langchain/agents/agent_iterator.py +0 -438
  42. langchain/agents/agent_toolkits/__init__.py +0 -167
  43. langchain/agents/agent_toolkits/ainetwork/__init__.py +0 -1
  44. langchain/agents/agent_toolkits/ainetwork/toolkit.py +0 -25
  45. langchain/agents/agent_toolkits/amadeus/toolkit.py +0 -23
  46. langchain/agents/agent_toolkits/azure_cognitive_services.py +0 -29
  47. langchain/agents/agent_toolkits/base.py +0 -3
  48. langchain/agents/agent_toolkits/clickup/__init__.py +0 -0
  49. langchain/agents/agent_toolkits/clickup/toolkit.py +0 -25
  50. langchain/agents/agent_toolkits/conversational_retrieval/__init__.py +0 -0
  51. langchain/agents/agent_toolkits/conversational_retrieval/openai_functions.py +0 -87
  52. langchain/agents/agent_toolkits/conversational_retrieval/tool.py +0 -3
  53. langchain/agents/agent_toolkits/csv/__init__.py +0 -28
  54. langchain/agents/agent_toolkits/file_management/__init__.py +0 -31
  55. langchain/agents/agent_toolkits/file_management/toolkit.py +0 -29
  56. langchain/agents/agent_toolkits/github/__init__.py +0 -1
  57. langchain/agents/agent_toolkits/github/toolkit.py +0 -69
  58. langchain/agents/agent_toolkits/gitlab/__init__.py +0 -1
  59. langchain/agents/agent_toolkits/gitlab/toolkit.py +0 -25
  60. langchain/agents/agent_toolkits/gmail/__init__.py +0 -1
  61. langchain/agents/agent_toolkits/gmail/toolkit.py +0 -23
  62. langchain/agents/agent_toolkits/jira/__init__.py +0 -1
  63. langchain/agents/agent_toolkits/jira/toolkit.py +0 -23
  64. langchain/agents/agent_toolkits/json/__init__.py +0 -1
  65. langchain/agents/agent_toolkits/json/base.py +0 -25
  66. langchain/agents/agent_toolkits/json/prompt.py +0 -24
  67. langchain/agents/agent_toolkits/json/toolkit.py +0 -23
  68. langchain/agents/agent_toolkits/multion/__init__.py +0 -1
  69. langchain/agents/agent_toolkits/multion/toolkit.py +0 -25
  70. langchain/agents/agent_toolkits/nasa/__init__.py +0 -1
  71. langchain/agents/agent_toolkits/nasa/toolkit.py +0 -23
  72. langchain/agents/agent_toolkits/nla/__init__.py +0 -0
  73. langchain/agents/agent_toolkits/nla/tool.py +0 -23
  74. langchain/agents/agent_toolkits/nla/toolkit.py +0 -23
  75. langchain/agents/agent_toolkits/office365/__init__.py +0 -1
  76. langchain/agents/agent_toolkits/office365/toolkit.py +0 -25
  77. langchain/agents/agent_toolkits/openapi/__init__.py +0 -1
  78. langchain/agents/agent_toolkits/openapi/base.py +0 -25
  79. langchain/agents/agent_toolkits/openapi/planner.py +0 -52
  80. langchain/agents/agent_toolkits/openapi/planner_prompt.py +0 -103
  81. langchain/agents/agent_toolkits/openapi/prompt.py +0 -29
  82. langchain/agents/agent_toolkits/openapi/spec.py +0 -30
  83. langchain/agents/agent_toolkits/openapi/toolkit.py +0 -30
  84. langchain/agents/agent_toolkits/pandas/__init__.py +0 -28
  85. langchain/agents/agent_toolkits/playwright/__init__.py +0 -29
  86. langchain/agents/agent_toolkits/playwright/toolkit.py +0 -27
  87. langchain/agents/agent_toolkits/powerbi/__init__.py +0 -1
  88. langchain/agents/agent_toolkits/powerbi/base.py +0 -25
  89. langchain/agents/agent_toolkits/powerbi/chat_base.py +0 -27
  90. langchain/agents/agent_toolkits/powerbi/prompt.py +0 -36
  91. langchain/agents/agent_toolkits/powerbi/toolkit.py +0 -25
  92. langchain/agents/agent_toolkits/python/__init__.py +0 -28
  93. langchain/agents/agent_toolkits/slack/__init__.py +0 -1
  94. langchain/agents/agent_toolkits/slack/toolkit.py +0 -23
  95. langchain/agents/agent_toolkits/spark/__init__.py +0 -28
  96. langchain/agents/agent_toolkits/spark_sql/__init__.py +0 -1
  97. langchain/agents/agent_toolkits/spark_sql/base.py +0 -25
  98. langchain/agents/agent_toolkits/spark_sql/prompt.py +0 -27
  99. langchain/agents/agent_toolkits/spark_sql/toolkit.py +0 -25
  100. langchain/agents/agent_toolkits/sql/__init__.py +0 -1
  101. langchain/agents/agent_toolkits/sql/base.py +0 -23
  102. langchain/agents/agent_toolkits/sql/prompt.py +0 -29
  103. langchain/agents/agent_toolkits/sql/toolkit.py +0 -25
  104. langchain/agents/agent_toolkits/steam/__init__.py +0 -1
  105. langchain/agents/agent_toolkits/steam/toolkit.py +0 -23
  106. langchain/agents/agent_toolkits/vectorstore/__init__.py +0 -1
  107. langchain/agents/agent_toolkits/vectorstore/base.py +0 -219
  108. langchain/agents/agent_toolkits/vectorstore/prompt.py +0 -11
  109. langchain/agents/agent_toolkits/vectorstore/toolkit.py +0 -97
  110. langchain/agents/agent_toolkits/xorbits/__init__.py +0 -28
  111. langchain/agents/agent_toolkits/zapier/__init__.py +0 -1
  112. langchain/agents/agent_toolkits/zapier/toolkit.py +0 -25
  113. langchain/agents/agent_types.py +0 -57
  114. langchain/agents/chat/__init__.py +0 -0
  115. langchain/agents/chat/base.py +0 -180
  116. langchain/agents/chat/output_parser.py +0 -74
  117. langchain/agents/chat/prompt.py +0 -29
  118. langchain/agents/conversational/__init__.py +0 -1
  119. langchain/agents/conversational/base.py +0 -178
  120. langchain/agents/conversational/output_parser.py +0 -51
  121. langchain/agents/conversational/prompt.py +0 -35
  122. langchain/agents/conversational_chat/__init__.py +0 -1
  123. langchain/agents/conversational_chat/base.py +0 -183
  124. langchain/agents/conversational_chat/output_parser.py +0 -57
  125. langchain/agents/conversational_chat/prompt.py +0 -56
  126. langchain/agents/format_scratchpad/__init__.py +0 -25
  127. langchain/agents/format_scratchpad/log.py +0 -25
  128. langchain/agents/format_scratchpad/log_to_messages.py +0 -26
  129. langchain/agents/format_scratchpad/openai_functions.py +0 -80
  130. langchain/agents/format_scratchpad/openai_tools.py +0 -5
  131. langchain/agents/format_scratchpad/tools.py +0 -65
  132. langchain/agents/format_scratchpad/xml.py +0 -52
  133. langchain/agents/initialize.py +0 -105
  134. langchain/agents/json_chat/__init__.py +0 -0
  135. langchain/agents/json_chat/base.py +0 -196
  136. langchain/agents/json_chat/prompt.py +0 -8
  137. langchain/agents/load_tools.py +0 -13
  138. langchain/agents/loading.py +0 -148
  139. langchain/agents/mrkl/__init__.py +0 -1
  140. langchain/agents/mrkl/base.py +0 -218
  141. langchain/agents/mrkl/output_parser.py +0 -103
  142. langchain/agents/mrkl/prompt.py +0 -15
  143. langchain/agents/openai_assistant/__init__.py +0 -3
  144. langchain/agents/openai_assistant/base.py +0 -818
  145. langchain/agents/openai_functions_agent/__init__.py +0 -0
  146. langchain/agents/openai_functions_agent/agent_token_buffer_memory.py +0 -103
  147. langchain/agents/openai_functions_agent/base.py +0 -382
  148. langchain/agents/openai_functions_multi_agent/__init__.py +0 -0
  149. langchain/agents/openai_functions_multi_agent/base.py +0 -337
  150. langchain/agents/openai_tools/__init__.py +0 -0
  151. langchain/agents/openai_tools/base.py +0 -109
  152. langchain/agents/output_parsers/__init__.py +0 -35
  153. langchain/agents/output_parsers/json.py +0 -64
  154. langchain/agents/output_parsers/openai_functions.py +0 -103
  155. langchain/agents/output_parsers/openai_tools.py +0 -77
  156. langchain/agents/output_parsers/react_json_single_input.py +0 -87
  157. langchain/agents/output_parsers/react_single_input.py +0 -102
  158. langchain/agents/output_parsers/self_ask.py +0 -53
  159. langchain/agents/output_parsers/tools.py +0 -121
  160. langchain/agents/output_parsers/xml.py +0 -126
  161. langchain/agents/react/__init__.py +0 -1
  162. langchain/agents/react/agent.py +0 -145
  163. langchain/agents/react/base.py +0 -189
  164. langchain/agents/react/output_parser.py +0 -35
  165. langchain/agents/react/textworld_prompt.py +0 -51
  166. langchain/agents/react/wiki_prompt.py +0 -70
  167. langchain/agents/schema.py +0 -37
  168. langchain/agents/self_ask_with_search/__init__.py +0 -4
  169. langchain/agents/self_ask_with_search/base.py +0 -219
  170. langchain/agents/self_ask_with_search/output_parser.py +0 -4
  171. langchain/agents/self_ask_with_search/prompt.py +0 -43
  172. langchain/agents/structured_chat/__init__.py +0 -0
  173. langchain/agents/structured_chat/base.py +0 -309
  174. langchain/agents/structured_chat/output_parser.py +0 -112
  175. langchain/agents/structured_chat/prompt.py +0 -34
  176. langchain/agents/tool_calling_agent/__init__.py +0 -0
  177. langchain/agents/tool_calling_agent/base.py +0 -111
  178. langchain/agents/tools.py +0 -50
  179. langchain/agents/types.py +0 -27
  180. langchain/agents/utils.py +0 -19
  181. langchain/agents/xml/__init__.py +0 -0
  182. langchain/agents/xml/base.py +0 -237
  183. langchain/agents/xml/prompt.py +0 -21
  184. langchain/base_language.py +0 -7
  185. langchain/cache.py +0 -72
  186. langchain/callbacks/__init__.py +0 -139
  187. langchain/callbacks/aim_callback.py +0 -33
  188. langchain/callbacks/argilla_callback.py +0 -25
  189. langchain/callbacks/arize_callback.py +0 -25
  190. langchain/callbacks/arthur_callback.py +0 -25
  191. langchain/callbacks/base.py +0 -29
  192. langchain/callbacks/clearml_callback.py +0 -25
  193. langchain/callbacks/comet_ml_callback.py +0 -25
  194. langchain/callbacks/confident_callback.py +0 -25
  195. langchain/callbacks/context_callback.py +0 -25
  196. langchain/callbacks/file.py +0 -3
  197. langchain/callbacks/flyte_callback.py +0 -25
  198. langchain/callbacks/human.py +0 -33
  199. langchain/callbacks/infino_callback.py +0 -25
  200. langchain/callbacks/labelstudio_callback.py +0 -33
  201. langchain/callbacks/llmonitor_callback.py +0 -27
  202. langchain/callbacks/manager.py +0 -89
  203. langchain/callbacks/mlflow_callback.py +0 -38
  204. langchain/callbacks/openai_info.py +0 -25
  205. langchain/callbacks/promptlayer_callback.py +0 -27
  206. langchain/callbacks/sagemaker_callback.py +0 -27
  207. langchain/callbacks/stdout.py +0 -3
  208. langchain/callbacks/streaming_aiter.py +0 -86
  209. langchain/callbacks/streaming_aiter_final_only.py +0 -100
  210. langchain/callbacks/streaming_stdout.py +0 -5
  211. langchain/callbacks/streaming_stdout_final_only.py +0 -96
  212. langchain/callbacks/streamlit/__init__.py +0 -86
  213. langchain/callbacks/streamlit/mutable_expander.py +0 -33
  214. langchain/callbacks/streamlit/streamlit_callback_handler.py +0 -49
  215. langchain/callbacks/tracers/__init__.py +0 -38
  216. langchain/callbacks/tracers/base.py +0 -6
  217. langchain/callbacks/tracers/comet.py +0 -30
  218. langchain/callbacks/tracers/evaluation.py +0 -8
  219. langchain/callbacks/tracers/langchain.py +0 -8
  220. langchain/callbacks/tracers/langchain_v1.py +0 -3
  221. langchain/callbacks/tracers/log_stream.py +0 -9
  222. langchain/callbacks/tracers/logging.py +0 -57
  223. langchain/callbacks/tracers/root_listeners.py +0 -3
  224. langchain/callbacks/tracers/run_collector.py +0 -3
  225. langchain/callbacks/tracers/schemas.py +0 -27
  226. langchain/callbacks/tracers/stdout.py +0 -6
  227. langchain/callbacks/tracers/wandb.py +0 -27
  228. langchain/callbacks/trubrics_callback.py +0 -25
  229. langchain/callbacks/utils.py +0 -48
  230. langchain/callbacks/wandb_callback.py +0 -25
  231. langchain/callbacks/whylabs_callback.py +0 -25
  232. langchain/chains/__init__.py +0 -96
  233. langchain/chains/api/__init__.py +0 -1
  234. langchain/chains/api/base.py +0 -398
  235. langchain/chains/api/news_docs.py +0 -31
  236. langchain/chains/api/open_meteo_docs.py +0 -32
  237. langchain/chains/api/openapi/__init__.py +0 -0
  238. langchain/chains/api/openapi/chain.py +0 -23
  239. langchain/chains/api/openapi/prompts.py +0 -27
  240. langchain/chains/api/openapi/requests_chain.py +0 -29
  241. langchain/chains/api/openapi/response_chain.py +0 -29
  242. langchain/chains/api/podcast_docs.py +0 -27
  243. langchain/chains/api/prompt.py +0 -35
  244. langchain/chains/api/tmdb_docs.py +0 -36
  245. langchain/chains/base.py +0 -806
  246. langchain/chains/chat_vector_db/__init__.py +0 -0
  247. langchain/chains/chat_vector_db/prompts.py +0 -19
  248. langchain/chains/combine_documents/__init__.py +0 -15
  249. langchain/chains/combine_documents/base.py +0 -293
  250. langchain/chains/combine_documents/map_reduce.py +0 -303
  251. langchain/chains/combine_documents/map_rerank.py +0 -249
  252. langchain/chains/combine_documents/reduce.py +0 -382
  253. langchain/chains/combine_documents/refine.py +0 -237
  254. langchain/chains/combine_documents/stuff.py +0 -292
  255. langchain/chains/constitutional_ai/__init__.py +0 -2
  256. langchain/chains/constitutional_ai/base.py +0 -328
  257. langchain/chains/constitutional_ai/models.py +0 -11
  258. langchain/chains/constitutional_ai/principles.py +0 -278
  259. langchain/chains/constitutional_ai/prompts.py +0 -120
  260. langchain/chains/conversation/__init__.py +0 -1
  261. langchain/chains/conversation/base.py +0 -146
  262. langchain/chains/conversation/memory.py +0 -45
  263. langchain/chains/conversation/prompt.py +0 -28
  264. langchain/chains/conversational_retrieval/__init__.py +0 -1
  265. langchain/chains/conversational_retrieval/base.py +0 -576
  266. langchain/chains/conversational_retrieval/prompts.py +0 -19
  267. langchain/chains/elasticsearch_database/__init__.py +0 -3
  268. langchain/chains/elasticsearch_database/base.py +0 -212
  269. langchain/chains/elasticsearch_database/prompts.py +0 -35
  270. langchain/chains/ernie_functions/__init__.py +0 -44
  271. langchain/chains/ernie_functions/base.py +0 -49
  272. langchain/chains/example_generator.py +0 -22
  273. langchain/chains/flare/__init__.py +0 -1
  274. langchain/chains/flare/base.py +0 -284
  275. langchain/chains/flare/prompts.py +0 -46
  276. langchain/chains/graph_qa/__init__.py +0 -0
  277. langchain/chains/graph_qa/arangodb.py +0 -23
  278. langchain/chains/graph_qa/base.py +0 -23
  279. langchain/chains/graph_qa/cypher.py +0 -39
  280. langchain/chains/graph_qa/cypher_utils.py +0 -27
  281. langchain/chains/graph_qa/falkordb.py +0 -29
  282. langchain/chains/graph_qa/gremlin.py +0 -36
  283. langchain/chains/graph_qa/hugegraph.py +0 -23
  284. langchain/chains/graph_qa/kuzu.py +0 -29
  285. langchain/chains/graph_qa/nebulagraph.py +0 -23
  286. langchain/chains/graph_qa/neptune_cypher.py +0 -39
  287. langchain/chains/graph_qa/neptune_sparql.py +0 -36
  288. langchain/chains/graph_qa/ontotext_graphdb.py +0 -25
  289. langchain/chains/graph_qa/prompts.py +0 -96
  290. langchain/chains/graph_qa/sparql.py +0 -23
  291. langchain/chains/history_aware_retriever.py +0 -68
  292. langchain/chains/hyde/__init__.py +0 -4
  293. langchain/chains/hyde/base.py +0 -124
  294. langchain/chains/hyde/prompts.py +0 -46
  295. langchain/chains/llm.py +0 -447
  296. langchain/chains/llm_bash/__init__.py +0 -10
  297. langchain/chains/llm_checker/__init__.py +0 -4
  298. langchain/chains/llm_checker/base.py +0 -205
  299. langchain/chains/llm_checker/prompt.py +0 -30
  300. langchain/chains/llm_math/__init__.py +0 -4
  301. langchain/chains/llm_math/base.py +0 -319
  302. langchain/chains/llm_math/prompt.py +0 -43
  303. langchain/chains/llm_requests.py +0 -23
  304. langchain/chains/llm_summarization_checker/__init__.py +0 -7
  305. langchain/chains/llm_summarization_checker/base.py +0 -217
  306. langchain/chains/llm_summarization_checker/prompts/are_all_true_prompt.txt +0 -38
  307. langchain/chains/llm_summarization_checker/prompts/check_facts.txt +0 -10
  308. langchain/chains/llm_summarization_checker/prompts/create_facts.txt +0 -10
  309. langchain/chains/llm_summarization_checker/prompts/revise_summary.txt +0 -17
  310. langchain/chains/llm_symbolic_math/__init__.py +0 -10
  311. langchain/chains/loading.py +0 -734
  312. langchain/chains/mapreduce.py +0 -121
  313. langchain/chains/moderation.py +0 -135
  314. langchain/chains/natbot/__init__.py +0 -4
  315. langchain/chains/natbot/base.py +0 -165
  316. langchain/chains/natbot/crawler.py +0 -472
  317. langchain/chains/natbot/prompt.py +0 -143
  318. langchain/chains/openai_functions/__init__.py +0 -44
  319. langchain/chains/openai_functions/base.py +0 -237
  320. langchain/chains/openai_functions/citation_fuzzy_match.py +0 -169
  321. langchain/chains/openai_functions/extraction.py +0 -197
  322. langchain/chains/openai_functions/openapi.py +0 -409
  323. langchain/chains/openai_functions/qa_with_structure.py +0 -142
  324. langchain/chains/openai_functions/tagging.py +0 -174
  325. langchain/chains/openai_functions/utils.py +0 -40
  326. langchain/chains/openai_tools/__init__.py +0 -3
  327. langchain/chains/openai_tools/extraction.py +0 -79
  328. langchain/chains/prompt_selector.py +0 -65
  329. langchain/chains/qa_generation/__init__.py +0 -0
  330. langchain/chains/qa_generation/base.py +0 -128
  331. langchain/chains/qa_generation/prompt.py +0 -50
  332. langchain/chains/qa_with_sources/__init__.py +0 -5
  333. langchain/chains/qa_with_sources/base.py +0 -266
  334. langchain/chains/qa_with_sources/loading.py +0 -209
  335. langchain/chains/qa_with_sources/map_reduce_prompt.py +0 -54
  336. langchain/chains/qa_with_sources/refine_prompts.py +0 -37
  337. langchain/chains/qa_with_sources/retrieval.py +0 -75
  338. langchain/chains/qa_with_sources/stuff_prompt.py +0 -43
  339. langchain/chains/qa_with_sources/vector_db.py +0 -88
  340. langchain/chains/query_constructor/__init__.py +0 -3
  341. langchain/chains/query_constructor/base.py +0 -378
  342. langchain/chains/query_constructor/ir.py +0 -23
  343. langchain/chains/query_constructor/parser.py +0 -272
  344. langchain/chains/query_constructor/prompt.py +0 -226
  345. langchain/chains/query_constructor/schema.py +0 -14
  346. langchain/chains/question_answering/__init__.py +0 -6
  347. langchain/chains/question_answering/chain.py +0 -279
  348. langchain/chains/question_answering/map_reduce_prompt.py +0 -80
  349. langchain/chains/question_answering/map_rerank_prompt.py +0 -66
  350. langchain/chains/question_answering/refine_prompts.py +0 -72
  351. langchain/chains/question_answering/stuff_prompt.py +0 -33
  352. langchain/chains/retrieval.py +0 -67
  353. langchain/chains/retrieval_qa/__init__.py +0 -1
  354. langchain/chains/retrieval_qa/base.py +0 -374
  355. langchain/chains/retrieval_qa/prompt.py +0 -11
  356. langchain/chains/router/__init__.py +0 -12
  357. langchain/chains/router/base.py +0 -154
  358. langchain/chains/router/embedding_router.py +0 -96
  359. langchain/chains/router/llm_router.py +0 -198
  360. langchain/chains/router/multi_prompt.py +0 -184
  361. langchain/chains/router/multi_prompt_prompt.py +0 -32
  362. langchain/chains/router/multi_retrieval_prompt.py +0 -30
  363. langchain/chains/router/multi_retrieval_qa.py +0 -127
  364. langchain/chains/sequential.py +0 -220
  365. langchain/chains/sql_database/__init__.py +0 -1
  366. langchain/chains/sql_database/prompt.py +0 -282
  367. langchain/chains/sql_database/query.py +0 -167
  368. langchain/chains/structured_output/__init__.py +0 -6
  369. langchain/chains/structured_output/base.py +0 -584
  370. langchain/chains/summarize/__init__.py +0 -6
  371. langchain/chains/summarize/chain.py +0 -174
  372. langchain/chains/summarize/map_reduce_prompt.py +0 -10
  373. langchain/chains/summarize/refine_prompts.py +0 -23
  374. langchain/chains/summarize/stuff_prompt.py +0 -10
  375. langchain/chains/transform.py +0 -88
  376. langchain/chat_loaders/__init__.py +0 -19
  377. langchain/chat_loaders/base.py +0 -3
  378. langchain/chat_loaders/facebook_messenger.py +0 -32
  379. langchain/chat_loaders/gmail.py +0 -23
  380. langchain/chat_loaders/imessage.py +0 -23
  381. langchain/chat_loaders/langsmith.py +0 -30
  382. langchain/chat_loaders/slack.py +0 -23
  383. langchain/chat_loaders/telegram.py +0 -23
  384. langchain/chat_loaders/utils.py +0 -36
  385. langchain/chat_loaders/whatsapp.py +0 -23
  386. langchain/chat_models/anthropic.py +0 -30
  387. langchain/chat_models/anyscale.py +0 -23
  388. langchain/chat_models/azure_openai.py +0 -23
  389. langchain/chat_models/azureml_endpoint.py +0 -30
  390. langchain/chat_models/baichuan.py +0 -23
  391. langchain/chat_models/baidu_qianfan_endpoint.py +0 -27
  392. langchain/chat_models/bedrock.py +0 -27
  393. langchain/chat_models/cohere.py +0 -23
  394. langchain/chat_models/databricks.py +0 -23
  395. langchain/chat_models/ernie.py +0 -23
  396. langchain/chat_models/everlyai.py +0 -23
  397. langchain/chat_models/fake.py +0 -30
  398. langchain/chat_models/fireworks.py +0 -23
  399. langchain/chat_models/gigachat.py +0 -23
  400. langchain/chat_models/google_palm.py +0 -30
  401. langchain/chat_models/human.py +0 -23
  402. langchain/chat_models/hunyuan.py +0 -23
  403. langchain/chat_models/javelin_ai_gateway.py +0 -30
  404. langchain/chat_models/jinachat.py +0 -23
  405. langchain/chat_models/konko.py +0 -23
  406. langchain/chat_models/litellm.py +0 -30
  407. langchain/chat_models/meta.py +0 -25
  408. langchain/chat_models/minimax.py +0 -23
  409. langchain/chat_models/mlflow.py +0 -23
  410. langchain/chat_models/mlflow_ai_gateway.py +0 -30
  411. langchain/chat_models/ollama.py +0 -23
  412. langchain/chat_models/openai.py +0 -23
  413. langchain/chat_models/pai_eas_endpoint.py +0 -25
  414. langchain/chat_models/promptlayer_openai.py +0 -25
  415. langchain/chat_models/tongyi.py +0 -23
  416. langchain/chat_models/vertexai.py +0 -23
  417. langchain/chat_models/volcengine_maas.py +0 -30
  418. langchain/chat_models/yandex.py +0 -23
  419. langchain/docstore/__init__.py +0 -48
  420. langchain/docstore/arbitrary_fn.py +0 -23
  421. langchain/docstore/base.py +0 -27
  422. langchain/docstore/document.py +0 -3
  423. langchain/docstore/in_memory.py +0 -23
  424. langchain/docstore/wikipedia.py +0 -23
  425. langchain/document_loaders/__init__.py +0 -553
  426. langchain/document_loaders/acreom.py +0 -23
  427. langchain/document_loaders/airbyte.py +0 -48
  428. langchain/document_loaders/airbyte_json.py +0 -23
  429. langchain/document_loaders/airtable.py +0 -23
  430. langchain/document_loaders/apify_dataset.py +0 -23
  431. langchain/document_loaders/arcgis_loader.py +0 -23
  432. langchain/document_loaders/arxiv.py +0 -23
  433. langchain/document_loaders/assemblyai.py +0 -28
  434. langchain/document_loaders/async_html.py +0 -23
  435. langchain/document_loaders/azlyrics.py +0 -23
  436. langchain/document_loaders/azure_ai_data.py +0 -23
  437. langchain/document_loaders/azure_blob_storage_container.py +0 -25
  438. langchain/document_loaders/azure_blob_storage_file.py +0 -25
  439. langchain/document_loaders/baiducloud_bos_directory.py +0 -29
  440. langchain/document_loaders/baiducloud_bos_file.py +0 -27
  441. langchain/document_loaders/base.py +0 -3
  442. langchain/document_loaders/base_o365.py +0 -23
  443. langchain/document_loaders/bibtex.py +0 -23
  444. langchain/document_loaders/bigquery.py +0 -23
  445. langchain/document_loaders/bilibili.py +0 -23
  446. langchain/document_loaders/blackboard.py +0 -23
  447. langchain/document_loaders/blob_loaders/__init__.py +0 -36
  448. langchain/document_loaders/blob_loaders/file_system.py +0 -23
  449. langchain/document_loaders/blob_loaders/schema.py +0 -26
  450. langchain/document_loaders/blob_loaders/youtube_audio.py +0 -23
  451. langchain/document_loaders/blockchain.py +0 -28
  452. langchain/document_loaders/brave_search.py +0 -23
  453. langchain/document_loaders/browserless.py +0 -23
  454. langchain/document_loaders/chatgpt.py +0 -28
  455. langchain/document_loaders/chromium.py +0 -23
  456. langchain/document_loaders/college_confidential.py +0 -25
  457. langchain/document_loaders/concurrent.py +0 -23
  458. langchain/document_loaders/confluence.py +0 -28
  459. langchain/document_loaders/conllu.py +0 -23
  460. langchain/document_loaders/couchbase.py +0 -23
  461. langchain/document_loaders/csv_loader.py +0 -27
  462. langchain/document_loaders/cube_semantic.py +0 -23
  463. langchain/document_loaders/datadog_logs.py +0 -23
  464. langchain/document_loaders/dataframe.py +0 -28
  465. langchain/document_loaders/diffbot.py +0 -23
  466. langchain/document_loaders/directory.py +0 -23
  467. langchain/document_loaders/discord.py +0 -23
  468. langchain/document_loaders/docugami.py +0 -23
  469. langchain/document_loaders/docusaurus.py +0 -23
  470. langchain/document_loaders/dropbox.py +0 -23
  471. langchain/document_loaders/duckdb_loader.py +0 -23
  472. langchain/document_loaders/email.py +0 -30
  473. langchain/document_loaders/epub.py +0 -23
  474. langchain/document_loaders/etherscan.py +0 -23
  475. langchain/document_loaders/evernote.py +0 -23
  476. langchain/document_loaders/excel.py +0 -23
  477. langchain/document_loaders/facebook_chat.py +0 -28
  478. langchain/document_loaders/fauna.py +0 -23
  479. langchain/document_loaders/figma.py +0 -23
  480. langchain/document_loaders/gcs_directory.py +0 -23
  481. langchain/document_loaders/gcs_file.py +0 -23
  482. langchain/document_loaders/generic.py +0 -23
  483. langchain/document_loaders/geodataframe.py +0 -23
  484. langchain/document_loaders/git.py +0 -23
  485. langchain/document_loaders/gitbook.py +0 -23
  486. langchain/document_loaders/github.py +0 -28
  487. langchain/document_loaders/google_speech_to_text.py +0 -23
  488. langchain/document_loaders/googledrive.py +0 -23
  489. langchain/document_loaders/gutenberg.py +0 -23
  490. langchain/document_loaders/helpers.py +0 -30
  491. langchain/document_loaders/hn.py +0 -23
  492. langchain/document_loaders/html.py +0 -23
  493. langchain/document_loaders/html_bs.py +0 -23
  494. langchain/document_loaders/hugging_face_dataset.py +0 -23
  495. langchain/document_loaders/ifixit.py +0 -23
  496. langchain/document_loaders/image.py +0 -23
  497. langchain/document_loaders/image_captions.py +0 -23
  498. langchain/document_loaders/imsdb.py +0 -23
  499. langchain/document_loaders/iugu.py +0 -23
  500. langchain/document_loaders/joplin.py +0 -23
  501. langchain/document_loaders/json_loader.py +0 -23
  502. langchain/document_loaders/lakefs.py +0 -33
  503. langchain/document_loaders/larksuite.py +0 -23
  504. langchain/document_loaders/markdown.py +0 -25
  505. langchain/document_loaders/mastodon.py +0 -23
  506. langchain/document_loaders/max_compute.py +0 -23
  507. langchain/document_loaders/mediawikidump.py +0 -23
  508. langchain/document_loaders/merge.py +0 -23
  509. langchain/document_loaders/mhtml.py +0 -23
  510. langchain/document_loaders/modern_treasury.py +0 -23
  511. langchain/document_loaders/mongodb.py +0 -23
  512. langchain/document_loaders/news.py +0 -23
  513. langchain/document_loaders/notebook.py +0 -33
  514. langchain/document_loaders/notion.py +0 -23
  515. langchain/document_loaders/notiondb.py +0 -23
  516. langchain/document_loaders/nuclia.py +0 -23
  517. langchain/document_loaders/obs_directory.py +0 -23
  518. langchain/document_loaders/obs_file.py +0 -23
  519. langchain/document_loaders/obsidian.py +0 -23
  520. langchain/document_loaders/odt.py +0 -23
  521. langchain/document_loaders/onedrive.py +0 -23
  522. langchain/document_loaders/onedrive_file.py +0 -23
  523. langchain/document_loaders/onenote.py +0 -23
  524. langchain/document_loaders/open_city_data.py +0 -23
  525. langchain/document_loaders/org_mode.py +0 -25
  526. langchain/document_loaders/parsers/__init__.py +0 -58
  527. langchain/document_loaders/parsers/audio.py +0 -33
  528. langchain/document_loaders/parsers/docai.py +0 -30
  529. langchain/document_loaders/parsers/generic.py +0 -25
  530. langchain/document_loaders/parsers/grobid.py +0 -30
  531. langchain/document_loaders/parsers/html/__init__.py +0 -25
  532. langchain/document_loaders/parsers/html/bs4.py +0 -25
  533. langchain/document_loaders/parsers/language/__init__.py +0 -29
  534. langchain/document_loaders/parsers/language/cobol.py +0 -27
  535. langchain/document_loaders/parsers/language/code_segmenter.py +0 -29
  536. langchain/document_loaders/parsers/language/javascript.py +0 -29
  537. langchain/document_loaders/parsers/language/language_parser.py +0 -29
  538. langchain/document_loaders/parsers/language/python.py +0 -27
  539. langchain/document_loaders/parsers/msword.py +0 -25
  540. langchain/document_loaders/parsers/pdf.py +0 -50
  541. langchain/document_loaders/parsers/registry.py +0 -25
  542. langchain/document_loaders/parsers/txt.py +0 -23
  543. langchain/document_loaders/pdf.py +0 -65
  544. langchain/document_loaders/polars_dataframe.py +0 -23
  545. langchain/document_loaders/powerpoint.py +0 -25
  546. langchain/document_loaders/psychic.py +0 -23
  547. langchain/document_loaders/pubmed.py +0 -23
  548. langchain/document_loaders/pyspark_dataframe.py +0 -26
  549. langchain/document_loaders/python.py +0 -22
  550. langchain/document_loaders/quip.py +0 -23
  551. langchain/document_loaders/readthedocs.py +0 -23
  552. langchain/document_loaders/recursive_url_loader.py +0 -23
  553. langchain/document_loaders/reddit.py +0 -23
  554. langchain/document_loaders/roam.py +0 -23
  555. langchain/document_loaders/rocksetdb.py +0 -23
  556. langchain/document_loaders/rspace.py +0 -23
  557. langchain/document_loaders/rss.py +0 -23
  558. langchain/document_loaders/rst.py +0 -23
  559. langchain/document_loaders/rtf.py +0 -23
  560. langchain/document_loaders/s3_directory.py +0 -23
  561. langchain/document_loaders/s3_file.py +0 -23
  562. langchain/document_loaders/sharepoint.py +0 -23
  563. langchain/document_loaders/sitemap.py +0 -23
  564. langchain/document_loaders/slack_directory.py +0 -23
  565. langchain/document_loaders/snowflake_loader.py +0 -23
  566. langchain/document_loaders/spreedly.py +0 -23
  567. langchain/document_loaders/srt.py +0 -23
  568. langchain/document_loaders/stripe.py +0 -23
  569. langchain/document_loaders/telegram.py +0 -38
  570. langchain/document_loaders/tencent_cos_directory.py +0 -25
  571. langchain/document_loaders/tencent_cos_file.py +0 -23
  572. langchain/document_loaders/tensorflow_datasets.py +0 -23
  573. langchain/document_loaders/text.py +0 -23
  574. langchain/document_loaders/tomarkdown.py +0 -23
  575. langchain/document_loaders/toml.py +0 -23
  576. langchain/document_loaders/trello.py +0 -23
  577. langchain/document_loaders/tsv.py +0 -23
  578. langchain/document_loaders/twitter.py +0 -23
  579. langchain/document_loaders/unstructured.py +0 -54
  580. langchain/document_loaders/url.py +0 -23
  581. langchain/document_loaders/url_playwright.py +0 -33
  582. langchain/document_loaders/url_selenium.py +0 -23
  583. langchain/document_loaders/weather.py +0 -23
  584. langchain/document_loaders/web_base.py +0 -23
  585. langchain/document_loaders/whatsapp_chat.py +0 -28
  586. langchain/document_loaders/wikipedia.py +0 -23
  587. langchain/document_loaders/word_document.py +0 -30
  588. langchain/document_loaders/xml.py +0 -23
  589. langchain/document_loaders/xorbits.py +0 -23
  590. langchain/document_loaders/youtube.py +0 -33
  591. langchain/document_transformers/__init__.py +0 -77
  592. langchain/document_transformers/beautiful_soup_transformer.py +0 -25
  593. langchain/document_transformers/doctran_text_extract.py +0 -25
  594. langchain/document_transformers/doctran_text_qa.py +0 -25
  595. langchain/document_transformers/doctran_text_translate.py +0 -25
  596. langchain/document_transformers/embeddings_redundant_filter.py +0 -50
  597. langchain/document_transformers/google_translate.py +0 -25
  598. langchain/document_transformers/html2text.py +0 -25
  599. langchain/document_transformers/long_context_reorder.py +0 -23
  600. langchain/document_transformers/nuclia_text_transform.py +0 -25
  601. langchain/document_transformers/openai_functions.py +0 -32
  602. langchain/document_transformers/xsl/html_chunks_with_headers.xslt +0 -199
  603. langchain/embeddings/aleph_alpha.py +0 -30
  604. langchain/embeddings/awa.py +0 -23
  605. langchain/embeddings/azure_openai.py +0 -23
  606. langchain/embeddings/baidu_qianfan_endpoint.py +0 -23
  607. langchain/embeddings/bedrock.py +0 -23
  608. langchain/embeddings/bookend.py +0 -23
  609. langchain/embeddings/cache.py +0 -368
  610. langchain/embeddings/clarifai.py +0 -23
  611. langchain/embeddings/cloudflare_workersai.py +0 -29
  612. langchain/embeddings/cohere.py +0 -23
  613. langchain/embeddings/dashscope.py +0 -23
  614. langchain/embeddings/databricks.py +0 -23
  615. langchain/embeddings/deepinfra.py +0 -23
  616. langchain/embeddings/edenai.py +0 -23
  617. langchain/embeddings/elasticsearch.py +0 -23
  618. langchain/embeddings/embaas.py +0 -23
  619. langchain/embeddings/ernie.py +0 -23
  620. langchain/embeddings/fake.py +0 -30
  621. langchain/embeddings/fastembed.py +0 -23
  622. langchain/embeddings/google_palm.py +0 -23
  623. langchain/embeddings/gpt4all.py +0 -23
  624. langchain/embeddings/gradient_ai.py +0 -23
  625. langchain/embeddings/huggingface.py +0 -36
  626. langchain/embeddings/huggingface_hub.py +0 -23
  627. langchain/embeddings/infinity.py +0 -30
  628. langchain/embeddings/javelin_ai_gateway.py +0 -23
  629. langchain/embeddings/jina.py +0 -23
  630. langchain/embeddings/johnsnowlabs.py +0 -23
  631. langchain/embeddings/llamacpp.py +0 -23
  632. langchain/embeddings/llm_rails.py +0 -23
  633. langchain/embeddings/localai.py +0 -23
  634. langchain/embeddings/minimax.py +0 -23
  635. langchain/embeddings/mlflow.py +0 -23
  636. langchain/embeddings/mlflow_gateway.py +0 -23
  637. langchain/embeddings/modelscope_hub.py +0 -23
  638. langchain/embeddings/mosaicml.py +0 -23
  639. langchain/embeddings/nlpcloud.py +0 -23
  640. langchain/embeddings/octoai_embeddings.py +0 -23
  641. langchain/embeddings/ollama.py +0 -23
  642. langchain/embeddings/openai.py +0 -23
  643. langchain/embeddings/sagemaker_endpoint.py +0 -30
  644. langchain/embeddings/self_hosted.py +0 -23
  645. langchain/embeddings/self_hosted_hugging_face.py +0 -30
  646. langchain/embeddings/sentence_transformer.py +0 -21
  647. langchain/embeddings/spacy_embeddings.py +0 -23
  648. langchain/embeddings/tensorflow_hub.py +0 -23
  649. langchain/embeddings/vertexai.py +0 -23
  650. langchain/embeddings/voyageai.py +0 -23
  651. langchain/embeddings/xinference.py +0 -23
  652. langchain/env.py +0 -17
  653. langchain/evaluation/__init__.py +0 -128
  654. langchain/evaluation/agents/__init__.py +0 -5
  655. langchain/evaluation/agents/trajectory_eval_chain.py +0 -416
  656. langchain/evaluation/agents/trajectory_eval_prompt.py +0 -146
  657. langchain/evaluation/comparison/__init__.py +0 -36
  658. langchain/evaluation/comparison/eval_chain.py +0 -462
  659. langchain/evaluation/comparison/prompt.py +0 -59
  660. langchain/evaluation/criteria/__init__.py +0 -56
  661. langchain/evaluation/criteria/eval_chain.py +0 -606
  662. langchain/evaluation/criteria/prompt.py +0 -37
  663. langchain/evaluation/embedding_distance/__init__.py +0 -13
  664. langchain/evaluation/embedding_distance/base.py +0 -613
  665. langchain/evaluation/exact_match/__init__.py +0 -0
  666. langchain/evaluation/exact_match/base.py +0 -110
  667. langchain/evaluation/loading.py +0 -207
  668. langchain/evaluation/parsing/__init__.py +0 -0
  669. langchain/evaluation/parsing/base.py +0 -175
  670. langchain/evaluation/parsing/json_distance.py +0 -108
  671. langchain/evaluation/parsing/json_schema.py +0 -97
  672. langchain/evaluation/qa/__init__.py +0 -10
  673. langchain/evaluation/qa/eval_chain.py +0 -372
  674. langchain/evaluation/qa/eval_prompt.py +0 -78
  675. langchain/evaluation/qa/generate_chain.py +0 -36
  676. langchain/evaluation/qa/generate_prompt.py +0 -21
  677. langchain/evaluation/regex_match/__init__.py +0 -0
  678. langchain/evaluation/regex_match/base.py +0 -94
  679. langchain/evaluation/schema.py +0 -491
  680. langchain/evaluation/scoring/__init__.py +0 -31
  681. langchain/evaluation/scoring/eval_chain.py +0 -476
  682. langchain/evaluation/scoring/prompt.py +0 -53
  683. langchain/evaluation/string_distance/__init__.py +0 -13
  684. langchain/evaluation/string_distance/base.py +0 -472
  685. langchain/example_generator.py +0 -5
  686. langchain/formatting.py +0 -5
  687. langchain/globals.py +0 -180
  688. langchain/graphs/__init__.py +0 -57
  689. langchain/graphs/arangodb_graph.py +0 -28
  690. langchain/graphs/falkordb_graph.py +0 -23
  691. langchain/graphs/graph_document.py +0 -33
  692. langchain/graphs/graph_store.py +0 -23
  693. langchain/graphs/hugegraph.py +0 -23
  694. langchain/graphs/kuzu_graph.py +0 -23
  695. langchain/graphs/memgraph_graph.py +0 -23
  696. langchain/graphs/nebula_graph.py +0 -23
  697. langchain/graphs/neo4j_graph.py +0 -23
  698. langchain/graphs/neptune_graph.py +0 -23
  699. langchain/graphs/networkx_graph.py +0 -36
  700. langchain/graphs/rdf_graph.py +0 -23
  701. langchain/hub.py +0 -131
  702. langchain/indexes/__init__.py +0 -50
  703. langchain/indexes/_api.py +0 -5
  704. langchain/indexes/_sql_record_manager.py +0 -539
  705. langchain/indexes/graph.py +0 -28
  706. langchain/indexes/prompts/__init__.py +0 -13
  707. langchain/indexes/prompts/entity_extraction.py +0 -39
  708. langchain/indexes/prompts/entity_summarization.py +0 -24
  709. langchain/indexes/prompts/knowledge_triplet_extraction.py +0 -36
  710. langchain/indexes/vectorstore.py +0 -269
  711. langchain/input.py +0 -15
  712. langchain/llms/__init__.py +0 -734
  713. langchain/llms/ai21.py +0 -28
  714. langchain/llms/aleph_alpha.py +0 -23
  715. langchain/llms/amazon_api_gateway.py +0 -23
  716. langchain/llms/anthropic.py +0 -23
  717. langchain/llms/anyscale.py +0 -23
  718. langchain/llms/arcee.py +0 -23
  719. langchain/llms/aviary.py +0 -23
  720. langchain/llms/azureml_endpoint.py +0 -48
  721. langchain/llms/baidu_qianfan_endpoint.py +0 -23
  722. langchain/llms/bananadev.py +0 -23
  723. langchain/llms/base.py +0 -20
  724. langchain/llms/baseten.py +0 -23
  725. langchain/llms/beam.py +0 -23
  726. langchain/llms/bedrock.py +0 -28
  727. langchain/llms/bittensor.py +0 -23
  728. langchain/llms/cerebriumai.py +0 -23
  729. langchain/llms/chatglm.py +0 -23
  730. langchain/llms/clarifai.py +0 -23
  731. langchain/llms/cloudflare_workersai.py +0 -25
  732. langchain/llms/cohere.py +0 -23
  733. langchain/llms/ctransformers.py +0 -23
  734. langchain/llms/ctranslate2.py +0 -23
  735. langchain/llms/databricks.py +0 -23
  736. langchain/llms/deepinfra.py +0 -23
  737. langchain/llms/deepsparse.py +0 -23
  738. langchain/llms/edenai.py +0 -23
  739. langchain/llms/fake.py +0 -28
  740. langchain/llms/fireworks.py +0 -23
  741. langchain/llms/forefrontai.py +0 -23
  742. langchain/llms/gigachat.py +0 -23
  743. langchain/llms/google_palm.py +0 -23
  744. langchain/llms/gooseai.py +0 -23
  745. langchain/llms/gpt4all.py +0 -23
  746. langchain/llms/gradient_ai.py +0 -28
  747. langchain/llms/grammars/json.gbnf +0 -29
  748. langchain/llms/grammars/list.gbnf +0 -14
  749. langchain/llms/huggingface_endpoint.py +0 -23
  750. langchain/llms/huggingface_hub.py +0 -23
  751. langchain/llms/huggingface_pipeline.py +0 -23
  752. langchain/llms/huggingface_text_gen_inference.py +0 -23
  753. langchain/llms/human.py +0 -23
  754. langchain/llms/javelin_ai_gateway.py +0 -28
  755. langchain/llms/koboldai.py +0 -23
  756. langchain/llms/llamacpp.py +0 -23
  757. langchain/llms/loading.py +0 -27
  758. langchain/llms/manifest.py +0 -23
  759. langchain/llms/minimax.py +0 -23
  760. langchain/llms/mlflow.py +0 -23
  761. langchain/llms/mlflow_ai_gateway.py +0 -23
  762. langchain/llms/modal.py +0 -23
  763. langchain/llms/mosaicml.py +0 -23
  764. langchain/llms/nlpcloud.py +0 -23
  765. langchain/llms/octoai_endpoint.py +0 -23
  766. langchain/llms/ollama.py +0 -23
  767. langchain/llms/opaqueprompts.py +0 -23
  768. langchain/llms/openai.py +0 -32
  769. langchain/llms/openllm.py +0 -23
  770. langchain/llms/openlm.py +0 -23
  771. langchain/llms/pai_eas_endpoint.py +0 -23
  772. langchain/llms/petals.py +0 -23
  773. langchain/llms/pipelineai.py +0 -23
  774. langchain/llms/predibase.py +0 -23
  775. langchain/llms/predictionguard.py +0 -23
  776. langchain/llms/promptlayer_openai.py +0 -27
  777. langchain/llms/replicate.py +0 -23
  778. langchain/llms/rwkv.py +0 -23
  779. langchain/llms/sagemaker_endpoint.py +0 -28
  780. langchain/llms/self_hosted.py +0 -23
  781. langchain/llms/self_hosted_hugging_face.py +0 -23
  782. langchain/llms/stochasticai.py +0 -23
  783. langchain/llms/symblai_nebula.py +0 -23
  784. langchain/llms/textgen.py +0 -23
  785. langchain/llms/titan_takeoff.py +0 -23
  786. langchain/llms/titan_takeoff_pro.py +0 -23
  787. langchain/llms/together.py +0 -23
  788. langchain/llms/tongyi.py +0 -23
  789. langchain/llms/utils.py +0 -23
  790. langchain/llms/vertexai.py +0 -27
  791. langchain/llms/vllm.py +0 -27
  792. langchain/llms/volcengine_maas.py +0 -28
  793. langchain/llms/watsonxllm.py +0 -23
  794. langchain/llms/writer.py +0 -23
  795. langchain/llms/xinference.py +0 -23
  796. langchain/llms/yandex.py +0 -23
  797. langchain/load/__init__.py +0 -11
  798. langchain/load/dump.py +0 -3
  799. langchain/load/load.py +0 -3
  800. langchain/load/serializable.py +0 -19
  801. langchain/memory/__init__.py +0 -153
  802. langchain/memory/buffer.py +0 -178
  803. langchain/memory/buffer_window.py +0 -62
  804. langchain/memory/chat_memory.py +0 -104
  805. langchain/memory/chat_message_histories/__init__.py +0 -84
  806. langchain/memory/chat_message_histories/astradb.py +0 -25
  807. langchain/memory/chat_message_histories/cassandra.py +0 -25
  808. langchain/memory/chat_message_histories/cosmos_db.py +0 -25
  809. langchain/memory/chat_message_histories/dynamodb.py +0 -25
  810. langchain/memory/chat_message_histories/elasticsearch.py +0 -27
  811. langchain/memory/chat_message_histories/file.py +0 -25
  812. langchain/memory/chat_message_histories/firestore.py +0 -25
  813. langchain/memory/chat_message_histories/in_memory.py +0 -5
  814. langchain/memory/chat_message_histories/momento.py +0 -25
  815. langchain/memory/chat_message_histories/mongodb.py +0 -25
  816. langchain/memory/chat_message_histories/neo4j.py +0 -25
  817. langchain/memory/chat_message_histories/postgres.py +0 -25
  818. langchain/memory/chat_message_histories/redis.py +0 -25
  819. langchain/memory/chat_message_histories/rocksetdb.py +0 -25
  820. langchain/memory/chat_message_histories/singlestoredb.py +0 -27
  821. langchain/memory/chat_message_histories/sql.py +0 -33
  822. langchain/memory/chat_message_histories/streamlit.py +0 -25
  823. langchain/memory/chat_message_histories/upstash_redis.py +0 -27
  824. langchain/memory/chat_message_histories/xata.py +0 -25
  825. langchain/memory/chat_message_histories/zep.py +0 -25
  826. langchain/memory/combined.py +0 -85
  827. langchain/memory/entity.py +0 -611
  828. langchain/memory/kg.py +0 -23
  829. langchain/memory/motorhead_memory.py +0 -23
  830. langchain/memory/prompt.py +0 -164
  831. langchain/memory/readonly.py +0 -24
  832. langchain/memory/simple.py +0 -27
  833. langchain/memory/summary.py +0 -170
  834. langchain/memory/summary_buffer.py +0 -151
  835. langchain/memory/token_buffer.py +0 -74
  836. langchain/memory/utils.py +0 -21
  837. langchain/memory/vectorstore.py +0 -120
  838. langchain/memory/vectorstore_token_buffer_memory.py +0 -184
  839. langchain/memory/zep_memory.py +0 -23
  840. langchain/model_laboratory.py +0 -99
  841. langchain/output_parsers/__init__.py +0 -87
  842. langchain/output_parsers/boolean.py +0 -54
  843. langchain/output_parsers/combining.py +0 -59
  844. langchain/output_parsers/datetime.py +0 -58
  845. langchain/output_parsers/enum.py +0 -45
  846. langchain/output_parsers/ernie_functions.py +0 -45
  847. langchain/output_parsers/fix.py +0 -155
  848. langchain/output_parsers/format_instructions.py +0 -79
  849. langchain/output_parsers/json.py +0 -15
  850. langchain/output_parsers/list.py +0 -13
  851. langchain/output_parsers/loading.py +0 -22
  852. langchain/output_parsers/openai_functions.py +0 -13
  853. langchain/output_parsers/openai_tools.py +0 -7
  854. langchain/output_parsers/pandas_dataframe.py +0 -171
  855. langchain/output_parsers/prompts.py +0 -21
  856. langchain/output_parsers/pydantic.py +0 -3
  857. langchain/output_parsers/rail_parser.py +0 -25
  858. langchain/output_parsers/regex.py +0 -41
  859. langchain/output_parsers/regex_dict.py +0 -43
  860. langchain/output_parsers/retry.py +0 -316
  861. langchain/output_parsers/structured.py +0 -116
  862. langchain/output_parsers/xml.py +0 -3
  863. langchain/output_parsers/yaml.py +0 -77
  864. langchain/prompts/__init__.py +0 -102
  865. langchain/prompts/base.py +0 -21
  866. langchain/prompts/chat.py +0 -37
  867. langchain/prompts/example_selector/__init__.py +0 -42
  868. langchain/prompts/example_selector/base.py +0 -3
  869. langchain/prompts/example_selector/length_based.py +0 -5
  870. langchain/prompts/example_selector/ngram_overlap.py +0 -32
  871. langchain/prompts/example_selector/semantic_similarity.py +0 -11
  872. langchain/prompts/few_shot.py +0 -11
  873. langchain/prompts/few_shot_with_templates.py +0 -3
  874. langchain/prompts/loading.py +0 -23
  875. langchain/prompts/pipeline.py +0 -3
  876. langchain/prompts/prompt.py +0 -6
  877. langchain/pydantic_v1/__init__.py +0 -38
  878. langchain/pydantic_v1/dataclasses.py +0 -20
  879. langchain/pydantic_v1/main.py +0 -20
  880. langchain/python.py +0 -19
  881. langchain/requests.py +0 -35
  882. langchain/retrievers/__init__.py +0 -178
  883. langchain/retrievers/arcee.py +0 -23
  884. langchain/retrievers/arxiv.py +0 -23
  885. langchain/retrievers/azure_ai_search.py +0 -30
  886. langchain/retrievers/bedrock.py +0 -33
  887. langchain/retrievers/bm25.py +0 -28
  888. langchain/retrievers/chaindesk.py +0 -23
  889. langchain/retrievers/chatgpt_plugin_retriever.py +0 -23
  890. langchain/retrievers/cohere_rag_retriever.py +0 -23
  891. langchain/retrievers/contextual_compression.py +0 -81
  892. langchain/retrievers/databerry.py +0 -23
  893. langchain/retrievers/docarray.py +0 -28
  894. langchain/retrievers/document_compressors/__init__.py +0 -44
  895. langchain/retrievers/document_compressors/base.py +0 -82
  896. langchain/retrievers/document_compressors/chain_extract.py +0 -123
  897. langchain/retrievers/document_compressors/chain_extract_prompt.py +0 -10
  898. langchain/retrievers/document_compressors/chain_filter.py +0 -133
  899. langchain/retrievers/document_compressors/chain_filter_prompt.py +0 -8
  900. langchain/retrievers/document_compressors/cohere_rerank.py +0 -126
  901. langchain/retrievers/document_compressors/cross_encoder.py +0 -16
  902. langchain/retrievers/document_compressors/cross_encoder_rerank.py +0 -50
  903. langchain/retrievers/document_compressors/embeddings_filter.py +0 -140
  904. langchain/retrievers/document_compressors/flashrank_rerank.py +0 -27
  905. langchain/retrievers/document_compressors/listwise_rerank.py +0 -145
  906. langchain/retrievers/elastic_search_bm25.py +0 -23
  907. langchain/retrievers/embedchain.py +0 -23
  908. langchain/retrievers/ensemble.py +0 -336
  909. langchain/retrievers/google_cloud_documentai_warehouse.py +0 -25
  910. langchain/retrievers/google_vertex_ai_search.py +0 -33
  911. langchain/retrievers/kay.py +0 -23
  912. langchain/retrievers/kendra.py +0 -66
  913. langchain/retrievers/knn.py +0 -23
  914. langchain/retrievers/llama_index.py +0 -30
  915. langchain/retrievers/merger_retriever.py +0 -123
  916. langchain/retrievers/metal.py +0 -23
  917. langchain/retrievers/milvus.py +0 -28
  918. langchain/retrievers/multi_query.py +0 -233
  919. langchain/retrievers/multi_vector.py +0 -135
  920. langchain/retrievers/outline.py +0 -23
  921. langchain/retrievers/parent_document_retriever.py +0 -172
  922. langchain/retrievers/pinecone_hybrid_search.py +0 -23
  923. langchain/retrievers/pubmed.py +0 -23
  924. langchain/retrievers/pupmed.py +0 -23
  925. langchain/retrievers/re_phraser.py +0 -89
  926. langchain/retrievers/remote_retriever.py +0 -23
  927. langchain/retrievers/self_query/__init__.py +0 -0
  928. langchain/retrievers/self_query/astradb.py +0 -23
  929. langchain/retrievers/self_query/base.py +0 -416
  930. langchain/retrievers/self_query/chroma.py +0 -23
  931. langchain/retrievers/self_query/dashvector.py +0 -23
  932. langchain/retrievers/self_query/databricks_vector_search.py +0 -27
  933. langchain/retrievers/self_query/deeplake.py +0 -27
  934. langchain/retrievers/self_query/dingo.py +0 -23
  935. langchain/retrievers/self_query/elasticsearch.py +0 -25
  936. langchain/retrievers/self_query/milvus.py +0 -27
  937. langchain/retrievers/self_query/mongodb_atlas.py +0 -25
  938. langchain/retrievers/self_query/myscale.py +0 -23
  939. langchain/retrievers/self_query/opensearch.py +0 -23
  940. langchain/retrievers/self_query/pgvector.py +0 -23
  941. langchain/retrievers/self_query/pinecone.py +0 -23
  942. langchain/retrievers/self_query/qdrant.py +0 -23
  943. langchain/retrievers/self_query/redis.py +0 -23
  944. langchain/retrievers/self_query/supabase.py +0 -23
  945. langchain/retrievers/self_query/tencentvectordb.py +0 -27
  946. langchain/retrievers/self_query/timescalevector.py +0 -27
  947. langchain/retrievers/self_query/vectara.py +0 -27
  948. langchain/retrievers/self_query/weaviate.py +0 -23
  949. langchain/retrievers/svm.py +0 -23
  950. langchain/retrievers/tavily_search_api.py +0 -28
  951. langchain/retrievers/tfidf.py +0 -23
  952. langchain/retrievers/time_weighted_retriever.py +0 -196
  953. langchain/retrievers/vespa_retriever.py +0 -23
  954. langchain/retrievers/weaviate_hybrid_search.py +0 -23
  955. langchain/retrievers/web_research.py +0 -29
  956. langchain/retrievers/wikipedia.py +0 -23
  957. langchain/retrievers/you.py +0 -23
  958. langchain/retrievers/zep.py +0 -30
  959. langchain/retrievers/zilliz.py +0 -28
  960. langchain/runnables/__init__.py +0 -18
  961. langchain/runnables/hub.py +0 -44
  962. langchain/runnables/openai_functions.py +0 -57
  963. langchain/schema/__init__.py +0 -82
  964. langchain/schema/agent.py +0 -3
  965. langchain/schema/cache.py +0 -3
  966. langchain/schema/callbacks/__init__.py +0 -0
  967. langchain/schema/callbacks/base.py +0 -23
  968. langchain/schema/callbacks/manager.py +0 -55
  969. langchain/schema/callbacks/stdout.py +0 -3
  970. langchain/schema/callbacks/streaming_stdout.py +0 -3
  971. langchain/schema/callbacks/tracers/__init__.py +0 -0
  972. langchain/schema/callbacks/tracers/base.py +0 -4
  973. langchain/schema/callbacks/tracers/evaluation.py +0 -6
  974. langchain/schema/callbacks/tracers/langchain.py +0 -8
  975. langchain/schema/callbacks/tracers/langchain_v1.py +0 -3
  976. langchain/schema/callbacks/tracers/log_stream.py +0 -9
  977. langchain/schema/callbacks/tracers/root_listeners.py +0 -3
  978. langchain/schema/callbacks/tracers/run_collector.py +0 -3
  979. langchain/schema/callbacks/tracers/schemas.py +0 -27
  980. langchain/schema/callbacks/tracers/stdout.py +0 -13
  981. langchain/schema/chat.py +0 -3
  982. langchain/schema/chat_history.py +0 -3
  983. langchain/schema/document.py +0 -3
  984. langchain/schema/embeddings.py +0 -3
  985. langchain/schema/exceptions.py +0 -3
  986. langchain/schema/language_model.py +0 -15
  987. langchain/schema/memory.py +0 -3
  988. langchain/schema/messages.py +0 -51
  989. langchain/schema/output.py +0 -19
  990. langchain/schema/output_parser.py +0 -25
  991. langchain/schema/prompt.py +0 -3
  992. langchain/schema/prompt_template.py +0 -3
  993. langchain/schema/retriever.py +0 -3
  994. langchain/schema/runnable/__init__.py +0 -58
  995. langchain/schema/runnable/base.py +0 -38
  996. langchain/schema/runnable/branch.py +0 -3
  997. langchain/schema/runnable/config.py +0 -27
  998. langchain/schema/runnable/configurable.py +0 -15
  999. langchain/schema/runnable/fallbacks.py +0 -3
  1000. langchain/schema/runnable/history.py +0 -11
  1001. langchain/schema/runnable/passthrough.py +0 -8
  1002. langchain/schema/runnable/retry.py +0 -3
  1003. langchain/schema/runnable/router.py +0 -3
  1004. langchain/schema/runnable/utils.py +0 -51
  1005. langchain/schema/storage.py +0 -3
  1006. langchain/schema/vectorstore.py +0 -3
  1007. langchain/serpapi.py +0 -25
  1008. langchain/smith/__init__.py +0 -103
  1009. langchain/smith/evaluation/__init__.py +0 -68
  1010. langchain/smith/evaluation/config.py +0 -365
  1011. langchain/smith/evaluation/name_generation.py +0 -727
  1012. langchain/smith/evaluation/progress.py +0 -146
  1013. langchain/smith/evaluation/runner_utils.py +0 -1689
  1014. langchain/smith/evaluation/string_run_evaluator.py +0 -467
  1015. langchain/sql_database.py +0 -25
  1016. langchain/storage/__init__.py +0 -57
  1017. langchain/storage/_lc_store.py +0 -91
  1018. langchain/storage/encoder_backed.py +0 -128
  1019. langchain/storage/exceptions.py +0 -3
  1020. langchain/storage/file_system.py +0 -176
  1021. langchain/storage/in_memory.py +0 -13
  1022. langchain/storage/redis.py +0 -23
  1023. langchain/storage/upstash_redis.py +0 -27
  1024. langchain/text_splitter.py +0 -50
  1025. langchain/tools/ainetwork/__init__.py +0 -0
  1026. langchain/tools/ainetwork/app.py +0 -30
  1027. langchain/tools/ainetwork/base.py +0 -27
  1028. langchain/tools/ainetwork/owner.py +0 -28
  1029. langchain/tools/ainetwork/rule.py +0 -28
  1030. langchain/tools/ainetwork/transfer.py +0 -28
  1031. langchain/tools/ainetwork/value.py +0 -28
  1032. langchain/tools/amadeus/__init__.py +0 -30
  1033. langchain/tools/amadeus/base.py +0 -23
  1034. langchain/tools/amadeus/closest_airport.py +0 -30
  1035. langchain/tools/amadeus/flight_search.py +0 -30
  1036. langchain/tools/arxiv/__init__.py +0 -1
  1037. langchain/tools/arxiv/tool.py +0 -28
  1038. langchain/tools/azure_cognitive_services/__init__.py +0 -41
  1039. langchain/tools/azure_cognitive_services/form_recognizer.py +0 -23
  1040. langchain/tools/azure_cognitive_services/image_analysis.py +0 -23
  1041. langchain/tools/azure_cognitive_services/speech2text.py +0 -23
  1042. langchain/tools/azure_cognitive_services/text2speech.py +0 -23
  1043. langchain/tools/azure_cognitive_services/text_analytics_health.py +0 -23
  1044. langchain/tools/base.py +0 -19
  1045. langchain/tools/bearly/__init__.py +0 -0
  1046. langchain/tools/bearly/tool.py +0 -33
  1047. langchain/tools/bing_search/__init__.py +0 -29
  1048. langchain/tools/bing_search/tool.py +0 -27
  1049. langchain/tools/brave_search/__init__.py +0 -0
  1050. langchain/tools/brave_search/tool.py +0 -23
  1051. langchain/tools/clickup/__init__.py +0 -0
  1052. langchain/tools/clickup/tool.py +0 -23
  1053. langchain/tools/convert_to_openai.py +0 -4
  1054. langchain/tools/dataforseo_api_search/__init__.py +0 -34
  1055. langchain/tools/dataforseo_api_search/tool.py +0 -32
  1056. langchain/tools/ddg_search/__init__.py +0 -25
  1057. langchain/tools/ddg_search/tool.py +0 -32
  1058. langchain/tools/e2b_data_analysis/__init__.py +0 -0
  1059. langchain/tools/e2b_data_analysis/tool.py +0 -33
  1060. langchain/tools/edenai/__init__.py +0 -50
  1061. langchain/tools/edenai/audio_speech_to_text.py +0 -23
  1062. langchain/tools/edenai/audio_text_to_speech.py +0 -23
  1063. langchain/tools/edenai/edenai_base_tool.py +0 -23
  1064. langchain/tools/edenai/image_explicitcontent.py +0 -23
  1065. langchain/tools/edenai/image_objectdetection.py +0 -23
  1066. langchain/tools/edenai/ocr_identityparser.py +0 -23
  1067. langchain/tools/edenai/ocr_invoiceparser.py +0 -23
  1068. langchain/tools/edenai/text_moderation.py +0 -23
  1069. langchain/tools/eleven_labs/__init__.py +0 -25
  1070. langchain/tools/eleven_labs/models.py +0 -23
  1071. langchain/tools/eleven_labs/text2speech.py +0 -23
  1072. langchain/tools/file_management/__init__.py +0 -47
  1073. langchain/tools/file_management/copy.py +0 -28
  1074. langchain/tools/file_management/delete.py +0 -28
  1075. langchain/tools/file_management/file_search.py +0 -28
  1076. langchain/tools/file_management/list_dir.py +0 -28
  1077. langchain/tools/file_management/move.py +0 -28
  1078. langchain/tools/file_management/read.py +0 -28
  1079. langchain/tools/file_management/write.py +0 -28
  1080. langchain/tools/github/__init__.py +0 -1
  1081. langchain/tools/github/tool.py +0 -23
  1082. langchain/tools/gitlab/__init__.py +0 -1
  1083. langchain/tools/gitlab/tool.py +0 -23
  1084. langchain/tools/gmail/__init__.py +0 -41
  1085. langchain/tools/gmail/base.py +0 -23
  1086. langchain/tools/gmail/create_draft.py +0 -28
  1087. langchain/tools/gmail/get_message.py +0 -28
  1088. langchain/tools/gmail/get_thread.py +0 -28
  1089. langchain/tools/gmail/search.py +0 -30
  1090. langchain/tools/gmail/send_message.py +0 -28
  1091. langchain/tools/golden_query/__init__.py +0 -25
  1092. langchain/tools/golden_query/tool.py +0 -23
  1093. langchain/tools/google_cloud/__init__.py +0 -25
  1094. langchain/tools/google_cloud/texttospeech.py +0 -23
  1095. langchain/tools/google_finance/__init__.py +0 -27
  1096. langchain/tools/google_finance/tool.py +0 -25
  1097. langchain/tools/google_jobs/__init__.py +0 -25
  1098. langchain/tools/google_jobs/tool.py +0 -23
  1099. langchain/tools/google_lens/__init__.py +0 -25
  1100. langchain/tools/google_lens/tool.py +0 -23
  1101. langchain/tools/google_places/__init__.py +0 -25
  1102. langchain/tools/google_places/tool.py +0 -28
  1103. langchain/tools/google_scholar/__init__.py +0 -27
  1104. langchain/tools/google_scholar/tool.py +0 -25
  1105. langchain/tools/google_search/__init__.py +0 -29
  1106. langchain/tools/google_search/tool.py +0 -27
  1107. langchain/tools/google_serper/__init__.py +0 -30
  1108. langchain/tools/google_serper/tool.py +0 -27
  1109. langchain/tools/google_trends/__init__.py +0 -27
  1110. langchain/tools/google_trends/tool.py +0 -25
  1111. langchain/tools/graphql/__init__.py +0 -1
  1112. langchain/tools/graphql/tool.py +0 -23
  1113. langchain/tools/human/__init__.py +0 -25
  1114. langchain/tools/human/tool.py +0 -23
  1115. langchain/tools/ifttt.py +0 -23
  1116. langchain/tools/interaction/__init__.py +0 -1
  1117. langchain/tools/interaction/tool.py +0 -23
  1118. langchain/tools/jira/__init__.py +0 -1
  1119. langchain/tools/jira/tool.py +0 -42
  1120. langchain/tools/json/__init__.py +0 -1
  1121. langchain/tools/json/tool.py +0 -52
  1122. langchain/tools/memorize/__init__.py +0 -25
  1123. langchain/tools/memorize/tool.py +0 -27
  1124. langchain/tools/merriam_webster/__init__.py +0 -1
  1125. langchain/tools/merriam_webster/tool.py +0 -23
  1126. langchain/tools/metaphor_search/__init__.py +0 -25
  1127. langchain/tools/metaphor_search/tool.py +0 -23
  1128. langchain/tools/multion/__init__.py +0 -33
  1129. langchain/tools/multion/close_session.py +0 -30
  1130. langchain/tools/multion/create_session.py +0 -30
  1131. langchain/tools/multion/update_session.py +0 -30
  1132. langchain/tools/nasa/__init__.py +0 -0
  1133. langchain/tools/nasa/tool.py +0 -23
  1134. langchain/tools/nuclia/__init__.py +0 -23
  1135. langchain/tools/nuclia/tool.py +0 -27
  1136. langchain/tools/office365/__init__.py +0 -41
  1137. langchain/tools/office365/base.py +0 -23
  1138. langchain/tools/office365/create_draft_message.py +0 -32
  1139. langchain/tools/office365/events_search.py +0 -28
  1140. langchain/tools/office365/messages_search.py +0 -28
  1141. langchain/tools/office365/send_event.py +0 -28
  1142. langchain/tools/office365/send_message.py +0 -28
  1143. langchain/tools/openapi/__init__.py +0 -0
  1144. langchain/tools/openapi/utils/__init__.py +0 -0
  1145. langchain/tools/openapi/utils/api_models.py +0 -54
  1146. langchain/tools/openapi/utils/openapi_utils.py +0 -30
  1147. langchain/tools/openweathermap/__init__.py +0 -25
  1148. langchain/tools/openweathermap/tool.py +0 -23
  1149. langchain/tools/playwright/__init__.py +0 -47
  1150. langchain/tools/playwright/base.py +0 -23
  1151. langchain/tools/playwright/click.py +0 -28
  1152. langchain/tools/playwright/current_page.py +0 -23
  1153. langchain/tools/playwright/extract_hyperlinks.py +0 -32
  1154. langchain/tools/playwright/extract_text.py +0 -23
  1155. langchain/tools/playwright/get_elements.py +0 -28
  1156. langchain/tools/playwright/navigate.py +0 -28
  1157. langchain/tools/playwright/navigate_back.py +0 -23
  1158. langchain/tools/plugin.py +0 -32
  1159. langchain/tools/powerbi/__init__.py +0 -1
  1160. langchain/tools/powerbi/tool.py +0 -33
  1161. langchain/tools/pubmed/__init__.py +0 -1
  1162. langchain/tools/pubmed/tool.py +0 -23
  1163. langchain/tools/python/__init__.py +0 -13
  1164. langchain/tools/reddit_search/__init__.py +0 -0
  1165. langchain/tools/reddit_search/tool.py +0 -27
  1166. langchain/tools/render.py +0 -23
  1167. langchain/tools/requests/__init__.py +0 -1
  1168. langchain/tools/requests/tool.py +0 -42
  1169. langchain/tools/retriever.py +0 -11
  1170. langchain/tools/scenexplain/__init__.py +0 -1
  1171. langchain/tools/scenexplain/tool.py +0 -28
  1172. langchain/tools/searchapi/__init__.py +0 -30
  1173. langchain/tools/searchapi/tool.py +0 -27
  1174. langchain/tools/searx_search/__init__.py +0 -0
  1175. langchain/tools/searx_search/tool.py +0 -27
  1176. langchain/tools/shell/__init__.py +0 -25
  1177. langchain/tools/shell/tool.py +0 -28
  1178. langchain/tools/slack/__init__.py +0 -38
  1179. langchain/tools/slack/base.py +0 -23
  1180. langchain/tools/slack/get_channel.py +0 -23
  1181. langchain/tools/slack/get_message.py +0 -28
  1182. langchain/tools/slack/schedule_message.py +0 -28
  1183. langchain/tools/slack/send_message.py +0 -28
  1184. langchain/tools/sleep/__init__.py +0 -1
  1185. langchain/tools/sleep/tool.py +0 -28
  1186. langchain/tools/spark_sql/__init__.py +0 -1
  1187. langchain/tools/spark_sql/tool.py +0 -39
  1188. langchain/tools/sql_database/__init__.py +0 -1
  1189. langchain/tools/sql_database/prompt.py +0 -24
  1190. langchain/tools/sql_database/tool.py +0 -39
  1191. langchain/tools/stackexchange/__init__.py +0 -1
  1192. langchain/tools/stackexchange/tool.py +0 -23
  1193. langchain/tools/steam/__init__.py +0 -1
  1194. langchain/tools/steam/tool.py +0 -23
  1195. langchain/tools/steamship_image_generation/__init__.py +0 -25
  1196. langchain/tools/steamship_image_generation/tool.py +0 -28
  1197. langchain/tools/tavily_search/__init__.py +0 -32
  1198. langchain/tools/tavily_search/tool.py +0 -33
  1199. langchain/tools/vectorstore/__init__.py +0 -1
  1200. langchain/tools/vectorstore/tool.py +0 -30
  1201. langchain/tools/wikipedia/__init__.py +0 -1
  1202. langchain/tools/wikipedia/tool.py +0 -23
  1203. langchain/tools/wolfram_alpha/__init__.py +0 -25
  1204. langchain/tools/wolfram_alpha/tool.py +0 -23
  1205. langchain/tools/yahoo_finance_news.py +0 -23
  1206. langchain/tools/youtube/__init__.py +0 -0
  1207. langchain/tools/youtube/search.py +0 -23
  1208. langchain/tools/zapier/__init__.py +0 -29
  1209. langchain/tools/zapier/tool.py +0 -49
  1210. langchain/utilities/__init__.py +0 -168
  1211. langchain/utilities/alpha_vantage.py +0 -23
  1212. langchain/utilities/anthropic.py +0 -30
  1213. langchain/utilities/apify.py +0 -23
  1214. langchain/utilities/arcee.py +0 -45
  1215. langchain/utilities/arxiv.py +0 -23
  1216. langchain/utilities/asyncio.py +0 -11
  1217. langchain/utilities/awslambda.py +0 -23
  1218. langchain/utilities/bibtex.py +0 -23
  1219. langchain/utilities/bing_search.py +0 -23
  1220. langchain/utilities/brave_search.py +0 -23
  1221. langchain/utilities/clickup.py +0 -45
  1222. langchain/utilities/dalle_image_generator.py +0 -25
  1223. langchain/utilities/dataforseo_api_search.py +0 -25
  1224. langchain/utilities/duckduckgo_search.py +0 -23
  1225. langchain/utilities/github.py +0 -23
  1226. langchain/utilities/gitlab.py +0 -23
  1227. langchain/utilities/golden_query.py +0 -23
  1228. langchain/utilities/google_finance.py +0 -23
  1229. langchain/utilities/google_jobs.py +0 -23
  1230. langchain/utilities/google_lens.py +0 -23
  1231. langchain/utilities/google_places_api.py +0 -23
  1232. langchain/utilities/google_scholar.py +0 -23
  1233. langchain/utilities/google_search.py +0 -23
  1234. langchain/utilities/google_serper.py +0 -23
  1235. langchain/utilities/google_trends.py +0 -23
  1236. langchain/utilities/graphql.py +0 -23
  1237. langchain/utilities/jira.py +0 -23
  1238. langchain/utilities/loading.py +0 -4
  1239. langchain/utilities/max_compute.py +0 -23
  1240. langchain/utilities/merriam_webster.py +0 -23
  1241. langchain/utilities/metaphor_search.py +0 -23
  1242. langchain/utilities/nasa.py +0 -23
  1243. langchain/utilities/opaqueprompts.py +0 -27
  1244. langchain/utilities/openapi.py +0 -28
  1245. langchain/utilities/openweathermap.py +0 -23
  1246. langchain/utilities/outline.py +0 -23
  1247. langchain/utilities/portkey.py +0 -23
  1248. langchain/utilities/powerbi.py +0 -23
  1249. langchain/utilities/pubmed.py +0 -23
  1250. langchain/utilities/python.py +0 -19
  1251. langchain/utilities/reddit_search.py +0 -25
  1252. langchain/utilities/redis.py +0 -33
  1253. langchain/utilities/requests.py +0 -27
  1254. langchain/utilities/scenexplain.py +0 -23
  1255. langchain/utilities/searchapi.py +0 -23
  1256. langchain/utilities/searx_search.py +0 -28
  1257. langchain/utilities/serpapi.py +0 -28
  1258. langchain/utilities/spark_sql.py +0 -23
  1259. langchain/utilities/sql_database.py +0 -28
  1260. langchain/utilities/stackexchange.py +0 -23
  1261. langchain/utilities/steam.py +0 -23
  1262. langchain/utilities/tavily_search.py +0 -25
  1263. langchain/utilities/tensorflow_datasets.py +0 -23
  1264. langchain/utilities/twilio.py +0 -23
  1265. langchain/utilities/vertexai.py +0 -36
  1266. langchain/utilities/wikipedia.py +0 -23
  1267. langchain/utilities/wolfram_alpha.py +0 -23
  1268. langchain/utilities/zapier.py +0 -23
  1269. langchain/utils/__init__.py +0 -77
  1270. langchain/utils/aiter.py +0 -3
  1271. langchain/utils/env.py +0 -3
  1272. langchain/utils/ernie_functions.py +0 -36
  1273. langchain/utils/formatting.py +0 -3
  1274. langchain/utils/html.py +0 -19
  1275. langchain/utils/input.py +0 -8
  1276. langchain/utils/iter.py +0 -3
  1277. langchain/utils/json_schema.py +0 -11
  1278. langchain/utils/loading.py +0 -3
  1279. langchain/utils/math.py +0 -32
  1280. langchain/utils/openai.py +0 -23
  1281. langchain/utils/openai_functions.py +0 -13
  1282. langchain/utils/pydantic.py +0 -3
  1283. langchain/utils/strings.py +0 -3
  1284. langchain/utils/utils.py +0 -21
  1285. langchain/vectorstores/__init__.py +0 -262
  1286. langchain/vectorstores/alibabacloud_opensearch.py +0 -30
  1287. langchain/vectorstores/analyticdb.py +0 -23
  1288. langchain/vectorstores/annoy.py +0 -23
  1289. langchain/vectorstores/astradb.py +0 -23
  1290. langchain/vectorstores/atlas.py +0 -23
  1291. langchain/vectorstores/awadb.py +0 -23
  1292. langchain/vectorstores/azure_cosmos_db.py +0 -28
  1293. langchain/vectorstores/azuresearch.py +0 -30
  1294. langchain/vectorstores/bageldb.py +0 -23
  1295. langchain/vectorstores/baiducloud_vector_search.py +0 -23
  1296. langchain/vectorstores/base.py +0 -3
  1297. langchain/vectorstores/cassandra.py +0 -23
  1298. langchain/vectorstores/chroma.py +0 -23
  1299. langchain/vectorstores/clarifai.py +0 -23
  1300. langchain/vectorstores/clickhouse.py +0 -27
  1301. langchain/vectorstores/dashvector.py +0 -23
  1302. langchain/vectorstores/databricks_vector_search.py +0 -23
  1303. langchain/vectorstores/deeplake.py +0 -23
  1304. langchain/vectorstores/dingo.py +0 -23
  1305. langchain/vectorstores/docarray/__init__.py +0 -30
  1306. langchain/vectorstores/docarray/base.py +0 -23
  1307. langchain/vectorstores/docarray/hnsw.py +0 -23
  1308. langchain/vectorstores/docarray/in_memory.py +0 -23
  1309. langchain/vectorstores/elastic_vector_search.py +0 -27
  1310. langchain/vectorstores/elasticsearch.py +0 -39
  1311. langchain/vectorstores/epsilla.py +0 -23
  1312. langchain/vectorstores/faiss.py +0 -23
  1313. langchain/vectorstores/hippo.py +0 -23
  1314. langchain/vectorstores/hologres.py +0 -23
  1315. langchain/vectorstores/lancedb.py +0 -23
  1316. langchain/vectorstores/llm_rails.py +0 -28
  1317. langchain/vectorstores/marqo.py +0 -23
  1318. langchain/vectorstores/matching_engine.py +0 -23
  1319. langchain/vectorstores/meilisearch.py +0 -23
  1320. langchain/vectorstores/milvus.py +0 -23
  1321. langchain/vectorstores/momento_vector_index.py +0 -23
  1322. langchain/vectorstores/mongodb_atlas.py +0 -23
  1323. langchain/vectorstores/myscale.py +0 -30
  1324. langchain/vectorstores/neo4j_vector.py +0 -28
  1325. langchain/vectorstores/nucliadb.py +0 -23
  1326. langchain/vectorstores/opensearch_vector_search.py +0 -23
  1327. langchain/vectorstores/pgembedding.py +0 -36
  1328. langchain/vectorstores/pgvecto_rs.py +0 -23
  1329. langchain/vectorstores/pgvector.py +0 -28
  1330. langchain/vectorstores/pinecone.py +0 -23
  1331. langchain/vectorstores/qdrant.py +0 -28
  1332. langchain/vectorstores/redis/__init__.py +0 -42
  1333. langchain/vectorstores/redis/base.py +0 -33
  1334. langchain/vectorstores/redis/filters.py +0 -48
  1335. langchain/vectorstores/redis/schema.py +0 -54
  1336. langchain/vectorstores/rocksetdb.py +0 -23
  1337. langchain/vectorstores/scann.py +0 -23
  1338. langchain/vectorstores/semadb.py +0 -23
  1339. langchain/vectorstores/singlestoredb.py +0 -23
  1340. langchain/vectorstores/sklearn.py +0 -42
  1341. langchain/vectorstores/sqlitevss.py +0 -23
  1342. langchain/vectorstores/starrocks.py +0 -28
  1343. langchain/vectorstores/supabase.py +0 -23
  1344. langchain/vectorstores/tair.py +0 -23
  1345. langchain/vectorstores/tencentvectordb.py +0 -33
  1346. langchain/vectorstores/tigris.py +0 -23
  1347. langchain/vectorstores/tiledb.py +0 -23
  1348. langchain/vectorstores/timescalevector.py +0 -23
  1349. langchain/vectorstores/typesense.py +0 -23
  1350. langchain/vectorstores/usearch.py +0 -23
  1351. langchain/vectorstores/utils.py +0 -33
  1352. langchain/vectorstores/vald.py +0 -23
  1353. langchain/vectorstores/vearch.py +0 -23
  1354. langchain/vectorstores/vectara.py +0 -28
  1355. langchain/vectorstores/vespa.py +0 -23
  1356. langchain/vectorstores/weaviate.py +0 -23
  1357. langchain/vectorstores/xata.py +0 -23
  1358. langchain/vectorstores/yellowbrick.py +0 -23
  1359. langchain/vectorstores/zep.py +0 -28
  1360. langchain/vectorstores/zilliz.py +0 -23
  1361. langchain-0.4.0.dev0.dist-info/METADATA +0 -134
  1362. langchain-0.4.0.dev0.dist-info/RECORD +0 -1341
  1363. langchain-0.4.0.dev0.dist-info/entry_points.txt +0 -4
  1364. {langchain-0.4.0.dev0.dist-info → langchain-1.0.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,1689 +0,0 @@
1
- """Utilities for running language models or Chains over datasets."""
2
-
3
- from __future__ import annotations
4
-
5
- import concurrent.futures
6
- import dataclasses
7
- import functools
8
- import inspect
9
- import logging
10
- import uuid
11
- from datetime import datetime, timezone
12
- from typing import (
13
- TYPE_CHECKING,
14
- Any,
15
- Callable,
16
- Optional,
17
- Union,
18
- cast,
19
- )
20
-
21
- from langchain_core._api import warn_deprecated
22
- from langchain_core.callbacks import Callbacks
23
- from langchain_core.language_models import BaseLanguageModel
24
- from langchain_core.messages import BaseMessage, messages_from_dict
25
- from langchain_core.outputs import ChatResult, LLMResult
26
- from langchain_core.runnables import Runnable, RunnableConfig, RunnableLambda
27
- from langchain_core.runnables import config as runnable_config
28
- from langchain_core.runnables import utils as runnable_utils
29
- from langchain_core.tracers.evaluation import (
30
- EvaluatorCallbackHandler,
31
- wait_for_all_evaluators,
32
- )
33
- from langchain_core.tracers.langchain import LangChainTracer
34
- from langsmith.client import Client
35
- from langsmith.env import get_git_info, get_langchain_env_var_metadata
36
- from langsmith.evaluation import (
37
- EvaluationResult,
38
- RunEvaluator,
39
- )
40
- from langsmith.evaluation import (
41
- run_evaluator as run_evaluator_dec,
42
- )
43
- from langsmith.run_helpers import as_runnable, is_traceable_function
44
- from langsmith.schemas import Dataset, DataType, Example, Run, TracerSession
45
- from langsmith.utils import LangSmithError
46
- from requests import HTTPError
47
- from typing_extensions import TypedDict
48
-
49
- from langchain.chains.base import Chain
50
- from langchain.evaluation.loading import load_evaluator
51
- from langchain.evaluation.schema import (
52
- EvaluatorType,
53
- PairwiseStringEvaluator,
54
- StringEvaluator,
55
- )
56
- from langchain.smith import evaluation as smith_eval
57
- from langchain.smith.evaluation import config as smith_eval_config
58
- from langchain.smith.evaluation import name_generation, progress
59
-
60
- if TYPE_CHECKING:
61
- import pandas as pd
62
-
63
- logger = logging.getLogger(__name__)
64
-
65
- MODEL_OR_CHAIN_FACTORY = Union[
66
- Callable[[], Union[Chain, Runnable]],
67
- BaseLanguageModel,
68
- Callable[[dict], Any],
69
- Runnable,
70
- Chain,
71
- ]
72
- MCF = Union[Callable[[], Union[Chain, Runnable]], BaseLanguageModel]
73
-
74
-
75
- class InputFormatError(Exception):
76
- """Raised when the input format is invalid."""
77
-
78
-
79
- ## Shared Utilities
80
-
81
-
82
- class TestResult(dict):
83
- """A dictionary of the results of a single test run."""
84
-
85
- def get_aggregate_feedback(
86
- self,
87
- ) -> pd.DataFrame:
88
- """Return quantiles for the feedback scores.
89
-
90
- This method calculates and prints the quantiles for the feedback scores
91
- across all feedback keys.
92
-
93
- Returns:
94
- A DataFrame containing the quantiles for each feedback key.
95
- """
96
- df = self.to_dataframe()
97
- # Drop all things starting with inputs., outputs., and reference
98
- to_drop = [
99
- col
100
- for col in df.columns
101
- if col.startswith(("inputs.", "outputs.", "reference"))
102
- or col in {"input", "output"}
103
- ]
104
- return df.describe(include="all").drop(to_drop, axis=1)
105
-
106
- def to_dataframe(self) -> pd.DataFrame:
107
- """Convert the results to a dataframe."""
108
- try:
109
- import pandas as pd
110
- except ImportError as e:
111
- msg = (
112
- "Pandas is required to convert the results to a dataframe."
113
- " to install pandas, run `pip install pandas`."
114
- )
115
- raise ImportError(msg) from e
116
-
117
- indices = []
118
- records = []
119
- for example_id, result in self["results"].items():
120
- feedback = result["feedback"]
121
- output_ = result.get("output")
122
- if isinstance(output_, dict):
123
- output = {f"outputs.{k}": v for k, v in output_.items()}
124
- elif output_ is None:
125
- output = {}
126
- else:
127
- output = {"output": output_}
128
-
129
- r = {
130
- **{f"inputs.{k}": v for k, v in result["input"].items()},
131
- **output,
132
- }
133
- if "reference" in result:
134
- if isinstance(result["reference"], dict):
135
- r.update(
136
- {f"reference.{k}": v for k, v in result["reference"].items()},
137
- )
138
- else:
139
- r["reference"] = result["reference"]
140
- r.update(
141
- {
142
- **{f"feedback.{f.key}": f.score for f in feedback},
143
- "error": result.get("Error"),
144
- "execution_time": result["execution_time"],
145
- "run_id": result.get("run_id"),
146
- },
147
- )
148
- records.append(r)
149
- indices.append(example_id)
150
-
151
- return pd.DataFrame(records, index=indices)
152
-
153
-
154
- class EvalError(dict):
155
- """Your architecture raised an error."""
156
-
157
- def __init__(self, Error: BaseException, **kwargs: Any) -> None:
158
- """Initialize the EvalError with an error and additional attributes.
159
-
160
- Args:
161
- Error: The error that occurred.
162
- **kwargs: Additional attributes to include in the error.
163
- """
164
- super().__init__(Error=Error, **kwargs)
165
-
166
- def __getattr__(self, name: str) -> Any:
167
- """Get an attribute from the EvalError.
168
-
169
- Args:
170
- name: The name of the attribute to get.
171
- Returns:
172
- The value of the attribute.
173
- Raises:
174
- AttributeError: If the attribute does not exist.
175
- """
176
- try:
177
- return self[name]
178
- except KeyError as e:
179
- msg = f"'EvalError' object has no attribute '{name}'"
180
- raise AttributeError(msg) from e
181
-
182
-
183
- def _wrap_in_chain_factory(
184
- llm_or_chain_factory: MODEL_OR_CHAIN_FACTORY,
185
- dataset_name: str = "<my_dataset>",
186
- ) -> MCF:
187
- """Forgive the user if they pass in a chain without memory instead of a chain
188
- factory. It's a common mistake. Raise a more helpful error message as well."""
189
- if isinstance(llm_or_chain_factory, Chain):
190
- chain = llm_or_chain_factory
191
- chain_class = chain.__class__.__name__
192
- if llm_or_chain_factory.memory is not None:
193
- memory_class = chain.memory.__class__.__name__
194
- msg = (
195
- "Cannot directly evaluate a chain with stateful memory."
196
- " To evaluate this chain, pass in a chain constructor"
197
- " that initializes fresh memory each time it is called."
198
- " This will safegaurd against information"
199
- " leakage between dataset examples."
200
- "\nFor example:\n\n"
201
- "def chain_constructor():\n"
202
- f" new_memory = {memory_class}(...)\n"
203
- f" return {chain_class}"
204
- "(memory=new_memory, ...)\n\n"
205
- f'run_on_dataset("{dataset_name}", chain_constructor, ...)'
206
- )
207
- raise ValueError(msg)
208
- return lambda: chain
209
- if isinstance(llm_or_chain_factory, BaseLanguageModel):
210
- return llm_or_chain_factory
211
- if isinstance(llm_or_chain_factory, Runnable):
212
- # Memory may exist here, but it's not elegant to check all those cases.
213
- lcf = llm_or_chain_factory
214
- return lambda: lcf
215
- if callable(llm_or_chain_factory):
216
- if is_traceable_function(llm_or_chain_factory):
217
- runnable_ = as_runnable(cast("Callable", llm_or_chain_factory))
218
- return lambda: runnable_
219
- try:
220
- _model = llm_or_chain_factory() # type: ignore[call-arg]
221
- except TypeError:
222
- # It's an arbitrary function, wrap it in a RunnableLambda
223
- user_func = cast("Callable", llm_or_chain_factory)
224
- sig = inspect.signature(user_func)
225
- logger.info("Wrapping function %s as RunnableLambda.", sig)
226
- wrapped = RunnableLambda(user_func)
227
- return lambda: wrapped
228
- constructor = cast("Callable", llm_or_chain_factory)
229
- if isinstance(_model, BaseLanguageModel):
230
- # It's not uncommon to do an LLM constructor instead of raw LLM,
231
- # so we'll unpack it for the user.
232
- return _model
233
- if is_traceable_function(cast("Callable", _model)):
234
- runnable_ = as_runnable(cast("Callable", _model))
235
- return lambda: runnable_
236
- if not isinstance(_model, Runnable):
237
- # This is unlikely to happen - a constructor for a model function
238
- return lambda: RunnableLambda(constructor)
239
- # Typical correct case
240
- return constructor
241
- return llm_or_chain_factory
242
-
243
-
244
- def _get_prompt(inputs: dict[str, Any]) -> str:
245
- """Get prompt from inputs.
246
-
247
- Args:
248
- inputs: The input dictionary.
249
-
250
- Returns:
251
- A string prompt.
252
- Raises:
253
- InputFormatError: If the input format is invalid.
254
- """
255
- if not inputs:
256
- msg = "Inputs should not be empty."
257
- raise InputFormatError(msg)
258
-
259
- prompts = []
260
- if "prompt" in inputs:
261
- if not isinstance(inputs["prompt"], str):
262
- msg = f"Expected string for 'prompt', got {type(inputs['prompt']).__name__}"
263
- raise InputFormatError(msg)
264
- prompts = [inputs["prompt"]]
265
- elif "prompts" in inputs:
266
- if not isinstance(inputs["prompts"], list) or not all(
267
- isinstance(i, str) for i in inputs["prompts"]
268
- ):
269
- msg = (
270
- "Expected list of strings for 'prompts',"
271
- f" got {type(inputs['prompts']).__name__}"
272
- )
273
- raise InputFormatError(msg)
274
- prompts = inputs["prompts"]
275
- elif len(inputs) == 1:
276
- prompt_ = next(iter(inputs.values()))
277
- if isinstance(prompt_, str):
278
- prompts = [prompt_]
279
- elif isinstance(prompt_, list) and all(isinstance(i, str) for i in prompt_):
280
- prompts = prompt_
281
- else:
282
- msg = f"LLM Run expects string prompt input. Got {inputs}"
283
- raise InputFormatError(msg)
284
- else:
285
- msg = f"LLM Run expects 'prompt' or 'prompts' in inputs. Got {inputs}"
286
- raise InputFormatError(msg)
287
- if len(prompts) == 1:
288
- return prompts[0]
289
- msg = f"LLM Run expects single prompt input. Got {len(prompts)} prompts."
290
- raise InputFormatError(msg)
291
-
292
-
293
- class ChatModelInput(TypedDict):
294
- """Input for a chat model.
295
-
296
- Parameters:
297
- messages: List of chat messages.
298
- """
299
-
300
- messages: list[BaseMessage]
301
-
302
-
303
- def _get_messages(inputs: dict[str, Any]) -> dict:
304
- """Get Chat Messages from inputs.
305
-
306
- Args:
307
- inputs: The input dictionary.
308
-
309
- Returns:
310
- A list of chat messages.
311
- Raises:
312
- InputFormatError: If the input format is invalid.
313
- """
314
- if not inputs:
315
- msg = "Inputs should not be empty."
316
- raise InputFormatError(msg)
317
- input_copy = inputs.copy()
318
- if "messages" in inputs:
319
- input_copy["input"] = input_copy.pop("messages")
320
- elif len(inputs) == 1:
321
- input_copy["input"] = next(iter(inputs.values()))
322
- if "input" in input_copy:
323
- raw_messages = input_copy["input"]
324
- if isinstance(raw_messages, list) and all(
325
- isinstance(i, dict) for i in raw_messages
326
- ):
327
- raw_messages = [raw_messages]
328
- if len(raw_messages) == 1:
329
- input_copy["input"] = messages_from_dict(raw_messages[0])
330
- else:
331
- msg = (
332
- "Batch messages not supported. Please provide a"
333
- " single list of messages."
334
- )
335
- raise InputFormatError(msg)
336
- return input_copy
337
- msg = (
338
- f"Chat Run expects single List[dict] or List[List[dict]] 'messages'"
339
- f" input. Got {inputs}"
340
- )
341
- raise InputFormatError(msg)
342
-
343
-
344
- ## Shared data validation utilities
345
- def _validate_example_inputs_for_language_model(
346
- first_example: Example,
347
- input_mapper: Optional[Callable[[dict], Any]],
348
- ) -> None:
349
- if input_mapper:
350
- prompt_input = input_mapper(first_example.inputs or {})
351
- if not isinstance(prompt_input, str) and not (
352
- isinstance(prompt_input, list)
353
- and all(isinstance(msg, BaseMessage) for msg in prompt_input)
354
- ):
355
- msg = (
356
- "When using an input_mapper to prepare dataset example inputs"
357
- " for an LLM or chat model, the output must a single string or"
358
- " a list of chat messages."
359
- f"\nGot: {prompt_input} of type {type(prompt_input)}."
360
- )
361
- raise InputFormatError(msg)
362
- else:
363
- try:
364
- _get_prompt(first_example.inputs or {})
365
- except InputFormatError:
366
- try:
367
- _get_messages(first_example.inputs or {})
368
- except InputFormatError as err2:
369
- msg = (
370
- "Example inputs do not match language model input format. "
371
- "Expected a dictionary with messages or a single prompt."
372
- f" Got: {first_example.inputs}"
373
- " Please update your dataset OR provide an input_mapper"
374
- " to convert the example.inputs to a compatible format"
375
- " for the llm or chat model you wish to evaluate."
376
- )
377
- raise InputFormatError(msg) from err2
378
-
379
-
380
- def _validate_example_inputs_for_chain(
381
- first_example: Example,
382
- chain: Chain,
383
- input_mapper: Optional[Callable[[dict], Any]],
384
- ) -> None:
385
- """Validate that the example inputs match the chain input keys."""
386
- if input_mapper:
387
- first_inputs = input_mapper(first_example.inputs or {})
388
- missing_keys = set(chain.input_keys).difference(first_inputs)
389
- if not isinstance(first_inputs, dict):
390
- msg = (
391
- "When using an input_mapper to prepare dataset example"
392
- " inputs for a chain, the mapped value must be a dictionary."
393
- f"\nGot: {first_inputs} of type {type(first_inputs)}."
394
- )
395
- raise InputFormatError(msg)
396
- if missing_keys:
397
- msg = (
398
- "Missing keys after loading example using input_mapper."
399
- f"\nExpected: {chain.input_keys}. Got: {first_inputs.keys()}"
400
- )
401
- raise InputFormatError(msg)
402
- else:
403
- first_inputs = first_example.inputs
404
- missing_keys = set(chain.input_keys).difference(first_inputs)
405
- if len(first_inputs) == 1 and len(chain.input_keys) == 1:
406
- # We can pass this through the run method.
407
- # Refrain from calling to validate.
408
- pass
409
- elif missing_keys:
410
- msg = (
411
- "Example inputs missing expected chain input keys."
412
- " Please provide an input_mapper to convert the example.inputs"
413
- " to a compatible format for the chain you wish to evaluate."
414
- f"Expected: {chain.input_keys}. "
415
- f"Got: {first_inputs.keys()}"
416
- )
417
- raise InputFormatError(msg)
418
-
419
-
420
- def _validate_example_inputs(
421
- example: Example,
422
- llm_or_chain_factory: MCF,
423
- input_mapper: Optional[Callable[[dict], Any]],
424
- ) -> None:
425
- """Validate that the example inputs are valid for the model."""
426
- if isinstance(llm_or_chain_factory, BaseLanguageModel):
427
- _validate_example_inputs_for_language_model(example, input_mapper)
428
- else:
429
- chain = llm_or_chain_factory()
430
- if isinstance(chain, Chain):
431
- # Otherwise it's a runnable
432
- _validate_example_inputs_for_chain(example, chain, input_mapper)
433
- elif isinstance(chain, Runnable):
434
- logger.debug("Skipping input validation for %s", chain)
435
-
436
-
437
- ## Shared Evaluator Setup Utilities
438
-
439
-
440
- def _setup_evaluation(
441
- llm_or_chain_factory: MCF,
442
- examples: list[Example],
443
- evaluation: Optional[smith_eval.RunEvalConfig],
444
- data_type: DataType,
445
- ) -> Optional[list[RunEvaluator]]:
446
- """Configure the evaluators to run on the results of the chain."""
447
- if evaluation:
448
- if isinstance(llm_or_chain_factory, BaseLanguageModel):
449
- run_inputs, run_outputs = None, None
450
- run_type = "llm"
451
- else:
452
- run_type = "chain"
453
- chain = llm_or_chain_factory()
454
- run_inputs = chain.input_keys if isinstance(chain, Chain) else None
455
- run_outputs = chain.output_keys if isinstance(chain, Chain) else None
456
- run_evaluators = _load_run_evaluators(
457
- evaluation,
458
- run_type,
459
- data_type,
460
- list(examples[0].outputs) if examples[0].outputs else None,
461
- run_inputs,
462
- run_outputs,
463
- )
464
- else:
465
- # TODO: Create a default helpfulness evaluator
466
- run_evaluators = None
467
- return run_evaluators
468
-
469
-
470
- def _determine_input_key(
471
- config: smith_eval.RunEvalConfig,
472
- run_inputs: Optional[list[str]],
473
- ) -> Optional[str]:
474
- input_key = None
475
- if config.input_key:
476
- input_key = config.input_key
477
- if run_inputs and input_key not in run_inputs:
478
- logger.warning(
479
- "Input key %s not in chain's specified input keys %s. "
480
- "Evaluation behavior may be undefined.",
481
- input_key,
482
- run_inputs,
483
- )
484
- elif run_inputs and len(run_inputs) == 1:
485
- input_key = run_inputs[0]
486
- elif run_inputs is not None and len(run_inputs) > 1:
487
- logger.warning(
488
- "Chain expects multiple input keys: %s,"
489
- " Evaluator is likely to fail. Evaluation behavior may be undefined."
490
- " Specify an input_key in the RunEvalConfig to avoid this warning.",
491
- run_inputs,
492
- )
493
-
494
- return input_key
495
-
496
-
497
- def _determine_prediction_key(
498
- config: smith_eval.RunEvalConfig,
499
- run_outputs: Optional[list[str]],
500
- ) -> Optional[str]:
501
- prediction_key = None
502
- if config.prediction_key:
503
- prediction_key = config.prediction_key
504
- if run_outputs and prediction_key not in run_outputs:
505
- logger.warning(
506
- "Prediction key %s not in chain's specified output keys %s. "
507
- "Evaluation behavior may be undefined.",
508
- prediction_key,
509
- run_outputs,
510
- )
511
- elif run_outputs and len(run_outputs) == 1:
512
- prediction_key = run_outputs[0]
513
- elif run_outputs is not None and len(run_outputs) > 1:
514
- logger.warning(
515
- "Chain expects multiple output keys: %s,"
516
- " Evaluation behavior may be undefined. Specify a prediction_key"
517
- " in the RunEvalConfig to avoid this warning.",
518
- run_outputs,
519
- )
520
- return prediction_key
521
-
522
-
523
- def _determine_reference_key(
524
- config: smith_eval.RunEvalConfig,
525
- example_outputs: Optional[list[str]],
526
- ) -> Optional[str]:
527
- if config.reference_key:
528
- reference_key = config.reference_key
529
- if example_outputs and reference_key not in example_outputs:
530
- msg = (
531
- f"Reference key {reference_key} not in Dataset"
532
- f" example outputs: {example_outputs}"
533
- )
534
- raise ValueError(msg)
535
- elif example_outputs and len(example_outputs) == 1:
536
- reference_key = next(iter(example_outputs))
537
- else:
538
- reference_key = None
539
- return reference_key
540
-
541
-
542
- def _construct_run_evaluator(
543
- eval_config: Union[
544
- smith_eval_config.SINGLE_EVAL_CONFIG_TYPE,
545
- smith_eval_config.CUSTOM_EVALUATOR_TYPE,
546
- ],
547
- eval_llm: Optional[BaseLanguageModel],
548
- run_type: str,
549
- data_type: DataType,
550
- example_outputs: Optional[list[str]],
551
- reference_key: Optional[str],
552
- input_key: Optional[str],
553
- prediction_key: Optional[str],
554
- ) -> RunEvaluator:
555
- if isinstance(eval_config, RunEvaluator):
556
- return eval_config
557
- if isinstance(eval_config, (EvaluatorType, str)):
558
- if not isinstance(eval_config, EvaluatorType):
559
- eval_config = EvaluatorType(eval_config)
560
- evaluator_ = load_evaluator(eval_config, llm=eval_llm)
561
- eval_type_tag = eval_config.value
562
- elif isinstance(eval_config, smith_eval_config.EvalConfig):
563
- kwargs = {"llm": eval_llm, **eval_config.get_kwargs()}
564
- evaluator_ = load_evaluator(eval_config.evaluator_type, **kwargs)
565
- eval_type_tag = eval_config.evaluator_type.value
566
- # Override keys if specified in the config
567
- if isinstance(eval_config, smith_eval_config.SingleKeyEvalConfig):
568
- input_key = eval_config.input_key or input_key
569
- prediction_key = eval_config.prediction_key or prediction_key
570
- reference_key = eval_config.reference_key or reference_key
571
- elif callable(eval_config):
572
- # Assume we can decorate
573
- return run_evaluator_dec(eval_config)
574
- else:
575
- msg = f"Unknown evaluator type: {type(eval_config)}"
576
- raise ValueError(msg) # noqa: TRY004
577
-
578
- if isinstance(evaluator_, StringEvaluator):
579
- if evaluator_.requires_reference and reference_key is None:
580
- msg = (
581
- f"Must specify reference_key in smith_eval.RunEvalConfig to use"
582
- f" evaluator of type {eval_type_tag} with"
583
- f" dataset with multiple output keys: {example_outputs}."
584
- )
585
- raise ValueError(msg)
586
- run_evaluator = smith_eval.StringRunEvaluatorChain.from_run_and_data_type(
587
- evaluator_,
588
- run_type,
589
- data_type,
590
- input_key=input_key,
591
- prediction_key=prediction_key,
592
- reference_key=reference_key,
593
- tags=[eval_type_tag],
594
- )
595
- elif isinstance(evaluator_, PairwiseStringEvaluator):
596
- msg = (
597
- f"Run evaluator for {eval_type_tag} is not implemented."
598
- " PairwiseStringEvaluators compare the outputs of two different models"
599
- " rather than the output of a single model."
600
- " Did you mean to use a StringEvaluator instead?"
601
- "\nSee: https://python.langchain.com/docs/guides/evaluation/string/"
602
- )
603
- raise NotImplementedError(msg)
604
-
605
- else:
606
- msg = f"Run evaluator for {eval_type_tag} is not implemented"
607
- raise NotImplementedError(msg)
608
- return run_evaluator
609
-
610
-
611
- def _get_keys(
612
- config: smith_eval.RunEvalConfig,
613
- run_inputs: Optional[list[str]],
614
- run_outputs: Optional[list[str]],
615
- example_outputs: Optional[list[str]],
616
- ) -> tuple[Optional[str], Optional[str], Optional[str]]:
617
- input_key = _determine_input_key(config, run_inputs)
618
- prediction_key = _determine_prediction_key(config, run_outputs)
619
- reference_key = _determine_reference_key(config, example_outputs)
620
- return input_key, prediction_key, reference_key
621
-
622
-
623
- def _load_run_evaluators(
624
- config: smith_eval.RunEvalConfig,
625
- run_type: str,
626
- data_type: DataType,
627
- example_outputs: Optional[list[str]],
628
- run_inputs: Optional[list[str]],
629
- run_outputs: Optional[list[str]],
630
- ) -> list[RunEvaluator]:
631
- """
632
- Load run evaluators from a configuration.
633
-
634
- Args:
635
- config: Configuration for the run evaluators.
636
-
637
- Returns:
638
- A list of run evaluators.
639
- """
640
- run_evaluators = []
641
- input_key, prediction_key, reference_key = None, None, None
642
- if config.evaluators or (
643
- config.custom_evaluators
644
- and any(isinstance(e, StringEvaluator) for e in config.custom_evaluators)
645
- ):
646
- input_key, prediction_key, reference_key = _get_keys(
647
- config,
648
- run_inputs,
649
- run_outputs,
650
- example_outputs,
651
- )
652
- for eval_config in config.evaluators:
653
- run_evaluator = _construct_run_evaluator(
654
- eval_config,
655
- config.eval_llm,
656
- run_type,
657
- data_type,
658
- example_outputs,
659
- reference_key,
660
- input_key,
661
- prediction_key,
662
- )
663
- run_evaluators.append(run_evaluator)
664
- custom_evaluators = config.custom_evaluators or []
665
- for custom_evaluator in custom_evaluators:
666
- if isinstance(custom_evaluator, RunEvaluator):
667
- run_evaluators.append(custom_evaluator)
668
- elif isinstance(custom_evaluator, StringEvaluator):
669
- run_evaluators.append(
670
- smith_eval.StringRunEvaluatorChain.from_run_and_data_type(
671
- custom_evaluator,
672
- run_type,
673
- data_type,
674
- input_key=input_key,
675
- prediction_key=prediction_key,
676
- reference_key=reference_key,
677
- ),
678
- )
679
- elif callable(custom_evaluator):
680
- run_evaluators.append(run_evaluator_dec(custom_evaluator))
681
- else:
682
- msg = (
683
- f"Unsupported custom evaluator: {custom_evaluator}."
684
- f" Expected RunEvaluator or StringEvaluator."
685
- )
686
- raise ValueError(msg) # noqa: TRY004
687
-
688
- return run_evaluators
689
-
690
-
691
- ### Async Helpers
692
-
693
-
694
- async def _arun_llm(
695
- llm: BaseLanguageModel,
696
- inputs: dict[str, Any],
697
- *,
698
- tags: Optional[list[str]] = None,
699
- callbacks: Callbacks = None,
700
- input_mapper: Optional[Callable[[dict], Any]] = None,
701
- metadata: Optional[dict[str, Any]] = None,
702
- ) -> Union[str, BaseMessage]:
703
- """Asynchronously run the language model.
704
-
705
- Args:
706
- llm: The language model to run.
707
- inputs: The input dictionary.
708
- tags: Optional tags to add to the run.
709
- callbacks: Optional callbacks to use during the run.
710
- input_mapper: Optional function to map inputs to the expected format.
711
-
712
- Returns:
713
- The LLMResult or ChatResult.
714
- Raises:
715
- ValueError: If the LLM type is unsupported.
716
- InputFormatError: If the input format is invalid.
717
- """
718
- if input_mapper is not None:
719
- prompt_or_messages = input_mapper(inputs)
720
- if isinstance(prompt_or_messages, str) or (
721
- isinstance(prompt_or_messages, list)
722
- and all(isinstance(msg, BaseMessage) for msg in prompt_or_messages)
723
- ):
724
- return await llm.ainvoke(
725
- prompt_or_messages,
726
- config=RunnableConfig(
727
- callbacks=callbacks,
728
- tags=tags or [],
729
- metadata=metadata or {},
730
- ),
731
- )
732
- msg = (
733
- "Input mapper returned invalid format"
734
- f" {prompt_or_messages}"
735
- "\nExpected a single string or list of chat messages."
736
- )
737
- raise InputFormatError(msg)
738
-
739
- try:
740
- prompt = _get_prompt(inputs)
741
- llm_output: Union[str, BaseMessage] = await llm.ainvoke(
742
- prompt,
743
- config=RunnableConfig(
744
- callbacks=callbacks,
745
- tags=tags or [],
746
- metadata=metadata or {},
747
- ),
748
- )
749
- except InputFormatError:
750
- llm_inputs = _get_messages(inputs)
751
- llm_output = await llm.ainvoke(
752
- **llm_inputs,
753
- config=RunnableConfig(
754
- callbacks=callbacks,
755
- tags=tags or [],
756
- metadata=metadata or {},
757
- ),
758
- )
759
- return llm_output
760
-
761
-
762
- async def _arun_chain(
763
- chain: Union[Chain, Runnable],
764
- inputs: dict[str, Any],
765
- callbacks: Callbacks,
766
- *,
767
- tags: Optional[list[str]] = None,
768
- input_mapper: Optional[Callable[[dict], Any]] = None,
769
- metadata: Optional[dict[str, Any]] = None,
770
- ) -> Union[dict, str]:
771
- """Run a chain asynchronously on inputs."""
772
- inputs_ = inputs if input_mapper is None else input_mapper(inputs)
773
- if (
774
- isinstance(chain, Chain)
775
- and isinstance(inputs_, dict)
776
- and len(inputs_) == 1
777
- and chain.input_keys
778
- ):
779
- val = next(iter(inputs_.values()))
780
- output = await chain.ainvoke(
781
- val,
782
- config=RunnableConfig(
783
- callbacks=callbacks,
784
- tags=tags or [],
785
- metadata=metadata or {},
786
- ),
787
- )
788
- else:
789
- runnable_config = RunnableConfig(
790
- tags=tags or [],
791
- callbacks=callbacks,
792
- metadata=metadata or {},
793
- )
794
- output = await chain.ainvoke(inputs_, config=runnable_config)
795
- return output
796
-
797
-
798
- async def _arun_llm_or_chain(
799
- example: Example,
800
- config: RunnableConfig,
801
- *,
802
- llm_or_chain_factory: MCF,
803
- input_mapper: Optional[Callable[[dict], Any]] = None,
804
- ) -> Union[dict, str, LLMResult, ChatResult]:
805
- """Asynchronously run the Chain or language model.
806
-
807
- Args:
808
- example: The example to run.
809
- llm_or_chain_factory: The Chain or language model constructor to run.
810
- tags: Optional tags to add to the run.
811
- callbacks: Optional callbacks to use during the run.
812
- input_mapper: Optional function to map the input to the expected format.
813
-
814
- Returns:
815
- A list of outputs.
816
- """
817
- chain_or_llm = (
818
- "LLM" if isinstance(llm_or_chain_factory, BaseLanguageModel) else "Chain"
819
- )
820
- result = None
821
- try:
822
- if isinstance(llm_or_chain_factory, BaseLanguageModel):
823
- output: Any = await _arun_llm(
824
- llm_or_chain_factory,
825
- example.inputs or {},
826
- tags=config["tags"],
827
- callbacks=config["callbacks"],
828
- input_mapper=input_mapper,
829
- metadata=config.get("metadata"),
830
- )
831
- else:
832
- chain = llm_or_chain_factory()
833
- output = await _arun_chain(
834
- chain,
835
- example.inputs or {},
836
- tags=config["tags"],
837
- callbacks=config["callbacks"],
838
- input_mapper=input_mapper,
839
- metadata=config.get("metadata"),
840
- )
841
- result = output
842
- except Exception as e:
843
- logger.warning(
844
- "%s failed for example %s with inputs %s\n%s",
845
- chain_or_llm,
846
- example.id,
847
- example.inputs,
848
- e,
849
- )
850
- result = EvalError(Error=e)
851
- return result
852
-
853
-
854
- ## Sync Utilities
855
-
856
-
857
- def _run_llm(
858
- llm: BaseLanguageModel,
859
- inputs: dict[str, Any],
860
- callbacks: Callbacks,
861
- *,
862
- tags: Optional[list[str]] = None,
863
- input_mapper: Optional[Callable[[dict], Any]] = None,
864
- metadata: Optional[dict[str, Any]] = None,
865
- ) -> Union[str, BaseMessage]:
866
- """
867
- Run the language model on the example.
868
-
869
- Args:
870
- llm: The language model to run.
871
- inputs: The input dictionary.
872
- callbacks: The callbacks to use during the run.
873
- tags: Optional tags to add to the run.
874
- input_mapper: function to map to the inputs dictionary from an Example
875
- Returns:
876
- The LLMResult or ChatResult.
877
- Raises:
878
- ValueError: If the LLM type is unsupported.
879
- InputFormatError: If the input format is invalid.
880
- """
881
- # Most of this is legacy code; we could probably remove a lot of it.
882
- if input_mapper is not None:
883
- prompt_or_messages = input_mapper(inputs)
884
- if isinstance(prompt_or_messages, str) or (
885
- isinstance(prompt_or_messages, list)
886
- and all(isinstance(msg, BaseMessage) for msg in prompt_or_messages)
887
- ):
888
- llm_output: Union[str, BaseMessage] = llm.invoke(
889
- prompt_or_messages,
890
- config=RunnableConfig(
891
- callbacks=callbacks,
892
- tags=tags or [],
893
- metadata=metadata or {},
894
- ),
895
- )
896
- else:
897
- msg = (
898
- "Input mapper returned invalid format: "
899
- f" {prompt_or_messages}"
900
- "\nExpected a single string or list of chat messages."
901
- )
902
- raise InputFormatError(msg)
903
- else:
904
- try:
905
- llm_prompts = _get_prompt(inputs)
906
- llm_output = llm.invoke(
907
- llm_prompts,
908
- config=RunnableConfig(
909
- callbacks=callbacks,
910
- tags=tags or [],
911
- metadata=metadata or {},
912
- ),
913
- )
914
- except InputFormatError:
915
- llm_inputs = _get_messages(inputs)
916
- llm_output = llm.invoke(
917
- **llm_inputs,
918
- config=RunnableConfig(callbacks=callbacks, metadata=metadata or {}),
919
- )
920
- return llm_output
921
-
922
-
923
- def _run_chain(
924
- chain: Union[Chain, Runnable],
925
- inputs: dict[str, Any],
926
- callbacks: Callbacks,
927
- *,
928
- tags: Optional[list[str]] = None,
929
- input_mapper: Optional[Callable[[dict], Any]] = None,
930
- metadata: Optional[dict[str, Any]] = None,
931
- ) -> Union[dict, str]:
932
- """Run a chain on inputs."""
933
- inputs_ = inputs if input_mapper is None else input_mapper(inputs)
934
- if (
935
- isinstance(chain, Chain)
936
- and isinstance(inputs_, dict)
937
- and len(inputs_) == 1
938
- and chain.input_keys
939
- ):
940
- val = next(iter(inputs_.values()))
941
- output = chain.invoke(
942
- val,
943
- config=RunnableConfig(
944
- callbacks=callbacks,
945
- tags=tags or [],
946
- metadata=metadata or {},
947
- ),
948
- )
949
- else:
950
- runnable_config = RunnableConfig(
951
- tags=tags or [],
952
- callbacks=callbacks,
953
- metadata=metadata or {},
954
- )
955
- output = chain.invoke(inputs_, config=runnable_config)
956
- return output
957
-
958
-
959
- def _run_llm_or_chain(
960
- example: Example,
961
- config: RunnableConfig,
962
- *,
963
- llm_or_chain_factory: MCF,
964
- input_mapper: Optional[Callable[[dict], Any]] = None,
965
- ) -> Union[dict, str, LLMResult, ChatResult]:
966
- """
967
- Run the Chain or language model synchronously.
968
-
969
- Args:
970
- example: The example to run.
971
- llm_or_chain_factory: The Chain or language model constructor to run.
972
- tags: Optional tags to add to the run.
973
- callbacks: Optional callbacks to use during the run.
974
-
975
- Returns:
976
- Union[List[dict], List[str], List[LLMResult], List[ChatResult]]:
977
- The outputs of the model or chain.
978
- """
979
- chain_or_llm = (
980
- "LLM" if isinstance(llm_or_chain_factory, BaseLanguageModel) else "Chain"
981
- )
982
- result = None
983
- try:
984
- if isinstance(llm_or_chain_factory, BaseLanguageModel):
985
- output: Any = _run_llm(
986
- llm_or_chain_factory,
987
- example.inputs or {},
988
- config["callbacks"],
989
- tags=config["tags"],
990
- input_mapper=input_mapper,
991
- metadata=config.get("metadata"),
992
- )
993
- else:
994
- chain = llm_or_chain_factory()
995
- output = _run_chain(
996
- chain,
997
- example.inputs or {},
998
- config["callbacks"],
999
- tags=config["tags"],
1000
- input_mapper=input_mapper,
1001
- metadata=config.get("metadata"),
1002
- )
1003
- result = output
1004
- except Exception as e:
1005
- error_type = type(e).__name__
1006
- logger.warning(
1007
- "%s failed for example %s with inputs %s\nError Type: %s, Message: %s",
1008
- chain_or_llm,
1009
- example.id,
1010
- example.inputs,
1011
- error_type,
1012
- e,
1013
- )
1014
- result = EvalError(Error=e)
1015
- return result
1016
-
1017
-
1018
- def _prepare_eval_run(
1019
- client: Client,
1020
- dataset_name: str,
1021
- llm_or_chain_factory: MODEL_OR_CHAIN_FACTORY,
1022
- project_name: str,
1023
- project_metadata: Optional[dict[str, Any]] = None,
1024
- tags: Optional[list[str]] = None,
1025
- dataset_version: Optional[Union[str, datetime]] = None,
1026
- ) -> tuple[MCF, TracerSession, Dataset, list[Example]]:
1027
- wrapped_model = _wrap_in_chain_factory(llm_or_chain_factory, dataset_name)
1028
- dataset = client.read_dataset(dataset_name=dataset_name)
1029
-
1030
- examples = list(client.list_examples(dataset_id=dataset.id, as_of=dataset_version))
1031
- if not examples:
1032
- msg = f"Dataset {dataset_name} has no example rows."
1033
- raise ValueError(msg)
1034
- modified_at = [ex.modified_at for ex in examples if ex.modified_at]
1035
- # Should always be defined in practice when fetched,
1036
- # but the typing permits None
1037
- max_modified_at = max(modified_at) if modified_at else None
1038
- inferred_version = max_modified_at.isoformat() if max_modified_at else None
1039
-
1040
- try:
1041
- project_metadata = project_metadata or {}
1042
- git_info = get_git_info()
1043
- if git_info:
1044
- project_metadata = {
1045
- **project_metadata,
1046
- "git": git_info,
1047
- }
1048
-
1049
- project_metadata["dataset_version"] = inferred_version
1050
- project = client.create_project(
1051
- project_name,
1052
- reference_dataset_id=dataset.id,
1053
- project_extra={"tags": tags} if tags else {},
1054
- metadata=project_metadata,
1055
- )
1056
- except (HTTPError, ValueError, LangSmithError) as e:
1057
- if "already exists " not in str(e):
1058
- raise
1059
- uid = uuid.uuid4()
1060
- example_msg = f"""
1061
- run_on_dataset(
1062
- ...
1063
- project_name="{project_name} - {uid}", # Update since {project_name} already exists
1064
- )
1065
- """
1066
- msg = (
1067
- f"Test project {project_name} already exists. Please use a different name:"
1068
- f"\n\n{example_msg}"
1069
- )
1070
- raise ValueError(msg) from e
1071
- comparison_url = dataset.url + f"/compare?selectedSessions={project.id}"
1072
- print( # noqa: T201
1073
- f"View the evaluation results for project '{project_name}'"
1074
- f" at:\n{comparison_url}\n\n"
1075
- f"View all tests for Dataset {dataset_name} at:\n{dataset.url}",
1076
- flush=True,
1077
- )
1078
- return wrapped_model, project, dataset, examples
1079
-
1080
-
1081
- class _RowResult(TypedDict, total=False):
1082
- """A dictionary of the results for a single example row."""
1083
-
1084
- feedback: Optional[list[EvaluationResult]]
1085
- execution_time: Optional[float]
1086
- run_id: Optional[str]
1087
-
1088
-
1089
- @dataclasses.dataclass
1090
- class _DatasetRunContainer:
1091
- """A container to help manage the state of a eval run."""
1092
-
1093
- client: Client
1094
- project: TracerSession
1095
- wrapped_model: MCF
1096
- examples: list[Example]
1097
- configs: list[RunnableConfig]
1098
- batch_evaluators: Optional[list[smith_eval_config.BATCH_EVALUATOR_LIKE]] = None
1099
-
1100
- def _merge_test_outputs(
1101
- self,
1102
- batch_results: list,
1103
- all_eval_results: dict[str, _RowResult],
1104
- ) -> dict:
1105
- results: dict = {}
1106
- for example, output in zip(self.examples, batch_results):
1107
- row_result = cast("_RowResult", all_eval_results.get(str(example.id), {}))
1108
- results[str(example.id)] = {
1109
- "input": example.inputs,
1110
- "feedback": row_result.get("feedback", []),
1111
- "execution_time": row_result.get("execution_time"),
1112
- "run_id": row_result.get("run_id"),
1113
- }
1114
- if isinstance(output, EvalError):
1115
- results[str(example.id)]["Error"] = output.Error
1116
- else:
1117
- results[str(example.id)]["output"] = output
1118
- if example.outputs:
1119
- results[str(example.id)]["reference"] = example.outputs
1120
- return results
1121
-
1122
- def _run_batch_evaluators(self, runs: dict[str, Run]) -> list[dict]:
1123
- evaluators = self.batch_evaluators
1124
- if not evaluators:
1125
- return []
1126
- runs_list = [runs[str(example.id)] for example in self.examples]
1127
- aggregate_feedback = []
1128
- with concurrent.futures.ThreadPoolExecutor() as executor:
1129
- for evaluator in evaluators:
1130
- try:
1131
- result = evaluator(runs_list, self.examples)
1132
- if isinstance(result, EvaluationResult):
1133
- result = result.dict()
1134
- aggregate_feedback.append(cast("dict", result))
1135
- executor.submit(
1136
- self.client.create_feedback,
1137
- **result,
1138
- run_id=None,
1139
- project_id=self.project.id,
1140
- )
1141
- except Exception:
1142
- logger.exception(
1143
- "Error running batch evaluator %s", repr(evaluator)
1144
- )
1145
- return aggregate_feedback
1146
-
1147
- def _collect_metrics(self) -> tuple[dict[str, _RowResult], dict[str, Run]]:
1148
- all_eval_results: dict = {}
1149
- all_runs: dict = {}
1150
- for c in self.configs:
1151
- for callback in cast("list", c["callbacks"]):
1152
- if isinstance(callback, EvaluatorCallbackHandler):
1153
- eval_results = callback.logged_eval_results
1154
- for (_, example_id), v in eval_results.items():
1155
- all_eval_results.setdefault(str(example_id), {}).update(
1156
- {"feedback": v},
1157
- )
1158
- elif isinstance(callback, LangChainTracer):
1159
- run = callback.latest_run
1160
- execution_time = (
1161
- (run.end_time - run.start_time).total_seconds()
1162
- if run and run.end_time
1163
- else None
1164
- )
1165
- run_id = str(run.id) if run else None
1166
- all_eval_results.setdefault(str(callback.example_id), {}).update(
1167
- {
1168
- "execution_time": execution_time,
1169
- "run_id": run_id,
1170
- "run": run,
1171
- },
1172
- )
1173
- all_runs[str(callback.example_id)] = run
1174
- return cast("dict[str, _RowResult]", all_eval_results), all_runs
1175
-
1176
- def _collect_test_results(
1177
- self,
1178
- batch_results: list[Union[dict, str, LLMResult, ChatResult]],
1179
- ) -> TestResult:
1180
- logger.info("Waiting for evaluators to complete.")
1181
- wait_for_all_evaluators()
1182
- all_eval_results, all_runs = self._collect_metrics()
1183
- aggregate_feedback = None
1184
- if self.batch_evaluators:
1185
- logger.info("Running session evaluators.")
1186
- aggregate_feedback = self._run_batch_evaluators(all_runs)
1187
- results = self._merge_test_outputs(batch_results, all_eval_results)
1188
- return TestResult(
1189
- project_name=self.project.name,
1190
- results=results,
1191
- aggregate_metrics=aggregate_feedback,
1192
- )
1193
-
1194
- def finish(
1195
- self,
1196
- batch_results: list,
1197
- verbose: bool = False, # noqa: FBT001,FBT002
1198
- ) -> TestResult:
1199
- results = self._collect_test_results(batch_results)
1200
- if verbose:
1201
- try:
1202
- agg_feedback = results.get_aggregate_feedback()
1203
- _display_aggregate_results(agg_feedback)
1204
- except Exception as e:
1205
- logger.debug("Failed to print aggregate feedback: %s", e, exc_info=True)
1206
- try:
1207
- # Closing the project permits name changing and metric optimizations
1208
- self.client.update_project(
1209
- self.project.id,
1210
- end_time=datetime.now(timezone.utc),
1211
- )
1212
- except Exception as e:
1213
- logger.debug("Failed to close project: %s", e, exc_info=True)
1214
- return results
1215
-
1216
- @classmethod
1217
- def prepare(
1218
- cls,
1219
- client: Client,
1220
- dataset_name: str,
1221
- llm_or_chain_factory: MODEL_OR_CHAIN_FACTORY,
1222
- project_name: Optional[str],
1223
- evaluation: Optional[smith_eval.RunEvalConfig] = None,
1224
- tags: Optional[list[str]] = None,
1225
- input_mapper: Optional[Callable[[dict], Any]] = None,
1226
- concurrency_level: int = 5,
1227
- project_metadata: Optional[dict[str, Any]] = None,
1228
- revision_id: Optional[str] = None,
1229
- dataset_version: Optional[Union[datetime, str]] = None,
1230
- ) -> _DatasetRunContainer:
1231
- project_name = project_name or name_generation.random_name()
1232
- if revision_id:
1233
- if not project_metadata:
1234
- project_metadata = {}
1235
- project_metadata.update({"revision_id": revision_id})
1236
- wrapped_model, project, dataset, examples = _prepare_eval_run(
1237
- client,
1238
- dataset_name,
1239
- llm_or_chain_factory,
1240
- project_name,
1241
- project_metadata=project_metadata,
1242
- tags=tags,
1243
- dataset_version=dataset_version,
1244
- )
1245
- tags = tags or []
1246
- for k, v in (project.metadata.get("git") or {}).items():
1247
- tags.append(f"git:{k}={v}")
1248
- run_metadata = {"dataset_version": project.metadata["dataset_version"]}
1249
- if revision_id:
1250
- run_metadata["revision_id"] = revision_id
1251
- wrapped_model = _wrap_in_chain_factory(llm_or_chain_factory)
1252
- run_evaluators = _setup_evaluation(
1253
- wrapped_model,
1254
- examples,
1255
- evaluation,
1256
- dataset.data_type or DataType.kv,
1257
- )
1258
- _validate_example_inputs(examples[0], wrapped_model, input_mapper)
1259
- progress_bar = progress.ProgressBarCallback(len(examples))
1260
- configs = [
1261
- RunnableConfig(
1262
- callbacks=[
1263
- LangChainTracer(
1264
- project_name=project.name,
1265
- client=client,
1266
- example_id=example.id,
1267
- ),
1268
- EvaluatorCallbackHandler(
1269
- evaluators=run_evaluators or [],
1270
- client=client,
1271
- example_id=example.id,
1272
- max_concurrency=0,
1273
- ),
1274
- progress_bar,
1275
- ],
1276
- tags=tags,
1277
- max_concurrency=concurrency_level,
1278
- metadata=run_metadata,
1279
- )
1280
- for example in examples
1281
- ]
1282
- return cls(
1283
- client=client,
1284
- project=project,
1285
- wrapped_model=wrapped_model,
1286
- examples=examples,
1287
- configs=configs,
1288
- batch_evaluators=evaluation.batch_evaluators if evaluation else None,
1289
- )
1290
-
1291
-
1292
- def _is_jupyter_environment() -> bool:
1293
- try:
1294
- from IPython.core.getipython import get_ipython
1295
-
1296
- res = get_ipython()
1297
- return get_ipython() is not None and "zmqshell" in str(type(res))
1298
- except ImportError:
1299
- return False
1300
-
1301
-
1302
- def _display_aggregate_results(aggregate_results: pd.DataFrame) -> None:
1303
- if _is_jupyter_environment():
1304
- from IPython.display import HTML, display
1305
-
1306
- display(HTML("<h3>Experiment Results:</h3>"))
1307
- display(aggregate_results)
1308
- else:
1309
- formatted_string = aggregate_results.to_string(
1310
- float_format=lambda x: f"{x:.2f}",
1311
- justify="right",
1312
- )
1313
- print("\n Experiment Results:") # noqa: T201
1314
- print(formatted_string) # noqa: T201
1315
-
1316
-
1317
- _INPUT_MAPPER_DEP_WARNING = (
1318
- "The input_mapper argument is deprecated and "
1319
- "will be removed in a future release. Please add a "
1320
- " RunnableLambda to your chain to map inputs to the expected format"
1321
- " instead. Example:\n"
1322
- "def construct_chain():\n"
1323
- " my_chain = ...\n"
1324
- " input_mapper = {'other_key': 'MyOtherInput', 'my_input_key': x}\n"
1325
- " return input_mapper | my_chain\n"
1326
- "run_on_dataset(..., llm_or_chain_factory=construct_chain)\n"
1327
- "(See https://api.python.langchain.com/en/latest/schema/"
1328
- "langchain.schema.runnable.base.RunnableLambda.html)"
1329
- )
1330
-
1331
- ## Public API
1332
-
1333
-
1334
- async def arun_on_dataset(
1335
- client: Optional[Client],
1336
- dataset_name: str,
1337
- llm_or_chain_factory: MODEL_OR_CHAIN_FACTORY,
1338
- *,
1339
- evaluation: Optional[smith_eval.RunEvalConfig] = None,
1340
- dataset_version: Optional[Union[datetime, str]] = None,
1341
- concurrency_level: int = 5,
1342
- project_name: Optional[str] = None,
1343
- project_metadata: Optional[dict[str, Any]] = None,
1344
- verbose: bool = False,
1345
- revision_id: Optional[str] = None,
1346
- **kwargs: Any,
1347
- ) -> dict[str, Any]:
1348
- """Run on dataset.
1349
-
1350
- Run the Chain or language model on a dataset and store traces
1351
- to the specified project name.
1352
-
1353
- For the (usually faster) async version of this function,
1354
- see :func:`arun_on_dataset`.
1355
-
1356
- Args:
1357
- dataset_name: Name of the dataset to run the chain on.
1358
- llm_or_chain_factory: Language model or Chain constructor to run
1359
- over the dataset. The Chain constructor is used to permit
1360
- independent calls on each example without carrying over state.
1361
- evaluation: Configuration for evaluators to run on the
1362
- results of the chain
1363
- concurrency_level: The number of async tasks to run concurrently.
1364
- project_name: Name of the project to store the traces in.
1365
- Defaults to {dataset_name}-{chain class name}-{datetime}.
1366
- project_metadata: Optional metadata to add to the project.
1367
- Useful for storing information the test variant.
1368
- (prompt version, model version, etc.)
1369
- client: LangSmith client to use to access the dataset and to
1370
- log feedback and run traces.
1371
- verbose: Whether to print progress.
1372
- tags: Tags to add to each run in the project.
1373
- revision_id: Optional revision identifier to assign this test run to
1374
- track the performance of different versions of your system.
1375
- Returns:
1376
- A dictionary containing the run's project name and the resulting model outputs.
1377
-
1378
- Examples:
1379
-
1380
- .. code-block:: python
1381
-
1382
- from langsmith import Client
1383
- from langchain_openai import ChatOpenAI
1384
- from langchain.chains import LLMChain
1385
- from langchain.smith import smith_eval.RunEvalConfig, run_on_dataset
1386
-
1387
- # Chains may have memory. Passing in a constructor function lets the
1388
- # evaluation framework avoid cross-contamination between runs.
1389
- def construct_chain():
1390
- llm = ChatOpenAI(temperature=0)
1391
- chain = LLMChain.from_string(
1392
- llm,
1393
- "What's the answer to {your_input_key}"
1394
- )
1395
- return chain
1396
-
1397
- # Load off-the-shelf evaluators via config or the EvaluatorType (string or enum)
1398
- evaluation_config = smith_eval.RunEvalConfig(
1399
- evaluators=[
1400
- "qa", # "Correctness" against a reference answer
1401
- "embedding_distance",
1402
- smith_eval.RunEvalConfig.Criteria("helpfulness"),
1403
- smith_eval.RunEvalConfig.Criteria({
1404
- "fifth-grader-score": "Do you have to be smarter than a fifth grader to answer this question?"
1405
- }),
1406
- ]
1407
- )
1408
-
1409
- client = Client()
1410
- await arun_on_dataset(
1411
- client,
1412
- dataset_name="<my_dataset_name>",
1413
- llm_or_chain_factory=construct_chain,
1414
- evaluation=evaluation_config,
1415
- )
1416
-
1417
- You can also create custom evaluators by subclassing the
1418
- :class:`StringEvaluator <langchain.evaluation.schema.StringEvaluator>`
1419
- or LangSmith's `RunEvaluator` classes.
1420
-
1421
- .. code-block:: python
1422
-
1423
- from typing import Optional
1424
- from langchain.evaluation import StringEvaluator
1425
-
1426
- class MyStringEvaluator(StringEvaluator):
1427
-
1428
- @property
1429
- def requires_input(self) -> bool:
1430
- return False
1431
-
1432
- @property
1433
- def requires_reference(self) -> bool:
1434
- return True
1435
-
1436
- @property
1437
- def evaluation_name(self) -> str:
1438
- return "exact_match"
1439
-
1440
- def _evaluate_strings(self, prediction, reference=None, input=None, **kwargs) -> dict:
1441
- return {"score": prediction == reference}
1442
-
1443
-
1444
- evaluation_config = smith_eval.RunEvalConfig(
1445
- custom_evaluators = [MyStringEvaluator()],
1446
- )
1447
-
1448
- await arun_on_dataset(
1449
- client,
1450
- dataset_name="<my_dataset_name>",
1451
- llm_or_chain_factory=construct_chain,
1452
- evaluation=evaluation_config,
1453
- )
1454
-
1455
- """ # noqa: E501
1456
- input_mapper = kwargs.pop("input_mapper", None)
1457
- if input_mapper:
1458
- warn_deprecated("0.0.305", message=_INPUT_MAPPER_DEP_WARNING, pending=True)
1459
- if revision_id is None:
1460
- revision_id = get_langchain_env_var_metadata().get("revision_id")
1461
- tags = kwargs.pop("tags", None)
1462
- if tags:
1463
- warn_deprecated(
1464
- "0.1.9",
1465
- message="The tags argument is deprecated and will be"
1466
- " removed in a future release. Please specify project_metadata instead.",
1467
- pending=True,
1468
- )
1469
-
1470
- if kwargs:
1471
- warn_deprecated(
1472
- "0.0.305",
1473
- message="The following arguments are deprecated and "
1474
- "will be removed in a future release: "
1475
- f"{kwargs.keys()}.",
1476
- removal="0.0.305",
1477
- )
1478
- client = client or Client()
1479
- container = _DatasetRunContainer.prepare(
1480
- client,
1481
- dataset_name,
1482
- llm_or_chain_factory,
1483
- project_name,
1484
- evaluation,
1485
- tags,
1486
- input_mapper,
1487
- concurrency_level,
1488
- project_metadata=project_metadata,
1489
- revision_id=revision_id,
1490
- dataset_version=dataset_version,
1491
- )
1492
- batch_results = await runnable_utils.gather_with_concurrency(
1493
- container.configs[0].get("max_concurrency"),
1494
- *map(
1495
- functools.partial(
1496
- _arun_llm_or_chain,
1497
- llm_or_chain_factory=container.wrapped_model,
1498
- input_mapper=input_mapper,
1499
- ),
1500
- container.examples,
1501
- container.configs,
1502
- ),
1503
- )
1504
- return container.finish(batch_results, verbose=verbose)
1505
-
1506
-
1507
- def run_on_dataset(
1508
- client: Optional[Client],
1509
- dataset_name: str,
1510
- llm_or_chain_factory: MODEL_OR_CHAIN_FACTORY,
1511
- *,
1512
- evaluation: Optional[smith_eval.RunEvalConfig] = None,
1513
- dataset_version: Optional[Union[datetime, str]] = None,
1514
- concurrency_level: int = 5,
1515
- project_name: Optional[str] = None,
1516
- project_metadata: Optional[dict[str, Any]] = None,
1517
- verbose: bool = False,
1518
- revision_id: Optional[str] = None,
1519
- **kwargs: Any,
1520
- ) -> dict[str, Any]:
1521
- """Run on dataset.
1522
-
1523
- Run the Chain or language model on a dataset and store traces
1524
- to the specified project name.
1525
-
1526
- For the (usually faster) async version of this function,
1527
- see :func:`arun_on_dataset`.
1528
-
1529
- Args:
1530
- dataset_name: Name of the dataset to run the chain on.
1531
- llm_or_chain_factory: Language model or Chain constructor to run
1532
- over the dataset. The Chain constructor is used to permit
1533
- independent calls on each example without carrying over state.
1534
- evaluation: Configuration for evaluators to run on the
1535
- results of the chain
1536
- concurrency_level: The number of async tasks to run concurrently.
1537
- project_name: Name of the project to store the traces in.
1538
- Defaults to {dataset_name}-{chain class name}-{datetime}.
1539
- project_metadata: Optional metadata to add to the project.
1540
- Useful for storing information the test variant.
1541
- (prompt version, model version, etc.)
1542
- client: LangSmith client to use to access the dataset and to
1543
- log feedback and run traces.
1544
- verbose: Whether to print progress.
1545
- tags: Tags to add to each run in the project.
1546
- revision_id: Optional revision identifier to assign this test run to
1547
- track the performance of different versions of your system.
1548
- Returns:
1549
- A dictionary containing the run's project name and the resulting model outputs.
1550
-
1551
- Examples:
1552
-
1553
- .. code-block:: python
1554
-
1555
- from langsmith import Client
1556
- from langchain_openai import ChatOpenAI
1557
- from langchain.chains import LLMChain
1558
- from langchain.smith import smith_eval.RunEvalConfig, run_on_dataset
1559
-
1560
- # Chains may have memory. Passing in a constructor function lets the
1561
- # evaluation framework avoid cross-contamination between runs.
1562
- def construct_chain():
1563
- llm = ChatOpenAI(temperature=0)
1564
- chain = LLMChain.from_string(
1565
- llm,
1566
- "What's the answer to {your_input_key}"
1567
- )
1568
- return chain
1569
-
1570
- # Load off-the-shelf evaluators via config or the EvaluatorType (string or enum)
1571
- evaluation_config = smith_eval.RunEvalConfig(
1572
- evaluators=[
1573
- "qa", # "Correctness" against a reference answer
1574
- "embedding_distance",
1575
- smith_eval.RunEvalConfig.Criteria("helpfulness"),
1576
- smith_eval.RunEvalConfig.Criteria({
1577
- "fifth-grader-score": "Do you have to be smarter than a fifth grader to answer this question?"
1578
- }),
1579
- ]
1580
- )
1581
-
1582
- client = Client()
1583
- run_on_dataset(
1584
- client,
1585
- dataset_name="<my_dataset_name>",
1586
- llm_or_chain_factory=construct_chain,
1587
- evaluation=evaluation_config,
1588
- )
1589
-
1590
- You can also create custom evaluators by subclassing the
1591
- :class:`StringEvaluator <langchain.evaluation.schema.StringEvaluator>`
1592
- or LangSmith's `RunEvaluator` classes.
1593
-
1594
- .. code-block:: python
1595
-
1596
- from typing import Optional
1597
- from langchain.evaluation import StringEvaluator
1598
-
1599
- class MyStringEvaluator(StringEvaluator):
1600
-
1601
- @property
1602
- def requires_input(self) -> bool:
1603
- return False
1604
-
1605
- @property
1606
- def requires_reference(self) -> bool:
1607
- return True
1608
-
1609
- @property
1610
- def evaluation_name(self) -> str:
1611
- return "exact_match"
1612
-
1613
- def _evaluate_strings(self, prediction, reference=None, input=None, **kwargs) -> dict:
1614
- return {"score": prediction == reference}
1615
-
1616
-
1617
- evaluation_config = smith_eval.RunEvalConfig(
1618
- custom_evaluators = [MyStringEvaluator()],
1619
- )
1620
-
1621
- run_on_dataset(
1622
- client,
1623
- dataset_name="<my_dataset_name>",
1624
- llm_or_chain_factory=construct_chain,
1625
- evaluation=evaluation_config,
1626
- )
1627
-
1628
- """ # noqa: E501
1629
- input_mapper = kwargs.pop("input_mapper", None)
1630
- if input_mapper:
1631
- warn_deprecated("0.0.305", message=_INPUT_MAPPER_DEP_WARNING, pending=True)
1632
- tags = kwargs.pop("tags", None)
1633
- if tags:
1634
- warn_deprecated(
1635
- "0.1.9",
1636
- message="The tags argument is deprecated and will be"
1637
- " removed in a future release. Please specify project_metadata instead.",
1638
- pending=True,
1639
- )
1640
- if revision_id is None:
1641
- revision_id = get_langchain_env_var_metadata().get("revision_id")
1642
-
1643
- if kwargs:
1644
- warn_deprecated(
1645
- "0.0.305",
1646
- message="The following arguments are deprecated and "
1647
- "will be removed in a future release: "
1648
- f"{kwargs.keys()}.",
1649
- removal="0.0.305",
1650
- )
1651
- client = client or Client()
1652
- container = _DatasetRunContainer.prepare(
1653
- client,
1654
- dataset_name,
1655
- llm_or_chain_factory,
1656
- project_name,
1657
- evaluation,
1658
- tags,
1659
- input_mapper,
1660
- concurrency_level,
1661
- project_metadata=project_metadata,
1662
- revision_id=revision_id,
1663
- dataset_version=dataset_version,
1664
- )
1665
- if concurrency_level == 0:
1666
- batch_results = [
1667
- _run_llm_or_chain(
1668
- example,
1669
- config,
1670
- llm_or_chain_factory=container.wrapped_model,
1671
- input_mapper=input_mapper,
1672
- )
1673
- for example, config in zip(container.examples, container.configs)
1674
- ]
1675
- else:
1676
- with runnable_config.get_executor_for_config(container.configs[0]) as executor:
1677
- batch_results = list(
1678
- executor.map(
1679
- functools.partial(
1680
- _run_llm_or_chain,
1681
- llm_or_chain_factory=container.wrapped_model,
1682
- input_mapper=input_mapper,
1683
- ),
1684
- container.examples,
1685
- container.configs,
1686
- ),
1687
- )
1688
-
1689
- return container.finish(batch_results, verbose=verbose)