@langchain/classic 1.0.27 → 1.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/agents/agent.cjs.map +1 -1
  3. package/dist/agents/agent.js.map +1 -1
  4. package/dist/agents/executor.cjs.map +1 -1
  5. package/dist/agents/executor.js.map +1 -1
  6. package/dist/agents/openai_functions/index.cjs.map +1 -1
  7. package/dist/agents/openai_functions/index.d.cts.map +1 -1
  8. package/dist/agents/openai_functions/index.d.ts.map +1 -1
  9. package/dist/agents/openai_functions/index.js.map +1 -1
  10. package/dist/agents/openai_tools/index.cjs.map +1 -1
  11. package/dist/agents/openai_tools/index.d.cts +2 -2
  12. package/dist/agents/openai_tools/index.d.cts.map +1 -1
  13. package/dist/agents/openai_tools/index.d.ts +2 -2
  14. package/dist/agents/openai_tools/index.d.ts.map +1 -1
  15. package/dist/agents/openai_tools/index.js.map +1 -1
  16. package/dist/agents/react/index.d.cts +2 -2
  17. package/dist/agents/react/index.d.cts.map +1 -1
  18. package/dist/agents/react/index.d.ts +2 -2
  19. package/dist/agents/react/index.d.ts.map +1 -1
  20. package/dist/agents/structured_chat/index.d.cts +2 -2
  21. package/dist/agents/structured_chat/index.d.cts.map +1 -1
  22. package/dist/agents/structured_chat/index.d.ts +2 -2
  23. package/dist/agents/structured_chat/index.d.ts.map +1 -1
  24. package/dist/agents/tool_calling/index.d.cts +2 -2
  25. package/dist/agents/tool_calling/index.d.cts.map +1 -1
  26. package/dist/agents/tool_calling/index.d.ts +2 -2
  27. package/dist/agents/tool_calling/index.d.ts.map +1 -1
  28. package/dist/agents/tool_calling/output_parser.cjs.map +1 -1
  29. package/dist/agents/tool_calling/output_parser.d.cts.map +1 -1
  30. package/dist/agents/tool_calling/output_parser.js.map +1 -1
  31. package/dist/agents/toolkits/conversational_retrieval/token_buffer_memory.d.cts +2 -2
  32. package/dist/agents/toolkits/conversational_retrieval/token_buffer_memory.d.cts.map +1 -1
  33. package/dist/agents/toolkits/conversational_retrieval/token_buffer_memory.d.ts +2 -2
  34. package/dist/agents/toolkits/conversational_retrieval/token_buffer_memory.d.ts.map +1 -1
  35. package/dist/agents/xml/index.d.cts.map +1 -1
  36. package/dist/agents/xml/index.d.ts.map +1 -1
  37. package/dist/cache/file_system.cjs.map +1 -1
  38. package/dist/cache/file_system.js.map +1 -1
  39. package/dist/chains/analyze_documents_chain.cjs.map +1 -1
  40. package/dist/chains/analyze_documents_chain.js.map +1 -1
  41. package/dist/chains/base.cjs.map +1 -1
  42. package/dist/chains/base.d.cts +2 -2
  43. package/dist/chains/base.d.cts.map +1 -1
  44. package/dist/chains/base.d.ts +2 -2
  45. package/dist/chains/base.d.ts.map +1 -1
  46. package/dist/chains/base.js.map +1 -1
  47. package/dist/chains/chat_vector_db_chain.cjs.map +1 -1
  48. package/dist/chains/chat_vector_db_chain.js.map +1 -1
  49. package/dist/chains/combine_docs_chain.d.cts +2 -2
  50. package/dist/chains/combine_docs_chain.d.cts.map +1 -1
  51. package/dist/chains/combine_docs_chain.d.ts +2 -2
  52. package/dist/chains/combine_docs_chain.d.ts.map +1 -1
  53. package/dist/chains/combine_documents/reduce.cjs.map +1 -1
  54. package/dist/chains/combine_documents/reduce.js.map +1 -1
  55. package/dist/chains/conversational_retrieval_chain.cjs.map +1 -1
  56. package/dist/chains/conversational_retrieval_chain.js.map +1 -1
  57. package/dist/chains/graph_qa/cypher.cjs.map +1 -1
  58. package/dist/chains/graph_qa/cypher.js.map +1 -1
  59. package/dist/chains/llm_chain.cjs.map +1 -1
  60. package/dist/chains/llm_chain.js.map +1 -1
  61. package/dist/chains/load.d.cts +1 -2
  62. package/dist/chains/load.d.cts.map +1 -1
  63. package/dist/chains/load.d.ts +1 -2
  64. package/dist/chains/load.d.ts.map +1 -1
  65. package/dist/chains/openai_functions/base.cjs.map +1 -1
  66. package/dist/chains/openai_functions/base.js.map +1 -1
  67. package/dist/chains/openai_functions/openapi.cjs.map +1 -1
  68. package/dist/chains/openai_functions/openapi.js.map +1 -1
  69. package/dist/chains/openai_moderation.cjs.map +1 -1
  70. package/dist/chains/openai_moderation.js.map +1 -1
  71. package/dist/chains/query_constructor/index.cjs.map +1 -1
  72. package/dist/chains/query_constructor/index.js.map +1 -1
  73. package/dist/chains/question_answering/load.d.cts +1 -2
  74. package/dist/chains/question_answering/load.d.cts.map +1 -1
  75. package/dist/chains/question_answering/load.d.ts +1 -2
  76. package/dist/chains/question_answering/load.d.ts.map +1 -1
  77. package/dist/chains/retrieval.cjs.map +1 -1
  78. package/dist/chains/retrieval.js.map +1 -1
  79. package/dist/chains/retrieval_qa.cjs.map +1 -1
  80. package/dist/chains/retrieval_qa.js.map +1 -1
  81. package/dist/chains/router/utils.cjs.map +1 -1
  82. package/dist/chains/router/utils.js.map +1 -1
  83. package/dist/chains/summarization/load.d.cts +1 -2
  84. package/dist/chains/summarization/load.d.cts.map +1 -1
  85. package/dist/chains/summarization/load.d.ts +1 -2
  86. package/dist/chains/summarization/load.d.ts.map +1 -1
  87. package/dist/chains/vector_db_qa.cjs.map +1 -1
  88. package/dist/chains/vector_db_qa.js.map +1 -1
  89. package/dist/chat_models/universal.cjs +8 -10
  90. package/dist/chat_models/universal.cjs.map +1 -1
  91. package/dist/chat_models/universal.d.cts +3 -5
  92. package/dist/chat_models/universal.d.cts.map +1 -1
  93. package/dist/chat_models/universal.d.ts +3 -5
  94. package/dist/chat_models/universal.d.ts.map +1 -1
  95. package/dist/chat_models/universal.js +8 -10
  96. package/dist/chat_models/universal.js.map +1 -1
  97. package/dist/document_loaders/fs/directory.d.cts.map +1 -1
  98. package/dist/document_loaders/fs/directory.d.ts.map +1 -1
  99. package/dist/document_loaders/fs/json.cjs.map +1 -1
  100. package/dist/document_loaders/fs/json.js.map +1 -1
  101. package/dist/document_transformers/openai_functions.d.cts.map +1 -1
  102. package/dist/evaluation/agents/index.d.cts +1 -0
  103. package/dist/evaluation/agents/trajectory.d.cts +2 -2
  104. package/dist/evaluation/agents/trajectory.d.cts.map +1 -1
  105. package/dist/evaluation/agents/trajectory.d.ts +2 -2
  106. package/dist/evaluation/agents/trajectory.d.ts.map +1 -1
  107. package/dist/evaluation/base.cjs.map +1 -1
  108. package/dist/evaluation/base.d.cts.map +1 -1
  109. package/dist/evaluation/base.js.map +1 -1
  110. package/dist/evaluation/comparison/index.d.cts +1 -0
  111. package/dist/evaluation/comparison/pairwise.cjs.map +1 -1
  112. package/dist/evaluation/comparison/pairwise.d.cts +3 -3
  113. package/dist/evaluation/comparison/pairwise.d.cts.map +1 -1
  114. package/dist/evaluation/comparison/pairwise.d.ts +3 -3
  115. package/dist/evaluation/comparison/pairwise.d.ts.map +1 -1
  116. package/dist/evaluation/comparison/pairwise.js.map +1 -1
  117. package/dist/evaluation/criteria/criteria.cjs.map +1 -1
  118. package/dist/evaluation/criteria/criteria.d.cts +3 -3
  119. package/dist/evaluation/criteria/criteria.d.cts.map +1 -1
  120. package/dist/evaluation/criteria/criteria.d.ts +3 -3
  121. package/dist/evaluation/criteria/criteria.d.ts.map +1 -1
  122. package/dist/evaluation/criteria/criteria.js.map +1 -1
  123. package/dist/evaluation/criteria/index.d.cts +1 -0
  124. package/dist/evaluation/embedding_distance/index.d.cts +1 -0
  125. package/dist/evaluation/loader.cjs.map +1 -1
  126. package/dist/evaluation/loader.d.cts.map +1 -1
  127. package/dist/evaluation/loader.js.map +1 -1
  128. package/dist/evaluation/qa/index.d.cts +1 -0
  129. package/dist/experimental/autogpt/prompt.d.cts +2 -2
  130. package/dist/experimental/autogpt/prompt.d.cts.map +1 -1
  131. package/dist/experimental/autogpt/prompt.d.ts +2 -2
  132. package/dist/experimental/autogpt/prompt.d.ts.map +1 -1
  133. package/dist/experimental/autogpt/prompt_generator.cjs.map +1 -1
  134. package/dist/experimental/autogpt/prompt_generator.js.map +1 -1
  135. package/dist/experimental/autogpt/schema.cjs.map +1 -1
  136. package/dist/experimental/autogpt/schema.js.map +1 -1
  137. package/dist/experimental/generative_agents/generative_agent_memory.cjs.map +1 -1
  138. package/dist/experimental/generative_agents/generative_agent_memory.js.map +1 -1
  139. package/dist/experimental/masking/parser.cjs.map +1 -1
  140. package/dist/experimental/masking/parser.js.map +1 -1
  141. package/dist/experimental/masking/regex_masking_transformer.cjs.map +1 -1
  142. package/dist/experimental/masking/regex_masking_transformer.js.map +1 -1
  143. package/dist/experimental/openai_assistant/index.cjs.map +1 -1
  144. package/dist/experimental/openai_assistant/index.d.cts +3 -3
  145. package/dist/experimental/openai_assistant/index.d.ts +3 -3
  146. package/dist/experimental/openai_assistant/index.js.map +1 -1
  147. package/dist/experimental/openai_files/index.d.cts +4 -4
  148. package/dist/experimental/openai_files/index.d.ts +4 -4
  149. package/dist/experimental/plan_and_execute/agent_executor.cjs.map +1 -1
  150. package/dist/experimental/plan_and_execute/agent_executor.js.map +1 -1
  151. package/dist/experimental/prompts/custom_format.cjs.map +1 -1
  152. package/dist/experimental/prompts/custom_format.js.map +1 -1
  153. package/dist/experimental/prompts/handlebars.cjs.map +1 -1
  154. package/dist/experimental/prompts/handlebars.d.cts +2 -2
  155. package/dist/experimental/prompts/handlebars.d.cts.map +1 -1
  156. package/dist/experimental/prompts/handlebars.d.ts +2 -2
  157. package/dist/experimental/prompts/handlebars.d.ts.map +1 -1
  158. package/dist/experimental/prompts/handlebars.js.map +1 -1
  159. package/dist/hub/base.cjs.map +1 -1
  160. package/dist/hub/base.d.cts +0 -1
  161. package/dist/hub/base.d.cts.map +1 -1
  162. package/dist/hub/base.d.ts +0 -1
  163. package/dist/hub/base.d.ts.map +1 -1
  164. package/dist/hub/base.js.map +1 -1
  165. package/dist/hub/index.cjs.map +1 -1
  166. package/dist/hub/index.js.map +1 -1
  167. package/dist/load/index.cjs.map +1 -1
  168. package/dist/load/index.js.map +1 -1
  169. package/dist/output_parsers/combining.cjs.map +1 -1
  170. package/dist/output_parsers/combining.js.map +1 -1
  171. package/dist/output_parsers/expression_type_handlers/base.cjs.map +1 -1
  172. package/dist/output_parsers/expression_type_handlers/base.d.cts.map +1 -1
  173. package/dist/output_parsers/expression_type_handlers/base.d.ts.map +1 -1
  174. package/dist/output_parsers/expression_type_handlers/base.js.map +1 -1
  175. package/dist/output_parsers/fix.cjs.map +1 -1
  176. package/dist/output_parsers/fix.js.map +1 -1
  177. package/dist/output_parsers/openai_functions.d.cts.map +1 -1
  178. package/dist/output_parsers/openai_functions.d.ts.map +1 -1
  179. package/dist/output_parsers/openai_tools.cjs.map +1 -1
  180. package/dist/output_parsers/openai_tools.js.map +1 -1
  181. package/dist/output_parsers/regex.cjs.map +1 -1
  182. package/dist/output_parsers/regex.js.map +1 -1
  183. package/dist/output_parsers/structured.d.cts +2 -2
  184. package/dist/output_parsers/structured.d.cts.map +1 -1
  185. package/dist/output_parsers/structured.d.ts +2 -2
  186. package/dist/output_parsers/structured.d.ts.map +1 -1
  187. package/dist/retrievers/document_compressors/index.cjs.map +1 -1
  188. package/dist/retrievers/document_compressors/index.js.map +1 -1
  189. package/dist/retrievers/matryoshka_retriever.cjs.map +1 -1
  190. package/dist/retrievers/matryoshka_retriever.d.cts +1 -1
  191. package/dist/retrievers/matryoshka_retriever.d.cts.map +1 -1
  192. package/dist/retrievers/matryoshka_retriever.d.ts +1 -1
  193. package/dist/retrievers/matryoshka_retriever.d.ts.map +1 -1
  194. package/dist/retrievers/matryoshka_retriever.js.map +1 -1
  195. package/dist/retrievers/multi_query.cjs.map +1 -1
  196. package/dist/retrievers/multi_query.js.map +1 -1
  197. package/dist/retrievers/parent_document.cjs.map +1 -1
  198. package/dist/retrievers/parent_document.js.map +1 -1
  199. package/dist/schema/prompt_template.d.cts +1 -2
  200. package/dist/schema/prompt_template.d.cts.map +1 -1
  201. package/dist/schema/prompt_template.d.ts +1 -2
  202. package/dist/schema/prompt_template.d.ts.map +1 -1
  203. package/dist/smith/config.cjs.map +1 -1
  204. package/dist/smith/config.d.cts +1 -1
  205. package/dist/smith/config.d.ts +1 -1
  206. package/dist/smith/config.d.ts.map +1 -1
  207. package/dist/smith/config.js.map +1 -1
  208. package/dist/smith/runner_utils.cjs.map +1 -1
  209. package/dist/smith/runner_utils.d.cts +1 -1
  210. package/dist/smith/runner_utils.d.cts.map +1 -1
  211. package/dist/smith/runner_utils.d.ts +1 -1
  212. package/dist/smith/runner_utils.d.ts.map +1 -1
  213. package/dist/smith/runner_utils.js.map +1 -1
  214. package/dist/sql_db.d.cts +2 -2
  215. package/dist/sql_db.d.cts.map +1 -1
  216. package/dist/sql_db.d.ts +2 -2
  217. package/dist/sql_db.d.ts.map +1 -1
  218. package/dist/storage/encoder_backed.cjs.map +1 -1
  219. package/dist/storage/encoder_backed.js.map +1 -1
  220. package/dist/storage/file_system.cjs.map +1 -1
  221. package/dist/storage/file_system.js.map +1 -1
  222. package/dist/stores/doc/in_memory.cjs.map +1 -1
  223. package/dist/stores/doc/in_memory.js.map +1 -1
  224. package/dist/tools/json.cjs.map +1 -1
  225. package/dist/tools/json.js.map +1 -1
  226. package/dist/tools/webbrowser.cjs.map +1 -1
  227. package/dist/tools/webbrowser.d.cts.map +1 -1
  228. package/dist/tools/webbrowser.d.ts.map +1 -1
  229. package/dist/tools/webbrowser.js.map +1 -1
  230. package/dist/util/document.d.cts +1 -1
  231. package/dist/util/document.d.cts.map +1 -1
  232. package/dist/util/document.d.ts +1 -1
  233. package/dist/util/document.d.ts.map +1 -1
  234. package/dist/util/is-network-error/index.cjs.map +1 -1
  235. package/dist/util/is-network-error/index.js.map +1 -1
  236. package/dist/util/load.cjs.map +1 -1
  237. package/dist/util/load.js.map +1 -1
  238. package/dist/util/openapi.cjs.map +1 -1
  239. package/dist/util/openapi.d.cts +32 -32
  240. package/dist/util/openapi.d.cts.map +1 -1
  241. package/dist/util/openapi.d.ts +32 -32
  242. package/dist/util/openapi.d.ts.map +1 -1
  243. package/dist/util/openapi.js.map +1 -1
  244. package/dist/util/p-retry/index.cjs.map +1 -1
  245. package/dist/util/p-retry/index.js.map +1 -1
  246. package/dist/vectorstores/memory.cjs.map +1 -1
  247. package/dist/vectorstores/memory.js.map +1 -1
  248. package/package.json +25 -48
  249. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/client.d.cts +0 -1494
  250. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/client.d.cts.map +0 -1
  251. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/client.d.ts +0 -1494
  252. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/client.d.ts.map +0 -1
  253. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/_runner.d.cts +0 -1
  254. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/_runner.d.ts +0 -1
  255. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/evaluate_comparative.d.cts +0 -1
  256. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/evaluate_comparative.d.ts +0 -1
  257. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/evaluator.d.cts +0 -66
  258. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/evaluator.d.cts.map +0 -1
  259. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/evaluator.d.ts +0 -66
  260. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/evaluator.d.ts.map +0 -1
  261. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/index.d.cts +0 -1
  262. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/index.d.ts +0 -1
  263. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/string_evaluator.d.cts +0 -1
  264. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/evaluation/string_evaluator.d.ts +0 -1
  265. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/index.d.cts +0 -4
  266. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/index.d.ts +0 -4
  267. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/run_trees.d.cts +0 -145
  268. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/run_trees.d.cts.map +0 -1
  269. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/run_trees.d.ts +0 -145
  270. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/run_trees.d.ts.map +0 -1
  271. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/schemas.d.cts +0 -437
  272. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/schemas.d.cts.map +0 -1
  273. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/schemas.d.ts +0 -437
  274. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/schemas.d.ts.map +0 -1
  275. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/traceable.d.cts +0 -7
  276. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/traceable.d.cts.map +0 -1
  277. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/traceable.d.ts +0 -7
  278. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/traceable.d.ts.map +0 -1
  279. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/types.d.cts +0 -38
  280. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/types.d.cts.map +0 -1
  281. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/types.d.ts +0 -38
  282. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/singletons/types.d.ts.map +0 -1
  283. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/async_caller.d.cts +0 -25
  284. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/async_caller.d.cts.map +0 -1
  285. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/async_caller.d.ts +0 -25
  286. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/async_caller.d.ts.map +0 -1
  287. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/p-queue.d.cts +0 -1
  288. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/p-queue.d.ts +0 -1
  289. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/prompt_cache/index.d.cts +0 -129
  290. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/prompt_cache/index.d.cts.map +0 -1
  291. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/prompt_cache/index.d.ts +0 -129
  292. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/dist/utils/prompt_cache/index.d.ts.map +0 -1
  293. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/evaluation.d.cts +0 -1
  294. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/evaluation.d.ts +0 -1
  295. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/singletons/traceable.d.cts +0 -2
  296. package/dist/node_modules/.pnpm/langsmith@0.5.9_@opentelemetry_api@1.9.0_openai@6.22.0_ws@8.20.0_bufferutil@4.1.0__zod@4.3.6_/node_modules/langsmith/singletons/traceable.d.ts +0 -2
  297. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.d.cts +0 -1
  298. package/dist/node_modules/.pnpm/p-queue@6.6.2/node_modules/p-queue/dist/index.d.ts +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @langchain/classic
2
2
 
3
+ ## 1.0.28
4
+
5
+ ### Patch Changes
6
+
7
+ - [#10591](https://github.com/langchain-ai/langchainjs/pull/10591) [`d7a98cd`](https://github.com/langchain-ai/langchainjs/commit/d7a98cda1a5d9bf9b93b503fc54374f1aaf1a37e) Thanks [@christian-bromann](https://github.com/christian-bromann)! - feat: add @langchain/perplexity standalone provider package
8
+
9
+ - [#10594](https://github.com/langchain-ai/langchainjs/pull/10594) [`884c2d3`](https://github.com/langchain-ai/langchainjs/commit/884c2d3d1b2c49225d73ddec2235ad174db36f86) Thanks [@christian-bromann](https://github.com/christian-bromann)! - feat(fireworks): extract standalone provider package
10
+
11
+ - [#10593](https://github.com/langchain-ai/langchainjs/pull/10593) [`0fb6fa4`](https://github.com/langchain-ai/langchainjs/commit/0fb6fa40dcd3a09a4fb91f36c9f2ca869552961e) Thanks [@christian-bromann](https://github.com/christian-bromann)! - feat(together-ai): migrate Together AI into provider package
12
+
13
+ - Updated dependencies [[`d6bf4fc`](https://github.com/langchain-ai/langchainjs/commit/d6bf4fc91b2c2eb931bf3bc7606b1817632bc8c1)]:
14
+ - @langchain/openai@1.4.2
15
+
3
16
  ## 1.0.27
4
17
 
5
18
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"agent.cjs","names":["Serializable","RunnableSequence"],"sources":["../../src/agents/agent.ts"],"sourcesContent":["import type {\n StructuredToolInterface,\n ToolInterface,\n} from \"@langchain/core/tools\";\nimport type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { CallbackManager, Callbacks } from \"@langchain/core/callbacks/manager\";\nimport { BasePromptTemplate } from \"@langchain/core/prompts\";\nimport { AgentAction, AgentFinish, AgentStep } from \"@langchain/core/agents\";\nimport { BaseMessage } from \"@langchain/core/messages\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { Serializable } from \"@langchain/core/load/serializable\";\nimport {\n Runnable,\n patchConfig,\n type RunnableConfig,\n RunnableSequence,\n RunnableLike,\n} from \"@langchain/core/runnables\";\nimport { LLMChain } from \"../chains/llm_chain.js\";\nimport type {\n AgentActionOutputParser,\n AgentInput,\n RunnableMultiActionAgentInput,\n RunnableSingleActionAgentInput,\n SerializedAgent,\n StoppingMethod,\n} from \"./types.js\";\n\n/**\n * Record type for arguments passed to output parsers.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type OutputParserArgs = Record<string, any>;\n\n/**\n * Error class for parse errors in LangChain. Contains information about\n * the error message and the output that caused the error.\n */\nclass ParseError extends Error {\n output: string;\n\n constructor(msg: string, output: string) {\n super(msg);\n this.output = output;\n }\n}\n\n/**\n * Abstract base class for agents in LangChain. Provides common\n * functionality for agents, such as handling inputs and outputs.\n */\nexport abstract class BaseAgent extends Serializable {\n declare ToolType: StructuredToolInterface;\n\n abstract get inputKeys(): string[];\n\n get returnValues(): string[] {\n return [\"output\"];\n }\n\n get allowedTools(): string[] | undefined {\n return undefined;\n }\n\n /**\n * Return the string type key uniquely identifying this class of agent.\n */\n _agentType(): string {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Return the string type key uniquely identifying multi or single action agents.\n */\n abstract _agentActionType(): string;\n\n /**\n * Return response when agent has been stopped due to max iterations\n */\n returnStoppedResponse(\n earlyStoppingMethod: StoppingMethod,\n _steps: AgentStep[],\n _inputs: ChainValues,\n _callbackManager?: CallbackManager\n ): Promise<AgentFinish> {\n if (earlyStoppingMethod === \"force\") {\n return Promise.resolve({\n returnValues: { output: \"Agent stopped due to max iterations.\" },\n log: \"\",\n });\n }\n\n throw new Error(`Invalid stopping method: ${earlyStoppingMethod}`);\n }\n\n /**\n * Prepare the agent for output, if needed\n */\n async prepareForOutput(\n _returnValues: AgentFinish[\"returnValues\"],\n _steps: AgentStep[]\n ): Promise<AgentFinish[\"returnValues\"]> {\n return {};\n }\n}\n\n/**\n * Abstract base class for single action agents in LangChain. Extends the\n * BaseAgent class and provides additional functionality specific to\n * single action agents.\n */\nexport abstract class BaseSingleActionAgent extends BaseAgent {\n _agentActionType(): string {\n return \"single\" as const;\n }\n\n /**\n * Decide what to do, given some input.\n *\n * @param steps - Steps the LLM has taken so far, along with observations from each.\n * @param inputs - User inputs.\n * @param callbackManager - Callback manager.\n *\n * @returns Action specifying what tool to use.\n */\n abstract plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager,\n config?: RunnableConfig\n ): Promise<AgentAction | AgentFinish>;\n}\n\n/**\n * Abstract base class for multi-action agents in LangChain. Extends the\n * BaseAgent class and provides additional functionality specific to\n * multi-action agents.\n */\nexport abstract class BaseMultiActionAgent extends BaseAgent {\n _agentActionType(): string {\n return \"multi\" as const;\n }\n\n /**\n * Decide what to do, given some input.\n *\n * @param steps - Steps the LLM has taken so far, along with observations from each.\n * @param inputs - User inputs.\n * @param callbackManager - Callback manager.\n *\n * @returns Actions specifying what tools to use.\n */\n abstract plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager,\n config?: RunnableConfig\n ): Promise<AgentAction[] | AgentFinish>;\n}\n\nfunction isAgentAction(input: unknown): input is AgentAction {\n return !Array.isArray(input) && (input as AgentAction)?.tool !== undefined;\n}\n\nexport function isRunnableAgent(x: BaseAgent) {\n return (\n (x as RunnableMultiActionAgent | RunnableSingleActionAgent).runnable !==\n undefined\n );\n}\n\n// TODO: Remove in the future. Only for backwards compatibility.\n// Allows for the creation of runnables with properties that will\n// be passed to the agent executor constructor.\nexport class AgentRunnableSequence<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunInput = any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput = any,\n> extends RunnableSequence<RunInput, RunOutput> {\n streamRunnable?: boolean;\n\n singleAction: boolean;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static fromRunnables<RunInput = any, RunOutput = any>(\n [first, ...runnables]: [\n RunnableLike<RunInput>,\n ...RunnableLike[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunnableLike<any, RunOutput>,\n ],\n config: { singleAction: boolean; streamRunnable?: boolean; name?: string }\n ): AgentRunnableSequence<RunInput, Exclude<RunOutput, Error>> {\n const sequence = RunnableSequence.from(\n [first, ...runnables],\n config.name\n ) as AgentRunnableSequence<RunInput, Exclude<RunOutput, Error>>;\n sequence.singleAction = config.singleAction;\n sequence.streamRunnable = config.streamRunnable;\n return sequence;\n }\n\n static isAgentRunnableSequence(x: Runnable): x is AgentRunnableSequence {\n return typeof (x as AgentRunnableSequence).singleAction === \"boolean\";\n }\n}\n\n/**\n * Class representing a single-action agent powered by runnables.\n * Extends the BaseSingleActionAgent class and provides methods for\n * planning agent actions with runnables.\n */\nexport class RunnableSingleActionAgent extends BaseSingleActionAgent {\n lc_namespace = [\"langchain\", \"agents\", \"runnable\"];\n\n runnable: Runnable<\n ChainValues & { steps: AgentStep[] },\n AgentAction | AgentFinish\n >;\n\n get inputKeys(): string[] {\n return [];\n }\n\n /**\n * Whether to stream from the runnable or not.\n * If true, the underlying LLM is invoked in a streaming fashion to make it\n * possible to get access to the individual LLM tokens when using\n * `streamLog` with the Agent Executor. If false then LLM is invoked in a\n * non-streaming fashion and individual LLM tokens will not be available\n * in `streamLog`.\n *\n * Note that the runnable should still only stream a single action or\n * finish chunk.\n */\n streamRunnable = true;\n\n defaultRunName = \"RunnableAgent\";\n\n constructor(fields: RunnableSingleActionAgentInput) {\n super(fields);\n this.runnable = fields.runnable;\n this.defaultRunName =\n fields.defaultRunName ?? this.runnable.name ?? this.defaultRunName;\n this.streamRunnable = fields.streamRunnable ?? this.streamRunnable;\n }\n\n async plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager,\n config?: RunnableConfig\n ): Promise<AgentAction | AgentFinish> {\n const combinedInput = { ...inputs, steps };\n const combinedConfig = patchConfig(config, {\n callbacks: callbackManager,\n runName: this.defaultRunName,\n });\n if (this.streamRunnable) {\n const stream = await this.runnable.stream(combinedInput, combinedConfig);\n let finalOutput: AgentAction | AgentFinish | undefined;\n for await (const chunk of stream) {\n if (finalOutput === undefined) {\n finalOutput = chunk;\n } else {\n throw new Error(\n [\n `Multiple agent actions/finishes received in streamed agent output.`,\n `Set \"streamRunnable: false\" when initializing the agent to invoke this agent in non-streaming mode.`,\n ].join(\"\\n\")\n );\n }\n }\n if (finalOutput === undefined) {\n throw new Error(\n [\n \"No streaming output received from underlying runnable.\",\n `Set \"streamRunnable: false\" when initializing the agent to invoke this agent in non-streaming mode.`,\n ].join(\"\\n\")\n );\n }\n return finalOutput;\n } else {\n return this.runnable.invoke(combinedInput, combinedConfig);\n }\n }\n}\n\n/**\n * Class representing a multi-action agent powered by runnables.\n * Extends the BaseMultiActionAgent class and provides methods for\n * planning agent actions with runnables.\n */\nexport class RunnableMultiActionAgent extends BaseMultiActionAgent {\n lc_namespace = [\"langchain\", \"agents\", \"runnable\"];\n\n // TODO: Rename input to \"intermediate_steps\"\n runnable: Runnable<\n ChainValues & { steps: AgentStep[] },\n AgentAction[] | AgentAction | AgentFinish\n >;\n\n defaultRunName = \"RunnableAgent\";\n\n stop?: string[];\n\n streamRunnable = true;\n\n get inputKeys(): string[] {\n return [];\n }\n\n constructor(fields: RunnableMultiActionAgentInput) {\n super(fields);\n this.runnable = fields.runnable;\n this.stop = fields.stop;\n this.defaultRunName =\n fields.defaultRunName ?? this.runnable.name ?? this.defaultRunName;\n this.streamRunnable = fields.streamRunnable ?? this.streamRunnable;\n }\n\n async plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager,\n config?: RunnableConfig\n ): Promise<AgentAction[] | AgentFinish> {\n const combinedInput = { ...inputs, steps };\n const combinedConfig = patchConfig(config, {\n callbacks: callbackManager,\n runName: this.defaultRunName,\n });\n let output;\n if (this.streamRunnable) {\n const stream = await this.runnable.stream(combinedInput, combinedConfig);\n let finalOutput: AgentAction | AgentFinish | AgentAction[] | undefined;\n for await (const chunk of stream) {\n if (finalOutput === undefined) {\n finalOutput = chunk;\n } else {\n throw new Error(\n [\n `Multiple agent actions/finishes received in streamed agent output.`,\n `Set \"streamRunnable: false\" when initializing the agent to invoke this agent in non-streaming mode.`,\n ].join(\"\\n\")\n );\n }\n }\n if (finalOutput === undefined) {\n throw new Error(\n [\n \"No streaming output received from underlying runnable.\",\n `Set \"streamRunnable: false\" when initializing the agent to invoke this agent in non-streaming mode.`,\n ].join(\"\\n\")\n );\n }\n output = finalOutput;\n } else {\n output = await this.runnable.invoke(combinedInput, combinedConfig);\n }\n\n if (isAgentAction(output)) {\n return [output];\n }\n\n return output;\n }\n}\n\nexport class RunnableAgent extends RunnableMultiActionAgent {}\n\n/**\n * Interface for input data for creating a LLMSingleActionAgent.\n */\nexport interface LLMSingleActionAgentInput {\n llmChain: LLMChain;\n outputParser: AgentActionOutputParser;\n stop?: string[];\n}\n\n/**\n * Class representing a single action agent using a LLMChain in LangChain.\n * Extends the BaseSingleActionAgent class and provides methods for\n * planning agent actions based on LLMChain outputs.\n * @example\n * ```typescript\n * const customPromptTemplate = new CustomPromptTemplate({\n * tools: [new Calculator()],\n * inputVariables: [\"input\", \"agent_scratchpad\"],\n * });\n * const customOutputParser = new CustomOutputParser();\n * const agent = new LLMSingleActionAgent({\n * llmChain: new LLMChain({\n * prompt: customPromptTemplate,\n * llm: new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 }),\n * }),\n * outputParser: customOutputParser,\n * stop: [\"\\nObservation\"],\n * });\n * const executor = new AgentExecutor({\n * agent,\n * tools: [new Calculator()],\n * });\n * const result = await executor.invoke({\n * input:\n * \"Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?\",\n * });\n * ```\n */\nexport class LLMSingleActionAgent extends BaseSingleActionAgent {\n lc_namespace = [\"langchain\", \"agents\"];\n\n llmChain: LLMChain;\n\n outputParser: AgentActionOutputParser;\n\n stop?: string[];\n\n constructor(input: LLMSingleActionAgentInput) {\n super(input);\n this.stop = input.stop;\n this.llmChain = input.llmChain;\n this.outputParser = input.outputParser;\n }\n\n get inputKeys(): string[] {\n return this.llmChain.inputKeys;\n }\n\n /**\n * Decide what to do given some input.\n *\n * @param steps - Steps the LLM has taken so far, along with observations from each.\n * @param inputs - User inputs.\n * @param callbackManager - Callback manager.\n *\n * @returns Action specifying what tool to use.\n */\n async plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n const output = await this.llmChain.call(\n {\n intermediate_steps: steps,\n stop: this.stop,\n ...inputs,\n },\n callbackManager\n );\n return this.outputParser.parse(\n output[this.llmChain.outputKey],\n callbackManager\n );\n }\n}\n\n/**\n * Interface for arguments used to create an agent in LangChain.\n */\nexport interface AgentArgs {\n outputParser?: AgentActionOutputParser;\n\n callbacks?: Callbacks;\n\n /**\n * @deprecated Use `callbacks` instead.\n */\n callbackManager?: CallbackManager;\n}\n\n/**\n * Class responsible for calling a language model and deciding an action.\n *\n * @remarks This is driven by an LLMChain. The prompt in the LLMChain *must*\n * include a variable called \"agent_scratchpad\" where the agent can put its\n * intermediary work.\n */\nexport abstract class Agent extends BaseSingleActionAgent {\n llmChain: LLMChain;\n\n outputParser: AgentActionOutputParser | undefined;\n\n private _allowedTools?: string[] = undefined;\n\n get allowedTools(): string[] | undefined {\n return this._allowedTools;\n }\n\n get inputKeys(): string[] {\n return this.llmChain.inputKeys.filter((k) => k !== \"agent_scratchpad\");\n }\n\n constructor(input: AgentInput) {\n super(input);\n\n this.llmChain = input.llmChain;\n this._allowedTools = input.allowedTools;\n this.outputParser = input.outputParser;\n }\n\n /**\n * Prefix to append the observation with.\n */\n abstract observationPrefix(): string;\n\n /**\n * Prefix to append the LLM call with.\n */\n abstract llmPrefix(): string;\n\n /**\n * Return the string type key uniquely identifying this class of agent.\n */\n abstract _agentType(): string;\n\n /**\n * Get the default output parser for this agent.\n */\n static getDefaultOutputParser(\n _fields?: OutputParserArgs\n ): AgentActionOutputParser {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Create a prompt for this class\n *\n * @param _tools - List of tools the agent will have access to, used to format the prompt.\n * @param _fields - Additional fields used to format the prompt.\n *\n * @returns A PromptTemplate assembled from the given tools and fields.\n * */\n static createPrompt(\n _tools: StructuredToolInterface[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _fields?: Record<string, any>\n ): BasePromptTemplate {\n throw new Error(\"Not implemented\");\n }\n\n /** Construct an agent from an LLM and a list of tools */\n static fromLLMAndTools(\n _llm: BaseLanguageModelInterface,\n _tools: StructuredToolInterface[],\n\n _args?: AgentArgs\n ): Agent {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Validate that appropriate tools are passed in\n */\n static validateTools(_tools: StructuredToolInterface[]): void {}\n\n _stop(): string[] {\n return [`\\n${this.observationPrefix()}`];\n }\n\n /**\n * Name of tool to use to terminate the chain.\n */\n finishToolName(): string {\n return \"Final Answer\";\n }\n\n /**\n * Construct a scratchpad to let the agent continue its thought process\n */\n async constructScratchPad(\n steps: AgentStep[]\n ): Promise<string | BaseMessage[]> {\n return steps.reduce(\n (thoughts, { action, observation }) =>\n thoughts +\n [\n action.log,\n `${this.observationPrefix()}${observation}`,\n this.llmPrefix(),\n ].join(\"\\n\"),\n \"\"\n );\n }\n\n private async _plan(\n steps: AgentStep[],\n inputs: ChainValues,\n suffix?: string,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n const thoughts = await this.constructScratchPad(steps);\n const newInputs: ChainValues = {\n ...inputs,\n agent_scratchpad: suffix ? `${thoughts}${suffix}` : thoughts,\n };\n\n if (this._stop().length !== 0) {\n newInputs.stop = this._stop();\n }\n\n const output = await this.llmChain.predict(newInputs, callbackManager);\n if (!this.outputParser) {\n throw new Error(\"Output parser not set\");\n }\n return this.outputParser.parse(output, callbackManager);\n }\n\n /**\n * Decide what to do given some input.\n *\n * @param steps - Steps the LLM has taken so far, along with observations from each.\n * @param inputs - User inputs.\n * @param callbackManager - Callback manager to use for this call.\n *\n * @returns Action specifying what tool to use.\n */\n plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n return this._plan(steps, inputs, undefined, callbackManager);\n }\n\n /**\n * Return response when agent has been stopped due to max iterations\n */\n async returnStoppedResponse(\n earlyStoppingMethod: StoppingMethod,\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentFinish> {\n if (earlyStoppingMethod === \"force\") {\n return {\n returnValues: { output: \"Agent stopped due to max iterations.\" },\n log: \"\",\n };\n }\n\n if (earlyStoppingMethod === \"generate\") {\n try {\n const action = await this._plan(\n steps,\n inputs,\n \"\\n\\nI now need to return a final answer based on the previous steps:\",\n callbackManager\n );\n if (\"returnValues\" in action) {\n return action;\n }\n\n return { returnValues: { output: action.log }, log: action.log };\n } catch (err) {\n // fine to use instanceof because we're in the same module\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (!(err instanceof ParseError)) {\n throw err;\n }\n return { returnValues: { output: err.output }, log: err.output };\n }\n }\n\n throw new Error(`Invalid stopping method: ${earlyStoppingMethod}`);\n }\n\n /**\n * Load an agent from a json-like object describing it.\n */\n static async deserialize(\n data: SerializedAgent & {\n llm?: BaseLanguageModelInterface;\n tools?: ToolInterface[];\n }\n ): Promise<Agent> {\n switch (data._type) {\n case \"zero-shot-react-description\": {\n const { ZeroShotAgent } = await import(\"./mrkl/index.js\");\n return ZeroShotAgent.deserialize(data);\n }\n default:\n throw new Error(\"Unknown agent type\");\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"agent.cjs","names":["Serializable","RunnableSequence"],"sources":["../../src/agents/agent.ts"],"sourcesContent":["import type {\n StructuredToolInterface,\n ToolInterface,\n} from \"@langchain/core/tools\";\nimport type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { CallbackManager, Callbacks } from \"@langchain/core/callbacks/manager\";\nimport { BasePromptTemplate } from \"@langchain/core/prompts\";\nimport { AgentAction, AgentFinish, AgentStep } from \"@langchain/core/agents\";\nimport { BaseMessage } from \"@langchain/core/messages\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { Serializable } from \"@langchain/core/load/serializable\";\nimport {\n Runnable,\n patchConfig,\n type RunnableConfig,\n RunnableSequence,\n RunnableLike,\n} from \"@langchain/core/runnables\";\nimport { LLMChain } from \"../chains/llm_chain.js\";\nimport type {\n AgentActionOutputParser,\n AgentInput,\n RunnableMultiActionAgentInput,\n RunnableSingleActionAgentInput,\n SerializedAgent,\n StoppingMethod,\n} from \"./types.js\";\n\n/**\n * Record type for arguments passed to output parsers.\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type OutputParserArgs = Record<string, any>;\n\n/**\n * Error class for parse errors in LangChain. Contains information about\n * the error message and the output that caused the error.\n */\nclass ParseError extends Error {\n output: string;\n\n constructor(msg: string, output: string) {\n super(msg);\n this.output = output;\n }\n}\n\n/**\n * Abstract base class for agents in LangChain. Provides common\n * functionality for agents, such as handling inputs and outputs.\n */\nexport abstract class BaseAgent extends Serializable {\n declare ToolType: StructuredToolInterface;\n\n abstract get inputKeys(): string[];\n\n get returnValues(): string[] {\n return [\"output\"];\n }\n\n get allowedTools(): string[] | undefined {\n return undefined;\n }\n\n /**\n * Return the string type key uniquely identifying this class of agent.\n */\n _agentType(): string {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Return the string type key uniquely identifying multi or single action agents.\n */\n abstract _agentActionType(): string;\n\n /**\n * Return response when agent has been stopped due to max iterations\n */\n returnStoppedResponse(\n earlyStoppingMethod: StoppingMethod,\n _steps: AgentStep[],\n _inputs: ChainValues,\n _callbackManager?: CallbackManager\n ): Promise<AgentFinish> {\n if (earlyStoppingMethod === \"force\") {\n return Promise.resolve({\n returnValues: { output: \"Agent stopped due to max iterations.\" },\n log: \"\",\n });\n }\n\n throw new Error(`Invalid stopping method: ${earlyStoppingMethod}`);\n }\n\n /**\n * Prepare the agent for output, if needed\n */\n async prepareForOutput(\n _returnValues: AgentFinish[\"returnValues\"],\n _steps: AgentStep[]\n ): Promise<AgentFinish[\"returnValues\"]> {\n return {};\n }\n}\n\n/**\n * Abstract base class for single action agents in LangChain. Extends the\n * BaseAgent class and provides additional functionality specific to\n * single action agents.\n */\nexport abstract class BaseSingleActionAgent extends BaseAgent {\n _agentActionType(): string {\n return \"single\" as const;\n }\n\n /**\n * Decide what to do, given some input.\n *\n * @param steps - Steps the LLM has taken so far, along with observations from each.\n * @param inputs - User inputs.\n * @param callbackManager - Callback manager.\n *\n * @returns Action specifying what tool to use.\n */\n abstract plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager,\n config?: RunnableConfig\n ): Promise<AgentAction | AgentFinish>;\n}\n\n/**\n * Abstract base class for multi-action agents in LangChain. Extends the\n * BaseAgent class and provides additional functionality specific to\n * multi-action agents.\n */\nexport abstract class BaseMultiActionAgent extends BaseAgent {\n _agentActionType(): string {\n return \"multi\" as const;\n }\n\n /**\n * Decide what to do, given some input.\n *\n * @param steps - Steps the LLM has taken so far, along with observations from each.\n * @param inputs - User inputs.\n * @param callbackManager - Callback manager.\n *\n * @returns Actions specifying what tools to use.\n */\n abstract plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager,\n config?: RunnableConfig\n ): Promise<AgentAction[] | AgentFinish>;\n}\n\nfunction isAgentAction(input: unknown): input is AgentAction {\n return !Array.isArray(input) && (input as AgentAction)?.tool !== undefined;\n}\n\nexport function isRunnableAgent(x: BaseAgent) {\n return (\n (x as RunnableMultiActionAgent | RunnableSingleActionAgent).runnable !==\n undefined\n );\n}\n\n// TODO: Remove in the future. Only for backwards compatibility.\n// Allows for the creation of runnables with properties that will\n// be passed to the agent executor constructor.\nexport class AgentRunnableSequence<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunInput = any,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput = any,\n> extends RunnableSequence<RunInput, RunOutput> {\n streamRunnable?: boolean;\n\n singleAction: boolean;\n\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n static fromRunnables<RunInput = any, RunOutput = any>(\n [first, ...runnables]: [\n RunnableLike<RunInput>,\n ...RunnableLike[],\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunnableLike<any, RunOutput>,\n ],\n config: { singleAction: boolean; streamRunnable?: boolean; name?: string }\n ): AgentRunnableSequence<RunInput, Exclude<RunOutput, Error>> {\n const sequence = RunnableSequence.from(\n [first, ...runnables],\n config.name\n ) as AgentRunnableSequence<RunInput, Exclude<RunOutput, Error>>;\n sequence.singleAction = config.singleAction;\n sequence.streamRunnable = config.streamRunnable;\n return sequence;\n }\n\n static isAgentRunnableSequence(x: Runnable): x is AgentRunnableSequence {\n return typeof (x as AgentRunnableSequence).singleAction === \"boolean\";\n }\n}\n\n/**\n * Class representing a single-action agent powered by runnables.\n * Extends the BaseSingleActionAgent class and provides methods for\n * planning agent actions with runnables.\n */\nexport class RunnableSingleActionAgent extends BaseSingleActionAgent {\n lc_namespace = [\"langchain\", \"agents\", \"runnable\"];\n\n runnable: Runnable<\n ChainValues & { steps: AgentStep[] },\n AgentAction | AgentFinish\n >;\n\n get inputKeys(): string[] {\n return [];\n }\n\n /**\n * Whether to stream from the runnable or not.\n * If true, the underlying LLM is invoked in a streaming fashion to make it\n * possible to get access to the individual LLM tokens when using\n * `streamLog` with the Agent Executor. If false then LLM is invoked in a\n * non-streaming fashion and individual LLM tokens will not be available\n * in `streamLog`.\n *\n * Note that the runnable should still only stream a single action or\n * finish chunk.\n */\n streamRunnable = true;\n\n defaultRunName = \"RunnableAgent\";\n\n constructor(fields: RunnableSingleActionAgentInput) {\n super(fields);\n this.runnable = fields.runnable;\n this.defaultRunName =\n fields.defaultRunName ?? this.runnable.name ?? this.defaultRunName;\n this.streamRunnable = fields.streamRunnable ?? this.streamRunnable;\n }\n\n async plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager,\n config?: RunnableConfig\n ): Promise<AgentAction | AgentFinish> {\n const combinedInput = { ...inputs, steps };\n const combinedConfig = patchConfig(config, {\n callbacks: callbackManager,\n runName: this.defaultRunName,\n });\n if (this.streamRunnable) {\n const stream = await this.runnable.stream(combinedInput, combinedConfig);\n let finalOutput: AgentAction | AgentFinish | undefined;\n for await (const chunk of stream) {\n if (finalOutput === undefined) {\n finalOutput = chunk;\n } else {\n throw new Error(\n [\n `Multiple agent actions/finishes received in streamed agent output.`,\n `Set \"streamRunnable: false\" when initializing the agent to invoke this agent in non-streaming mode.`,\n ].join(\"\\n\")\n );\n }\n }\n if (finalOutput === undefined) {\n throw new Error(\n [\n \"No streaming output received from underlying runnable.\",\n `Set \"streamRunnable: false\" when initializing the agent to invoke this agent in non-streaming mode.`,\n ].join(\"\\n\")\n );\n }\n return finalOutput;\n } else {\n return this.runnable.invoke(combinedInput, combinedConfig);\n }\n }\n}\n\n/**\n * Class representing a multi-action agent powered by runnables.\n * Extends the BaseMultiActionAgent class and provides methods for\n * planning agent actions with runnables.\n */\nexport class RunnableMultiActionAgent extends BaseMultiActionAgent {\n lc_namespace = [\"langchain\", \"agents\", \"runnable\"];\n\n // TODO: Rename input to \"intermediate_steps\"\n runnable: Runnable<\n ChainValues & { steps: AgentStep[] },\n AgentAction[] | AgentAction | AgentFinish\n >;\n\n defaultRunName = \"RunnableAgent\";\n\n stop?: string[];\n\n streamRunnable = true;\n\n get inputKeys(): string[] {\n return [];\n }\n\n constructor(fields: RunnableMultiActionAgentInput) {\n super(fields);\n this.runnable = fields.runnable;\n this.stop = fields.stop;\n this.defaultRunName =\n fields.defaultRunName ?? this.runnable.name ?? this.defaultRunName;\n this.streamRunnable = fields.streamRunnable ?? this.streamRunnable;\n }\n\n async plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager,\n config?: RunnableConfig\n ): Promise<AgentAction[] | AgentFinish> {\n const combinedInput = { ...inputs, steps };\n const combinedConfig = patchConfig(config, {\n callbacks: callbackManager,\n runName: this.defaultRunName,\n });\n let output;\n if (this.streamRunnable) {\n const stream = await this.runnable.stream(combinedInput, combinedConfig);\n let finalOutput: AgentAction | AgentFinish | AgentAction[] | undefined;\n for await (const chunk of stream) {\n if (finalOutput === undefined) {\n finalOutput = chunk;\n } else {\n throw new Error(\n [\n `Multiple agent actions/finishes received in streamed agent output.`,\n `Set \"streamRunnable: false\" when initializing the agent to invoke this agent in non-streaming mode.`,\n ].join(\"\\n\")\n );\n }\n }\n if (finalOutput === undefined) {\n throw new Error(\n [\n \"No streaming output received from underlying runnable.\",\n `Set \"streamRunnable: false\" when initializing the agent to invoke this agent in non-streaming mode.`,\n ].join(\"\\n\")\n );\n }\n output = finalOutput;\n } else {\n output = await this.runnable.invoke(combinedInput, combinedConfig);\n }\n\n if (isAgentAction(output)) {\n return [output];\n }\n\n return output;\n }\n}\n\nexport class RunnableAgent extends RunnableMultiActionAgent {}\n\n/**\n * Interface for input data for creating a LLMSingleActionAgent.\n */\nexport interface LLMSingleActionAgentInput {\n llmChain: LLMChain;\n outputParser: AgentActionOutputParser;\n stop?: string[];\n}\n\n/**\n * Class representing a single action agent using a LLMChain in LangChain.\n * Extends the BaseSingleActionAgent class and provides methods for\n * planning agent actions based on LLMChain outputs.\n * @example\n * ```typescript\n * const customPromptTemplate = new CustomPromptTemplate({\n * tools: [new Calculator()],\n * inputVariables: [\"input\", \"agent_scratchpad\"],\n * });\n * const customOutputParser = new CustomOutputParser();\n * const agent = new LLMSingleActionAgent({\n * llmChain: new LLMChain({\n * prompt: customPromptTemplate,\n * llm: new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 }),\n * }),\n * outputParser: customOutputParser,\n * stop: [\"\\nObservation\"],\n * });\n * const executor = new AgentExecutor({\n * agent,\n * tools: [new Calculator()],\n * });\n * const result = await executor.invoke({\n * input:\n * \"Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?\",\n * });\n * ```\n */\nexport class LLMSingleActionAgent extends BaseSingleActionAgent {\n lc_namespace = [\"langchain\", \"agents\"];\n\n llmChain: LLMChain;\n\n outputParser: AgentActionOutputParser;\n\n stop?: string[];\n\n constructor(input: LLMSingleActionAgentInput) {\n super(input);\n this.stop = input.stop;\n this.llmChain = input.llmChain;\n this.outputParser = input.outputParser;\n }\n\n get inputKeys(): string[] {\n return this.llmChain.inputKeys;\n }\n\n /**\n * Decide what to do given some input.\n *\n * @param steps - Steps the LLM has taken so far, along with observations from each.\n * @param inputs - User inputs.\n * @param callbackManager - Callback manager.\n *\n * @returns Action specifying what tool to use.\n */\n async plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n const output = await this.llmChain.call(\n {\n intermediate_steps: steps,\n stop: this.stop,\n ...inputs,\n },\n callbackManager\n );\n return this.outputParser.parse(\n output[this.llmChain.outputKey],\n callbackManager\n );\n }\n}\n\n/**\n * Interface for arguments used to create an agent in LangChain.\n */\nexport interface AgentArgs {\n outputParser?: AgentActionOutputParser;\n\n callbacks?: Callbacks;\n\n /**\n * @deprecated Use `callbacks` instead.\n */\n callbackManager?: CallbackManager;\n}\n\n/**\n * Class responsible for calling a language model and deciding an action.\n *\n * @remarks This is driven by an LLMChain. The prompt in the LLMChain *must*\n * include a variable called \"agent_scratchpad\" where the agent can put its\n * intermediary work.\n */\nexport abstract class Agent extends BaseSingleActionAgent {\n llmChain: LLMChain;\n\n outputParser: AgentActionOutputParser | undefined;\n\n private _allowedTools?: string[] = undefined;\n\n get allowedTools(): string[] | undefined {\n return this._allowedTools;\n }\n\n get inputKeys(): string[] {\n return this.llmChain.inputKeys.filter((k) => k !== \"agent_scratchpad\");\n }\n\n constructor(input: AgentInput) {\n super(input);\n\n this.llmChain = input.llmChain;\n this._allowedTools = input.allowedTools;\n this.outputParser = input.outputParser;\n }\n\n /**\n * Prefix to append the observation with.\n */\n abstract observationPrefix(): string;\n\n /**\n * Prefix to append the LLM call with.\n */\n abstract llmPrefix(): string;\n\n /**\n * Return the string type key uniquely identifying this class of agent.\n */\n abstract _agentType(): string;\n\n /**\n * Get the default output parser for this agent.\n */\n static getDefaultOutputParser(\n _fields?: OutputParserArgs\n ): AgentActionOutputParser {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Create a prompt for this class\n *\n * @param _tools - List of tools the agent will have access to, used to format the prompt.\n * @param _fields - Additional fields used to format the prompt.\n *\n * @returns A PromptTemplate assembled from the given tools and fields.\n * */\n static createPrompt(\n _tools: StructuredToolInterface[],\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n _fields?: Record<string, any>\n ): BasePromptTemplate {\n throw new Error(\"Not implemented\");\n }\n\n /** Construct an agent from an LLM and a list of tools */\n static fromLLMAndTools(\n _llm: BaseLanguageModelInterface,\n _tools: StructuredToolInterface[],\n\n _args?: AgentArgs\n ): Agent {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Validate that appropriate tools are passed in\n */\n static validateTools(_tools: StructuredToolInterface[]): void {}\n\n _stop(): string[] {\n return [`\\n${this.observationPrefix()}`];\n }\n\n /**\n * Name of tool to use to terminate the chain.\n */\n finishToolName(): string {\n return \"Final Answer\";\n }\n\n /**\n * Construct a scratchpad to let the agent continue its thought process\n */\n async constructScratchPad(\n steps: AgentStep[]\n ): Promise<string | BaseMessage[]> {\n return steps.reduce(\n (thoughts, { action, observation }) =>\n thoughts +\n [\n action.log,\n `${this.observationPrefix()}${observation}`,\n this.llmPrefix(),\n ].join(\"\\n\"),\n \"\"\n );\n }\n\n private async _plan(\n steps: AgentStep[],\n inputs: ChainValues,\n suffix?: string,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n const thoughts = await this.constructScratchPad(steps);\n const newInputs: ChainValues = {\n ...inputs,\n agent_scratchpad: suffix ? `${thoughts}${suffix}` : thoughts,\n };\n\n if (this._stop().length !== 0) {\n newInputs.stop = this._stop();\n }\n\n const output = await this.llmChain.predict(newInputs, callbackManager);\n if (!this.outputParser) {\n throw new Error(\"Output parser not set\");\n }\n return this.outputParser.parse(output, callbackManager);\n }\n\n /**\n * Decide what to do given some input.\n *\n * @param steps - Steps the LLM has taken so far, along with observations from each.\n * @param inputs - User inputs.\n * @param callbackManager - Callback manager to use for this call.\n *\n * @returns Action specifying what tool to use.\n */\n plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n return this._plan(steps, inputs, undefined, callbackManager);\n }\n\n /**\n * Return response when agent has been stopped due to max iterations\n */\n async returnStoppedResponse(\n earlyStoppingMethod: StoppingMethod,\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentFinish> {\n if (earlyStoppingMethod === \"force\") {\n return {\n returnValues: { output: \"Agent stopped due to max iterations.\" },\n log: \"\",\n };\n }\n\n if (earlyStoppingMethod === \"generate\") {\n try {\n const action = await this._plan(\n steps,\n inputs,\n \"\\n\\nI now need to return a final answer based on the previous steps:\",\n callbackManager\n );\n if (\"returnValues\" in action) {\n return action;\n }\n\n return { returnValues: { output: action.log }, log: action.log };\n } catch (err) {\n // fine to use instanceof because we're in the same module\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (!(err instanceof ParseError)) {\n throw err;\n }\n return { returnValues: { output: err.output }, log: err.output };\n }\n }\n\n throw new Error(`Invalid stopping method: ${earlyStoppingMethod}`);\n }\n\n /**\n * Load an agent from a json-like object describing it.\n */\n static async deserialize(\n data: SerializedAgent & {\n llm?: BaseLanguageModelInterface;\n tools?: ToolInterface[];\n }\n ): Promise<Agent> {\n switch (data._type) {\n case \"zero-shot-react-description\": {\n const { ZeroShotAgent } = await import(\"./mrkl/index.js\");\n return ZeroShotAgent.deserialize(data);\n }\n default:\n throw new Error(\"Unknown agent type\");\n }\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","names":[],"sources":["../../src/agents/agent.ts"],"sourcesContent":["import type {\n StructuredToolInterface,\n ToolInterface,\n} from \"@langchain/core/tools\";\nimport type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { CallbackManager, Callbacks } from \"@langchain/core/callbacks/manager\";\nimport { BasePromptTemplate } from \"@langchain/core/prompts\";\nimport { AgentAction, AgentFinish, AgentStep } from \"@langchain/core/agents\";\nimport { BaseMessage } from \"@langchain/core/messages\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { Serializable } from \"@langchain/core/load/serializable\";\nimport {\n Runnable,\n patchConfig,\n type RunnableConfig,\n RunnableSequence,\n RunnableLike,\n} from \"@langchain/core/runnables\";\nimport { LLMChain } from \"../chains/llm_chain.js\";\nimport type {\n AgentActionOutputParser,\n AgentInput,\n RunnableMultiActionAgentInput,\n RunnableSingleActionAgentInput,\n SerializedAgent,\n StoppingMethod,\n} from \"./types.js\";\n\n/**\n * Record type for arguments passed to output parsers.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type OutputParserArgs = Record<string, any>;\n\n/**\n * Error class for parse errors in LangChain. Contains information about\n * the error message and the output that caused the error.\n */\nclass ParseError extends Error {\n output: string;\n\n constructor(msg: string, output: string) {\n super(msg);\n this.output = output;\n }\n}\n\n/**\n * Abstract base class for agents in LangChain. Provides common\n * functionality for agents, such as handling inputs and outputs.\n */\nexport abstract class BaseAgent extends Serializable {\n declare ToolType: StructuredToolInterface;\n\n abstract get inputKeys(): string[];\n\n get returnValues(): string[] {\n return [\"output\"];\n }\n\n get allowedTools(): string[] | undefined {\n return undefined;\n }\n\n /**\n * Return the string type key uniquely identifying this class of agent.\n */\n _agentType(): string {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Return the string type key uniquely identifying multi or single action agents.\n */\n abstract _agentActionType(): string;\n\n /**\n * Return response when agent has been stopped due to max iterations\n */\n returnStoppedResponse(\n earlyStoppingMethod: StoppingMethod,\n _steps: AgentStep[],\n _inputs: ChainValues,\n _callbackManager?: CallbackManager\n ): Promise<AgentFinish> {\n if (earlyStoppingMethod === \"force\") {\n return Promise.resolve({\n returnValues: { output: \"Agent stopped due to max iterations.\" },\n log: \"\",\n });\n }\n\n throw new Error(`Invalid stopping method: ${earlyStoppingMethod}`);\n }\n\n /**\n * Prepare the agent for output, if needed\n */\n async prepareForOutput(\n _returnValues: AgentFinish[\"returnValues\"],\n _steps: AgentStep[]\n ): Promise<AgentFinish[\"returnValues\"]> {\n return {};\n }\n}\n\n/**\n * Abstract base class for single action agents in LangChain. Extends the\n * BaseAgent class and provides additional functionality specific to\n * single action agents.\n */\nexport abstract class BaseSingleActionAgent extends BaseAgent {\n _agentActionType(): string {\n return \"single\" as const;\n }\n\n /**\n * Decide what to do, given some input.\n *\n * @param steps - Steps the LLM has taken so far, along with observations from each.\n * @param inputs - User inputs.\n * @param callbackManager - Callback manager.\n *\n * @returns Action specifying what tool to use.\n */\n abstract plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager,\n config?: RunnableConfig\n ): Promise<AgentAction | AgentFinish>;\n}\n\n/**\n * Abstract base class for multi-action agents in LangChain. Extends the\n * BaseAgent class and provides additional functionality specific to\n * multi-action agents.\n */\nexport abstract class BaseMultiActionAgent extends BaseAgent {\n _agentActionType(): string {\n return \"multi\" as const;\n }\n\n /**\n * Decide what to do, given some input.\n *\n * @param steps - Steps the LLM has taken so far, along with observations from each.\n * @param inputs - User inputs.\n * @param callbackManager - Callback manager.\n *\n * @returns Actions specifying what tools to use.\n */\n abstract plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager,\n config?: RunnableConfig\n ): Promise<AgentAction[] | AgentFinish>;\n}\n\nfunction isAgentAction(input: unknown): input is AgentAction {\n return !Array.isArray(input) && (input as AgentAction)?.tool !== undefined;\n}\n\nexport function isRunnableAgent(x: BaseAgent) {\n return (\n (x as RunnableMultiActionAgent | RunnableSingleActionAgent).runnable !==\n undefined\n );\n}\n\n// TODO: Remove in the future. Only for backwards compatibility.\n// Allows for the creation of runnables with properties that will\n// be passed to the agent executor constructor.\nexport class AgentRunnableSequence<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunInput = any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput = any,\n> extends RunnableSequence<RunInput, RunOutput> {\n streamRunnable?: boolean;\n\n singleAction: boolean;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static fromRunnables<RunInput = any, RunOutput = any>(\n [first, ...runnables]: [\n RunnableLike<RunInput>,\n ...RunnableLike[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n RunnableLike<any, RunOutput>,\n ],\n config: { singleAction: boolean; streamRunnable?: boolean; name?: string }\n ): AgentRunnableSequence<RunInput, Exclude<RunOutput, Error>> {\n const sequence = RunnableSequence.from(\n [first, ...runnables],\n config.name\n ) as AgentRunnableSequence<RunInput, Exclude<RunOutput, Error>>;\n sequence.singleAction = config.singleAction;\n sequence.streamRunnable = config.streamRunnable;\n return sequence;\n }\n\n static isAgentRunnableSequence(x: Runnable): x is AgentRunnableSequence {\n return typeof (x as AgentRunnableSequence).singleAction === \"boolean\";\n }\n}\n\n/**\n * Class representing a single-action agent powered by runnables.\n * Extends the BaseSingleActionAgent class and provides methods for\n * planning agent actions with runnables.\n */\nexport class RunnableSingleActionAgent extends BaseSingleActionAgent {\n lc_namespace = [\"langchain\", \"agents\", \"runnable\"];\n\n runnable: Runnable<\n ChainValues & { steps: AgentStep[] },\n AgentAction | AgentFinish\n >;\n\n get inputKeys(): string[] {\n return [];\n }\n\n /**\n * Whether to stream from the runnable or not.\n * If true, the underlying LLM is invoked in a streaming fashion to make it\n * possible to get access to the individual LLM tokens when using\n * `streamLog` with the Agent Executor. If false then LLM is invoked in a\n * non-streaming fashion and individual LLM tokens will not be available\n * in `streamLog`.\n *\n * Note that the runnable should still only stream a single action or\n * finish chunk.\n */\n streamRunnable = true;\n\n defaultRunName = \"RunnableAgent\";\n\n constructor(fields: RunnableSingleActionAgentInput) {\n super(fields);\n this.runnable = fields.runnable;\n this.defaultRunName =\n fields.defaultRunName ?? this.runnable.name ?? this.defaultRunName;\n this.streamRunnable = fields.streamRunnable ?? this.streamRunnable;\n }\n\n async plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager,\n config?: RunnableConfig\n ): Promise<AgentAction | AgentFinish> {\n const combinedInput = { ...inputs, steps };\n const combinedConfig = patchConfig(config, {\n callbacks: callbackManager,\n runName: this.defaultRunName,\n });\n if (this.streamRunnable) {\n const stream = await this.runnable.stream(combinedInput, combinedConfig);\n let finalOutput: AgentAction | AgentFinish | undefined;\n for await (const chunk of stream) {\n if (finalOutput === undefined) {\n finalOutput = chunk;\n } else {\n throw new Error(\n [\n `Multiple agent actions/finishes received in streamed agent output.`,\n `Set \"streamRunnable: false\" when initializing the agent to invoke this agent in non-streaming mode.`,\n ].join(\"\\n\")\n );\n }\n }\n if (finalOutput === undefined) {\n throw new Error(\n [\n \"No streaming output received from underlying runnable.\",\n `Set \"streamRunnable: false\" when initializing the agent to invoke this agent in non-streaming mode.`,\n ].join(\"\\n\")\n );\n }\n return finalOutput;\n } else {\n return this.runnable.invoke(combinedInput, combinedConfig);\n }\n }\n}\n\n/**\n * Class representing a multi-action agent powered by runnables.\n * Extends the BaseMultiActionAgent class and provides methods for\n * planning agent actions with runnables.\n */\nexport class RunnableMultiActionAgent extends BaseMultiActionAgent {\n lc_namespace = [\"langchain\", \"agents\", \"runnable\"];\n\n // TODO: Rename input to \"intermediate_steps\"\n runnable: Runnable<\n ChainValues & { steps: AgentStep[] },\n AgentAction[] | AgentAction | AgentFinish\n >;\n\n defaultRunName = \"RunnableAgent\";\n\n stop?: string[];\n\n streamRunnable = true;\n\n get inputKeys(): string[] {\n return [];\n }\n\n constructor(fields: RunnableMultiActionAgentInput) {\n super(fields);\n this.runnable = fields.runnable;\n this.stop = fields.stop;\n this.defaultRunName =\n fields.defaultRunName ?? this.runnable.name ?? this.defaultRunName;\n this.streamRunnable = fields.streamRunnable ?? this.streamRunnable;\n }\n\n async plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager,\n config?: RunnableConfig\n ): Promise<AgentAction[] | AgentFinish> {\n const combinedInput = { ...inputs, steps };\n const combinedConfig = patchConfig(config, {\n callbacks: callbackManager,\n runName: this.defaultRunName,\n });\n let output;\n if (this.streamRunnable) {\n const stream = await this.runnable.stream(combinedInput, combinedConfig);\n let finalOutput: AgentAction | AgentFinish | AgentAction[] | undefined;\n for await (const chunk of stream) {\n if (finalOutput === undefined) {\n finalOutput = chunk;\n } else {\n throw new Error(\n [\n `Multiple agent actions/finishes received in streamed agent output.`,\n `Set \"streamRunnable: false\" when initializing the agent to invoke this agent in non-streaming mode.`,\n ].join(\"\\n\")\n );\n }\n }\n if (finalOutput === undefined) {\n throw new Error(\n [\n \"No streaming output received from underlying runnable.\",\n `Set \"streamRunnable: false\" when initializing the agent to invoke this agent in non-streaming mode.`,\n ].join(\"\\n\")\n );\n }\n output = finalOutput;\n } else {\n output = await this.runnable.invoke(combinedInput, combinedConfig);\n }\n\n if (isAgentAction(output)) {\n return [output];\n }\n\n return output;\n }\n}\n\nexport class RunnableAgent extends RunnableMultiActionAgent {}\n\n/**\n * Interface for input data for creating a LLMSingleActionAgent.\n */\nexport interface LLMSingleActionAgentInput {\n llmChain: LLMChain;\n outputParser: AgentActionOutputParser;\n stop?: string[];\n}\n\n/**\n * Class representing a single action agent using a LLMChain in LangChain.\n * Extends the BaseSingleActionAgent class and provides methods for\n * planning agent actions based on LLMChain outputs.\n * @example\n * ```typescript\n * const customPromptTemplate = new CustomPromptTemplate({\n * tools: [new Calculator()],\n * inputVariables: [\"input\", \"agent_scratchpad\"],\n * });\n * const customOutputParser = new CustomOutputParser();\n * const agent = new LLMSingleActionAgent({\n * llmChain: new LLMChain({\n * prompt: customPromptTemplate,\n * llm: new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 }),\n * }),\n * outputParser: customOutputParser,\n * stop: [\"\\nObservation\"],\n * });\n * const executor = new AgentExecutor({\n * agent,\n * tools: [new Calculator()],\n * });\n * const result = await executor.invoke({\n * input:\n * \"Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?\",\n * });\n * ```\n */\nexport class LLMSingleActionAgent extends BaseSingleActionAgent {\n lc_namespace = [\"langchain\", \"agents\"];\n\n llmChain: LLMChain;\n\n outputParser: AgentActionOutputParser;\n\n stop?: string[];\n\n constructor(input: LLMSingleActionAgentInput) {\n super(input);\n this.stop = input.stop;\n this.llmChain = input.llmChain;\n this.outputParser = input.outputParser;\n }\n\n get inputKeys(): string[] {\n return this.llmChain.inputKeys;\n }\n\n /**\n * Decide what to do given some input.\n *\n * @param steps - Steps the LLM has taken so far, along with observations from each.\n * @param inputs - User inputs.\n * @param callbackManager - Callback manager.\n *\n * @returns Action specifying what tool to use.\n */\n async plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n const output = await this.llmChain.call(\n {\n intermediate_steps: steps,\n stop: this.stop,\n ...inputs,\n },\n callbackManager\n );\n return this.outputParser.parse(\n output[this.llmChain.outputKey],\n callbackManager\n );\n }\n}\n\n/**\n * Interface for arguments used to create an agent in LangChain.\n */\nexport interface AgentArgs {\n outputParser?: AgentActionOutputParser;\n\n callbacks?: Callbacks;\n\n /**\n * @deprecated Use `callbacks` instead.\n */\n callbackManager?: CallbackManager;\n}\n\n/**\n * Class responsible for calling a language model and deciding an action.\n *\n * @remarks This is driven by an LLMChain. The prompt in the LLMChain *must*\n * include a variable called \"agent_scratchpad\" where the agent can put its\n * intermediary work.\n */\nexport abstract class Agent extends BaseSingleActionAgent {\n llmChain: LLMChain;\n\n outputParser: AgentActionOutputParser | undefined;\n\n private _allowedTools?: string[] = undefined;\n\n get allowedTools(): string[] | undefined {\n return this._allowedTools;\n }\n\n get inputKeys(): string[] {\n return this.llmChain.inputKeys.filter((k) => k !== \"agent_scratchpad\");\n }\n\n constructor(input: AgentInput) {\n super(input);\n\n this.llmChain = input.llmChain;\n this._allowedTools = input.allowedTools;\n this.outputParser = input.outputParser;\n }\n\n /**\n * Prefix to append the observation with.\n */\n abstract observationPrefix(): string;\n\n /**\n * Prefix to append the LLM call with.\n */\n abstract llmPrefix(): string;\n\n /**\n * Return the string type key uniquely identifying this class of agent.\n */\n abstract _agentType(): string;\n\n /**\n * Get the default output parser for this agent.\n */\n static getDefaultOutputParser(\n _fields?: OutputParserArgs\n ): AgentActionOutputParser {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Create a prompt for this class\n *\n * @param _tools - List of tools the agent will have access to, used to format the prompt.\n * @param _fields - Additional fields used to format the prompt.\n *\n * @returns A PromptTemplate assembled from the given tools and fields.\n * */\n static createPrompt(\n _tools: StructuredToolInterface[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _fields?: Record<string, any>\n ): BasePromptTemplate {\n throw new Error(\"Not implemented\");\n }\n\n /** Construct an agent from an LLM and a list of tools */\n static fromLLMAndTools(\n _llm: BaseLanguageModelInterface,\n _tools: StructuredToolInterface[],\n\n _args?: AgentArgs\n ): Agent {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Validate that appropriate tools are passed in\n */\n static validateTools(_tools: StructuredToolInterface[]): void {}\n\n _stop(): string[] {\n return [`\\n${this.observationPrefix()}`];\n }\n\n /**\n * Name of tool to use to terminate the chain.\n */\n finishToolName(): string {\n return \"Final Answer\";\n }\n\n /**\n * Construct a scratchpad to let the agent continue its thought process\n */\n async constructScratchPad(\n steps: AgentStep[]\n ): Promise<string | BaseMessage[]> {\n return steps.reduce(\n (thoughts, { action, observation }) =>\n thoughts +\n [\n action.log,\n `${this.observationPrefix()}${observation}`,\n this.llmPrefix(),\n ].join(\"\\n\"),\n \"\"\n );\n }\n\n private async _plan(\n steps: AgentStep[],\n inputs: ChainValues,\n suffix?: string,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n const thoughts = await this.constructScratchPad(steps);\n const newInputs: ChainValues = {\n ...inputs,\n agent_scratchpad: suffix ? `${thoughts}${suffix}` : thoughts,\n };\n\n if (this._stop().length !== 0) {\n newInputs.stop = this._stop();\n }\n\n const output = await this.llmChain.predict(newInputs, callbackManager);\n if (!this.outputParser) {\n throw new Error(\"Output parser not set\");\n }\n return this.outputParser.parse(output, callbackManager);\n }\n\n /**\n * Decide what to do given some input.\n *\n * @param steps - Steps the LLM has taken so far, along with observations from each.\n * @param inputs - User inputs.\n * @param callbackManager - Callback manager to use for this call.\n *\n * @returns Action specifying what tool to use.\n */\n plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n return this._plan(steps, inputs, undefined, callbackManager);\n }\n\n /**\n * Return response when agent has been stopped due to max iterations\n */\n async returnStoppedResponse(\n earlyStoppingMethod: StoppingMethod,\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentFinish> {\n if (earlyStoppingMethod === \"force\") {\n return {\n returnValues: { output: \"Agent stopped due to max iterations.\" },\n log: \"\",\n };\n }\n\n if (earlyStoppingMethod === \"generate\") {\n try {\n const action = await this._plan(\n steps,\n inputs,\n \"\\n\\nI now need to return a final answer based on the previous steps:\",\n callbackManager\n );\n if (\"returnValues\" in action) {\n return action;\n }\n\n return { returnValues: { output: action.log }, log: action.log };\n } catch (err) {\n // fine to use instanceof because we're in the same module\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (!(err instanceof ParseError)) {\n throw err;\n }\n return { returnValues: { output: err.output }, log: err.output };\n }\n }\n\n throw new Error(`Invalid stopping method: ${earlyStoppingMethod}`);\n }\n\n /**\n * Load an agent from a json-like object describing it.\n */\n static async deserialize(\n data: SerializedAgent & {\n llm?: BaseLanguageModelInterface;\n tools?: ToolInterface[];\n }\n ): Promise<Agent> {\n switch (data._type) {\n case \"zero-shot-react-description\": {\n const { ZeroShotAgent } = await import(\"./mrkl/index.js\");\n return ZeroShotAgent.deserialize(data);\n }\n default:\n throw new Error(\"Unknown agent type\");\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","names":[],"sources":["../../src/agents/agent.ts"],"sourcesContent":["import type {\n StructuredToolInterface,\n ToolInterface,\n} from \"@langchain/core/tools\";\nimport type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { CallbackManager, Callbacks } from \"@langchain/core/callbacks/manager\";\nimport { BasePromptTemplate } from \"@langchain/core/prompts\";\nimport { AgentAction, AgentFinish, AgentStep } from \"@langchain/core/agents\";\nimport { BaseMessage } from \"@langchain/core/messages\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport { Serializable } from \"@langchain/core/load/serializable\";\nimport {\n Runnable,\n patchConfig,\n type RunnableConfig,\n RunnableSequence,\n RunnableLike,\n} from \"@langchain/core/runnables\";\nimport { LLMChain } from \"../chains/llm_chain.js\";\nimport type {\n AgentActionOutputParser,\n AgentInput,\n RunnableMultiActionAgentInput,\n RunnableSingleActionAgentInput,\n SerializedAgent,\n StoppingMethod,\n} from \"./types.js\";\n\n/**\n * Record type for arguments passed to output parsers.\n */\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\nexport type OutputParserArgs = Record<string, any>;\n\n/**\n * Error class for parse errors in LangChain. Contains information about\n * the error message and the output that caused the error.\n */\nclass ParseError extends Error {\n output: string;\n\n constructor(msg: string, output: string) {\n super(msg);\n this.output = output;\n }\n}\n\n/**\n * Abstract base class for agents in LangChain. Provides common\n * functionality for agents, such as handling inputs and outputs.\n */\nexport abstract class BaseAgent extends Serializable {\n declare ToolType: StructuredToolInterface;\n\n abstract get inputKeys(): string[];\n\n get returnValues(): string[] {\n return [\"output\"];\n }\n\n get allowedTools(): string[] | undefined {\n return undefined;\n }\n\n /**\n * Return the string type key uniquely identifying this class of agent.\n */\n _agentType(): string {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Return the string type key uniquely identifying multi or single action agents.\n */\n abstract _agentActionType(): string;\n\n /**\n * Return response when agent has been stopped due to max iterations\n */\n returnStoppedResponse(\n earlyStoppingMethod: StoppingMethod,\n _steps: AgentStep[],\n _inputs: ChainValues,\n _callbackManager?: CallbackManager\n ): Promise<AgentFinish> {\n if (earlyStoppingMethod === \"force\") {\n return Promise.resolve({\n returnValues: { output: \"Agent stopped due to max iterations.\" },\n log: \"\",\n });\n }\n\n throw new Error(`Invalid stopping method: ${earlyStoppingMethod}`);\n }\n\n /**\n * Prepare the agent for output, if needed\n */\n async prepareForOutput(\n _returnValues: AgentFinish[\"returnValues\"],\n _steps: AgentStep[]\n ): Promise<AgentFinish[\"returnValues\"]> {\n return {};\n }\n}\n\n/**\n * Abstract base class for single action agents in LangChain. Extends the\n * BaseAgent class and provides additional functionality specific to\n * single action agents.\n */\nexport abstract class BaseSingleActionAgent extends BaseAgent {\n _agentActionType(): string {\n return \"single\" as const;\n }\n\n /**\n * Decide what to do, given some input.\n *\n * @param steps - Steps the LLM has taken so far, along with observations from each.\n * @param inputs - User inputs.\n * @param callbackManager - Callback manager.\n *\n * @returns Action specifying what tool to use.\n */\n abstract plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager,\n config?: RunnableConfig\n ): Promise<AgentAction | AgentFinish>;\n}\n\n/**\n * Abstract base class for multi-action agents in LangChain. Extends the\n * BaseAgent class and provides additional functionality specific to\n * multi-action agents.\n */\nexport abstract class BaseMultiActionAgent extends BaseAgent {\n _agentActionType(): string {\n return \"multi\" as const;\n }\n\n /**\n * Decide what to do, given some input.\n *\n * @param steps - Steps the LLM has taken so far, along with observations from each.\n * @param inputs - User inputs.\n * @param callbackManager - Callback manager.\n *\n * @returns Actions specifying what tools to use.\n */\n abstract plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager,\n config?: RunnableConfig\n ): Promise<AgentAction[] | AgentFinish>;\n}\n\nfunction isAgentAction(input: unknown): input is AgentAction {\n return !Array.isArray(input) && (input as AgentAction)?.tool !== undefined;\n}\n\nexport function isRunnableAgent(x: BaseAgent) {\n return (\n (x as RunnableMultiActionAgent | RunnableSingleActionAgent).runnable !==\n undefined\n );\n}\n\n// TODO: Remove in the future. Only for backwards compatibility.\n// Allows for the creation of runnables with properties that will\n// be passed to the agent executor constructor.\nexport class AgentRunnableSequence<\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunInput = any,\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunOutput = any,\n> extends RunnableSequence<RunInput, RunOutput> {\n streamRunnable?: boolean;\n\n singleAction: boolean;\n\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n static fromRunnables<RunInput = any, RunOutput = any>(\n [first, ...runnables]: [\n RunnableLike<RunInput>,\n ...RunnableLike[],\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n RunnableLike<any, RunOutput>,\n ],\n config: { singleAction: boolean; streamRunnable?: boolean; name?: string }\n ): AgentRunnableSequence<RunInput, Exclude<RunOutput, Error>> {\n const sequence = RunnableSequence.from(\n [first, ...runnables],\n config.name\n ) as AgentRunnableSequence<RunInput, Exclude<RunOutput, Error>>;\n sequence.singleAction = config.singleAction;\n sequence.streamRunnable = config.streamRunnable;\n return sequence;\n }\n\n static isAgentRunnableSequence(x: Runnable): x is AgentRunnableSequence {\n return typeof (x as AgentRunnableSequence).singleAction === \"boolean\";\n }\n}\n\n/**\n * Class representing a single-action agent powered by runnables.\n * Extends the BaseSingleActionAgent class and provides methods for\n * planning agent actions with runnables.\n */\nexport class RunnableSingleActionAgent extends BaseSingleActionAgent {\n lc_namespace = [\"langchain\", \"agents\", \"runnable\"];\n\n runnable: Runnable<\n ChainValues & { steps: AgentStep[] },\n AgentAction | AgentFinish\n >;\n\n get inputKeys(): string[] {\n return [];\n }\n\n /**\n * Whether to stream from the runnable or not.\n * If true, the underlying LLM is invoked in a streaming fashion to make it\n * possible to get access to the individual LLM tokens when using\n * `streamLog` with the Agent Executor. If false then LLM is invoked in a\n * non-streaming fashion and individual LLM tokens will not be available\n * in `streamLog`.\n *\n * Note that the runnable should still only stream a single action or\n * finish chunk.\n */\n streamRunnable = true;\n\n defaultRunName = \"RunnableAgent\";\n\n constructor(fields: RunnableSingleActionAgentInput) {\n super(fields);\n this.runnable = fields.runnable;\n this.defaultRunName =\n fields.defaultRunName ?? this.runnable.name ?? this.defaultRunName;\n this.streamRunnable = fields.streamRunnable ?? this.streamRunnable;\n }\n\n async plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager,\n config?: RunnableConfig\n ): Promise<AgentAction | AgentFinish> {\n const combinedInput = { ...inputs, steps };\n const combinedConfig = patchConfig(config, {\n callbacks: callbackManager,\n runName: this.defaultRunName,\n });\n if (this.streamRunnable) {\n const stream = await this.runnable.stream(combinedInput, combinedConfig);\n let finalOutput: AgentAction | AgentFinish | undefined;\n for await (const chunk of stream) {\n if (finalOutput === undefined) {\n finalOutput = chunk;\n } else {\n throw new Error(\n [\n `Multiple agent actions/finishes received in streamed agent output.`,\n `Set \"streamRunnable: false\" when initializing the agent to invoke this agent in non-streaming mode.`,\n ].join(\"\\n\")\n );\n }\n }\n if (finalOutput === undefined) {\n throw new Error(\n [\n \"No streaming output received from underlying runnable.\",\n `Set \"streamRunnable: false\" when initializing the agent to invoke this agent in non-streaming mode.`,\n ].join(\"\\n\")\n );\n }\n return finalOutput;\n } else {\n return this.runnable.invoke(combinedInput, combinedConfig);\n }\n }\n}\n\n/**\n * Class representing a multi-action agent powered by runnables.\n * Extends the BaseMultiActionAgent class and provides methods for\n * planning agent actions with runnables.\n */\nexport class RunnableMultiActionAgent extends BaseMultiActionAgent {\n lc_namespace = [\"langchain\", \"agents\", \"runnable\"];\n\n // TODO: Rename input to \"intermediate_steps\"\n runnable: Runnable<\n ChainValues & { steps: AgentStep[] },\n AgentAction[] | AgentAction | AgentFinish\n >;\n\n defaultRunName = \"RunnableAgent\";\n\n stop?: string[];\n\n streamRunnable = true;\n\n get inputKeys(): string[] {\n return [];\n }\n\n constructor(fields: RunnableMultiActionAgentInput) {\n super(fields);\n this.runnable = fields.runnable;\n this.stop = fields.stop;\n this.defaultRunName =\n fields.defaultRunName ?? this.runnable.name ?? this.defaultRunName;\n this.streamRunnable = fields.streamRunnable ?? this.streamRunnable;\n }\n\n async plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager,\n config?: RunnableConfig\n ): Promise<AgentAction[] | AgentFinish> {\n const combinedInput = { ...inputs, steps };\n const combinedConfig = patchConfig(config, {\n callbacks: callbackManager,\n runName: this.defaultRunName,\n });\n let output;\n if (this.streamRunnable) {\n const stream = await this.runnable.stream(combinedInput, combinedConfig);\n let finalOutput: AgentAction | AgentFinish | AgentAction[] | undefined;\n for await (const chunk of stream) {\n if (finalOutput === undefined) {\n finalOutput = chunk;\n } else {\n throw new Error(\n [\n `Multiple agent actions/finishes received in streamed agent output.`,\n `Set \"streamRunnable: false\" when initializing the agent to invoke this agent in non-streaming mode.`,\n ].join(\"\\n\")\n );\n }\n }\n if (finalOutput === undefined) {\n throw new Error(\n [\n \"No streaming output received from underlying runnable.\",\n `Set \"streamRunnable: false\" when initializing the agent to invoke this agent in non-streaming mode.`,\n ].join(\"\\n\")\n );\n }\n output = finalOutput;\n } else {\n output = await this.runnable.invoke(combinedInput, combinedConfig);\n }\n\n if (isAgentAction(output)) {\n return [output];\n }\n\n return output;\n }\n}\n\nexport class RunnableAgent extends RunnableMultiActionAgent {}\n\n/**\n * Interface for input data for creating a LLMSingleActionAgent.\n */\nexport interface LLMSingleActionAgentInput {\n llmChain: LLMChain;\n outputParser: AgentActionOutputParser;\n stop?: string[];\n}\n\n/**\n * Class representing a single action agent using a LLMChain in LangChain.\n * Extends the BaseSingleActionAgent class and provides methods for\n * planning agent actions based on LLMChain outputs.\n * @example\n * ```typescript\n * const customPromptTemplate = new CustomPromptTemplate({\n * tools: [new Calculator()],\n * inputVariables: [\"input\", \"agent_scratchpad\"],\n * });\n * const customOutputParser = new CustomOutputParser();\n * const agent = new LLMSingleActionAgent({\n * llmChain: new LLMChain({\n * prompt: customPromptTemplate,\n * llm: new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 }),\n * }),\n * outputParser: customOutputParser,\n * stop: [\"\\nObservation\"],\n * });\n * const executor = new AgentExecutor({\n * agent,\n * tools: [new Calculator()],\n * });\n * const result = await executor.invoke({\n * input:\n * \"Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?\",\n * });\n * ```\n */\nexport class LLMSingleActionAgent extends BaseSingleActionAgent {\n lc_namespace = [\"langchain\", \"agents\"];\n\n llmChain: LLMChain;\n\n outputParser: AgentActionOutputParser;\n\n stop?: string[];\n\n constructor(input: LLMSingleActionAgentInput) {\n super(input);\n this.stop = input.stop;\n this.llmChain = input.llmChain;\n this.outputParser = input.outputParser;\n }\n\n get inputKeys(): string[] {\n return this.llmChain.inputKeys;\n }\n\n /**\n * Decide what to do given some input.\n *\n * @param steps - Steps the LLM has taken so far, along with observations from each.\n * @param inputs - User inputs.\n * @param callbackManager - Callback manager.\n *\n * @returns Action specifying what tool to use.\n */\n async plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n const output = await this.llmChain.call(\n {\n intermediate_steps: steps,\n stop: this.stop,\n ...inputs,\n },\n callbackManager\n );\n return this.outputParser.parse(\n output[this.llmChain.outputKey],\n callbackManager\n );\n }\n}\n\n/**\n * Interface for arguments used to create an agent in LangChain.\n */\nexport interface AgentArgs {\n outputParser?: AgentActionOutputParser;\n\n callbacks?: Callbacks;\n\n /**\n * @deprecated Use `callbacks` instead.\n */\n callbackManager?: CallbackManager;\n}\n\n/**\n * Class responsible for calling a language model and deciding an action.\n *\n * @remarks This is driven by an LLMChain. The prompt in the LLMChain *must*\n * include a variable called \"agent_scratchpad\" where the agent can put its\n * intermediary work.\n */\nexport abstract class Agent extends BaseSingleActionAgent {\n llmChain: LLMChain;\n\n outputParser: AgentActionOutputParser | undefined;\n\n private _allowedTools?: string[] = undefined;\n\n get allowedTools(): string[] | undefined {\n return this._allowedTools;\n }\n\n get inputKeys(): string[] {\n return this.llmChain.inputKeys.filter((k) => k !== \"agent_scratchpad\");\n }\n\n constructor(input: AgentInput) {\n super(input);\n\n this.llmChain = input.llmChain;\n this._allowedTools = input.allowedTools;\n this.outputParser = input.outputParser;\n }\n\n /**\n * Prefix to append the observation with.\n */\n abstract observationPrefix(): string;\n\n /**\n * Prefix to append the LLM call with.\n */\n abstract llmPrefix(): string;\n\n /**\n * Return the string type key uniquely identifying this class of agent.\n */\n abstract _agentType(): string;\n\n /**\n * Get the default output parser for this agent.\n */\n static getDefaultOutputParser(\n _fields?: OutputParserArgs\n ): AgentActionOutputParser {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Create a prompt for this class\n *\n * @param _tools - List of tools the agent will have access to, used to format the prompt.\n * @param _fields - Additional fields used to format the prompt.\n *\n * @returns A PromptTemplate assembled from the given tools and fields.\n * */\n static createPrompt(\n _tools: StructuredToolInterface[],\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n _fields?: Record<string, any>\n ): BasePromptTemplate {\n throw new Error(\"Not implemented\");\n }\n\n /** Construct an agent from an LLM and a list of tools */\n static fromLLMAndTools(\n _llm: BaseLanguageModelInterface,\n _tools: StructuredToolInterface[],\n\n _args?: AgentArgs\n ): Agent {\n throw new Error(\"Not implemented\");\n }\n\n /**\n * Validate that appropriate tools are passed in\n */\n static validateTools(_tools: StructuredToolInterface[]): void {}\n\n _stop(): string[] {\n return [`\\n${this.observationPrefix()}`];\n }\n\n /**\n * Name of tool to use to terminate the chain.\n */\n finishToolName(): string {\n return \"Final Answer\";\n }\n\n /**\n * Construct a scratchpad to let the agent continue its thought process\n */\n async constructScratchPad(\n steps: AgentStep[]\n ): Promise<string | BaseMessage[]> {\n return steps.reduce(\n (thoughts, { action, observation }) =>\n thoughts +\n [\n action.log,\n `${this.observationPrefix()}${observation}`,\n this.llmPrefix(),\n ].join(\"\\n\"),\n \"\"\n );\n }\n\n private async _plan(\n steps: AgentStep[],\n inputs: ChainValues,\n suffix?: string,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n const thoughts = await this.constructScratchPad(steps);\n const newInputs: ChainValues = {\n ...inputs,\n agent_scratchpad: suffix ? `${thoughts}${suffix}` : thoughts,\n };\n\n if (this._stop().length !== 0) {\n newInputs.stop = this._stop();\n }\n\n const output = await this.llmChain.predict(newInputs, callbackManager);\n if (!this.outputParser) {\n throw new Error(\"Output parser not set\");\n }\n return this.outputParser.parse(output, callbackManager);\n }\n\n /**\n * Decide what to do given some input.\n *\n * @param steps - Steps the LLM has taken so far, along with observations from each.\n * @param inputs - User inputs.\n * @param callbackManager - Callback manager to use for this call.\n *\n * @returns Action specifying what tool to use.\n */\n plan(\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n return this._plan(steps, inputs, undefined, callbackManager);\n }\n\n /**\n * Return response when agent has been stopped due to max iterations\n */\n async returnStoppedResponse(\n earlyStoppingMethod: StoppingMethod,\n steps: AgentStep[],\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentFinish> {\n if (earlyStoppingMethod === \"force\") {\n return {\n returnValues: { output: \"Agent stopped due to max iterations.\" },\n log: \"\",\n };\n }\n\n if (earlyStoppingMethod === \"generate\") {\n try {\n const action = await this._plan(\n steps,\n inputs,\n \"\\n\\nI now need to return a final answer based on the previous steps:\",\n callbackManager\n );\n if (\"returnValues\" in action) {\n return action;\n }\n\n return { returnValues: { output: action.log }, log: action.log };\n } catch (err) {\n // fine to use instanceof because we're in the same module\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (!(err instanceof ParseError)) {\n throw err;\n }\n return { returnValues: { output: err.output }, log: err.output };\n }\n }\n\n throw new Error(`Invalid stopping method: ${earlyStoppingMethod}`);\n }\n\n /**\n * Load an agent from a json-like object describing it.\n */\n static async deserialize(\n data: SerializedAgent & {\n llm?: BaseLanguageModelInterface;\n tools?: ToolInterface[];\n }\n ): Promise<Agent> {\n switch (data._type) {\n case \"zero-shot-react-description\": {\n const { ZeroShotAgent } = await import(\"./mrkl/index.js\");\n return ZeroShotAgent.deserialize(data);\n }\n default:\n throw new Error(\"Unknown agent type\");\n }\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"executor.cjs","names":["Serializable","CallbackManager","Tool","BaseChain","Runnable","AgentRunnableSequence","RunnableSingleActionAgent","RunnableMultiActionAgent","isRunnableAgent","OutputParserException","ToolInputParsingException"],"sources":["../../src/agents/executor.ts"],"sourcesContent":["import {\n type StructuredToolInterface,\n type ToolInterface,\n ToolInputParsingException,\n Tool,\n} from \"@langchain/core/tools\";\nimport {\n Runnable,\n type RunnableConfig,\n patchConfig,\n} from \"@langchain/core/runnables\";\nimport { AgentAction, AgentFinish, AgentStep } from \"@langchain/core/agents\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n CallbackManager,\n CallbackManagerForChainRun,\n Callbacks,\n} from \"@langchain/core/callbacks/manager\";\nimport { OutputParserException } from \"@langchain/core/output_parsers\";\nimport { Serializable } from \"@langchain/core/load/serializable\";\nimport { SerializedLLMChain } from \"../chains/serde.js\";\nimport { StoppingMethod } from \"./types.js\";\nimport {\n AgentRunnableSequence,\n BaseMultiActionAgent,\n BaseSingleActionAgent,\n RunnableMultiActionAgent,\n RunnableSingleActionAgent,\n isRunnableAgent,\n} from \"./agent.js\";\nimport { BaseChain, ChainInputs } from \"../chains/base.js\";\n\ninterface AgentExecutorIteratorInput {\n agentExecutor: AgentExecutor;\n inputs: Record<string, string>;\n config?: RunnableConfig;\n /** @deprecated Use \"config\" */\n callbacks?: Callbacks;\n /** @deprecated Use \"config\" */\n tags?: string[];\n /** @deprecated Use \"config\" */\n metadata?: Record<string, unknown>;\n runName?: string;\n runManager?: CallbackManagerForChainRun;\n}\n\nexport class AgentExecutorIterator\n extends Serializable\n implements AgentExecutorIteratorInput\n{\n lc_namespace = [\"langchain\", \"agents\", \"executor_iterator\"];\n\n agentExecutor: AgentExecutor;\n\n inputs: Record<string, string>;\n\n config?: RunnableConfig;\n\n /** @deprecated Use \"config\" */\n callbacks?: Callbacks;\n\n /** @deprecated Use \"config\" */\n tags: string[] | undefined;\n\n /** @deprecated Use \"config\" */\n metadata: Record<string, unknown> | undefined;\n\n /** @deprecated Use \"config\" */\n runName: string | undefined;\n\n private _finalOutputs: Record<string, unknown> | undefined;\n\n get finalOutputs(): Record<string, unknown> | undefined {\n return this._finalOutputs;\n }\n\n /** Intended to be used as a setter method, needs to be async. */\n async setFinalOutputs(value: Record<string, unknown> | undefined) {\n this._finalOutputs = undefined;\n if (value) {\n const preparedOutputs: Record<string, unknown> =\n await this.agentExecutor.prepOutputs(this.inputs, value, true);\n this._finalOutputs = preparedOutputs;\n }\n }\n\n runManager: CallbackManagerForChainRun | undefined;\n\n intermediateSteps: AgentStep[] = [];\n\n iterations = 0;\n\n get nameToToolMap(): Record<string, ToolInterface> {\n const toolMap = this.agentExecutor.tools.map((tool) => ({\n [tool.name]: tool,\n }));\n return Object.assign({}, ...toolMap);\n }\n\n constructor(fields: AgentExecutorIteratorInput) {\n super(fields);\n this.agentExecutor = fields.agentExecutor;\n this.inputs = fields.inputs;\n this.callbacks = fields.callbacks;\n this.tags = fields.tags;\n this.metadata = fields.metadata;\n this.runName = fields.runName;\n this.runManager = fields.runManager;\n this.config = fields.config;\n }\n\n /**\n * Reset the iterator to its initial state, clearing intermediate steps,\n * iterations, and the final output.\n */\n reset(): void {\n this.intermediateSteps = [];\n this.iterations = 0;\n this._finalOutputs = undefined;\n }\n\n updateIterations(): void {\n this.iterations += 1;\n }\n\n async *streamIterator() {\n this.reset();\n\n // Loop to handle iteration\n while (true) {\n try {\n if (this.iterations === 0) {\n await this.onFirstStep();\n }\n\n const result = await this._callNext();\n yield result;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (\n \"message\" in e &&\n e.message.startsWith(\"Final outputs already reached: \")\n ) {\n if (!this.finalOutputs) {\n throw e;\n }\n return this.finalOutputs;\n }\n if (this.runManager) {\n await this.runManager.handleChainError(e);\n }\n throw e;\n }\n }\n }\n\n /**\n * Perform any necessary setup for the first step\n * of the asynchronous iterator.\n */\n async onFirstStep(): Promise<void> {\n if (this.iterations === 0) {\n const callbackManager = await CallbackManager.configure(\n this.callbacks ?? this.config?.callbacks,\n this.agentExecutor.callbacks,\n this.tags ?? this.config?.tags,\n this.agentExecutor.tags,\n this.metadata ?? this.config?.metadata,\n this.agentExecutor.metadata,\n {\n verbose: this.agentExecutor.verbose,\n }\n );\n this.runManager = await callbackManager?.handleChainStart(\n this.agentExecutor.toJSON(),\n this.inputs,\n this.config?.runId,\n undefined,\n this.tags ?? this.config?.tags,\n this.metadata ?? this.config?.metadata,\n this.runName ?? this.config?.runName\n );\n if (this.config !== undefined) {\n delete this.config.runId;\n }\n }\n }\n\n /**\n * Execute the next step in the chain using the\n * AgentExecutor's _takeNextStep method.\n */\n async _executeNextStep(\n runManager?: CallbackManagerForChainRun\n ): Promise<AgentFinish | AgentStep[]> {\n return this.agentExecutor._takeNextStep(\n this.nameToToolMap,\n this.inputs,\n this.intermediateSteps,\n runManager,\n this.config\n );\n }\n\n /**\n * Process the output of the next step,\n * handling AgentFinish and tool return cases.\n */\n async _processNextStepOutput(\n nextStepOutput: AgentFinish | AgentStep[],\n runManager?: CallbackManagerForChainRun\n ): Promise<Record<string, string | AgentStep[]>> {\n if (\"returnValues\" in nextStepOutput) {\n const output = await this.agentExecutor._return(\n nextStepOutput as AgentFinish,\n this.intermediateSteps,\n runManager\n );\n if (this.runManager) {\n await this.runManager.handleChainEnd(output);\n }\n await this.setFinalOutputs(output);\n return output;\n }\n\n this.intermediateSteps = this.intermediateSteps.concat(\n nextStepOutput as AgentStep[]\n );\n\n let output: Record<string, string | AgentStep[]> = {};\n if (Array.isArray(nextStepOutput) && nextStepOutput.length === 1) {\n const nextStep = nextStepOutput[0];\n const toolReturn = await this.agentExecutor._getToolReturn(nextStep);\n if (toolReturn) {\n output = await this.agentExecutor._return(\n toolReturn,\n this.intermediateSteps,\n runManager\n );\n await this.runManager?.handleChainEnd(output);\n await this.setFinalOutputs(output);\n }\n }\n output = { intermediateSteps: nextStepOutput as AgentStep[] };\n return output;\n }\n\n async _stop(): Promise<Record<string, unknown>> {\n const output = await this.agentExecutor.agent.returnStoppedResponse(\n this.agentExecutor.earlyStoppingMethod,\n this.intermediateSteps,\n this.inputs\n );\n const returnedOutput = await this.agentExecutor._return(\n output,\n this.intermediateSteps,\n this.runManager\n );\n await this.setFinalOutputs(returnedOutput);\n await this.runManager?.handleChainEnd(returnedOutput);\n return returnedOutput;\n }\n\n async _callNext(): Promise<Record<string, unknown>> {\n // final output already reached: stopiteration (final output)\n if (this.finalOutputs) {\n throw new Error(\n `Final outputs already reached: ${JSON.stringify(\n this.finalOutputs,\n null,\n 2\n )}`\n );\n }\n // timeout/max iterations: stopiteration (stopped response)\n if (!this.agentExecutor.shouldContinueGetter(this.iterations)) {\n return this._stop();\n }\n const nextStepOutput = await this._executeNextStep(this.runManager);\n const output = await this._processNextStepOutput(\n nextStepOutput,\n this.runManager\n );\n this.updateIterations();\n return output;\n }\n}\n\ntype ExtractToolType<T> = T extends { ToolType: infer ToolInterface }\n ? ToolInterface\n : StructuredToolInterface;\n\n/**\n * Interface defining the structure of input data for creating an\n * AgentExecutor. It extends ChainInputs and includes additional\n * properties specific to agent execution.\n */\nexport interface AgentExecutorInput extends ChainInputs {\n agent:\n | BaseSingleActionAgent\n | BaseMultiActionAgent\n | Runnable<\n ChainValues & { steps?: AgentStep[] },\n AgentAction[] | AgentAction | AgentFinish\n >;\n tools: ExtractToolType<this[\"agent\"]>[];\n returnIntermediateSteps?: boolean;\n maxIterations?: number;\n earlyStoppingMethod?: StoppingMethod;\n handleParsingErrors?:\n | boolean\n | string\n | ((e: OutputParserException | ToolInputParsingException) => string);\n handleToolRuntimeErrors?: (e: Error) => string;\n}\n\n// TODO: Type properly with { intermediateSteps?: AgentStep[] };\nexport type AgentExecutorOutput = ChainValues;\n\n/**\n * Tool that just returns the query.\n * Used for exception tracking.\n */\nexport class ExceptionTool extends Tool {\n name = \"_Exception\";\n\n description = \"Exception tool\";\n\n async _call(query: string) {\n return query;\n }\n}\n\n/**\n * A chain managing an agent using tools.\n * @augments BaseChain\n * @example\n * ```typescript\n *\n * const executor = AgentExecutor.fromAgentAndTools({\n * agent: async () => loadAgentFromLangchainHub(),\n * tools: [new SerpAPI(), new Calculator()],\n * returnIntermediateSteps: true,\n * });\n *\n * const result = await executor.invoke({\n * input: `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`,\n * });\n *\n * ```\n */\nexport class AgentExecutor extends BaseChain<ChainValues, AgentExecutorOutput> {\n static lc_name() {\n return \"AgentExecutor\";\n }\n\n get lc_namespace() {\n return [\"langchain\", \"agents\", \"executor\"];\n }\n\n agent: BaseSingleActionAgent | BaseMultiActionAgent;\n\n tools: this[\"agent\"][\"ToolType\"][];\n\n returnIntermediateSteps = false;\n\n maxIterations?: number = 15;\n\n earlyStoppingMethod: StoppingMethod = \"force\";\n\n // TODO: Update BaseChain implementation on breaking change to include this\n returnOnlyOutputs = true;\n\n /**\n * How to handle errors raised by the agent's output parser.\n Defaults to `False`, which raises the error.\n\n If `true`, the error will be sent back to the LLM as an observation.\n If a string, the string itself will be sent to the LLM as an observation.\n If a callable function, the function will be called with the exception\n as an argument, and the result of that function will be passed to the agent\n as an observation.\n */\n handleParsingErrors:\n | boolean\n | string\n | ((e: OutputParserException | ToolInputParsingException) => string) =\n false;\n\n handleToolRuntimeErrors?: (e: Error) => string;\n\n get inputKeys() {\n return this.agent.inputKeys;\n }\n\n get outputKeys() {\n return this.agent.returnValues;\n }\n\n constructor(input: AgentExecutorInput) {\n let agent: BaseSingleActionAgent | BaseMultiActionAgent;\n let returnOnlyOutputs = true;\n if (Runnable.isRunnable(input.agent)) {\n if (AgentRunnableSequence.isAgentRunnableSequence(input.agent)) {\n if (input.agent.singleAction) {\n agent = new RunnableSingleActionAgent({\n runnable: input.agent,\n streamRunnable: input.agent.streamRunnable,\n });\n } else {\n agent = new RunnableMultiActionAgent({\n runnable: input.agent,\n streamRunnable: input.agent.streamRunnable,\n });\n }\n } else {\n agent = new RunnableMultiActionAgent({ runnable: input.agent });\n }\n // TODO: Update BaseChain implementation on breaking change\n returnOnlyOutputs = false;\n } else {\n if (isRunnableAgent(input.agent)) {\n returnOnlyOutputs = false;\n }\n agent = input.agent;\n }\n\n super(input);\n this.agent = agent;\n this.tools = input.tools;\n this.handleParsingErrors =\n input.handleParsingErrors ?? this.handleParsingErrors;\n this.handleToolRuntimeErrors = input.handleToolRuntimeErrors;\n this.returnOnlyOutputs = returnOnlyOutputs;\n if (this.agent._agentActionType() === \"multi\") {\n for (const tool of this.tools) {\n if (tool.returnDirect) {\n throw new Error(\n `Tool with return direct ${tool.name} not supported for multi-action agent.`\n );\n }\n }\n }\n this.returnIntermediateSteps =\n input.returnIntermediateSteps ?? this.returnIntermediateSteps;\n this.maxIterations = input.maxIterations ?? this.maxIterations;\n this.earlyStoppingMethod =\n input.earlyStoppingMethod ?? this.earlyStoppingMethod;\n }\n\n /** Create from agent and a list of tools. */\n static fromAgentAndTools(fields: AgentExecutorInput): AgentExecutor {\n return new AgentExecutor(fields);\n }\n\n get shouldContinueGetter() {\n return this.shouldContinue.bind(this);\n }\n\n /**\n * Method that checks if the agent execution should continue based on the\n * number of iterations.\n * @param iterations The current number of iterations.\n * @returns A boolean indicating whether the agent execution should continue.\n */\n private shouldContinue(iterations: number): boolean {\n return this.maxIterations === undefined || iterations < this.maxIterations;\n }\n\n /** @ignore */\n async _call(\n inputs: ChainValues,\n runManager?: CallbackManagerForChainRun,\n config?: RunnableConfig\n ): Promise<AgentExecutorOutput> {\n const toolsByName = Object.fromEntries(\n this.tools.map((t) => [t.name.toLowerCase(), t])\n );\n const steps: AgentStep[] = [];\n let iterations = 0;\n\n const getOutput = async (\n finishStep: AgentFinish\n ): Promise<AgentExecutorOutput> => {\n const { returnValues } = finishStep;\n const additional = await this.agent.prepareForOutput(returnValues, steps);\n\n await runManager?.handleAgentEnd(finishStep);\n\n let response;\n\n if (this.returnIntermediateSteps) {\n response = { ...returnValues, intermediateSteps: steps, ...additional };\n } else {\n response = { ...returnValues, ...additional };\n }\n if (!this.returnOnlyOutputs) {\n response = { ...inputs, ...response };\n }\n return response;\n };\n\n while (this.shouldContinue(iterations)) {\n let output;\n try {\n output = await this.agent.plan(\n steps,\n inputs,\n runManager?.getChild(),\n config\n );\n } catch (e) {\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof OutputParserException) {\n let observation;\n let text = e.message;\n if (this.handleParsingErrors === true) {\n if (e.sendToLLM) {\n observation = e.observation;\n text = e.llmOutput ?? \"\";\n } else {\n observation = \"Invalid or incomplete response\";\n }\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n output = {\n tool: \"_Exception\",\n toolInput: observation,\n log: text,\n } as AgentAction;\n } else {\n throw e;\n }\n }\n // Check if the agent has finished\n if (\"returnValues\" in output) {\n return getOutput(output);\n }\n\n let actions: AgentAction[];\n if (Array.isArray(output)) {\n actions = output as AgentAction[];\n } else {\n actions = [output as AgentAction];\n }\n\n const newSteps = await Promise.all(\n actions.map(async (action) => {\n await runManager?.handleAgentAction(action);\n const tool =\n action.tool === \"_Exception\"\n ? new ExceptionTool()\n : toolsByName[action.tool?.toLowerCase()];\n let observation;\n try {\n observation = tool\n ? await tool.invoke(\n action.toolInput,\n patchConfig(config, { callbacks: runManager?.getChild() })\n )\n : `${action.tool} is not a valid tool, try another one.`;\n if (typeof observation !== \"string\") {\n throw new Error(\n \"Received unsupported non-string response from tool call.\"\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof ToolInputParsingException) {\n if (this.handleParsingErrors === true) {\n observation =\n \"Invalid or incomplete tool input. Please try again.\";\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n observation = await new ExceptionTool().call(\n observation,\n runManager?.getChild()\n );\n return { action, observation: observation ?? \"\" };\n } else if (this.handleToolRuntimeErrors !== undefined) {\n observation = this.handleToolRuntimeErrors(e);\n }\n }\n\n return { action, observation: observation ?? \"\" };\n })\n );\n\n steps.push(...newSteps);\n\n const lastStep = steps[steps.length - 1];\n const lastTool = toolsByName[lastStep.action.tool?.toLowerCase()];\n\n if (lastTool?.returnDirect) {\n return getOutput({\n returnValues: { [this.agent.returnValues[0]]: lastStep.observation },\n log: \"\",\n });\n }\n\n iterations += 1;\n }\n\n const finish = await this.agent.returnStoppedResponse(\n this.earlyStoppingMethod,\n steps,\n inputs\n );\n\n return getOutput(finish);\n }\n\n async _takeNextStep(\n nameToolMap: Record<string, ToolInterface>,\n inputs: ChainValues,\n intermediateSteps: AgentStep[],\n runManager?: CallbackManagerForChainRun,\n config?: RunnableConfig\n ): Promise<AgentFinish | AgentStep[]> {\n let output;\n try {\n output = await this.agent.plan(\n intermediateSteps,\n inputs,\n runManager?.getChild(),\n config\n );\n } catch (e) {\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof OutputParserException) {\n let observation;\n let text = e.message;\n if (this.handleParsingErrors === true) {\n if (e.sendToLLM) {\n observation = e.observation;\n text = e.llmOutput ?? \"\";\n } else {\n observation = \"Invalid or incomplete response\";\n }\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n output = {\n tool: \"_Exception\",\n toolInput: observation,\n log: text,\n } as AgentAction;\n } else {\n throw e;\n }\n }\n\n if (\"returnValues\" in output) {\n return output;\n }\n\n let actions: AgentAction[];\n if (Array.isArray(output)) {\n actions = output as AgentAction[];\n } else {\n actions = [output as AgentAction];\n }\n\n const result: AgentStep[] = [];\n for (const agentAction of actions) {\n let observation = \"\";\n if (runManager) {\n await runManager?.handleAgentAction(agentAction);\n }\n if (agentAction.tool in nameToolMap) {\n const tool = nameToolMap[agentAction.tool];\n try {\n observation = await tool.call(\n agentAction.toolInput,\n runManager?.getChild()\n );\n if (typeof observation !== \"string\") {\n throw new Error(\n \"Received unsupported non-string response from tool call.\"\n );\n }\n } catch (e) {\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof ToolInputParsingException) {\n if (this.handleParsingErrors === true) {\n observation =\n \"Invalid or incomplete tool input. Please try again.\";\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n observation = await new ExceptionTool().call(\n observation,\n runManager?.getChild()\n );\n }\n }\n } else {\n observation = `${\n agentAction.tool\n } is not a valid tool, try another available tool: ${Object.keys(\n nameToolMap\n ).join(\", \")}`;\n }\n result.push({\n action: agentAction,\n observation,\n });\n }\n return result;\n }\n\n async _return(\n output: AgentFinish,\n intermediateSteps: AgentStep[],\n runManager?: CallbackManagerForChainRun\n ): Promise<AgentExecutorOutput> {\n if (runManager) {\n await runManager.handleAgentEnd(output);\n }\n const finalOutput: Record<string, unknown> = output.returnValues;\n if (this.returnIntermediateSteps) {\n finalOutput.intermediateSteps = intermediateSteps;\n }\n return finalOutput;\n }\n\n async _getToolReturn(nextStepOutput: AgentStep): Promise<AgentFinish | null> {\n const { action, observation } = nextStepOutput;\n const nameToolMap = Object.fromEntries(\n this.tools.map((t) => [t.name.toLowerCase(), t])\n );\n const [returnValueKey = \"output\"] = this.agent.returnValues;\n // Invalid tools won't be in the map, so we return False.\n if (action.tool in nameToolMap) {\n if (nameToolMap[action.tool].returnDirect) {\n return {\n returnValues: { [returnValueKey]: observation },\n log: \"\",\n };\n }\n }\n return null;\n }\n\n _returnStoppedResponse(earlyStoppingMethod: StoppingMethod) {\n if (earlyStoppingMethod === \"force\") {\n return {\n returnValues: {\n output: \"Agent stopped due to iteration limit or time limit.\",\n },\n log: \"\",\n } as AgentFinish;\n }\n throw new Error(\n `Got unsupported early_stopping_method: ${earlyStoppingMethod}`\n );\n }\n\n async *_streamIterator(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n inputs: Record<string, any>,\n options?: Partial<RunnableConfig>\n ): AsyncGenerator<ChainValues> {\n const agentExecutorIterator = new AgentExecutorIterator({\n inputs,\n agentExecutor: this,\n config: options,\n // TODO: Deprecate these other parameters\n metadata: options?.metadata,\n tags: options?.tags,\n callbacks: options?.callbacks,\n });\n const iterator = agentExecutorIterator.streamIterator();\n for await (const step of iterator) {\n if (!step) {\n continue;\n }\n yield step;\n }\n }\n\n _chainType() {\n return \"agent_executor\" as const;\n }\n\n serialize(): SerializedLLMChain {\n throw new Error(\"Cannot serialize an AgentExecutor\");\n }\n}\n"],"mappings":";;;;;;;;;AA8CA,IAAa,wBAAb,cACUA,kCAAAA,aAEV;CACE,eAAe;EAAC;EAAa;EAAU;EAAoB;CAE3D;CAEA;CAEA;;CAGA;;CAGA;;CAGA;;CAGA;CAEA;CAEA,IAAI,eAAoD;AACtD,SAAO,KAAK;;;CAId,MAAM,gBAAgB,OAA4C;AAChE,OAAK,gBAAgB,KAAA;AACrB,MAAI,MAGF,MAAK,gBADH,MAAM,KAAK,cAAc,YAAY,KAAK,QAAQ,OAAO,KAAK;;CAKpE;CAEA,oBAAiC,EAAE;CAEnC,aAAa;CAEb,IAAI,gBAA+C;EACjD,MAAM,UAAU,KAAK,cAAc,MAAM,KAAK,UAAU,GACrD,KAAK,OAAO,MACd,EAAE;AACH,SAAO,OAAO,OAAO,EAAE,EAAE,GAAG,QAAQ;;CAGtC,YAAY,QAAoC;AAC9C,QAAM,OAAO;AACb,OAAK,gBAAgB,OAAO;AAC5B,OAAK,SAAS,OAAO;AACrB,OAAK,YAAY,OAAO;AACxB,OAAK,OAAO,OAAO;AACnB,OAAK,WAAW,OAAO;AACvB,OAAK,UAAU,OAAO;AACtB,OAAK,aAAa,OAAO;AACzB,OAAK,SAAS,OAAO;;;;;;CAOvB,QAAc;AACZ,OAAK,oBAAoB,EAAE;AAC3B,OAAK,aAAa;AAClB,OAAK,gBAAgB,KAAA;;CAGvB,mBAAyB;AACvB,OAAK,cAAc;;CAGrB,OAAO,iBAAiB;AACtB,OAAK,OAAO;AAGZ,SAAO,KACL,KAAI;AACF,OAAI,KAAK,eAAe,EACtB,OAAM,KAAK,aAAa;AAI1B,SADe,MAAM,KAAK,WAAW;WAG9B,GAAQ;AACf,OACE,aAAa,KACb,EAAE,QAAQ,WAAW,kCAAkC,EACvD;AACA,QAAI,CAAC,KAAK,aACR,OAAM;AAER,WAAO,KAAK;;AAEd,OAAI,KAAK,WACP,OAAM,KAAK,WAAW,iBAAiB,EAAE;AAE3C,SAAM;;;;;;;CASZ,MAAM,cAA6B;AACjC,MAAI,KAAK,eAAe,GAAG;AAYzB,QAAK,aAAa,OAXM,MAAMC,kCAAAA,gBAAgB,UAC5C,KAAK,aAAa,KAAK,QAAQ,WAC/B,KAAK,cAAc,WACnB,KAAK,QAAQ,KAAK,QAAQ,MAC1B,KAAK,cAAc,MACnB,KAAK,YAAY,KAAK,QAAQ,UAC9B,KAAK,cAAc,UACnB,EACE,SAAS,KAAK,cAAc,SAC7B,CACF,GACwC,iBACvC,KAAK,cAAc,QAAQ,EAC3B,KAAK,QACL,KAAK,QAAQ,OACb,KAAA,GACA,KAAK,QAAQ,KAAK,QAAQ,MAC1B,KAAK,YAAY,KAAK,QAAQ,UAC9B,KAAK,WAAW,KAAK,QAAQ,QAC9B;AACD,OAAI,KAAK,WAAW,KAAA,EAClB,QAAO,KAAK,OAAO;;;;;;;CASzB,MAAM,iBACJ,YACoC;AACpC,SAAO,KAAK,cAAc,cACxB,KAAK,eACL,KAAK,QACL,KAAK,mBACL,YACA,KAAK,OACN;;;;;;CAOH,MAAM,uBACJ,gBACA,YAC+C;AAC/C,MAAI,kBAAkB,gBAAgB;GACpC,MAAM,SAAS,MAAM,KAAK,cAAc,QACtC,gBACA,KAAK,mBACL,WACD;AACD,OAAI,KAAK,WACP,OAAM,KAAK,WAAW,eAAe,OAAO;AAE9C,SAAM,KAAK,gBAAgB,OAAO;AAClC,UAAO;;AAGT,OAAK,oBAAoB,KAAK,kBAAkB,OAC9C,eACD;EAED,IAAI,SAA+C,EAAE;AACrD,MAAI,MAAM,QAAQ,eAAe,IAAI,eAAe,WAAW,GAAG;GAChE,MAAM,WAAW,eAAe;GAChC,MAAM,aAAa,MAAM,KAAK,cAAc,eAAe,SAAS;AACpE,OAAI,YAAY;AACd,aAAS,MAAM,KAAK,cAAc,QAChC,YACA,KAAK,mBACL,WACD;AACD,UAAM,KAAK,YAAY,eAAe,OAAO;AAC7C,UAAM,KAAK,gBAAgB,OAAO;;;AAGtC,WAAS,EAAE,mBAAmB,gBAA+B;AAC7D,SAAO;;CAGT,MAAM,QAA0C;EAC9C,MAAM,SAAS,MAAM,KAAK,cAAc,MAAM,sBAC5C,KAAK,cAAc,qBACnB,KAAK,mBACL,KAAK,OACN;EACD,MAAM,iBAAiB,MAAM,KAAK,cAAc,QAC9C,QACA,KAAK,mBACL,KAAK,WACN;AACD,QAAM,KAAK,gBAAgB,eAAe;AAC1C,QAAM,KAAK,YAAY,eAAe,eAAe;AACrD,SAAO;;CAGT,MAAM,YAA8C;AAElD,MAAI,KAAK,aACP,OAAM,IAAI,MACR,kCAAkC,KAAK,UACrC,KAAK,cACL,MACA,EACD,GACF;AAGH,MAAI,CAAC,KAAK,cAAc,qBAAqB,KAAK,WAAW,CAC3D,QAAO,KAAK,OAAO;EAErB,MAAM,iBAAiB,MAAM,KAAK,iBAAiB,KAAK,WAAW;EACnE,MAAM,SAAS,MAAM,KAAK,uBACxB,gBACA,KAAK,WACN;AACD,OAAK,kBAAkB;AACvB,SAAO;;;;;;;AAuCX,IAAa,gBAAb,cAAmCC,sBAAAA,KAAK;CACtC,OAAO;CAEP,cAAc;CAEd,MAAM,MAAM,OAAe;AACzB,SAAO;;;;;;;;;;;;;;;;;;;;;AAsBX,IAAa,gBAAb,MAAa,sBAAsBC,aAAAA,UAA4C;CAC7E,OAAO,UAAU;AACf,SAAO;;CAGT,IAAI,eAAe;AACjB,SAAO;GAAC;GAAa;GAAU;GAAW;;CAG5C;CAEA;CAEA,0BAA0B;CAE1B,gBAAyB;CAEzB,sBAAsC;CAGtC,oBAAoB;;;;;;;;;;;CAYpB,sBAIE;CAEF;CAEA,IAAI,YAAY;AACd,SAAO,KAAK,MAAM;;CAGpB,IAAI,aAAa;AACf,SAAO,KAAK,MAAM;;CAGpB,YAAY,OAA2B;EACrC,IAAI;EACJ,IAAI,oBAAoB;AACxB,MAAIC,0BAAAA,SAAS,WAAW,MAAM,MAAM,EAAE;AACpC,OAAIC,cAAAA,sBAAsB,wBAAwB,MAAM,MAAM,CAC5D,KAAI,MAAM,MAAM,aACd,SAAQ,IAAIC,cAAAA,0BAA0B;IACpC,UAAU,MAAM;IAChB,gBAAgB,MAAM,MAAM;IAC7B,CAAC;OAEF,SAAQ,IAAIC,cAAAA,yBAAyB;IACnC,UAAU,MAAM;IAChB,gBAAgB,MAAM,MAAM;IAC7B,CAAC;OAGJ,SAAQ,IAAIA,cAAAA,yBAAyB,EAAE,UAAU,MAAM,OAAO,CAAC;AAGjE,uBAAoB;SACf;AACL,OAAIC,cAAAA,gBAAgB,MAAM,MAAM,CAC9B,qBAAoB;AAEtB,WAAQ,MAAM;;AAGhB,QAAM,MAAM;AACZ,OAAK,QAAQ;AACb,OAAK,QAAQ,MAAM;AACnB,OAAK,sBACH,MAAM,uBAAuB,KAAK;AACpC,OAAK,0BAA0B,MAAM;AACrC,OAAK,oBAAoB;AACzB,MAAI,KAAK,MAAM,kBAAkB,KAAK;QAC/B,MAAM,QAAQ,KAAK,MACtB,KAAI,KAAK,aACP,OAAM,IAAI,MACR,2BAA2B,KAAK,KAAK,wCACtC;;AAIP,OAAK,0BACH,MAAM,2BAA2B,KAAK;AACxC,OAAK,gBAAgB,MAAM,iBAAiB,KAAK;AACjD,OAAK,sBACH,MAAM,uBAAuB,KAAK;;;CAItC,OAAO,kBAAkB,QAA2C;AAClE,SAAO,IAAI,cAAc,OAAO;;CAGlC,IAAI,uBAAuB;AACzB,SAAO,KAAK,eAAe,KAAK,KAAK;;;;;;;;CASvC,eAAuB,YAA6B;AAClD,SAAO,KAAK,kBAAkB,KAAA,KAAa,aAAa,KAAK;;;CAI/D,MAAM,MACJ,QACA,YACA,QAC8B;EAC9B,MAAM,cAAc,OAAO,YACzB,KAAK,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,aAAa,EAAE,EAAE,CAAC,CACjD;EACD,MAAM,QAAqB,EAAE;EAC7B,IAAI,aAAa;EAEjB,MAAM,YAAY,OAChB,eACiC;GACjC,MAAM,EAAE,iBAAiB;GACzB,MAAM,aAAa,MAAM,KAAK,MAAM,iBAAiB,cAAc,MAAM;AAEzE,SAAM,YAAY,eAAe,WAAW;GAE5C,IAAI;AAEJ,OAAI,KAAK,wBACP,YAAW;IAAE,GAAG;IAAc,mBAAmB;IAAO,GAAG;IAAY;OAEvE,YAAW;IAAE,GAAG;IAAc,GAAG;IAAY;AAE/C,OAAI,CAAC,KAAK,kBACR,YAAW;IAAE,GAAG;IAAQ,GAAG;IAAU;AAEvC,UAAO;;AAGT,SAAO,KAAK,eAAe,WAAW,EAAE;GACtC,IAAI;AACJ,OAAI;AACF,aAAS,MAAM,KAAK,MAAM,KACxB,OACA,QACA,YAAY,UAAU,EACtB,OACD;YACM,GAAG;AAEV,QAAI,aAAaC,+BAAAA,uBAAuB;KACtC,IAAI;KACJ,IAAI,OAAO,EAAE;AACb,SAAI,KAAK,wBAAwB,KAC/B,KAAI,EAAE,WAAW;AACf,oBAAc,EAAE;AAChB,aAAO,EAAE,aAAa;WAEtB,eAAc;cAEP,OAAO,KAAK,wBAAwB,SAC7C,eAAc,KAAK;cACV,OAAO,KAAK,wBAAwB,WAC7C,eAAc,KAAK,oBAAoB,EAAE;SAEzC,OAAM;AAER,cAAS;MACP,MAAM;MACN,WAAW;MACX,KAAK;MACN;UAED,OAAM;;AAIV,OAAI,kBAAkB,OACpB,QAAO,UAAU,OAAO;GAG1B,IAAI;AACJ,OAAI,MAAM,QAAQ,OAAO,CACvB,WAAU;OAEV,WAAU,CAAC,OAAsB;GAGnC,MAAM,WAAW,MAAM,QAAQ,IAC7B,QAAQ,IAAI,OAAO,WAAW;AAC5B,UAAM,YAAY,kBAAkB,OAAO;IAC3C,MAAM,OACJ,OAAO,SAAS,eACZ,IAAI,eAAe,GACnB,YAAY,OAAO,MAAM,aAAa;IAC5C,IAAI;AACJ,QAAI;AACF,mBAAc,OACV,MAAM,KAAK,OACT,OAAO,YAAA,GAAA,0BAAA,aACK,QAAQ,EAAE,WAAW,YAAY,UAAU,EAAE,CAAC,CAC3D,GACD,GAAG,OAAO,KAAK;AACnB,SAAI,OAAO,gBAAgB,SACzB,OAAM,IAAI,MACR,2DACD;aAGI,GAAQ;AAEf,SAAI,aAAaC,sBAAAA,2BAA2B;AAC1C,UAAI,KAAK,wBAAwB,KAC/B,eACE;eACO,OAAO,KAAK,wBAAwB,SAC7C,eAAc,KAAK;eACV,OAAO,KAAK,wBAAwB,WAC7C,eAAc,KAAK,oBAAoB,EAAE;UAEzC,OAAM;AAER,oBAAc,MAAM,IAAI,eAAe,CAAC,KACtC,aACA,YAAY,UAAU,CACvB;AACD,aAAO;OAAE;OAAQ,aAAa,eAAe;OAAI;gBACxC,KAAK,4BAA4B,KAAA,EAC1C,eAAc,KAAK,wBAAwB,EAAE;;AAIjD,WAAO;KAAE;KAAQ,aAAa,eAAe;KAAI;KACjD,CACH;AAED,SAAM,KAAK,GAAG,SAAS;GAEvB,MAAM,WAAW,MAAM,MAAM,SAAS;AAGtC,OAFiB,YAAY,SAAS,OAAO,MAAM,aAAa,GAElD,aACZ,QAAO,UAAU;IACf,cAAc,GAAG,KAAK,MAAM,aAAa,KAAK,SAAS,aAAa;IACpE,KAAK;IACN,CAAC;AAGJ,iBAAc;;AAShB,SAAO,UANQ,MAAM,KAAK,MAAM,sBAC9B,KAAK,qBACL,OACA,OACD,CAEuB;;CAG1B,MAAM,cACJ,aACA,QACA,mBACA,YACA,QACoC;EACpC,IAAI;AACJ,MAAI;AACF,YAAS,MAAM,KAAK,MAAM,KACxB,mBACA,QACA,YAAY,UAAU,EACtB,OACD;WACM,GAAG;AAEV,OAAI,aAAaD,+BAAAA,uBAAuB;IACtC,IAAI;IACJ,IAAI,OAAO,EAAE;AACb,QAAI,KAAK,wBAAwB,KAC/B,KAAI,EAAE,WAAW;AACf,mBAAc,EAAE;AAChB,YAAO,EAAE,aAAa;UAEtB,eAAc;aAEP,OAAO,KAAK,wBAAwB,SAC7C,eAAc,KAAK;aACV,OAAO,KAAK,wBAAwB,WAC7C,eAAc,KAAK,oBAAoB,EAAE;QAEzC,OAAM;AAER,aAAS;KACP,MAAM;KACN,WAAW;KACX,KAAK;KACN;SAED,OAAM;;AAIV,MAAI,kBAAkB,OACpB,QAAO;EAGT,IAAI;AACJ,MAAI,MAAM,QAAQ,OAAO,CACvB,WAAU;MAEV,WAAU,CAAC,OAAsB;EAGnC,MAAM,SAAsB,EAAE;AAC9B,OAAK,MAAM,eAAe,SAAS;GACjC,IAAI,cAAc;AAClB,OAAI,WACF,OAAM,YAAY,kBAAkB,YAAY;AAElD,OAAI,YAAY,QAAQ,aAAa;IACnC,MAAM,OAAO,YAAY,YAAY;AACrC,QAAI;AACF,mBAAc,MAAM,KAAK,KACvB,YAAY,WACZ,YAAY,UAAU,CACvB;AACD,SAAI,OAAO,gBAAgB,SACzB,OAAM,IAAI,MACR,2DACD;aAEI,GAAG;AAEV,SAAI,aAAaC,sBAAAA,2BAA2B;AAC1C,UAAI,KAAK,wBAAwB,KAC/B,eACE;eACO,OAAO,KAAK,wBAAwB,SAC7C,eAAc,KAAK;eACV,OAAO,KAAK,wBAAwB,WAC7C,eAAc,KAAK,oBAAoB,EAAE;UAEzC,OAAM;AAER,oBAAc,MAAM,IAAI,eAAe,CAAC,KACtC,aACA,YAAY,UAAU,CACvB;;;SAIL,eAAc,GACZ,YAAY,KACb,oDAAoD,OAAO,KAC1D,YACD,CAAC,KAAK,KAAK;AAEd,UAAO,KAAK;IACV,QAAQ;IACR;IACD,CAAC;;AAEJ,SAAO;;CAGT,MAAM,QACJ,QACA,mBACA,YAC8B;AAC9B,MAAI,WACF,OAAM,WAAW,eAAe,OAAO;EAEzC,MAAM,cAAuC,OAAO;AACpD,MAAI,KAAK,wBACP,aAAY,oBAAoB;AAElC,SAAO;;CAGT,MAAM,eAAe,gBAAwD;EAC3E,MAAM,EAAE,QAAQ,gBAAgB;EAChC,MAAM,cAAc,OAAO,YACzB,KAAK,MAAM,KAAK,MAAM,CAAC,EAAE,KAAK,aAAa,EAAE,EAAE,CAAC,CACjD;EACD,MAAM,CAAC,iBAAiB,YAAY,KAAK,MAAM;AAE/C,MAAI,OAAO,QAAQ;OACb,YAAY,OAAO,MAAM,aAC3B,QAAO;IACL,cAAc,GAAG,iBAAiB,aAAa;IAC/C,KAAK;IACN;;AAGL,SAAO;;CAGT,uBAAuB,qBAAqC;AAC1D,MAAI,wBAAwB,QAC1B,QAAO;GACL,cAAc,EACZ,QAAQ,uDACT;GACD,KAAK;GACN;AAEH,QAAM,IAAI,MACR,0CAA0C,sBAC3C;;CAGH,OAAO,gBAEL,QACA,SAC6B;EAU7B,MAAM,WATwB,IAAI,sBAAsB;GACtD;GACA,eAAe;GACf,QAAQ;GAER,UAAU,SAAS;GACnB,MAAM,SAAS;GACf,WAAW,SAAS;GACrB,CAAC,CACqC,gBAAgB;AACvD,aAAW,MAAM,QAAQ,UAAU;AACjC,OAAI,CAAC,KACH;AAEF,SAAM;;;CAIV,aAAa;AACX,SAAO;;CAGT,YAAgC;AAC9B,QAAM,IAAI,MAAM,oCAAoC"}
1
+ {"version":3,"file":"executor.cjs","names":["Serializable","CallbackManager","Tool","BaseChain","Runnable","AgentRunnableSequence","RunnableSingleActionAgent","RunnableMultiActionAgent","isRunnableAgent","OutputParserException","ToolInputParsingException"],"sources":["../../src/agents/executor.ts"],"sourcesContent":["import {\n type StructuredToolInterface,\n type ToolInterface,\n ToolInputParsingException,\n Tool,\n} from \"@langchain/core/tools\";\nimport {\n Runnable,\n type RunnableConfig,\n patchConfig,\n} from \"@langchain/core/runnables\";\nimport { AgentAction, AgentFinish, AgentStep } from \"@langchain/core/agents\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n CallbackManager,\n CallbackManagerForChainRun,\n Callbacks,\n} from \"@langchain/core/callbacks/manager\";\nimport { OutputParserException } from \"@langchain/core/output_parsers\";\nimport { Serializable } from \"@langchain/core/load/serializable\";\nimport { SerializedLLMChain } from \"../chains/serde.js\";\nimport { StoppingMethod } from \"./types.js\";\nimport {\n AgentRunnableSequence,\n BaseMultiActionAgent,\n BaseSingleActionAgent,\n RunnableMultiActionAgent,\n RunnableSingleActionAgent,\n isRunnableAgent,\n} from \"./agent.js\";\nimport { BaseChain, ChainInputs } from \"../chains/base.js\";\n\ninterface AgentExecutorIteratorInput {\n agentExecutor: AgentExecutor;\n inputs: Record<string, string>;\n config?: RunnableConfig;\n /** @deprecated Use \"config\" */\n callbacks?: Callbacks;\n /** @deprecated Use \"config\" */\n tags?: string[];\n /** @deprecated Use \"config\" */\n metadata?: Record<string, unknown>;\n runName?: string;\n runManager?: CallbackManagerForChainRun;\n}\n\nexport class AgentExecutorIterator\n extends Serializable\n implements AgentExecutorIteratorInput\n{\n lc_namespace = [\"langchain\", \"agents\", \"executor_iterator\"];\n\n agentExecutor: AgentExecutor;\n\n inputs: Record<string, string>;\n\n config?: RunnableConfig;\n\n /** @deprecated Use \"config\" */\n callbacks?: Callbacks;\n\n /** @deprecated Use \"config\" */\n tags: string[] | undefined;\n\n /** @deprecated Use \"config\" */\n metadata: Record<string, unknown> | undefined;\n\n /** @deprecated Use \"config\" */\n runName: string | undefined;\n\n private _finalOutputs: Record<string, unknown> | undefined;\n\n get finalOutputs(): Record<string, unknown> | undefined {\n return this._finalOutputs;\n }\n\n /** Intended to be used as a setter method, needs to be async. */\n async setFinalOutputs(value: Record<string, unknown> | undefined) {\n this._finalOutputs = undefined;\n if (value) {\n const preparedOutputs: Record<string, unknown> =\n await this.agentExecutor.prepOutputs(this.inputs, value, true);\n this._finalOutputs = preparedOutputs;\n }\n }\n\n runManager: CallbackManagerForChainRun | undefined;\n\n intermediateSteps: AgentStep[] = [];\n\n iterations = 0;\n\n get nameToToolMap(): Record<string, ToolInterface> {\n const toolMap = this.agentExecutor.tools.map((tool) => ({\n [tool.name]: tool,\n }));\n return Object.assign({}, ...toolMap);\n }\n\n constructor(fields: AgentExecutorIteratorInput) {\n super(fields);\n this.agentExecutor = fields.agentExecutor;\n this.inputs = fields.inputs;\n this.callbacks = fields.callbacks;\n this.tags = fields.tags;\n this.metadata = fields.metadata;\n this.runName = fields.runName;\n this.runManager = fields.runManager;\n this.config = fields.config;\n }\n\n /**\n * Reset the iterator to its initial state, clearing intermediate steps,\n * iterations, and the final output.\n */\n reset(): void {\n this.intermediateSteps = [];\n this.iterations = 0;\n this._finalOutputs = undefined;\n }\n\n updateIterations(): void {\n this.iterations += 1;\n }\n\n async *streamIterator() {\n this.reset();\n\n // Loop to handle iteration\n while (true) {\n try {\n if (this.iterations === 0) {\n await this.onFirstStep();\n }\n\n const result = await this._callNext();\n yield result;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (\n \"message\" in e &&\n e.message.startsWith(\"Final outputs already reached: \")\n ) {\n if (!this.finalOutputs) {\n throw e;\n }\n return this.finalOutputs;\n }\n if (this.runManager) {\n await this.runManager.handleChainError(e);\n }\n throw e;\n }\n }\n }\n\n /**\n * Perform any necessary setup for the first step\n * of the asynchronous iterator.\n */\n async onFirstStep(): Promise<void> {\n if (this.iterations === 0) {\n const callbackManager = await CallbackManager.configure(\n this.callbacks ?? this.config?.callbacks,\n this.agentExecutor.callbacks,\n this.tags ?? this.config?.tags,\n this.agentExecutor.tags,\n this.metadata ?? this.config?.metadata,\n this.agentExecutor.metadata,\n {\n verbose: this.agentExecutor.verbose,\n }\n );\n this.runManager = await callbackManager?.handleChainStart(\n this.agentExecutor.toJSON(),\n this.inputs,\n this.config?.runId,\n undefined,\n this.tags ?? this.config?.tags,\n this.metadata ?? this.config?.metadata,\n this.runName ?? this.config?.runName\n );\n if (this.config !== undefined) {\n delete this.config.runId;\n }\n }\n }\n\n /**\n * Execute the next step in the chain using the\n * AgentExecutor's _takeNextStep method.\n */\n async _executeNextStep(\n runManager?: CallbackManagerForChainRun\n ): Promise<AgentFinish | AgentStep[]> {\n return this.agentExecutor._takeNextStep(\n this.nameToToolMap,\n this.inputs,\n this.intermediateSteps,\n runManager,\n this.config\n );\n }\n\n /**\n * Process the output of the next step,\n * handling AgentFinish and tool return cases.\n */\n async _processNextStepOutput(\n nextStepOutput: AgentFinish | AgentStep[],\n runManager?: CallbackManagerForChainRun\n ): Promise<Record<string, string | AgentStep[]>> {\n if (\"returnValues\" in nextStepOutput) {\n const output = await this.agentExecutor._return(\n nextStepOutput as AgentFinish,\n this.intermediateSteps,\n runManager\n );\n if (this.runManager) {\n await this.runManager.handleChainEnd(output);\n }\n await this.setFinalOutputs(output);\n return output;\n }\n\n this.intermediateSteps = this.intermediateSteps.concat(\n nextStepOutput as AgentStep[]\n );\n\n let output: Record<string, string | AgentStep[]> = {};\n if (Array.isArray(nextStepOutput) && nextStepOutput.length === 1) {\n const nextStep = nextStepOutput[0];\n const toolReturn = await this.agentExecutor._getToolReturn(nextStep);\n if (toolReturn) {\n output = await this.agentExecutor._return(\n toolReturn,\n this.intermediateSteps,\n runManager\n );\n await this.runManager?.handleChainEnd(output);\n await this.setFinalOutputs(output);\n }\n }\n output = { intermediateSteps: nextStepOutput as AgentStep[] };\n return output;\n }\n\n async _stop(): Promise<Record<string, unknown>> {\n const output = await this.agentExecutor.agent.returnStoppedResponse(\n this.agentExecutor.earlyStoppingMethod,\n this.intermediateSteps,\n this.inputs\n );\n const returnedOutput = await this.agentExecutor._return(\n output,\n this.intermediateSteps,\n this.runManager\n );\n await this.setFinalOutputs(returnedOutput);\n await this.runManager?.handleChainEnd(returnedOutput);\n return returnedOutput;\n }\n\n async _callNext(): Promise<Record<string, unknown>> {\n // final output already reached: stopiteration (final output)\n if (this.finalOutputs) {\n throw new Error(\n `Final outputs already reached: ${JSON.stringify(\n this.finalOutputs,\n null,\n 2\n )}`\n );\n }\n // timeout/max iterations: stopiteration (stopped response)\n if (!this.agentExecutor.shouldContinueGetter(this.iterations)) {\n return this._stop();\n }\n const nextStepOutput = await this._executeNextStep(this.runManager);\n const output = await this._processNextStepOutput(\n nextStepOutput,\n this.runManager\n );\n this.updateIterations();\n return output;\n }\n}\n\ntype ExtractToolType<T> = T extends { ToolType: infer ToolInterface }\n ? ToolInterface\n : StructuredToolInterface;\n\n/**\n * Interface defining the structure of input data for creating an\n * AgentExecutor. It extends ChainInputs and includes additional\n * properties specific to agent execution.\n */\nexport interface AgentExecutorInput extends ChainInputs {\n agent:\n | BaseSingleActionAgent\n | BaseMultiActionAgent\n | Runnable<\n ChainValues & { steps?: AgentStep[] },\n AgentAction[] | AgentAction | AgentFinish\n >;\n tools: ExtractToolType<this[\"agent\"]>[];\n returnIntermediateSteps?: boolean;\n maxIterations?: number;\n earlyStoppingMethod?: StoppingMethod;\n handleParsingErrors?:\n | boolean\n | string\n | ((e: OutputParserException | ToolInputParsingException) => string);\n handleToolRuntimeErrors?: (e: Error) => string;\n}\n\n// TODO: Type properly with { intermediateSteps?: AgentStep[] };\nexport type AgentExecutorOutput = ChainValues;\n\n/**\n * Tool that just returns the query.\n * Used for exception tracking.\n */\nexport class ExceptionTool extends Tool {\n name = \"_Exception\";\n\n description = \"Exception tool\";\n\n async _call(query: string) {\n return query;\n }\n}\n\n/**\n * A chain managing an agent using tools.\n * @augments BaseChain\n * @example\n * ```typescript\n *\n * const executor = AgentExecutor.fromAgentAndTools({\n * agent: async () => loadAgentFromLangchainHub(),\n * tools: [new SerpAPI(), new Calculator()],\n * returnIntermediateSteps: true,\n * });\n *\n * const result = await executor.invoke({\n * input: `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`,\n * });\n *\n * ```\n */\nexport class AgentExecutor extends BaseChain<ChainValues, AgentExecutorOutput> {\n static lc_name() {\n return \"AgentExecutor\";\n }\n\n get lc_namespace() {\n return [\"langchain\", \"agents\", \"executor\"];\n }\n\n agent: BaseSingleActionAgent | BaseMultiActionAgent;\n\n tools: this[\"agent\"][\"ToolType\"][];\n\n returnIntermediateSteps = false;\n\n maxIterations?: number = 15;\n\n earlyStoppingMethod: StoppingMethod = \"force\";\n\n // TODO: Update BaseChain implementation on breaking change to include this\n returnOnlyOutputs = true;\n\n /**\n * How to handle errors raised by the agent's output parser.\n Defaults to `False`, which raises the error.\n\n If `true`, the error will be sent back to the LLM as an observation.\n If a string, the string itself will be sent to the LLM as an observation.\n If a callable function, the function will be called with the exception\n as an argument, and the result of that function will be passed to the agent\n as an observation.\n */\n handleParsingErrors:\n | boolean\n | string\n | ((e: OutputParserException | ToolInputParsingException) => string) =\n false;\n\n handleToolRuntimeErrors?: (e: Error) => string;\n\n get inputKeys() {\n return this.agent.inputKeys;\n }\n\n get outputKeys() {\n return this.agent.returnValues;\n }\n\n constructor(input: AgentExecutorInput) {\n let agent: BaseSingleActionAgent | BaseMultiActionAgent;\n let returnOnlyOutputs = true;\n if (Runnable.isRunnable(input.agent)) {\n if (AgentRunnableSequence.isAgentRunnableSequence(input.agent)) {\n if (input.agent.singleAction) {\n agent = new RunnableSingleActionAgent({\n runnable: input.agent,\n streamRunnable: input.agent.streamRunnable,\n });\n } else {\n agent = new RunnableMultiActionAgent({\n runnable: input.agent,\n streamRunnable: input.agent.streamRunnable,\n });\n }\n } else {\n agent = new RunnableMultiActionAgent({ runnable: input.agent });\n }\n // TODO: Update BaseChain implementation on breaking change\n returnOnlyOutputs = false;\n } else {\n if (isRunnableAgent(input.agent)) {\n returnOnlyOutputs = false;\n }\n agent = input.agent;\n }\n\n super(input);\n this.agent = agent;\n this.tools = input.tools;\n this.handleParsingErrors =\n input.handleParsingErrors ?? this.handleParsingErrors;\n this.handleToolRuntimeErrors = input.handleToolRuntimeErrors;\n this.returnOnlyOutputs = returnOnlyOutputs;\n if (this.agent._agentActionType() === \"multi\") {\n for (const tool of this.tools) {\n if (tool.returnDirect) {\n throw new Error(\n `Tool with return direct ${tool.name} not supported for multi-action agent.`\n );\n }\n }\n }\n this.returnIntermediateSteps =\n input.returnIntermediateSteps ?? this.returnIntermediateSteps;\n this.maxIterations = input.maxIterations ?? this.maxIterations;\n this.earlyStoppingMethod =\n input.earlyStoppingMethod ?? this.earlyStoppingMethod;\n }\n\n /** Create from agent and a list of tools. */\n static fromAgentAndTools(fields: AgentExecutorInput): AgentExecutor {\n return new AgentExecutor(fields);\n }\n\n get shouldContinueGetter() {\n return this.shouldContinue.bind(this);\n }\n\n /**\n * Method that checks if the agent execution should continue based on the\n * number of iterations.\n * @param iterations The current number of iterations.\n * @returns A boolean indicating whether the agent execution should continue.\n */\n private shouldContinue(iterations: number): boolean {\n return this.maxIterations === undefined || iterations < this.maxIterations;\n }\n\n /** @ignore */\n async _call(\n inputs: ChainValues,\n runManager?: CallbackManagerForChainRun,\n config?: RunnableConfig\n ): Promise<AgentExecutorOutput> {\n const toolsByName = Object.fromEntries(\n this.tools.map((t) => [t.name.toLowerCase(), t])\n );\n const steps: AgentStep[] = [];\n let iterations = 0;\n\n const getOutput = async (\n finishStep: AgentFinish\n ): Promise<AgentExecutorOutput> => {\n const { returnValues } = finishStep;\n const additional = await this.agent.prepareForOutput(returnValues, steps);\n\n await runManager?.handleAgentEnd(finishStep);\n\n let response;\n\n if (this.returnIntermediateSteps) {\n response = { ...returnValues, intermediateSteps: steps, ...additional };\n } else {\n response = { ...returnValues, ...additional };\n }\n if (!this.returnOnlyOutputs) {\n response = { ...inputs, ...response };\n }\n return response;\n };\n\n while (this.shouldContinue(iterations)) {\n let output;\n try {\n output = await this.agent.plan(\n steps,\n inputs,\n runManager?.getChild(),\n config\n );\n } catch (e) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof OutputParserException) {\n let observation;\n let text = e.message;\n if (this.handleParsingErrors === true) {\n if (e.sendToLLM) {\n observation = e.observation;\n text = e.llmOutput ?? \"\";\n } else {\n observation = \"Invalid or incomplete response\";\n }\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n output = {\n tool: \"_Exception\",\n toolInput: observation,\n log: text,\n } as AgentAction;\n } else {\n throw e;\n }\n }\n // Check if the agent has finished\n if (\"returnValues\" in output) {\n return getOutput(output);\n }\n\n let actions: AgentAction[];\n if (Array.isArray(output)) {\n actions = output as AgentAction[];\n } else {\n actions = [output as AgentAction];\n }\n\n const newSteps = await Promise.all(\n actions.map(async (action) => {\n await runManager?.handleAgentAction(action);\n const tool =\n action.tool === \"_Exception\"\n ? new ExceptionTool()\n : toolsByName[action.tool?.toLowerCase()];\n let observation;\n try {\n observation = tool\n ? await tool.invoke(\n action.toolInput,\n patchConfig(config, { callbacks: runManager?.getChild() })\n )\n : `${action.tool} is not a valid tool, try another one.`;\n if (typeof observation !== \"string\") {\n throw new Error(\n \"Received unsupported non-string response from tool call.\"\n );\n }\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof ToolInputParsingException) {\n if (this.handleParsingErrors === true) {\n observation =\n \"Invalid or incomplete tool input. Please try again.\";\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n observation = await new ExceptionTool().call(\n observation,\n runManager?.getChild()\n );\n return { action, observation: observation ?? \"\" };\n } else if (this.handleToolRuntimeErrors !== undefined) {\n observation = this.handleToolRuntimeErrors(e);\n }\n }\n\n return { action, observation: observation ?? \"\" };\n })\n );\n\n steps.push(...newSteps);\n\n const lastStep = steps[steps.length - 1];\n const lastTool = toolsByName[lastStep.action.tool?.toLowerCase()];\n\n if (lastTool?.returnDirect) {\n return getOutput({\n returnValues: { [this.agent.returnValues[0]]: lastStep.observation },\n log: \"\",\n });\n }\n\n iterations += 1;\n }\n\n const finish = await this.agent.returnStoppedResponse(\n this.earlyStoppingMethod,\n steps,\n inputs\n );\n\n return getOutput(finish);\n }\n\n async _takeNextStep(\n nameToolMap: Record<string, ToolInterface>,\n inputs: ChainValues,\n intermediateSteps: AgentStep[],\n runManager?: CallbackManagerForChainRun,\n config?: RunnableConfig\n ): Promise<AgentFinish | AgentStep[]> {\n let output;\n try {\n output = await this.agent.plan(\n intermediateSteps,\n inputs,\n runManager?.getChild(),\n config\n );\n } catch (e) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof OutputParserException) {\n let observation;\n let text = e.message;\n if (this.handleParsingErrors === true) {\n if (e.sendToLLM) {\n observation = e.observation;\n text = e.llmOutput ?? \"\";\n } else {\n observation = \"Invalid or incomplete response\";\n }\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n output = {\n tool: \"_Exception\",\n toolInput: observation,\n log: text,\n } as AgentAction;\n } else {\n throw e;\n }\n }\n\n if (\"returnValues\" in output) {\n return output;\n }\n\n let actions: AgentAction[];\n if (Array.isArray(output)) {\n actions = output as AgentAction[];\n } else {\n actions = [output as AgentAction];\n }\n\n const result: AgentStep[] = [];\n for (const agentAction of actions) {\n let observation = \"\";\n if (runManager) {\n await runManager?.handleAgentAction(agentAction);\n }\n if (agentAction.tool in nameToolMap) {\n const tool = nameToolMap[agentAction.tool];\n try {\n observation = await tool.call(\n agentAction.toolInput,\n runManager?.getChild()\n );\n if (typeof observation !== \"string\") {\n throw new Error(\n \"Received unsupported non-string response from tool call.\"\n );\n }\n } catch (e) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof ToolInputParsingException) {\n if (this.handleParsingErrors === true) {\n observation =\n \"Invalid or incomplete tool input. Please try again.\";\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n observation = await new ExceptionTool().call(\n observation,\n runManager?.getChild()\n );\n }\n }\n } else {\n observation = `${\n agentAction.tool\n } is not a valid tool, try another available tool: ${Object.keys(\n nameToolMap\n ).join(\", \")}`;\n }\n result.push({\n action: agentAction,\n observation,\n });\n }\n return result;\n }\n\n async _return(\n output: AgentFinish,\n intermediateSteps: AgentStep[],\n runManager?: CallbackManagerForChainRun\n ): Promise<AgentExecutorOutput> {\n if (runManager) {\n await runManager.handleAgentEnd(output);\n }\n const finalOutput: Record<string, unknown> = output.returnValues;\n if (this.returnIntermediateSteps) {\n finalOutput.intermediateSteps = intermediateSteps;\n }\n return finalOutput;\n }\n\n async _getToolReturn(nextStepOutput: AgentStep): Promise<AgentFinish | null> {\n const { action, observation } = nextStepOutput;\n const nameToolMap = Object.fromEntries(\n this.tools.map((t) => [t.name.toLowerCase(), t])\n );\n const [returnValueKey = \"output\"] = this.agent.returnValues;\n // Invalid tools won't be in the map, so we return False.\n if (action.tool in nameToolMap) {\n if (nameToolMap[action.tool].returnDirect) {\n return {\n returnValues: { [returnValueKey]: observation },\n log: \"\",\n };\n }\n }\n return null;\n }\n\n _returnStoppedResponse(earlyStoppingMethod: StoppingMethod) {\n if (earlyStoppingMethod === \"force\") {\n return {\n returnValues: {\n output: \"Agent stopped due to iteration limit or time limit.\",\n },\n log: \"\",\n } as AgentFinish;\n }\n throw new Error(\n `Got unsupported early_stopping_method: ${earlyStoppingMethod}`\n );\n }\n\n async *_streamIterator(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n inputs: Record<string, any>,\n options?: Partial<RunnableConfig>\n ): AsyncGenerator<ChainValues> {\n const agentExecutorIterator = new AgentExecutorIterator({\n inputs,\n agentExecutor: this,\n config: options,\n // TODO: Deprecate these other parameters\n metadata: options?.metadata,\n tags: options?.tags,\n callbacks: options?.callbacks,\n });\n const iterator = agentExecutorIterator.streamIterator();\n for await (const step of iterator) {\n if (!step) {\n continue;\n }\n yield step;\n }\n }\n\n _chainType() {\n return \"agent_executor\" as const;\n }\n\n serialize(): SerializedLLMChain {\n throw new Error(\"Cannot serialize an AgentExecutor\");\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","names":[],"sources":["../../src/agents/executor.ts"],"sourcesContent":["import {\n type StructuredToolInterface,\n type ToolInterface,\n ToolInputParsingException,\n Tool,\n} from \"@langchain/core/tools\";\nimport {\n Runnable,\n type RunnableConfig,\n patchConfig,\n} from \"@langchain/core/runnables\";\nimport { AgentAction, AgentFinish, AgentStep } from \"@langchain/core/agents\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n CallbackManager,\n CallbackManagerForChainRun,\n Callbacks,\n} from \"@langchain/core/callbacks/manager\";\nimport { OutputParserException } from \"@langchain/core/output_parsers\";\nimport { Serializable } from \"@langchain/core/load/serializable\";\nimport { SerializedLLMChain } from \"../chains/serde.js\";\nimport { StoppingMethod } from \"./types.js\";\nimport {\n AgentRunnableSequence,\n BaseMultiActionAgent,\n BaseSingleActionAgent,\n RunnableMultiActionAgent,\n RunnableSingleActionAgent,\n isRunnableAgent,\n} from \"./agent.js\";\nimport { BaseChain, ChainInputs } from \"../chains/base.js\";\n\ninterface AgentExecutorIteratorInput {\n agentExecutor: AgentExecutor;\n inputs: Record<string, string>;\n config?: RunnableConfig;\n /** @deprecated Use \"config\" */\n callbacks?: Callbacks;\n /** @deprecated Use \"config\" */\n tags?: string[];\n /** @deprecated Use \"config\" */\n metadata?: Record<string, unknown>;\n runName?: string;\n runManager?: CallbackManagerForChainRun;\n}\n\nexport class AgentExecutorIterator\n extends Serializable\n implements AgentExecutorIteratorInput\n{\n lc_namespace = [\"langchain\", \"agents\", \"executor_iterator\"];\n\n agentExecutor: AgentExecutor;\n\n inputs: Record<string, string>;\n\n config?: RunnableConfig;\n\n /** @deprecated Use \"config\" */\n callbacks?: Callbacks;\n\n /** @deprecated Use \"config\" */\n tags: string[] | undefined;\n\n /** @deprecated Use \"config\" */\n metadata: Record<string, unknown> | undefined;\n\n /** @deprecated Use \"config\" */\n runName: string | undefined;\n\n private _finalOutputs: Record<string, unknown> | undefined;\n\n get finalOutputs(): Record<string, unknown> | undefined {\n return this._finalOutputs;\n }\n\n /** Intended to be used as a setter method, needs to be async. */\n async setFinalOutputs(value: Record<string, unknown> | undefined) {\n this._finalOutputs = undefined;\n if (value) {\n const preparedOutputs: Record<string, unknown> =\n await this.agentExecutor.prepOutputs(this.inputs, value, true);\n this._finalOutputs = preparedOutputs;\n }\n }\n\n runManager: CallbackManagerForChainRun | undefined;\n\n intermediateSteps: AgentStep[] = [];\n\n iterations = 0;\n\n get nameToToolMap(): Record<string, ToolInterface> {\n const toolMap = this.agentExecutor.tools.map((tool) => ({\n [tool.name]: tool,\n }));\n return Object.assign({}, ...toolMap);\n }\n\n constructor(fields: AgentExecutorIteratorInput) {\n super(fields);\n this.agentExecutor = fields.agentExecutor;\n this.inputs = fields.inputs;\n this.callbacks = fields.callbacks;\n this.tags = fields.tags;\n this.metadata = fields.metadata;\n this.runName = fields.runName;\n this.runManager = fields.runManager;\n this.config = fields.config;\n }\n\n /**\n * Reset the iterator to its initial state, clearing intermediate steps,\n * iterations, and the final output.\n */\n reset(): void {\n this.intermediateSteps = [];\n this.iterations = 0;\n this._finalOutputs = undefined;\n }\n\n updateIterations(): void {\n this.iterations += 1;\n }\n\n async *streamIterator() {\n this.reset();\n\n // Loop to handle iteration\n while (true) {\n try {\n if (this.iterations === 0) {\n await this.onFirstStep();\n }\n\n const result = await this._callNext();\n yield result;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (\n \"message\" in e &&\n e.message.startsWith(\"Final outputs already reached: \")\n ) {\n if (!this.finalOutputs) {\n throw e;\n }\n return this.finalOutputs;\n }\n if (this.runManager) {\n await this.runManager.handleChainError(e);\n }\n throw e;\n }\n }\n }\n\n /**\n * Perform any necessary setup for the first step\n * of the asynchronous iterator.\n */\n async onFirstStep(): Promise<void> {\n if (this.iterations === 0) {\n const callbackManager = await CallbackManager.configure(\n this.callbacks ?? this.config?.callbacks,\n this.agentExecutor.callbacks,\n this.tags ?? this.config?.tags,\n this.agentExecutor.tags,\n this.metadata ?? this.config?.metadata,\n this.agentExecutor.metadata,\n {\n verbose: this.agentExecutor.verbose,\n }\n );\n this.runManager = await callbackManager?.handleChainStart(\n this.agentExecutor.toJSON(),\n this.inputs,\n this.config?.runId,\n undefined,\n this.tags ?? this.config?.tags,\n this.metadata ?? this.config?.metadata,\n this.runName ?? this.config?.runName\n );\n if (this.config !== undefined) {\n delete this.config.runId;\n }\n }\n }\n\n /**\n * Execute the next step in the chain using the\n * AgentExecutor's _takeNextStep method.\n */\n async _executeNextStep(\n runManager?: CallbackManagerForChainRun\n ): Promise<AgentFinish | AgentStep[]> {\n return this.agentExecutor._takeNextStep(\n this.nameToToolMap,\n this.inputs,\n this.intermediateSteps,\n runManager,\n this.config\n );\n }\n\n /**\n * Process the output of the next step,\n * handling AgentFinish and tool return cases.\n */\n async _processNextStepOutput(\n nextStepOutput: AgentFinish | AgentStep[],\n runManager?: CallbackManagerForChainRun\n ): Promise<Record<string, string | AgentStep[]>> {\n if (\"returnValues\" in nextStepOutput) {\n const output = await this.agentExecutor._return(\n nextStepOutput as AgentFinish,\n this.intermediateSteps,\n runManager\n );\n if (this.runManager) {\n await this.runManager.handleChainEnd(output);\n }\n await this.setFinalOutputs(output);\n return output;\n }\n\n this.intermediateSteps = this.intermediateSteps.concat(\n nextStepOutput as AgentStep[]\n );\n\n let output: Record<string, string | AgentStep[]> = {};\n if (Array.isArray(nextStepOutput) && nextStepOutput.length === 1) {\n const nextStep = nextStepOutput[0];\n const toolReturn = await this.agentExecutor._getToolReturn(nextStep);\n if (toolReturn) {\n output = await this.agentExecutor._return(\n toolReturn,\n this.intermediateSteps,\n runManager\n );\n await this.runManager?.handleChainEnd(output);\n await this.setFinalOutputs(output);\n }\n }\n output = { intermediateSteps: nextStepOutput as AgentStep[] };\n return output;\n }\n\n async _stop(): Promise<Record<string, unknown>> {\n const output = await this.agentExecutor.agent.returnStoppedResponse(\n this.agentExecutor.earlyStoppingMethod,\n this.intermediateSteps,\n this.inputs\n );\n const returnedOutput = await this.agentExecutor._return(\n output,\n this.intermediateSteps,\n this.runManager\n );\n await this.setFinalOutputs(returnedOutput);\n await this.runManager?.handleChainEnd(returnedOutput);\n return returnedOutput;\n }\n\n async _callNext(): Promise<Record<string, unknown>> {\n // final output already reached: stopiteration (final output)\n if (this.finalOutputs) {\n throw new Error(\n `Final outputs already reached: ${JSON.stringify(\n this.finalOutputs,\n null,\n 2\n )}`\n );\n }\n // timeout/max iterations: stopiteration (stopped response)\n if (!this.agentExecutor.shouldContinueGetter(this.iterations)) {\n return this._stop();\n }\n const nextStepOutput = await this._executeNextStep(this.runManager);\n const output = await this._processNextStepOutput(\n nextStepOutput,\n this.runManager\n );\n this.updateIterations();\n return output;\n }\n}\n\ntype ExtractToolType<T> = T extends { ToolType: infer ToolInterface }\n ? ToolInterface\n : StructuredToolInterface;\n\n/**\n * Interface defining the structure of input data for creating an\n * AgentExecutor. It extends ChainInputs and includes additional\n * properties specific to agent execution.\n */\nexport interface AgentExecutorInput extends ChainInputs {\n agent:\n | BaseSingleActionAgent\n | BaseMultiActionAgent\n | Runnable<\n ChainValues & { steps?: AgentStep[] },\n AgentAction[] | AgentAction | AgentFinish\n >;\n tools: ExtractToolType<this[\"agent\"]>[];\n returnIntermediateSteps?: boolean;\n maxIterations?: number;\n earlyStoppingMethod?: StoppingMethod;\n handleParsingErrors?:\n | boolean\n | string\n | ((e: OutputParserException | ToolInputParsingException) => string);\n handleToolRuntimeErrors?: (e: Error) => string;\n}\n\n// TODO: Type properly with { intermediateSteps?: AgentStep[] };\nexport type AgentExecutorOutput = ChainValues;\n\n/**\n * Tool that just returns the query.\n * Used for exception tracking.\n */\nexport class ExceptionTool extends Tool {\n name = \"_Exception\";\n\n description = \"Exception tool\";\n\n async _call(query: string) {\n return query;\n }\n}\n\n/**\n * A chain managing an agent using tools.\n * @augments BaseChain\n * @example\n * ```typescript\n *\n * const executor = AgentExecutor.fromAgentAndTools({\n * agent: async () => loadAgentFromLangchainHub(),\n * tools: [new SerpAPI(), new Calculator()],\n * returnIntermediateSteps: true,\n * });\n *\n * const result = await executor.invoke({\n * input: `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`,\n * });\n *\n * ```\n */\nexport class AgentExecutor extends BaseChain<ChainValues, AgentExecutorOutput> {\n static lc_name() {\n return \"AgentExecutor\";\n }\n\n get lc_namespace() {\n return [\"langchain\", \"agents\", \"executor\"];\n }\n\n agent: BaseSingleActionAgent | BaseMultiActionAgent;\n\n tools: this[\"agent\"][\"ToolType\"][];\n\n returnIntermediateSteps = false;\n\n maxIterations?: number = 15;\n\n earlyStoppingMethod: StoppingMethod = \"force\";\n\n // TODO: Update BaseChain implementation on breaking change to include this\n returnOnlyOutputs = true;\n\n /**\n * How to handle errors raised by the agent's output parser.\n Defaults to `False`, which raises the error.\n\n If `true`, the error will be sent back to the LLM as an observation.\n If a string, the string itself will be sent to the LLM as an observation.\n If a callable function, the function will be called with the exception\n as an argument, and the result of that function will be passed to the agent\n as an observation.\n */\n handleParsingErrors:\n | boolean\n | string\n | ((e: OutputParserException | ToolInputParsingException) => string) =\n false;\n\n handleToolRuntimeErrors?: (e: Error) => string;\n\n get inputKeys() {\n return this.agent.inputKeys;\n }\n\n get outputKeys() {\n return this.agent.returnValues;\n }\n\n constructor(input: AgentExecutorInput) {\n let agent: BaseSingleActionAgent | BaseMultiActionAgent;\n let returnOnlyOutputs = true;\n if (Runnable.isRunnable(input.agent)) {\n if (AgentRunnableSequence.isAgentRunnableSequence(input.agent)) {\n if (input.agent.singleAction) {\n agent = new RunnableSingleActionAgent({\n runnable: input.agent,\n streamRunnable: input.agent.streamRunnable,\n });\n } else {\n agent = new RunnableMultiActionAgent({\n runnable: input.agent,\n streamRunnable: input.agent.streamRunnable,\n });\n }\n } else {\n agent = new RunnableMultiActionAgent({ runnable: input.agent });\n }\n // TODO: Update BaseChain implementation on breaking change\n returnOnlyOutputs = false;\n } else {\n if (isRunnableAgent(input.agent)) {\n returnOnlyOutputs = false;\n }\n agent = input.agent;\n }\n\n super(input);\n this.agent = agent;\n this.tools = input.tools;\n this.handleParsingErrors =\n input.handleParsingErrors ?? this.handleParsingErrors;\n this.handleToolRuntimeErrors = input.handleToolRuntimeErrors;\n this.returnOnlyOutputs = returnOnlyOutputs;\n if (this.agent._agentActionType() === \"multi\") {\n for (const tool of this.tools) {\n if (tool.returnDirect) {\n throw new Error(\n `Tool with return direct ${tool.name} not supported for multi-action agent.`\n );\n }\n }\n }\n this.returnIntermediateSteps =\n input.returnIntermediateSteps ?? this.returnIntermediateSteps;\n this.maxIterations = input.maxIterations ?? this.maxIterations;\n this.earlyStoppingMethod =\n input.earlyStoppingMethod ?? this.earlyStoppingMethod;\n }\n\n /** Create from agent and a list of tools. */\n static fromAgentAndTools(fields: AgentExecutorInput): AgentExecutor {\n return new AgentExecutor(fields);\n }\n\n get shouldContinueGetter() {\n return this.shouldContinue.bind(this);\n }\n\n /**\n * Method that checks if the agent execution should continue based on the\n * number of iterations.\n * @param iterations The current number of iterations.\n * @returns A boolean indicating whether the agent execution should continue.\n */\n private shouldContinue(iterations: number): boolean {\n return this.maxIterations === undefined || iterations < this.maxIterations;\n }\n\n /** @ignore */\n async _call(\n inputs: ChainValues,\n runManager?: CallbackManagerForChainRun,\n config?: RunnableConfig\n ): Promise<AgentExecutorOutput> {\n const toolsByName = Object.fromEntries(\n this.tools.map((t) => [t.name.toLowerCase(), t])\n );\n const steps: AgentStep[] = [];\n let iterations = 0;\n\n const getOutput = async (\n finishStep: AgentFinish\n ): Promise<AgentExecutorOutput> => {\n const { returnValues } = finishStep;\n const additional = await this.agent.prepareForOutput(returnValues, steps);\n\n await runManager?.handleAgentEnd(finishStep);\n\n let response;\n\n if (this.returnIntermediateSteps) {\n response = { ...returnValues, intermediateSteps: steps, ...additional };\n } else {\n response = { ...returnValues, ...additional };\n }\n if (!this.returnOnlyOutputs) {\n response = { ...inputs, ...response };\n }\n return response;\n };\n\n while (this.shouldContinue(iterations)) {\n let output;\n try {\n output = await this.agent.plan(\n steps,\n inputs,\n runManager?.getChild(),\n config\n );\n } catch (e) {\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof OutputParserException) {\n let observation;\n let text = e.message;\n if (this.handleParsingErrors === true) {\n if (e.sendToLLM) {\n observation = e.observation;\n text = e.llmOutput ?? \"\";\n } else {\n observation = \"Invalid or incomplete response\";\n }\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n output = {\n tool: \"_Exception\",\n toolInput: observation,\n log: text,\n } as AgentAction;\n } else {\n throw e;\n }\n }\n // Check if the agent has finished\n if (\"returnValues\" in output) {\n return getOutput(output);\n }\n\n let actions: AgentAction[];\n if (Array.isArray(output)) {\n actions = output as AgentAction[];\n } else {\n actions = [output as AgentAction];\n }\n\n const newSteps = await Promise.all(\n actions.map(async (action) => {\n await runManager?.handleAgentAction(action);\n const tool =\n action.tool === \"_Exception\"\n ? new ExceptionTool()\n : toolsByName[action.tool?.toLowerCase()];\n let observation;\n try {\n observation = tool\n ? await tool.invoke(\n action.toolInput,\n patchConfig(config, { callbacks: runManager?.getChild() })\n )\n : `${action.tool} is not a valid tool, try another one.`;\n if (typeof observation !== \"string\") {\n throw new Error(\n \"Received unsupported non-string response from tool call.\"\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof ToolInputParsingException) {\n if (this.handleParsingErrors === true) {\n observation =\n \"Invalid or incomplete tool input. Please try again.\";\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n observation = await new ExceptionTool().call(\n observation,\n runManager?.getChild()\n );\n return { action, observation: observation ?? \"\" };\n } else if (this.handleToolRuntimeErrors !== undefined) {\n observation = this.handleToolRuntimeErrors(e);\n }\n }\n\n return { action, observation: observation ?? \"\" };\n })\n );\n\n steps.push(...newSteps);\n\n const lastStep = steps[steps.length - 1];\n const lastTool = toolsByName[lastStep.action.tool?.toLowerCase()];\n\n if (lastTool?.returnDirect) {\n return getOutput({\n returnValues: { [this.agent.returnValues[0]]: lastStep.observation },\n log: \"\",\n });\n }\n\n iterations += 1;\n }\n\n const finish = await this.agent.returnStoppedResponse(\n this.earlyStoppingMethod,\n steps,\n inputs\n );\n\n return getOutput(finish);\n }\n\n async _takeNextStep(\n nameToolMap: Record<string, ToolInterface>,\n inputs: ChainValues,\n intermediateSteps: AgentStep[],\n runManager?: CallbackManagerForChainRun,\n config?: RunnableConfig\n ): Promise<AgentFinish | AgentStep[]> {\n let output;\n try {\n output = await this.agent.plan(\n intermediateSteps,\n inputs,\n runManager?.getChild(),\n config\n );\n } catch (e) {\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof OutputParserException) {\n let observation;\n let text = e.message;\n if (this.handleParsingErrors === true) {\n if (e.sendToLLM) {\n observation = e.observation;\n text = e.llmOutput ?? \"\";\n } else {\n observation = \"Invalid or incomplete response\";\n }\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n output = {\n tool: \"_Exception\",\n toolInput: observation,\n log: text,\n } as AgentAction;\n } else {\n throw e;\n }\n }\n\n if (\"returnValues\" in output) {\n return output;\n }\n\n let actions: AgentAction[];\n if (Array.isArray(output)) {\n actions = output as AgentAction[];\n } else {\n actions = [output as AgentAction];\n }\n\n const result: AgentStep[] = [];\n for (const agentAction of actions) {\n let observation = \"\";\n if (runManager) {\n await runManager?.handleAgentAction(agentAction);\n }\n if (agentAction.tool in nameToolMap) {\n const tool = nameToolMap[agentAction.tool];\n try {\n observation = await tool.call(\n agentAction.toolInput,\n runManager?.getChild()\n );\n if (typeof observation !== \"string\") {\n throw new Error(\n \"Received unsupported non-string response from tool call.\"\n );\n }\n } catch (e) {\n // eslint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof ToolInputParsingException) {\n if (this.handleParsingErrors === true) {\n observation =\n \"Invalid or incomplete tool input. Please try again.\";\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n observation = await new ExceptionTool().call(\n observation,\n runManager?.getChild()\n );\n }\n }\n } else {\n observation = `${\n agentAction.tool\n } is not a valid tool, try another available tool: ${Object.keys(\n nameToolMap\n ).join(\", \")}`;\n }\n result.push({\n action: agentAction,\n observation,\n });\n }\n return result;\n }\n\n async _return(\n output: AgentFinish,\n intermediateSteps: AgentStep[],\n runManager?: CallbackManagerForChainRun\n ): Promise<AgentExecutorOutput> {\n if (runManager) {\n await runManager.handleAgentEnd(output);\n }\n const finalOutput: Record<string, unknown> = output.returnValues;\n if (this.returnIntermediateSteps) {\n finalOutput.intermediateSteps = intermediateSteps;\n }\n return finalOutput;\n }\n\n async _getToolReturn(nextStepOutput: AgentStep): Promise<AgentFinish | null> {\n const { action, observation } = nextStepOutput;\n const nameToolMap = Object.fromEntries(\n this.tools.map((t) => [t.name.toLowerCase(), t])\n );\n const [returnValueKey = \"output\"] = this.agent.returnValues;\n // Invalid tools won't be in the map, so we return False.\n if (action.tool in nameToolMap) {\n if (nameToolMap[action.tool].returnDirect) {\n return {\n returnValues: { [returnValueKey]: observation },\n log: \"\",\n };\n }\n }\n return null;\n }\n\n _returnStoppedResponse(earlyStoppingMethod: StoppingMethod) {\n if (earlyStoppingMethod === \"force\") {\n return {\n returnValues: {\n output: \"Agent stopped due to iteration limit or time limit.\",\n },\n log: \"\",\n } as AgentFinish;\n }\n throw new Error(\n `Got unsupported early_stopping_method: ${earlyStoppingMethod}`\n );\n }\n\n async *_streamIterator(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n inputs: Record<string, any>,\n options?: Partial<RunnableConfig>\n ): AsyncGenerator<ChainValues> {\n const agentExecutorIterator = new AgentExecutorIterator({\n inputs,\n agentExecutor: this,\n config: options,\n // TODO: Deprecate these other parameters\n metadata: options?.metadata,\n tags: options?.tags,\n callbacks: options?.callbacks,\n });\n const iterator = agentExecutorIterator.streamIterator();\n for await (const step of iterator) {\n if (!step) {\n continue;\n }\n yield step;\n }\n }\n\n _chainType() {\n return \"agent_executor\" as const;\n }\n\n serialize(): SerializedLLMChain {\n throw new Error(\"Cannot serialize an AgentExecutor\");\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"executor.js","names":[],"sources":["../../src/agents/executor.ts"],"sourcesContent":["import {\n type StructuredToolInterface,\n type ToolInterface,\n ToolInputParsingException,\n Tool,\n} from \"@langchain/core/tools\";\nimport {\n Runnable,\n type RunnableConfig,\n patchConfig,\n} from \"@langchain/core/runnables\";\nimport { AgentAction, AgentFinish, AgentStep } from \"@langchain/core/agents\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n CallbackManager,\n CallbackManagerForChainRun,\n Callbacks,\n} from \"@langchain/core/callbacks/manager\";\nimport { OutputParserException } from \"@langchain/core/output_parsers\";\nimport { Serializable } from \"@langchain/core/load/serializable\";\nimport { SerializedLLMChain } from \"../chains/serde.js\";\nimport { StoppingMethod } from \"./types.js\";\nimport {\n AgentRunnableSequence,\n BaseMultiActionAgent,\n BaseSingleActionAgent,\n RunnableMultiActionAgent,\n RunnableSingleActionAgent,\n isRunnableAgent,\n} from \"./agent.js\";\nimport { BaseChain, ChainInputs } from \"../chains/base.js\";\n\ninterface AgentExecutorIteratorInput {\n agentExecutor: AgentExecutor;\n inputs: Record<string, string>;\n config?: RunnableConfig;\n /** @deprecated Use \"config\" */\n callbacks?: Callbacks;\n /** @deprecated Use \"config\" */\n tags?: string[];\n /** @deprecated Use \"config\" */\n metadata?: Record<string, unknown>;\n runName?: string;\n runManager?: CallbackManagerForChainRun;\n}\n\nexport class AgentExecutorIterator\n extends Serializable\n implements AgentExecutorIteratorInput\n{\n lc_namespace = [\"langchain\", \"agents\", \"executor_iterator\"];\n\n agentExecutor: AgentExecutor;\n\n inputs: Record<string, string>;\n\n config?: RunnableConfig;\n\n /** @deprecated Use \"config\" */\n callbacks?: Callbacks;\n\n /** @deprecated Use \"config\" */\n tags: string[] | undefined;\n\n /** @deprecated Use \"config\" */\n metadata: Record<string, unknown> | undefined;\n\n /** @deprecated Use \"config\" */\n runName: string | undefined;\n\n private _finalOutputs: Record<string, unknown> | undefined;\n\n get finalOutputs(): Record<string, unknown> | undefined {\n return this._finalOutputs;\n }\n\n /** Intended to be used as a setter method, needs to be async. */\n async setFinalOutputs(value: Record<string, unknown> | undefined) {\n this._finalOutputs = undefined;\n if (value) {\n const preparedOutputs: Record<string, unknown> =\n await this.agentExecutor.prepOutputs(this.inputs, value, true);\n this._finalOutputs = preparedOutputs;\n }\n }\n\n runManager: CallbackManagerForChainRun | undefined;\n\n intermediateSteps: AgentStep[] = [];\n\n iterations = 0;\n\n get nameToToolMap(): Record<string, ToolInterface> {\n const toolMap = this.agentExecutor.tools.map((tool) => ({\n [tool.name]: tool,\n }));\n return Object.assign({}, ...toolMap);\n }\n\n constructor(fields: AgentExecutorIteratorInput) {\n super(fields);\n this.agentExecutor = fields.agentExecutor;\n this.inputs = fields.inputs;\n this.callbacks = fields.callbacks;\n this.tags = fields.tags;\n this.metadata = fields.metadata;\n this.runName = fields.runName;\n this.runManager = fields.runManager;\n this.config = fields.config;\n }\n\n /**\n * Reset the iterator to its initial state, clearing intermediate steps,\n * iterations, and the final output.\n */\n reset(): void {\n this.intermediateSteps = [];\n this.iterations = 0;\n this._finalOutputs = undefined;\n }\n\n updateIterations(): void {\n this.iterations += 1;\n }\n\n async *streamIterator() {\n this.reset();\n\n // Loop to handle iteration\n while (true) {\n try {\n if (this.iterations === 0) {\n await this.onFirstStep();\n }\n\n const result = await this._callNext();\n yield result;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (\n \"message\" in e &&\n e.message.startsWith(\"Final outputs already reached: \")\n ) {\n if (!this.finalOutputs) {\n throw e;\n }\n return this.finalOutputs;\n }\n if (this.runManager) {\n await this.runManager.handleChainError(e);\n }\n throw e;\n }\n }\n }\n\n /**\n * Perform any necessary setup for the first step\n * of the asynchronous iterator.\n */\n async onFirstStep(): Promise<void> {\n if (this.iterations === 0) {\n const callbackManager = await CallbackManager.configure(\n this.callbacks ?? this.config?.callbacks,\n this.agentExecutor.callbacks,\n this.tags ?? this.config?.tags,\n this.agentExecutor.tags,\n this.metadata ?? this.config?.metadata,\n this.agentExecutor.metadata,\n {\n verbose: this.agentExecutor.verbose,\n }\n );\n this.runManager = await callbackManager?.handleChainStart(\n this.agentExecutor.toJSON(),\n this.inputs,\n this.config?.runId,\n undefined,\n this.tags ?? this.config?.tags,\n this.metadata ?? this.config?.metadata,\n this.runName ?? this.config?.runName\n );\n if (this.config !== undefined) {\n delete this.config.runId;\n }\n }\n }\n\n /**\n * Execute the next step in the chain using the\n * AgentExecutor's _takeNextStep method.\n */\n async _executeNextStep(\n runManager?: CallbackManagerForChainRun\n ): Promise<AgentFinish | AgentStep[]> {\n return this.agentExecutor._takeNextStep(\n this.nameToToolMap,\n this.inputs,\n this.intermediateSteps,\n runManager,\n this.config\n );\n }\n\n /**\n * Process the output of the next step,\n * handling AgentFinish and tool return cases.\n */\n async _processNextStepOutput(\n nextStepOutput: AgentFinish | AgentStep[],\n runManager?: CallbackManagerForChainRun\n ): Promise<Record<string, string | AgentStep[]>> {\n if (\"returnValues\" in nextStepOutput) {\n const output = await this.agentExecutor._return(\n nextStepOutput as AgentFinish,\n this.intermediateSteps,\n runManager\n );\n if (this.runManager) {\n await this.runManager.handleChainEnd(output);\n }\n await this.setFinalOutputs(output);\n return output;\n }\n\n this.intermediateSteps = this.intermediateSteps.concat(\n nextStepOutput as AgentStep[]\n );\n\n let output: Record<string, string | AgentStep[]> = {};\n if (Array.isArray(nextStepOutput) && nextStepOutput.length === 1) {\n const nextStep = nextStepOutput[0];\n const toolReturn = await this.agentExecutor._getToolReturn(nextStep);\n if (toolReturn) {\n output = await this.agentExecutor._return(\n toolReturn,\n this.intermediateSteps,\n runManager\n );\n await this.runManager?.handleChainEnd(output);\n await this.setFinalOutputs(output);\n }\n }\n output = { intermediateSteps: nextStepOutput as AgentStep[] };\n return output;\n }\n\n async _stop(): Promise<Record<string, unknown>> {\n const output = await this.agentExecutor.agent.returnStoppedResponse(\n this.agentExecutor.earlyStoppingMethod,\n this.intermediateSteps,\n this.inputs\n );\n const returnedOutput = await this.agentExecutor._return(\n output,\n this.intermediateSteps,\n this.runManager\n );\n await this.setFinalOutputs(returnedOutput);\n await this.runManager?.handleChainEnd(returnedOutput);\n return returnedOutput;\n }\n\n async _callNext(): Promise<Record<string, unknown>> {\n // final output already reached: stopiteration (final output)\n if (this.finalOutputs) {\n throw new Error(\n `Final outputs already reached: ${JSON.stringify(\n this.finalOutputs,\n null,\n 2\n )}`\n );\n }\n // timeout/max iterations: stopiteration (stopped response)\n if (!this.agentExecutor.shouldContinueGetter(this.iterations)) {\n return this._stop();\n }\n const nextStepOutput = await this._executeNextStep(this.runManager);\n const output = await this._processNextStepOutput(\n nextStepOutput,\n this.runManager\n );\n this.updateIterations();\n return output;\n }\n}\n\ntype ExtractToolType<T> = T extends { ToolType: infer ToolInterface }\n ? ToolInterface\n : StructuredToolInterface;\n\n/**\n * Interface defining the structure of input data for creating an\n * AgentExecutor. It extends ChainInputs and includes additional\n * properties specific to agent execution.\n */\nexport interface AgentExecutorInput extends ChainInputs {\n agent:\n | BaseSingleActionAgent\n | BaseMultiActionAgent\n | Runnable<\n ChainValues & { steps?: AgentStep[] },\n AgentAction[] | AgentAction | AgentFinish\n >;\n tools: ExtractToolType<this[\"agent\"]>[];\n returnIntermediateSteps?: boolean;\n maxIterations?: number;\n earlyStoppingMethod?: StoppingMethod;\n handleParsingErrors?:\n | boolean\n | string\n | ((e: OutputParserException | ToolInputParsingException) => string);\n handleToolRuntimeErrors?: (e: Error) => string;\n}\n\n// TODO: Type properly with { intermediateSteps?: AgentStep[] };\nexport type AgentExecutorOutput = ChainValues;\n\n/**\n * Tool that just returns the query.\n * Used for exception tracking.\n */\nexport class ExceptionTool extends Tool {\n name = \"_Exception\";\n\n description = \"Exception tool\";\n\n async _call(query: string) {\n return query;\n }\n}\n\n/**\n * A chain managing an agent using tools.\n * @augments BaseChain\n * @example\n * ```typescript\n *\n * const executor = AgentExecutor.fromAgentAndTools({\n * agent: async () => loadAgentFromLangchainHub(),\n * tools: [new SerpAPI(), new Calculator()],\n * returnIntermediateSteps: true,\n * });\n *\n * const result = await executor.invoke({\n * input: `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`,\n * });\n *\n * ```\n */\nexport class AgentExecutor extends BaseChain<ChainValues, AgentExecutorOutput> {\n static lc_name() {\n return \"AgentExecutor\";\n }\n\n get lc_namespace() {\n return [\"langchain\", \"agents\", \"executor\"];\n }\n\n agent: BaseSingleActionAgent | BaseMultiActionAgent;\n\n tools: this[\"agent\"][\"ToolType\"][];\n\n returnIntermediateSteps = false;\n\n maxIterations?: number = 15;\n\n earlyStoppingMethod: StoppingMethod = \"force\";\n\n // TODO: Update BaseChain implementation on breaking change to include this\n returnOnlyOutputs = true;\n\n /**\n * How to handle errors raised by the agent's output parser.\n Defaults to `False`, which raises the error.\n\n If `true`, the error will be sent back to the LLM as an observation.\n If a string, the string itself will be sent to the LLM as an observation.\n If a callable function, the function will be called with the exception\n as an argument, and the result of that function will be passed to the agent\n as an observation.\n */\n handleParsingErrors:\n | boolean\n | string\n | ((e: OutputParserException | ToolInputParsingException) => string) =\n false;\n\n handleToolRuntimeErrors?: (e: Error) => string;\n\n get inputKeys() {\n return this.agent.inputKeys;\n }\n\n get outputKeys() {\n return this.agent.returnValues;\n }\n\n constructor(input: AgentExecutorInput) {\n let agent: BaseSingleActionAgent | BaseMultiActionAgent;\n let returnOnlyOutputs = true;\n if (Runnable.isRunnable(input.agent)) {\n if (AgentRunnableSequence.isAgentRunnableSequence(input.agent)) {\n if (input.agent.singleAction) {\n agent = new RunnableSingleActionAgent({\n runnable: input.agent,\n streamRunnable: input.agent.streamRunnable,\n });\n } else {\n agent = new RunnableMultiActionAgent({\n runnable: input.agent,\n streamRunnable: input.agent.streamRunnable,\n });\n }\n } else {\n agent = new RunnableMultiActionAgent({ runnable: input.agent });\n }\n // TODO: Update BaseChain implementation on breaking change\n returnOnlyOutputs = false;\n } else {\n if (isRunnableAgent(input.agent)) {\n returnOnlyOutputs = false;\n }\n agent = input.agent;\n }\n\n super(input);\n this.agent = agent;\n this.tools = input.tools;\n this.handleParsingErrors =\n input.handleParsingErrors ?? this.handleParsingErrors;\n this.handleToolRuntimeErrors = input.handleToolRuntimeErrors;\n this.returnOnlyOutputs = returnOnlyOutputs;\n if (this.agent._agentActionType() === \"multi\") {\n for (const tool of this.tools) {\n if (tool.returnDirect) {\n throw new Error(\n `Tool with return direct ${tool.name} not supported for multi-action agent.`\n );\n }\n }\n }\n this.returnIntermediateSteps =\n input.returnIntermediateSteps ?? this.returnIntermediateSteps;\n this.maxIterations = input.maxIterations ?? this.maxIterations;\n this.earlyStoppingMethod =\n input.earlyStoppingMethod ?? this.earlyStoppingMethod;\n }\n\n /** Create from agent and a list of tools. */\n static fromAgentAndTools(fields: AgentExecutorInput): AgentExecutor {\n return new AgentExecutor(fields);\n }\n\n get shouldContinueGetter() {\n return this.shouldContinue.bind(this);\n }\n\n /**\n * Method that checks if the agent execution should continue based on the\n * number of iterations.\n * @param iterations The current number of iterations.\n * @returns A boolean indicating whether the agent execution should continue.\n */\n private shouldContinue(iterations: number): boolean {\n return this.maxIterations === undefined || iterations < this.maxIterations;\n }\n\n /** @ignore */\n async _call(\n inputs: ChainValues,\n runManager?: CallbackManagerForChainRun,\n config?: RunnableConfig\n ): Promise<AgentExecutorOutput> {\n const toolsByName = Object.fromEntries(\n this.tools.map((t) => [t.name.toLowerCase(), t])\n );\n const steps: AgentStep[] = [];\n let iterations = 0;\n\n const getOutput = async (\n finishStep: AgentFinish\n ): Promise<AgentExecutorOutput> => {\n const { returnValues } = finishStep;\n const additional = await this.agent.prepareForOutput(returnValues, steps);\n\n await runManager?.handleAgentEnd(finishStep);\n\n let response;\n\n if (this.returnIntermediateSteps) {\n response = { ...returnValues, intermediateSteps: steps, ...additional };\n } else {\n response = { ...returnValues, ...additional };\n }\n if (!this.returnOnlyOutputs) {\n response = { ...inputs, ...response };\n }\n return response;\n };\n\n while (this.shouldContinue(iterations)) {\n let output;\n try {\n output = await this.agent.plan(\n steps,\n inputs,\n runManager?.getChild(),\n config\n );\n } catch (e) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof OutputParserException) {\n let observation;\n let text = e.message;\n if (this.handleParsingErrors === true) {\n if (e.sendToLLM) {\n observation = e.observation;\n text = e.llmOutput ?? \"\";\n } else {\n observation = \"Invalid or incomplete response\";\n }\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n output = {\n tool: \"_Exception\",\n toolInput: observation,\n log: text,\n } as AgentAction;\n } else {\n throw e;\n }\n }\n // Check if the agent has finished\n if (\"returnValues\" in output) {\n return getOutput(output);\n }\n\n let actions: AgentAction[];\n if (Array.isArray(output)) {\n actions = output as AgentAction[];\n } else {\n actions = [output as AgentAction];\n }\n\n const newSteps = await Promise.all(\n actions.map(async (action) => {\n await runManager?.handleAgentAction(action);\n const tool =\n action.tool === \"_Exception\"\n ? new ExceptionTool()\n : toolsByName[action.tool?.toLowerCase()];\n let observation;\n try {\n observation = tool\n ? await tool.invoke(\n action.toolInput,\n patchConfig(config, { callbacks: runManager?.getChild() })\n )\n : `${action.tool} is not a valid tool, try another one.`;\n if (typeof observation !== \"string\") {\n throw new Error(\n \"Received unsupported non-string response from tool call.\"\n );\n }\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof ToolInputParsingException) {\n if (this.handleParsingErrors === true) {\n observation =\n \"Invalid or incomplete tool input. Please try again.\";\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n observation = await new ExceptionTool().call(\n observation,\n runManager?.getChild()\n );\n return { action, observation: observation ?? \"\" };\n } else if (this.handleToolRuntimeErrors !== undefined) {\n observation = this.handleToolRuntimeErrors(e);\n }\n }\n\n return { action, observation: observation ?? \"\" };\n })\n );\n\n steps.push(...newSteps);\n\n const lastStep = steps[steps.length - 1];\n const lastTool = toolsByName[lastStep.action.tool?.toLowerCase()];\n\n if (lastTool?.returnDirect) {\n return getOutput({\n returnValues: { [this.agent.returnValues[0]]: lastStep.observation },\n log: \"\",\n });\n }\n\n iterations += 1;\n }\n\n const finish = await this.agent.returnStoppedResponse(\n this.earlyStoppingMethod,\n steps,\n inputs\n );\n\n return getOutput(finish);\n }\n\n async _takeNextStep(\n nameToolMap: Record<string, ToolInterface>,\n inputs: ChainValues,\n intermediateSteps: AgentStep[],\n runManager?: CallbackManagerForChainRun,\n config?: RunnableConfig\n ): Promise<AgentFinish | AgentStep[]> {\n let output;\n try {\n output = await this.agent.plan(\n intermediateSteps,\n inputs,\n runManager?.getChild(),\n config\n );\n } catch (e) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof OutputParserException) {\n let observation;\n let text = e.message;\n if (this.handleParsingErrors === true) {\n if (e.sendToLLM) {\n observation = e.observation;\n text = e.llmOutput ?? \"\";\n } else {\n observation = \"Invalid or incomplete response\";\n }\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n output = {\n tool: \"_Exception\",\n toolInput: observation,\n log: text,\n } as AgentAction;\n } else {\n throw e;\n }\n }\n\n if (\"returnValues\" in output) {\n return output;\n }\n\n let actions: AgentAction[];\n if (Array.isArray(output)) {\n actions = output as AgentAction[];\n } else {\n actions = [output as AgentAction];\n }\n\n const result: AgentStep[] = [];\n for (const agentAction of actions) {\n let observation = \"\";\n if (runManager) {\n await runManager?.handleAgentAction(agentAction);\n }\n if (agentAction.tool in nameToolMap) {\n const tool = nameToolMap[agentAction.tool];\n try {\n observation = await tool.call(\n agentAction.toolInput,\n runManager?.getChild()\n );\n if (typeof observation !== \"string\") {\n throw new Error(\n \"Received unsupported non-string response from tool call.\"\n );\n }\n } catch (e) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof ToolInputParsingException) {\n if (this.handleParsingErrors === true) {\n observation =\n \"Invalid or incomplete tool input. Please try again.\";\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n observation = await new ExceptionTool().call(\n observation,\n runManager?.getChild()\n );\n }\n }\n } else {\n observation = `${\n agentAction.tool\n } is not a valid tool, try another available tool: ${Object.keys(\n nameToolMap\n ).join(\", \")}`;\n }\n result.push({\n action: agentAction,\n observation,\n });\n }\n return result;\n }\n\n async _return(\n output: AgentFinish,\n intermediateSteps: AgentStep[],\n runManager?: CallbackManagerForChainRun\n ): Promise<AgentExecutorOutput> {\n if (runManager) {\n await runManager.handleAgentEnd(output);\n }\n const finalOutput: Record<string, unknown> = output.returnValues;\n if (this.returnIntermediateSteps) {\n finalOutput.intermediateSteps = intermediateSteps;\n }\n return finalOutput;\n }\n\n async _getToolReturn(nextStepOutput: AgentStep): Promise<AgentFinish | null> {\n const { action, observation } = nextStepOutput;\n const nameToolMap = Object.fromEntries(\n this.tools.map((t) => [t.name.toLowerCase(), t])\n );\n const [returnValueKey = \"output\"] = this.agent.returnValues;\n // Invalid tools won't be in the map, so we return False.\n if (action.tool in nameToolMap) {\n if (nameToolMap[action.tool].returnDirect) {\n return {\n returnValues: { [returnValueKey]: observation },\n log: \"\",\n };\n }\n }\n return null;\n }\n\n _returnStoppedResponse(earlyStoppingMethod: StoppingMethod) {\n if (earlyStoppingMethod === \"force\") {\n return {\n returnValues: {\n output: \"Agent stopped due to iteration limit or time limit.\",\n },\n log: \"\",\n } as AgentFinish;\n }\n throw new Error(\n `Got unsupported early_stopping_method: ${earlyStoppingMethod}`\n );\n }\n\n async *_streamIterator(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n inputs: Record<string, any>,\n options?: Partial<RunnableConfig>\n ): AsyncGenerator<ChainValues> {\n const agentExecutorIterator = new AgentExecutorIterator({\n inputs,\n agentExecutor: this,\n config: options,\n // TODO: Deprecate these other parameters\n metadata: options?.metadata,\n tags: options?.tags,\n callbacks: options?.callbacks,\n });\n const iterator = agentExecutorIterator.streamIterator();\n for await (const step of iterator) {\n if (!step) {\n continue;\n }\n yield step;\n }\n }\n\n _chainType() {\n return \"agent_executor\" as const;\n }\n\n serialize(): SerializedLLMChain {\n throw new Error(\"Cannot serialize an AgentExecutor\");\n }\n}\n"],"mappings":"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"}