@langchain/classic 1.0.34 → 1.0.35

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 (249) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/agents/chat/index.cjs.map +1 -1
  3. package/dist/agents/chat/index.js.map +1 -1
  4. package/dist/agents/chat/outputParser.cjs.map +1 -1
  5. package/dist/agents/chat/outputParser.d.cts +2 -2
  6. package/dist/agents/chat/outputParser.js.map +1 -1
  7. package/dist/agents/chat_convo/index.cjs.map +1 -1
  8. package/dist/agents/chat_convo/index.js.map +1 -1
  9. package/dist/agents/chat_convo/outputParser.cjs.map +1 -1
  10. package/dist/agents/chat_convo/outputParser.js.map +1 -1
  11. package/dist/agents/executor.cjs.map +1 -1
  12. package/dist/agents/executor.js.map +1 -1
  13. package/dist/agents/format_scratchpad/log.cjs.map +1 -1
  14. package/dist/agents/format_scratchpad/log.js.map +1 -1
  15. package/dist/agents/format_scratchpad/log_to_message.cjs.map +1 -1
  16. package/dist/agents/format_scratchpad/log_to_message.js.map +1 -1
  17. package/dist/agents/initialize.cjs.map +1 -1
  18. package/dist/agents/initialize.js.map +1 -1
  19. package/dist/agents/mrkl/index.cjs.map +1 -1
  20. package/dist/agents/mrkl/index.js.map +1 -1
  21. package/dist/agents/mrkl/outputParser.cjs.map +1 -1
  22. package/dist/agents/mrkl/outputParser.d.cts +1 -1
  23. package/dist/agents/mrkl/outputParser.js.map +1 -1
  24. package/dist/agents/openai_functions/index.cjs.map +1 -1
  25. package/dist/agents/openai_functions/index.js.map +1 -1
  26. package/dist/agents/openai_tools/index.cjs.map +1 -1
  27. package/dist/agents/openai_tools/index.js.map +1 -1
  28. package/dist/agents/react/index.cjs.map +1 -1
  29. package/dist/agents/react/index.js.map +1 -1
  30. package/dist/agents/react/output_parser.cjs.map +1 -1
  31. package/dist/agents/react/output_parser.js.map +1 -1
  32. package/dist/agents/structured_chat/index.cjs.map +1 -1
  33. package/dist/agents/structured_chat/index.js.map +1 -1
  34. package/dist/agents/structured_chat/outputParser.cjs.map +1 -1
  35. package/dist/agents/structured_chat/outputParser.js.map +1 -1
  36. package/dist/agents/tool_calling/index.cjs.map +1 -1
  37. package/dist/agents/tool_calling/index.js.map +1 -1
  38. package/dist/agents/toolkits/conversational_retrieval/openai_functions.cjs.map +1 -1
  39. package/dist/agents/toolkits/conversational_retrieval/openai_functions.js.map +1 -1
  40. package/dist/agents/toolkits/conversational_retrieval/tool.cjs.map +1 -1
  41. package/dist/agents/toolkits/conversational_retrieval/tool.js.map +1 -1
  42. package/dist/agents/toolkits/json/json.cjs.map +1 -1
  43. package/dist/agents/toolkits/json/json.js.map +1 -1
  44. package/dist/agents/toolkits/openapi/openapi.cjs.map +1 -1
  45. package/dist/agents/toolkits/openapi/openapi.js.map +1 -1
  46. package/dist/agents/toolkits/sql/sql.cjs.map +1 -1
  47. package/dist/agents/toolkits/sql/sql.js.map +1 -1
  48. package/dist/agents/toolkits/vectorstore/vectorstore.cjs.map +1 -1
  49. package/dist/agents/toolkits/vectorstore/vectorstore.js.map +1 -1
  50. package/dist/agents/xml/index.cjs.map +1 -1
  51. package/dist/agents/xml/index.js.map +1 -1
  52. package/dist/chains/analyze_documents_chain.cjs.map +1 -1
  53. package/dist/chains/analyze_documents_chain.js.map +1 -1
  54. package/dist/chains/api/api_chain.cjs.map +1 -1
  55. package/dist/chains/api/api_chain.js.map +1 -1
  56. package/dist/chains/api/prompts.js.map +1 -1
  57. package/dist/chains/base.cjs.map +1 -1
  58. package/dist/chains/base.js.map +1 -1
  59. package/dist/chains/chat_vector_db_chain.cjs.map +1 -1
  60. package/dist/chains/chat_vector_db_chain.js.map +1 -1
  61. package/dist/chains/combine_docs_chain.cjs.map +1 -1
  62. package/dist/chains/combine_docs_chain.js.map +1 -1
  63. package/dist/chains/combine_documents/base.cjs.map +1 -1
  64. package/dist/chains/combine_documents/base.js.map +1 -1
  65. package/dist/chains/combine_documents/reduce.cjs.map +1 -1
  66. package/dist/chains/combine_documents/reduce.js.map +1 -1
  67. package/dist/chains/constitutional_ai/constitutional_prompts.cjs.map +1 -1
  68. package/dist/chains/constitutional_ai/constitutional_prompts.js.map +1 -1
  69. package/dist/chains/conversational_retrieval_chain.cjs.map +1 -1
  70. package/dist/chains/conversational_retrieval_chain.js.map +1 -1
  71. package/dist/chains/graph_qa/cypher.cjs.map +1 -1
  72. package/dist/chains/graph_qa/cypher.js.map +1 -1
  73. package/dist/chains/graph_qa/prompts.cjs.map +1 -1
  74. package/dist/chains/graph_qa/prompts.js.map +1 -1
  75. package/dist/chains/history_aware_retriever.cjs.map +1 -1
  76. package/dist/chains/history_aware_retriever.js.map +1 -1
  77. package/dist/chains/llm_chain.cjs.map +1 -1
  78. package/dist/chains/llm_chain.js.map +1 -1
  79. package/dist/chains/openai_functions/base.cjs.map +1 -1
  80. package/dist/chains/openai_functions/base.js.map +1 -1
  81. package/dist/chains/openai_functions/openapi.cjs.map +1 -1
  82. package/dist/chains/openai_functions/openapi.js.map +1 -1
  83. package/dist/chains/query_constructor/index.cjs.map +1 -1
  84. package/dist/chains/query_constructor/index.js.map +1 -1
  85. package/dist/chains/query_constructor/parser.cjs.map +1 -1
  86. package/dist/chains/query_constructor/parser.js.map +1 -1
  87. package/dist/chains/query_constructor/prompt.cjs.map +1 -1
  88. package/dist/chains/query_constructor/prompt.js.map +1 -1
  89. package/dist/chains/question_answering/load.cjs.map +1 -1
  90. package/dist/chains/question_answering/load.js.map +1 -1
  91. package/dist/chains/question_answering/map_reduce_prompts.cjs.map +1 -1
  92. package/dist/chains/question_answering/map_reduce_prompts.js.map +1 -1
  93. package/dist/chains/question_answering/refine_prompts.cjs.map +1 -1
  94. package/dist/chains/question_answering/refine_prompts.js.map +1 -1
  95. package/dist/chains/question_answering/stuff_prompts.cjs.map +1 -1
  96. package/dist/chains/question_answering/stuff_prompts.js.map +1 -1
  97. package/dist/chains/retrieval.cjs.map +1 -1
  98. package/dist/chains/retrieval.js.map +1 -1
  99. package/dist/chains/router/multi_prompt.cjs.map +1 -1
  100. package/dist/chains/router/multi_prompt.js.map +1 -1
  101. package/dist/chains/router/multi_retrieval_qa.cjs.map +1 -1
  102. package/dist/chains/router/multi_retrieval_qa.js.map +1 -1
  103. package/dist/chains/sql_db/sql_db_chain.cjs.map +1 -1
  104. package/dist/chains/sql_db/sql_db_chain.js.map +1 -1
  105. package/dist/chains/summarization/load.cjs.map +1 -1
  106. package/dist/chains/summarization/load.js.map +1 -1
  107. package/dist/chains/summarization/refine_prompts.cjs.map +1 -1
  108. package/dist/chains/summarization/refine_prompts.js.map +1 -1
  109. package/dist/chains/summarization/stuff_prompts.cjs.map +1 -1
  110. package/dist/chains/summarization/stuff_prompts.js.map +1 -1
  111. package/dist/chat_models/universal.cjs.map +1 -1
  112. package/dist/chat_models/universal.js.map +1 -1
  113. package/dist/document_loaders/fs/json.cjs.map +1 -1
  114. package/dist/document_loaders/fs/json.js.map +1 -1
  115. package/dist/document_loaders/fs/multi_file.cjs.map +1 -1
  116. package/dist/document_loaders/fs/multi_file.js.map +1 -1
  117. package/dist/document_transformers/openai_functions.cjs.map +1 -1
  118. package/dist/document_transformers/openai_functions.js.map +1 -1
  119. package/dist/evaluation/agents/prompt.cjs.map +1 -1
  120. package/dist/evaluation/agents/prompt.js.map +1 -1
  121. package/dist/evaluation/comparison/pairwise.cjs.map +1 -1
  122. package/dist/evaluation/comparison/pairwise.js.map +1 -1
  123. package/dist/evaluation/comparison/prompt.cjs.map +1 -1
  124. package/dist/evaluation/comparison/prompt.js.map +1 -1
  125. package/dist/evaluation/criteria/criteria.cjs.map +1 -1
  126. package/dist/evaluation/criteria/criteria.js.map +1 -1
  127. package/dist/evaluation/criteria/prompt.cjs.map +1 -1
  128. package/dist/evaluation/criteria/prompt.js.map +1 -1
  129. package/dist/evaluation/embedding_distance/base.cjs.map +1 -1
  130. package/dist/evaluation/embedding_distance/base.js.map +1 -1
  131. package/dist/evaluation/qa/eval_chain.cjs.map +1 -1
  132. package/dist/evaluation/qa/eval_chain.js.map +1 -1
  133. package/dist/evaluation/qa/prompt.cjs.map +1 -1
  134. package/dist/evaluation/qa/prompt.js.map +1 -1
  135. package/dist/experimental/autogpt/agent.cjs.map +1 -1
  136. package/dist/experimental/autogpt/agent.js.map +1 -1
  137. package/dist/experimental/autogpt/prompt.cjs.map +1 -1
  138. package/dist/experimental/autogpt/prompt.js.map +1 -1
  139. package/dist/experimental/autogpt/prompt_generator.cjs.map +1 -1
  140. package/dist/experimental/autogpt/prompt_generator.js.map +1 -1
  141. package/dist/experimental/babyagi/agent.cjs.map +1 -1
  142. package/dist/experimental/babyagi/agent.js.map +1 -1
  143. package/dist/experimental/babyagi/task_creation.cjs.map +1 -1
  144. package/dist/experimental/babyagi/task_creation.js.map +1 -1
  145. package/dist/experimental/babyagi/task_execution.cjs.map +1 -1
  146. package/dist/experimental/babyagi/task_execution.js.map +1 -1
  147. package/dist/experimental/babyagi/task_prioritization.cjs.map +1 -1
  148. package/dist/experimental/babyagi/task_prioritization.js.map +1 -1
  149. package/dist/experimental/chains/violation_of_expectations/violation_of_expectations_chain.cjs.map +1 -1
  150. package/dist/experimental/chains/violation_of_expectations/violation_of_expectations_chain.js.map +1 -1
  151. package/dist/experimental/generative_agents/generative_agent.cjs.map +1 -1
  152. package/dist/experimental/generative_agents/generative_agent.js.map +1 -1
  153. package/dist/experimental/generative_agents/generative_agent_memory.cjs.map +1 -1
  154. package/dist/experimental/generative_agents/generative_agent_memory.js.map +1 -1
  155. package/dist/experimental/masking/regex_masking_transformer.cjs.map +1 -1
  156. package/dist/experimental/masking/regex_masking_transformer.js.map +1 -1
  157. package/dist/experimental/openai_assistant/index.cjs.map +1 -1
  158. package/dist/experimental/openai_assistant/index.js.map +1 -1
  159. package/dist/experimental/plan_and_execute/agent_executor.cjs.map +1 -1
  160. package/dist/experimental/plan_and_execute/agent_executor.js.map +1 -1
  161. package/dist/experimental/plan_and_execute/base.cjs.map +1 -1
  162. package/dist/experimental/plan_and_execute/base.js.map +1 -1
  163. package/dist/experimental/prompts/handlebars.cjs.map +1 -1
  164. package/dist/experimental/prompts/handlebars.js.map +1 -1
  165. package/dist/hub/base.cjs.map +1 -1
  166. package/dist/hub/base.js.map +1 -1
  167. package/dist/hub/index.cjs.map +1 -1
  168. package/dist/hub/index.js.map +1 -1
  169. package/dist/hub/node.cjs.map +1 -1
  170. package/dist/hub/node.js.map +1 -1
  171. package/dist/memory/buffer_memory.cjs.map +1 -1
  172. package/dist/memory/buffer_memory.js.map +1 -1
  173. package/dist/memory/buffer_token_memory.cjs.map +1 -1
  174. package/dist/memory/buffer_token_memory.js.map +1 -1
  175. package/dist/memory/buffer_window_memory.cjs.map +1 -1
  176. package/dist/memory/buffer_window_memory.js.map +1 -1
  177. package/dist/memory/entity_memory.cjs.map +1 -1
  178. package/dist/memory/entity_memory.js.map +1 -1
  179. package/dist/memory/prompt.cjs.map +1 -1
  180. package/dist/memory/prompt.js.map +1 -1
  181. package/dist/memory/summary.cjs.map +1 -1
  182. package/dist/memory/summary.js.map +1 -1
  183. package/dist/output_parsers/expression.cjs.map +1 -1
  184. package/dist/output_parsers/expression.js.map +1 -1
  185. package/dist/output_parsers/expression_type_handlers/base.cjs.map +1 -1
  186. package/dist/output_parsers/expression_type_handlers/base.js.map +1 -1
  187. package/dist/output_parsers/expression_type_handlers/factory.cjs.map +1 -1
  188. package/dist/output_parsers/expression_type_handlers/factory.js.map +1 -1
  189. package/dist/output_parsers/expression_type_handlers/identifier_handler.cjs.map +1 -1
  190. package/dist/output_parsers/expression_type_handlers/identifier_handler.js.map +1 -1
  191. package/dist/output_parsers/expression_type_handlers/property_assignment_handler.cjs.map +1 -1
  192. package/dist/output_parsers/expression_type_handlers/property_assignment_handler.js.map +1 -1
  193. package/dist/output_parsers/expression_type_handlers/string_literal_handler.cjs.map +1 -1
  194. package/dist/output_parsers/expression_type_handlers/string_literal_handler.js.map +1 -1
  195. package/dist/output_parsers/fix.cjs.map +1 -1
  196. package/dist/output_parsers/fix.js.map +1 -1
  197. package/dist/output_parsers/http_response.cjs.map +1 -1
  198. package/dist/output_parsers/http_response.js.map +1 -1
  199. package/dist/output_parsers/openai_functions.cjs.map +1 -1
  200. package/dist/output_parsers/openai_functions.js.map +1 -1
  201. package/dist/output_parsers/openai_tools.cjs.map +1 -1
  202. package/dist/output_parsers/openai_tools.js.map +1 -1
  203. package/dist/output_parsers/prompts.cjs.map +1 -1
  204. package/dist/output_parsers/prompts.js.map +1 -1
  205. package/dist/output_parsers/structured.cjs.map +1 -1
  206. package/dist/output_parsers/structured.js.map +1 -1
  207. package/dist/retrievers/contextual_compression.cjs.map +1 -1
  208. package/dist/retrievers/contextual_compression.js.map +1 -1
  209. package/dist/retrievers/document_compressors/chain_extract.cjs.map +1 -1
  210. package/dist/retrievers/document_compressors/chain_extract.js.map +1 -1
  211. package/dist/retrievers/ensemble.cjs.map +1 -1
  212. package/dist/retrievers/ensemble.js.map +1 -1
  213. package/dist/retrievers/hyde.cjs.map +1 -1
  214. package/dist/retrievers/hyde.js.map +1 -1
  215. package/dist/retrievers/multi_query.cjs.map +1 -1
  216. package/dist/retrievers/multi_query.js.map +1 -1
  217. package/dist/retrievers/multi_vector.cjs.map +1 -1
  218. package/dist/retrievers/multi_vector.js.map +1 -1
  219. package/dist/retrievers/parent_document.cjs.map +1 -1
  220. package/dist/retrievers/parent_document.js.map +1 -1
  221. package/dist/retrievers/score_threshold.cjs.map +1 -1
  222. package/dist/retrievers/score_threshold.js.map +1 -1
  223. package/dist/smith/runner_utils.cjs.map +1 -1
  224. package/dist/smith/runner_utils.js.map +1 -1
  225. package/dist/storage/encoder_backed.cjs.map +1 -1
  226. package/dist/storage/encoder_backed.js.map +1 -1
  227. package/dist/storage/file_system.cjs.map +1 -1
  228. package/dist/storage/file_system.js.map +1 -1
  229. package/dist/tools/json.cjs.map +1 -1
  230. package/dist/tools/json.js.map +1 -1
  231. package/dist/tools/requests.cjs.map +1 -1
  232. package/dist/tools/requests.js.map +1 -1
  233. package/dist/tools/retriever.cjs.map +1 -1
  234. package/dist/tools/retriever.js.map +1 -1
  235. package/dist/tools/sql.cjs.map +1 -1
  236. package/dist/tools/sql.js.map +1 -1
  237. package/dist/tools/webbrowser.cjs.map +1 -1
  238. package/dist/tools/webbrowser.js.map +1 -1
  239. package/dist/util/hub.cjs.map +1 -1
  240. package/dist/util/hub.js.map +1 -1
  241. package/dist/util/load.cjs.map +1 -1
  242. package/dist/util/load.js.map +1 -1
  243. package/dist/util/openapi.cjs.map +1 -1
  244. package/dist/util/openapi.js.map +1 -1
  245. package/dist/util/sql_utils.cjs.map +1 -1
  246. package/dist/util/sql_utils.js.map +1 -1
  247. package/dist/vectorstores/memory.cjs.map +1 -1
  248. package/dist/vectorstores/memory.js.map +1 -1
  249. package/package.json +47 -48
@@ -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 // 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
+ {"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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"log.cjs","names":[],"sources":["../../../src/agents/format_scratchpad/log.ts"],"sourcesContent":["import { AgentStep } from \"@langchain/core/agents\";\n\n/**\n * Construct the scratchpad that lets the agent continue its thought process.\n * @param intermediateSteps\n * @param observationPrefix\n * @param llmPrefix\n * @returns a string with the formatted observations and agent logs\n */\nexport function formatLogToString(\n intermediateSteps: AgentStep[],\n observationPrefix = \"Observation: \",\n llmPrefix = \"Thought: \"\n): string {\n const formattedSteps = intermediateSteps.reduce(\n (thoughts, { action, observation }) =>\n thoughts +\n [action.log, `\\n${observationPrefix}${observation}`, llmPrefix].join(\n \"\\n\"\n ),\n \"\"\n );\n return formattedSteps;\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,kBACd,mBACA,oBAAoB,iBACpB,YAAY,aACJ;AASR,QARuB,kBAAkB,QACtC,UAAU,EAAE,QAAQ,kBACnB,WACA;EAAC,OAAO;EAAK,KAAK,oBAAoB;EAAe;EAAU,CAAC,KAC9D,KACD,EACH,GACD"}
1
+ {"version":3,"file":"log.cjs","names":[],"sources":["../../../src/agents/format_scratchpad/log.ts"],"sourcesContent":["import { AgentStep } from \"@langchain/core/agents\";\n\n/**\n * Construct the scratchpad that lets the agent continue its thought process.\n * @param intermediateSteps\n * @param observationPrefix\n * @param llmPrefix\n * @returns a string with the formatted observations and agent logs\n */\nexport function formatLogToString(\n intermediateSteps: AgentStep[],\n observationPrefix = \"Observation: \",\n llmPrefix = \"Thought: \"\n): string {\n const formattedSteps = intermediateSteps.reduce(\n (thoughts, { action, observation }) =>\n thoughts +\n [action.log, `\\n${observationPrefix}${observation}`, llmPrefix].join(\n \"\\n\"\n ),\n \"\"\n );\n return formattedSteps;\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,kBACd,mBACA,oBAAoB,iBACpB,YAAY,aACJ;AASR,QARuB,kBAAkB,QACtC,UAAU,EAAE,QAAQ,kBACnB,WACA;EAAC,OAAO;EAAK,KAAK,oBAAoB;EAAe;EAAU,CAAC,KAC9D,KACD,EACH,GAEmB"}
@@ -1 +1 @@
1
- {"version":3,"file":"log.js","names":[],"sources":["../../../src/agents/format_scratchpad/log.ts"],"sourcesContent":["import { AgentStep } from \"@langchain/core/agents\";\n\n/**\n * Construct the scratchpad that lets the agent continue its thought process.\n * @param intermediateSteps\n * @param observationPrefix\n * @param llmPrefix\n * @returns a string with the formatted observations and agent logs\n */\nexport function formatLogToString(\n intermediateSteps: AgentStep[],\n observationPrefix = \"Observation: \",\n llmPrefix = \"Thought: \"\n): string {\n const formattedSteps = intermediateSteps.reduce(\n (thoughts, { action, observation }) =>\n thoughts +\n [action.log, `\\n${observationPrefix}${observation}`, llmPrefix].join(\n \"\\n\"\n ),\n \"\"\n );\n return formattedSteps;\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,kBACd,mBACA,oBAAoB,iBACpB,YAAY,aACJ;AASR,QARuB,kBAAkB,QACtC,UAAU,EAAE,QAAQ,kBACnB,WACA;EAAC,OAAO;EAAK,KAAK,oBAAoB;EAAe;EAAU,CAAC,KAC9D,KACD,EACH,GACD"}
1
+ {"version":3,"file":"log.js","names":[],"sources":["../../../src/agents/format_scratchpad/log.ts"],"sourcesContent":["import { AgentStep } from \"@langchain/core/agents\";\n\n/**\n * Construct the scratchpad that lets the agent continue its thought process.\n * @param intermediateSteps\n * @param observationPrefix\n * @param llmPrefix\n * @returns a string with the formatted observations and agent logs\n */\nexport function formatLogToString(\n intermediateSteps: AgentStep[],\n observationPrefix = \"Observation: \",\n llmPrefix = \"Thought: \"\n): string {\n const formattedSteps = intermediateSteps.reduce(\n (thoughts, { action, observation }) =>\n thoughts +\n [action.log, `\\n${observationPrefix}${observation}`, llmPrefix].join(\n \"\\n\"\n ),\n \"\"\n );\n return formattedSteps;\n}\n"],"mappings":";;;;;;;;;;AASA,SAAgB,kBACd,mBACA,oBAAoB,iBACpB,YAAY,aACJ;AASR,QARuB,kBAAkB,QACtC,UAAU,EAAE,QAAQ,kBACnB,WACA;EAAC,OAAO;EAAK,KAAK,oBAAoB;EAAe;EAAU,CAAC,KAC9D,KACD,EACH,GAEmB"}
@@ -1 +1 @@
1
- {"version":3,"file":"log_to_message.cjs","names":["AIMessage","HumanMessage"],"sources":["../../../src/agents/format_scratchpad/log_to_message.ts"],"sourcesContent":["import type { AgentStep } from \"@langchain/core/agents\";\nimport {\n type BaseMessage,\n AIMessage,\n HumanMessage,\n} from \"@langchain/core/messages\";\nimport { renderTemplate } from \"@langchain/core/prompts\";\n\nexport function formatLogToMessage(\n intermediateSteps: AgentStep[],\n templateToolResponse = \"{observation}\"\n): BaseMessage[] {\n // Get all input variables, if there is more than one, throw an error.\n const matches = [...templateToolResponse.matchAll(/{([^}]*)}/g)];\n const stringsInsideBrackets = matches.map((match) => match[1]);\n if (stringsInsideBrackets.length > 1) {\n throw new Error(\n `templateToolResponse must contain one input variable: ${templateToolResponse}`\n );\n }\n\n const thoughts: BaseMessage[] = [];\n\n for (const step of intermediateSteps) {\n thoughts.push(new AIMessage(step.action.log));\n thoughts.push(\n new HumanMessage(\n renderTemplate(templateToolResponse, \"f-string\", {\n [stringsInsideBrackets[0]]: step.observation,\n })\n )\n );\n }\n return thoughts;\n}\n"],"mappings":";;;;;;AAQA,SAAgB,mBACd,mBACA,uBAAuB,iBACR;CAGf,MAAM,wBADU,CAAC,GAAG,qBAAqB,SAAS,aAAa,CAAC,CAC1B,KAAK,UAAU,MAAM,GAAG;AAC9D,KAAI,sBAAsB,SAAS,EACjC,OAAM,IAAI,MACR,yDAAyD,uBAC1D;CAGH,MAAM,WAA0B,EAAE;AAElC,MAAK,MAAM,QAAQ,mBAAmB;AACpC,WAAS,KAAK,IAAIA,yBAAAA,UAAU,KAAK,OAAO,IAAI,CAAC;AAC7C,WAAS,KACP,IAAIC,yBAAAA,cAAAA,GAAAA,wBAAAA,gBACa,sBAAsB,YAAY,GAC9C,sBAAsB,KAAK,KAAK,aAClC,CAAC,CACH,CACF;;AAEH,QAAO"}
1
+ {"version":3,"file":"log_to_message.cjs","names":["AIMessage","HumanMessage"],"sources":["../../../src/agents/format_scratchpad/log_to_message.ts"],"sourcesContent":["import type { AgentStep } from \"@langchain/core/agents\";\nimport {\n type BaseMessage,\n AIMessage,\n HumanMessage,\n} from \"@langchain/core/messages\";\nimport { renderTemplate } from \"@langchain/core/prompts\";\n\nexport function formatLogToMessage(\n intermediateSteps: AgentStep[],\n templateToolResponse = \"{observation}\"\n): BaseMessage[] {\n // Get all input variables, if there is more than one, throw an error.\n const matches = [...templateToolResponse.matchAll(/{([^}]*)}/g)];\n const stringsInsideBrackets = matches.map((match) => match[1]);\n if (stringsInsideBrackets.length > 1) {\n throw new Error(\n `templateToolResponse must contain one input variable: ${templateToolResponse}`\n );\n }\n\n const thoughts: BaseMessage[] = [];\n\n for (const step of intermediateSteps) {\n thoughts.push(new AIMessage(step.action.log));\n thoughts.push(\n new HumanMessage(\n renderTemplate(templateToolResponse, \"f-string\", {\n [stringsInsideBrackets[0]]: step.observation,\n })\n )\n );\n }\n return thoughts;\n}\n"],"mappings":";;;;;;AAQA,SAAgB,mBACd,mBACA,uBAAuB,iBACR;CAGf,MAAM,wBAAwB,CADb,GAAG,qBAAqB,SAAS,aAAa,CAC1B,CAAC,KAAK,UAAU,MAAM,GAAG;AAC9D,KAAI,sBAAsB,SAAS,EACjC,OAAM,IAAI,MACR,yDAAyD,uBAC1D;CAGH,MAAM,WAA0B,EAAE;AAElC,MAAK,MAAM,QAAQ,mBAAmB;AACpC,WAAS,KAAK,IAAIA,yBAAAA,UAAU,KAAK,OAAO,IAAI,CAAC;AAC7C,WAAS,KACP,IAAIC,yBAAAA,cAAAA,GAAAA,wBAAAA,gBACa,sBAAsB,YAAY,GAC9C,sBAAsB,KAAK,KAAK,aAClC,CAAC,CACH,CACF;;AAEH,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"log_to_message.js","names":[],"sources":["../../../src/agents/format_scratchpad/log_to_message.ts"],"sourcesContent":["import type { AgentStep } from \"@langchain/core/agents\";\nimport {\n type BaseMessage,\n AIMessage,\n HumanMessage,\n} from \"@langchain/core/messages\";\nimport { renderTemplate } from \"@langchain/core/prompts\";\n\nexport function formatLogToMessage(\n intermediateSteps: AgentStep[],\n templateToolResponse = \"{observation}\"\n): BaseMessage[] {\n // Get all input variables, if there is more than one, throw an error.\n const matches = [...templateToolResponse.matchAll(/{([^}]*)}/g)];\n const stringsInsideBrackets = matches.map((match) => match[1]);\n if (stringsInsideBrackets.length > 1) {\n throw new Error(\n `templateToolResponse must contain one input variable: ${templateToolResponse}`\n );\n }\n\n const thoughts: BaseMessage[] = [];\n\n for (const step of intermediateSteps) {\n thoughts.push(new AIMessage(step.action.log));\n thoughts.push(\n new HumanMessage(\n renderTemplate(templateToolResponse, \"f-string\", {\n [stringsInsideBrackets[0]]: step.observation,\n })\n )\n );\n }\n return thoughts;\n}\n"],"mappings":";;;;;AAQA,SAAgB,mBACd,mBACA,uBAAuB,iBACR;CAGf,MAAM,wBADU,CAAC,GAAG,qBAAqB,SAAS,aAAa,CAAC,CAC1B,KAAK,UAAU,MAAM,GAAG;AAC9D,KAAI,sBAAsB,SAAS,EACjC,OAAM,IAAI,MACR,yDAAyD,uBAC1D;CAGH,MAAM,WAA0B,EAAE;AAElC,MAAK,MAAM,QAAQ,mBAAmB;AACpC,WAAS,KAAK,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC;AAC7C,WAAS,KACP,IAAI,aACF,eAAe,sBAAsB,YAAY,GAC9C,sBAAsB,KAAK,KAAK,aAClC,CAAC,CACH,CACF;;AAEH,QAAO"}
1
+ {"version":3,"file":"log_to_message.js","names":[],"sources":["../../../src/agents/format_scratchpad/log_to_message.ts"],"sourcesContent":["import type { AgentStep } from \"@langchain/core/agents\";\nimport {\n type BaseMessage,\n AIMessage,\n HumanMessage,\n} from \"@langchain/core/messages\";\nimport { renderTemplate } from \"@langchain/core/prompts\";\n\nexport function formatLogToMessage(\n intermediateSteps: AgentStep[],\n templateToolResponse = \"{observation}\"\n): BaseMessage[] {\n // Get all input variables, if there is more than one, throw an error.\n const matches = [...templateToolResponse.matchAll(/{([^}]*)}/g)];\n const stringsInsideBrackets = matches.map((match) => match[1]);\n if (stringsInsideBrackets.length > 1) {\n throw new Error(\n `templateToolResponse must contain one input variable: ${templateToolResponse}`\n );\n }\n\n const thoughts: BaseMessage[] = [];\n\n for (const step of intermediateSteps) {\n thoughts.push(new AIMessage(step.action.log));\n thoughts.push(\n new HumanMessage(\n renderTemplate(templateToolResponse, \"f-string\", {\n [stringsInsideBrackets[0]]: step.observation,\n })\n )\n );\n }\n return thoughts;\n}\n"],"mappings":";;;;;AAQA,SAAgB,mBACd,mBACA,uBAAuB,iBACR;CAGf,MAAM,wBAAwB,CADb,GAAG,qBAAqB,SAAS,aAAa,CAC1B,CAAC,KAAK,UAAU,MAAM,GAAG;AAC9D,KAAI,sBAAsB,SAAS,EACjC,OAAM,IAAI,MACR,yDAAyD,uBAC1D;CAGH,MAAM,WAA0B,EAAE;AAElC,MAAK,MAAM,QAAQ,mBAAmB;AACpC,WAAS,KAAK,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC;AAC7C,WAAS,KACP,IAAI,aACF,eAAe,sBAAsB,YAAY,GAC9C,sBAAsB,KAAK,KAAK,aAClC,CAAC,CACH,CACF;;AAEH,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"initialize.cjs","names":["AgentExecutor","ZeroShotAgent","ChatAgent","ChatConversationalAgent","BufferMemory","XMLAgent","StructuredChatAgent","OpenAIAgent"],"sources":["../../src/agents/initialize.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type {\n StructuredToolInterface,\n ToolInterface,\n} from \"@langchain/core/tools\";\nimport { CallbackManager } from \"@langchain/core/callbacks/manager\";\nimport { BufferMemory } from \"../memory/buffer_memory.js\";\nimport { ChatAgent } from \"./chat/index.js\";\nimport { ChatConversationalAgent } from \"./chat_convo/index.js\";\nimport { StructuredChatAgent } from \"./structured_chat/index.js\";\nimport { AgentExecutor, AgentExecutorInput } from \"./executor.js\";\nimport { ZeroShotAgent } from \"./mrkl/index.js\";\nimport { OpenAIAgent } from \"./openai_functions/index.js\";\nimport { XMLAgent } from \"./xml/index.js\";\n\n/**\n * Represents the type of an agent in LangChain. It can be\n * \"zero-shot-react-description\", \"chat-zero-shot-react-description\", or\n * \"chat-conversational-react-description\".\n */\ntype AgentType =\n | \"zero-shot-react-description\"\n | \"chat-zero-shot-react-description\"\n | \"chat-conversational-react-description\";\n\nexport async function initializeAgentExecutor(\n tools: ToolInterface[],\n llm: BaseLanguageModelInterface,\n _agentType?: AgentType,\n _verbose?: boolean,\n _callbackManager?: CallbackManager\n): Promise<AgentExecutor> {\n const agentType = _agentType ?? \"zero-shot-react-description\";\n const verbose = _verbose;\n const callbackManager = _callbackManager;\n switch (agentType) {\n case \"zero-shot-react-description\":\n return AgentExecutor.fromAgentAndTools({\n agent: ZeroShotAgent.fromLLMAndTools(llm, tools),\n tools,\n returnIntermediateSteps: true,\n verbose,\n callbackManager,\n });\n case \"chat-zero-shot-react-description\":\n return AgentExecutor.fromAgentAndTools({\n agent: ChatAgent.fromLLMAndTools(llm, tools),\n tools,\n returnIntermediateSteps: true,\n verbose,\n callbackManager,\n });\n case \"chat-conversational-react-description\":\n return AgentExecutor.fromAgentAndTools({\n agent: ChatConversationalAgent.fromLLMAndTools(llm, tools),\n tools,\n verbose,\n callbackManager,\n });\n default:\n throw new Error(\"Unknown agent type\");\n }\n}\n\n/**\n * @interface\n */\nexport type InitializeAgentExecutorOptions =\n | ({\n agentType: \"zero-shot-react-description\";\n agentArgs?: Parameters<typeof ZeroShotAgent.fromLLMAndTools>[2];\n memory?: never;\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">)\n | ({\n agentType: \"chat-zero-shot-react-description\";\n agentArgs?: Parameters<typeof ChatAgent.fromLLMAndTools>[2];\n memory?: never;\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">)\n | ({\n agentType: \"chat-conversational-react-description\";\n agentArgs?: Parameters<typeof ChatConversationalAgent.fromLLMAndTools>[2];\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">)\n | ({\n agentType: \"xml\";\n agentArgs?: Parameters<typeof XMLAgent.fromLLMAndTools>[2];\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">);\n\n/**\n * @interface\n */\nexport type InitializeAgentExecutorOptionsStructured =\n | ({\n agentType: \"structured-chat-zero-shot-react-description\";\n agentArgs?: Parameters<typeof StructuredChatAgent.fromLLMAndTools>[2];\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">)\n | ({\n agentType: \"openai-functions\";\n agentArgs?: Parameters<typeof OpenAIAgent.fromLLMAndTools>[2];\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">);\n\n/**\n * Initialize an agent executor with options.\n * @param tools Array of tools to use in the agent\n * @param llm LLM or ChatModel to use in the agent\n * @param options Options for the agent, including agentType, agentArgs, and other options for AgentExecutor.fromAgentAndTools\n * @returns AgentExecutor\n */\nexport async function initializeAgentExecutorWithOptions(\n tools: StructuredToolInterface[],\n llm: BaseLanguageModelInterface,\n options: InitializeAgentExecutorOptionsStructured\n): Promise<AgentExecutor>;\nexport async function initializeAgentExecutorWithOptions(\n tools: ToolInterface[],\n llm: BaseLanguageModelInterface,\n options?: InitializeAgentExecutorOptions\n): Promise<AgentExecutor>;\nexport async function initializeAgentExecutorWithOptions(\n tools: StructuredToolInterface[] | ToolInterface[],\n llm: BaseLanguageModelInterface,\n options:\n | InitializeAgentExecutorOptions\n | InitializeAgentExecutorOptionsStructured = {\n agentType:\n llm._modelType() === \"base_chat_model\"\n ? \"chat-zero-shot-react-description\"\n : \"zero-shot-react-description\",\n }\n): Promise<AgentExecutor> {\n // Note this tools cast is safe as the overload signatures prevent\n // the function from being called with a StructuredTool[] when\n // the agentType is not in InitializeAgentExecutorOptionsStructured\n switch (options.agentType) {\n case \"zero-shot-react-description\": {\n const { agentArgs, tags, ...rest } = options;\n return AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"zero-shot-react-description\"],\n agent: ZeroShotAgent.fromLLMAndTools(\n llm,\n tools as ToolInterface[],\n agentArgs\n ),\n tools,\n ...rest,\n });\n }\n case \"chat-zero-shot-react-description\": {\n const { agentArgs, tags, ...rest } = options;\n return AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"chat-zero-shot-react-description\"],\n agent: ChatAgent.fromLLMAndTools(\n llm,\n tools as ToolInterface[],\n agentArgs\n ),\n tools,\n ...rest,\n });\n }\n case \"chat-conversational-react-description\": {\n const { agentArgs, memory, tags, ...rest } = options;\n const executor = AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"chat-conversational-react-description\"],\n agent: ChatConversationalAgent.fromLLMAndTools(\n llm,\n tools as ToolInterface[],\n agentArgs\n ),\n tools,\n memory:\n memory ??\n new BufferMemory({\n returnMessages: true,\n memoryKey: \"chat_history\",\n inputKey: \"input\",\n outputKey: \"output\",\n }),\n ...rest,\n });\n return executor;\n }\n case \"xml\": {\n const { agentArgs, tags, ...rest } = options;\n const executor = AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"xml\"],\n agent: XMLAgent.fromLLMAndTools(\n llm,\n tools as ToolInterface[],\n agentArgs\n ),\n tools,\n ...rest,\n });\n return executor;\n }\n case \"structured-chat-zero-shot-react-description\": {\n const { agentArgs, memory, tags, ...rest } = options;\n const executor = AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"structured-chat-zero-shot-react-description\"],\n agent: StructuredChatAgent.fromLLMAndTools(llm, tools, agentArgs),\n tools,\n memory,\n ...rest,\n });\n return executor;\n }\n case \"openai-functions\": {\n const { agentArgs, memory, tags, ...rest } = options;\n const executor = AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"openai-functions\"],\n agent: OpenAIAgent.fromLLMAndTools(llm, tools, agentArgs),\n tools,\n memory:\n memory ??\n new BufferMemory({\n returnMessages: true,\n memoryKey: \"chat_history\",\n inputKey: \"input\",\n outputKey: \"output\",\n }),\n ...rest,\n });\n return executor;\n }\n default: {\n throw new Error(\"Unknown agent type\");\n }\n }\n}\n"],"mappings":";;;;;;;;;AAyBA,eAAsB,wBACpB,OACA,KACA,YACA,UACA,kBACwB;CACxB,MAAM,YAAY,cAAc;CAChC,MAAM,UAAU;CAChB,MAAM,kBAAkB;AACxB,SAAQ,WAAR;EACE,KAAK,8BACH,QAAOA,iBAAAA,cAAc,kBAAkB;GACrC,OAAOC,cAAAA,cAAc,gBAAgB,KAAK,MAAM;GAChD;GACA,yBAAyB;GACzB;GACA;GACD,CAAC;EACJ,KAAK,mCACH,QAAOD,iBAAAA,cAAc,kBAAkB;GACrC,OAAOE,gBAAAA,UAAU,gBAAgB,KAAK,MAAM;GAC5C;GACA,yBAAyB;GACzB;GACA;GACD,CAAC;EACJ,KAAK,wCACH,QAAOF,iBAAAA,cAAc,kBAAkB;GACrC,OAAOG,gBAAAA,wBAAwB,gBAAgB,KAAK,MAAM;GAC1D;GACA;GACA;GACD,CAAC;EACJ,QACE,OAAM,IAAI,MAAM,qBAAqB;;;AAyD3C,eAAsB,mCACpB,OACA,KACA,UAE+C,EAC7C,WACE,IAAI,YAAY,KAAK,oBACjB,qCACA,+BACP,EACuB;AAIxB,SAAQ,QAAQ,WAAhB;EACE,KAAK,+BAA+B;GAClC,MAAM,EAAE,WAAW,MAAM,GAAG,SAAS;AACrC,UAAOH,iBAAAA,cAAc,kBAAkB;IACrC,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,8BAA8B;IACtD,OAAOC,cAAAA,cAAc,gBACnB,KACA,OACA,UACD;IACD;IACA,GAAG;IACJ,CAAC;;EAEJ,KAAK,oCAAoC;GACvC,MAAM,EAAE,WAAW,MAAM,GAAG,SAAS;AACrC,UAAOD,iBAAAA,cAAc,kBAAkB;IACrC,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,mCAAmC;IAC3D,OAAOE,gBAAAA,UAAU,gBACf,KACA,OACA,UACD;IACD;IACA,GAAG;IACJ,CAAC;;EAEJ,KAAK,yCAAyC;GAC5C,MAAM,EAAE,WAAW,QAAQ,MAAM,GAAG,SAAS;AAmB7C,UAlBiBF,iBAAAA,cAAc,kBAAkB;IAC/C,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,wCAAwC;IAChE,OAAOG,gBAAAA,wBAAwB,gBAC7B,KACA,OACA,UACD;IACD;IACA,QACE,UACA,IAAIC,sBAAAA,aAAa;KACf,gBAAgB;KAChB,WAAW;KACX,UAAU;KACV,WAAW;KACZ,CAAC;IACJ,GAAG;IACJ,CAAC;;EAGJ,KAAK,OAAO;GACV,MAAM,EAAE,WAAW,MAAM,GAAG,SAAS;AAWrC,UAViBJ,iBAAAA,cAAc,kBAAkB;IAC/C,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,MAAM;IAC9B,OAAOK,gBAAAA,SAAS,gBACd,KACA,OACA,UACD;IACD;IACA,GAAG;IACJ,CAAC;;EAGJ,KAAK,+CAA+C;GAClD,MAAM,EAAE,WAAW,QAAQ,MAAM,GAAG,SAAS;AAQ7C,UAPiBL,iBAAAA,cAAc,kBAAkB;IAC/C,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,8CAA8C;IACtE,OAAOM,gBAAAA,oBAAoB,gBAAgB,KAAK,OAAO,UAAU;IACjE;IACA;IACA,GAAG;IACJ,CAAC;;EAGJ,KAAK,oBAAoB;GACvB,MAAM,EAAE,WAAW,QAAQ,MAAM,GAAG,SAAS;AAe7C,UAdiBN,iBAAAA,cAAc,kBAAkB;IAC/C,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,mBAAmB;IAC3C,OAAOO,gBAAAA,YAAY,gBAAgB,KAAK,OAAO,UAAU;IACzD;IACA,QACE,UACA,IAAIH,sBAAAA,aAAa;KACf,gBAAgB;KAChB,WAAW;KACX,UAAU;KACV,WAAW;KACZ,CAAC;IACJ,GAAG;IACJ,CAAC;;EAGJ,QACE,OAAM,IAAI,MAAM,qBAAqB"}
1
+ {"version":3,"file":"initialize.cjs","names":["AgentExecutor","ZeroShotAgent","ChatAgent","ChatConversationalAgent","BufferMemory","XMLAgent","StructuredChatAgent","OpenAIAgent"],"sources":["../../src/agents/initialize.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type {\n StructuredToolInterface,\n ToolInterface,\n} from \"@langchain/core/tools\";\nimport { CallbackManager } from \"@langchain/core/callbacks/manager\";\nimport { BufferMemory } from \"../memory/buffer_memory.js\";\nimport { ChatAgent } from \"./chat/index.js\";\nimport { ChatConversationalAgent } from \"./chat_convo/index.js\";\nimport { StructuredChatAgent } from \"./structured_chat/index.js\";\nimport { AgentExecutor, AgentExecutorInput } from \"./executor.js\";\nimport { ZeroShotAgent } from \"./mrkl/index.js\";\nimport { OpenAIAgent } from \"./openai_functions/index.js\";\nimport { XMLAgent } from \"./xml/index.js\";\n\n/**\n * Represents the type of an agent in LangChain. It can be\n * \"zero-shot-react-description\", \"chat-zero-shot-react-description\", or\n * \"chat-conversational-react-description\".\n */\ntype AgentType =\n | \"zero-shot-react-description\"\n | \"chat-zero-shot-react-description\"\n | \"chat-conversational-react-description\";\n\nexport async function initializeAgentExecutor(\n tools: ToolInterface[],\n llm: BaseLanguageModelInterface,\n _agentType?: AgentType,\n _verbose?: boolean,\n _callbackManager?: CallbackManager\n): Promise<AgentExecutor> {\n const agentType = _agentType ?? \"zero-shot-react-description\";\n const verbose = _verbose;\n const callbackManager = _callbackManager;\n switch (agentType) {\n case \"zero-shot-react-description\":\n return AgentExecutor.fromAgentAndTools({\n agent: ZeroShotAgent.fromLLMAndTools(llm, tools),\n tools,\n returnIntermediateSteps: true,\n verbose,\n callbackManager,\n });\n case \"chat-zero-shot-react-description\":\n return AgentExecutor.fromAgentAndTools({\n agent: ChatAgent.fromLLMAndTools(llm, tools),\n tools,\n returnIntermediateSteps: true,\n verbose,\n callbackManager,\n });\n case \"chat-conversational-react-description\":\n return AgentExecutor.fromAgentAndTools({\n agent: ChatConversationalAgent.fromLLMAndTools(llm, tools),\n tools,\n verbose,\n callbackManager,\n });\n default:\n throw new Error(\"Unknown agent type\");\n }\n}\n\n/**\n * @interface\n */\nexport type InitializeAgentExecutorOptions =\n | ({\n agentType: \"zero-shot-react-description\";\n agentArgs?: Parameters<typeof ZeroShotAgent.fromLLMAndTools>[2];\n memory?: never;\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">)\n | ({\n agentType: \"chat-zero-shot-react-description\";\n agentArgs?: Parameters<typeof ChatAgent.fromLLMAndTools>[2];\n memory?: never;\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">)\n | ({\n agentType: \"chat-conversational-react-description\";\n agentArgs?: Parameters<typeof ChatConversationalAgent.fromLLMAndTools>[2];\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">)\n | ({\n agentType: \"xml\";\n agentArgs?: Parameters<typeof XMLAgent.fromLLMAndTools>[2];\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">);\n\n/**\n * @interface\n */\nexport type InitializeAgentExecutorOptionsStructured =\n | ({\n agentType: \"structured-chat-zero-shot-react-description\";\n agentArgs?: Parameters<typeof StructuredChatAgent.fromLLMAndTools>[2];\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">)\n | ({\n agentType: \"openai-functions\";\n agentArgs?: Parameters<typeof OpenAIAgent.fromLLMAndTools>[2];\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">);\n\n/**\n * Initialize an agent executor with options.\n * @param tools Array of tools to use in the agent\n * @param llm LLM or ChatModel to use in the agent\n * @param options Options for the agent, including agentType, agentArgs, and other options for AgentExecutor.fromAgentAndTools\n * @returns AgentExecutor\n */\nexport async function initializeAgentExecutorWithOptions(\n tools: StructuredToolInterface[],\n llm: BaseLanguageModelInterface,\n options: InitializeAgentExecutorOptionsStructured\n): Promise<AgentExecutor>;\nexport async function initializeAgentExecutorWithOptions(\n tools: ToolInterface[],\n llm: BaseLanguageModelInterface,\n options?: InitializeAgentExecutorOptions\n): Promise<AgentExecutor>;\nexport async function initializeAgentExecutorWithOptions(\n tools: StructuredToolInterface[] | ToolInterface[],\n llm: BaseLanguageModelInterface,\n options:\n | InitializeAgentExecutorOptions\n | InitializeAgentExecutorOptionsStructured = {\n agentType:\n llm._modelType() === \"base_chat_model\"\n ? \"chat-zero-shot-react-description\"\n : \"zero-shot-react-description\",\n }\n): Promise<AgentExecutor> {\n // Note this tools cast is safe as the overload signatures prevent\n // the function from being called with a StructuredTool[] when\n // the agentType is not in InitializeAgentExecutorOptionsStructured\n switch (options.agentType) {\n case \"zero-shot-react-description\": {\n const { agentArgs, tags, ...rest } = options;\n return AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"zero-shot-react-description\"],\n agent: ZeroShotAgent.fromLLMAndTools(\n llm,\n tools as ToolInterface[],\n agentArgs\n ),\n tools,\n ...rest,\n });\n }\n case \"chat-zero-shot-react-description\": {\n const { agentArgs, tags, ...rest } = options;\n return AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"chat-zero-shot-react-description\"],\n agent: ChatAgent.fromLLMAndTools(\n llm,\n tools as ToolInterface[],\n agentArgs\n ),\n tools,\n ...rest,\n });\n }\n case \"chat-conversational-react-description\": {\n const { agentArgs, memory, tags, ...rest } = options;\n const executor = AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"chat-conversational-react-description\"],\n agent: ChatConversationalAgent.fromLLMAndTools(\n llm,\n tools as ToolInterface[],\n agentArgs\n ),\n tools,\n memory:\n memory ??\n new BufferMemory({\n returnMessages: true,\n memoryKey: \"chat_history\",\n inputKey: \"input\",\n outputKey: \"output\",\n }),\n ...rest,\n });\n return executor;\n }\n case \"xml\": {\n const { agentArgs, tags, ...rest } = options;\n const executor = AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"xml\"],\n agent: XMLAgent.fromLLMAndTools(\n llm,\n tools as ToolInterface[],\n agentArgs\n ),\n tools,\n ...rest,\n });\n return executor;\n }\n case \"structured-chat-zero-shot-react-description\": {\n const { agentArgs, memory, tags, ...rest } = options;\n const executor = AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"structured-chat-zero-shot-react-description\"],\n agent: StructuredChatAgent.fromLLMAndTools(llm, tools, agentArgs),\n tools,\n memory,\n ...rest,\n });\n return executor;\n }\n case \"openai-functions\": {\n const { agentArgs, memory, tags, ...rest } = options;\n const executor = AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"openai-functions\"],\n agent: OpenAIAgent.fromLLMAndTools(llm, tools, agentArgs),\n tools,\n memory:\n memory ??\n new BufferMemory({\n returnMessages: true,\n memoryKey: \"chat_history\",\n inputKey: \"input\",\n outputKey: \"output\",\n }),\n ...rest,\n });\n return executor;\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":"initialize.js","names":[],"sources":["../../src/agents/initialize.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type {\n StructuredToolInterface,\n ToolInterface,\n} from \"@langchain/core/tools\";\nimport { CallbackManager } from \"@langchain/core/callbacks/manager\";\nimport { BufferMemory } from \"../memory/buffer_memory.js\";\nimport { ChatAgent } from \"./chat/index.js\";\nimport { ChatConversationalAgent } from \"./chat_convo/index.js\";\nimport { StructuredChatAgent } from \"./structured_chat/index.js\";\nimport { AgentExecutor, AgentExecutorInput } from \"./executor.js\";\nimport { ZeroShotAgent } from \"./mrkl/index.js\";\nimport { OpenAIAgent } from \"./openai_functions/index.js\";\nimport { XMLAgent } from \"./xml/index.js\";\n\n/**\n * Represents the type of an agent in LangChain. It can be\n * \"zero-shot-react-description\", \"chat-zero-shot-react-description\", or\n * \"chat-conversational-react-description\".\n */\ntype AgentType =\n | \"zero-shot-react-description\"\n | \"chat-zero-shot-react-description\"\n | \"chat-conversational-react-description\";\n\nexport async function initializeAgentExecutor(\n tools: ToolInterface[],\n llm: BaseLanguageModelInterface,\n _agentType?: AgentType,\n _verbose?: boolean,\n _callbackManager?: CallbackManager\n): Promise<AgentExecutor> {\n const agentType = _agentType ?? \"zero-shot-react-description\";\n const verbose = _verbose;\n const callbackManager = _callbackManager;\n switch (agentType) {\n case \"zero-shot-react-description\":\n return AgentExecutor.fromAgentAndTools({\n agent: ZeroShotAgent.fromLLMAndTools(llm, tools),\n tools,\n returnIntermediateSteps: true,\n verbose,\n callbackManager,\n });\n case \"chat-zero-shot-react-description\":\n return AgentExecutor.fromAgentAndTools({\n agent: ChatAgent.fromLLMAndTools(llm, tools),\n tools,\n returnIntermediateSteps: true,\n verbose,\n callbackManager,\n });\n case \"chat-conversational-react-description\":\n return AgentExecutor.fromAgentAndTools({\n agent: ChatConversationalAgent.fromLLMAndTools(llm, tools),\n tools,\n verbose,\n callbackManager,\n });\n default:\n throw new Error(\"Unknown agent type\");\n }\n}\n\n/**\n * @interface\n */\nexport type InitializeAgentExecutorOptions =\n | ({\n agentType: \"zero-shot-react-description\";\n agentArgs?: Parameters<typeof ZeroShotAgent.fromLLMAndTools>[2];\n memory?: never;\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">)\n | ({\n agentType: \"chat-zero-shot-react-description\";\n agentArgs?: Parameters<typeof ChatAgent.fromLLMAndTools>[2];\n memory?: never;\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">)\n | ({\n agentType: \"chat-conversational-react-description\";\n agentArgs?: Parameters<typeof ChatConversationalAgent.fromLLMAndTools>[2];\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">)\n | ({\n agentType: \"xml\";\n agentArgs?: Parameters<typeof XMLAgent.fromLLMAndTools>[2];\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">);\n\n/**\n * @interface\n */\nexport type InitializeAgentExecutorOptionsStructured =\n | ({\n agentType: \"structured-chat-zero-shot-react-description\";\n agentArgs?: Parameters<typeof StructuredChatAgent.fromLLMAndTools>[2];\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">)\n | ({\n agentType: \"openai-functions\";\n agentArgs?: Parameters<typeof OpenAIAgent.fromLLMAndTools>[2];\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">);\n\n/**\n * Initialize an agent executor with options.\n * @param tools Array of tools to use in the agent\n * @param llm LLM or ChatModel to use in the agent\n * @param options Options for the agent, including agentType, agentArgs, and other options for AgentExecutor.fromAgentAndTools\n * @returns AgentExecutor\n */\nexport async function initializeAgentExecutorWithOptions(\n tools: StructuredToolInterface[],\n llm: BaseLanguageModelInterface,\n options: InitializeAgentExecutorOptionsStructured\n): Promise<AgentExecutor>;\nexport async function initializeAgentExecutorWithOptions(\n tools: ToolInterface[],\n llm: BaseLanguageModelInterface,\n options?: InitializeAgentExecutorOptions\n): Promise<AgentExecutor>;\nexport async function initializeAgentExecutorWithOptions(\n tools: StructuredToolInterface[] | ToolInterface[],\n llm: BaseLanguageModelInterface,\n options:\n | InitializeAgentExecutorOptions\n | InitializeAgentExecutorOptionsStructured = {\n agentType:\n llm._modelType() === \"base_chat_model\"\n ? \"chat-zero-shot-react-description\"\n : \"zero-shot-react-description\",\n }\n): Promise<AgentExecutor> {\n // Note this tools cast is safe as the overload signatures prevent\n // the function from being called with a StructuredTool[] when\n // the agentType is not in InitializeAgentExecutorOptionsStructured\n switch (options.agentType) {\n case \"zero-shot-react-description\": {\n const { agentArgs, tags, ...rest } = options;\n return AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"zero-shot-react-description\"],\n agent: ZeroShotAgent.fromLLMAndTools(\n llm,\n tools as ToolInterface[],\n agentArgs\n ),\n tools,\n ...rest,\n });\n }\n case \"chat-zero-shot-react-description\": {\n const { agentArgs, tags, ...rest } = options;\n return AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"chat-zero-shot-react-description\"],\n agent: ChatAgent.fromLLMAndTools(\n llm,\n tools as ToolInterface[],\n agentArgs\n ),\n tools,\n ...rest,\n });\n }\n case \"chat-conversational-react-description\": {\n const { agentArgs, memory, tags, ...rest } = options;\n const executor = AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"chat-conversational-react-description\"],\n agent: ChatConversationalAgent.fromLLMAndTools(\n llm,\n tools as ToolInterface[],\n agentArgs\n ),\n tools,\n memory:\n memory ??\n new BufferMemory({\n returnMessages: true,\n memoryKey: \"chat_history\",\n inputKey: \"input\",\n outputKey: \"output\",\n }),\n ...rest,\n });\n return executor;\n }\n case \"xml\": {\n const { agentArgs, tags, ...rest } = options;\n const executor = AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"xml\"],\n agent: XMLAgent.fromLLMAndTools(\n llm,\n tools as ToolInterface[],\n agentArgs\n ),\n tools,\n ...rest,\n });\n return executor;\n }\n case \"structured-chat-zero-shot-react-description\": {\n const { agentArgs, memory, tags, ...rest } = options;\n const executor = AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"structured-chat-zero-shot-react-description\"],\n agent: StructuredChatAgent.fromLLMAndTools(llm, tools, agentArgs),\n tools,\n memory,\n ...rest,\n });\n return executor;\n }\n case \"openai-functions\": {\n const { agentArgs, memory, tags, ...rest } = options;\n const executor = AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"openai-functions\"],\n agent: OpenAIAgent.fromLLMAndTools(llm, tools, agentArgs),\n tools,\n memory:\n memory ??\n new BufferMemory({\n returnMessages: true,\n memoryKey: \"chat_history\",\n inputKey: \"input\",\n outputKey: \"output\",\n }),\n ...rest,\n });\n return executor;\n }\n default: {\n throw new Error(\"Unknown agent type\");\n }\n }\n}\n"],"mappings":";;;;;;;;;AAyBA,eAAsB,wBACpB,OACA,KACA,YACA,UACA,kBACwB;CACxB,MAAM,YAAY,cAAc;CAChC,MAAM,UAAU;CAChB,MAAM,kBAAkB;AACxB,SAAQ,WAAR;EACE,KAAK,8BACH,QAAO,cAAc,kBAAkB;GACrC,OAAO,cAAc,gBAAgB,KAAK,MAAM;GAChD;GACA,yBAAyB;GACzB;GACA;GACD,CAAC;EACJ,KAAK,mCACH,QAAO,cAAc,kBAAkB;GACrC,OAAO,UAAU,gBAAgB,KAAK,MAAM;GAC5C;GACA,yBAAyB;GACzB;GACA;GACD,CAAC;EACJ,KAAK,wCACH,QAAO,cAAc,kBAAkB;GACrC,OAAO,wBAAwB,gBAAgB,KAAK,MAAM;GAC1D;GACA;GACA;GACD,CAAC;EACJ,QACE,OAAM,IAAI,MAAM,qBAAqB;;;AAyD3C,eAAsB,mCACpB,OACA,KACA,UAE+C,EAC7C,WACE,IAAI,YAAY,KAAK,oBACjB,qCACA,+BACP,EACuB;AAIxB,SAAQ,QAAQ,WAAhB;EACE,KAAK,+BAA+B;GAClC,MAAM,EAAE,WAAW,MAAM,GAAG,SAAS;AACrC,UAAO,cAAc,kBAAkB;IACrC,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,8BAA8B;IACtD,OAAO,cAAc,gBACnB,KACA,OACA,UACD;IACD;IACA,GAAG;IACJ,CAAC;;EAEJ,KAAK,oCAAoC;GACvC,MAAM,EAAE,WAAW,MAAM,GAAG,SAAS;AACrC,UAAO,cAAc,kBAAkB;IACrC,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,mCAAmC;IAC3D,OAAO,UAAU,gBACf,KACA,OACA,UACD;IACD;IACA,GAAG;IACJ,CAAC;;EAEJ,KAAK,yCAAyC;GAC5C,MAAM,EAAE,WAAW,QAAQ,MAAM,GAAG,SAAS;AAmB7C,UAlBiB,cAAc,kBAAkB;IAC/C,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,wCAAwC;IAChE,OAAO,wBAAwB,gBAC7B,KACA,OACA,UACD;IACD;IACA,QACE,UACA,IAAI,aAAa;KACf,gBAAgB;KAChB,WAAW;KACX,UAAU;KACV,WAAW;KACZ,CAAC;IACJ,GAAG;IACJ,CAAC;;EAGJ,KAAK,OAAO;GACV,MAAM,EAAE,WAAW,MAAM,GAAG,SAAS;AAWrC,UAViB,cAAc,kBAAkB;IAC/C,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,MAAM;IAC9B,OAAO,SAAS,gBACd,KACA,OACA,UACD;IACD;IACA,GAAG;IACJ,CAAC;;EAGJ,KAAK,+CAA+C;GAClD,MAAM,EAAE,WAAW,QAAQ,MAAM,GAAG,SAAS;AAQ7C,UAPiB,cAAc,kBAAkB;IAC/C,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,8CAA8C;IACtE,OAAO,oBAAoB,gBAAgB,KAAK,OAAO,UAAU;IACjE;IACA;IACA,GAAG;IACJ,CAAC;;EAGJ,KAAK,oBAAoB;GACvB,MAAM,EAAE,WAAW,QAAQ,MAAM,GAAG,SAAS;AAe7C,UAdiB,cAAc,kBAAkB;IAC/C,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,mBAAmB;IAC3C,OAAO,YAAY,gBAAgB,KAAK,OAAO,UAAU;IACzD;IACA,QACE,UACA,IAAI,aAAa;KACf,gBAAgB;KAChB,WAAW;KACX,UAAU;KACV,WAAW;KACZ,CAAC;IACJ,GAAG;IACJ,CAAC;;EAGJ,QACE,OAAM,IAAI,MAAM,qBAAqB"}
1
+ {"version":3,"file":"initialize.js","names":[],"sources":["../../src/agents/initialize.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport type {\n StructuredToolInterface,\n ToolInterface,\n} from \"@langchain/core/tools\";\nimport { CallbackManager } from \"@langchain/core/callbacks/manager\";\nimport { BufferMemory } from \"../memory/buffer_memory.js\";\nimport { ChatAgent } from \"./chat/index.js\";\nimport { ChatConversationalAgent } from \"./chat_convo/index.js\";\nimport { StructuredChatAgent } from \"./structured_chat/index.js\";\nimport { AgentExecutor, AgentExecutorInput } from \"./executor.js\";\nimport { ZeroShotAgent } from \"./mrkl/index.js\";\nimport { OpenAIAgent } from \"./openai_functions/index.js\";\nimport { XMLAgent } from \"./xml/index.js\";\n\n/**\n * Represents the type of an agent in LangChain. It can be\n * \"zero-shot-react-description\", \"chat-zero-shot-react-description\", or\n * \"chat-conversational-react-description\".\n */\ntype AgentType =\n | \"zero-shot-react-description\"\n | \"chat-zero-shot-react-description\"\n | \"chat-conversational-react-description\";\n\nexport async function initializeAgentExecutor(\n tools: ToolInterface[],\n llm: BaseLanguageModelInterface,\n _agentType?: AgentType,\n _verbose?: boolean,\n _callbackManager?: CallbackManager\n): Promise<AgentExecutor> {\n const agentType = _agentType ?? \"zero-shot-react-description\";\n const verbose = _verbose;\n const callbackManager = _callbackManager;\n switch (agentType) {\n case \"zero-shot-react-description\":\n return AgentExecutor.fromAgentAndTools({\n agent: ZeroShotAgent.fromLLMAndTools(llm, tools),\n tools,\n returnIntermediateSteps: true,\n verbose,\n callbackManager,\n });\n case \"chat-zero-shot-react-description\":\n return AgentExecutor.fromAgentAndTools({\n agent: ChatAgent.fromLLMAndTools(llm, tools),\n tools,\n returnIntermediateSteps: true,\n verbose,\n callbackManager,\n });\n case \"chat-conversational-react-description\":\n return AgentExecutor.fromAgentAndTools({\n agent: ChatConversationalAgent.fromLLMAndTools(llm, tools),\n tools,\n verbose,\n callbackManager,\n });\n default:\n throw new Error(\"Unknown agent type\");\n }\n}\n\n/**\n * @interface\n */\nexport type InitializeAgentExecutorOptions =\n | ({\n agentType: \"zero-shot-react-description\";\n agentArgs?: Parameters<typeof ZeroShotAgent.fromLLMAndTools>[2];\n memory?: never;\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">)\n | ({\n agentType: \"chat-zero-shot-react-description\";\n agentArgs?: Parameters<typeof ChatAgent.fromLLMAndTools>[2];\n memory?: never;\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">)\n | ({\n agentType: \"chat-conversational-react-description\";\n agentArgs?: Parameters<typeof ChatConversationalAgent.fromLLMAndTools>[2];\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">)\n | ({\n agentType: \"xml\";\n agentArgs?: Parameters<typeof XMLAgent.fromLLMAndTools>[2];\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">);\n\n/**\n * @interface\n */\nexport type InitializeAgentExecutorOptionsStructured =\n | ({\n agentType: \"structured-chat-zero-shot-react-description\";\n agentArgs?: Parameters<typeof StructuredChatAgent.fromLLMAndTools>[2];\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">)\n | ({\n agentType: \"openai-functions\";\n agentArgs?: Parameters<typeof OpenAIAgent.fromLLMAndTools>[2];\n } & Omit<AgentExecutorInput, \"agent\" | \"tools\">);\n\n/**\n * Initialize an agent executor with options.\n * @param tools Array of tools to use in the agent\n * @param llm LLM or ChatModel to use in the agent\n * @param options Options for the agent, including agentType, agentArgs, and other options for AgentExecutor.fromAgentAndTools\n * @returns AgentExecutor\n */\nexport async function initializeAgentExecutorWithOptions(\n tools: StructuredToolInterface[],\n llm: BaseLanguageModelInterface,\n options: InitializeAgentExecutorOptionsStructured\n): Promise<AgentExecutor>;\nexport async function initializeAgentExecutorWithOptions(\n tools: ToolInterface[],\n llm: BaseLanguageModelInterface,\n options?: InitializeAgentExecutorOptions\n): Promise<AgentExecutor>;\nexport async function initializeAgentExecutorWithOptions(\n tools: StructuredToolInterface[] | ToolInterface[],\n llm: BaseLanguageModelInterface,\n options:\n | InitializeAgentExecutorOptions\n | InitializeAgentExecutorOptionsStructured = {\n agentType:\n llm._modelType() === \"base_chat_model\"\n ? \"chat-zero-shot-react-description\"\n : \"zero-shot-react-description\",\n }\n): Promise<AgentExecutor> {\n // Note this tools cast is safe as the overload signatures prevent\n // the function from being called with a StructuredTool[] when\n // the agentType is not in InitializeAgentExecutorOptionsStructured\n switch (options.agentType) {\n case \"zero-shot-react-description\": {\n const { agentArgs, tags, ...rest } = options;\n return AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"zero-shot-react-description\"],\n agent: ZeroShotAgent.fromLLMAndTools(\n llm,\n tools as ToolInterface[],\n agentArgs\n ),\n tools,\n ...rest,\n });\n }\n case \"chat-zero-shot-react-description\": {\n const { agentArgs, tags, ...rest } = options;\n return AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"chat-zero-shot-react-description\"],\n agent: ChatAgent.fromLLMAndTools(\n llm,\n tools as ToolInterface[],\n agentArgs\n ),\n tools,\n ...rest,\n });\n }\n case \"chat-conversational-react-description\": {\n const { agentArgs, memory, tags, ...rest } = options;\n const executor = AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"chat-conversational-react-description\"],\n agent: ChatConversationalAgent.fromLLMAndTools(\n llm,\n tools as ToolInterface[],\n agentArgs\n ),\n tools,\n memory:\n memory ??\n new BufferMemory({\n returnMessages: true,\n memoryKey: \"chat_history\",\n inputKey: \"input\",\n outputKey: \"output\",\n }),\n ...rest,\n });\n return executor;\n }\n case \"xml\": {\n const { agentArgs, tags, ...rest } = options;\n const executor = AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"xml\"],\n agent: XMLAgent.fromLLMAndTools(\n llm,\n tools as ToolInterface[],\n agentArgs\n ),\n tools,\n ...rest,\n });\n return executor;\n }\n case \"structured-chat-zero-shot-react-description\": {\n const { agentArgs, memory, tags, ...rest } = options;\n const executor = AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"structured-chat-zero-shot-react-description\"],\n agent: StructuredChatAgent.fromLLMAndTools(llm, tools, agentArgs),\n tools,\n memory,\n ...rest,\n });\n return executor;\n }\n case \"openai-functions\": {\n const { agentArgs, memory, tags, ...rest } = options;\n const executor = AgentExecutor.fromAgentAndTools({\n tags: [...(tags ?? []), \"openai-functions\"],\n agent: OpenAIAgent.fromLLMAndTools(llm, tools, agentArgs),\n tools,\n memory:\n memory ??\n new BufferMemory({\n returnMessages: true,\n memoryKey: \"chat_history\",\n inputKey: \"input\",\n outputKey: \"output\",\n }),\n ...rest,\n });\n return executor;\n }\n default: {\n throw new Error(\"Unknown agent type\");\n }\n }\n}\n"],"mappings":";;;;;;;;;AAyBA,eAAsB,wBACpB,OACA,KACA,YACA,UACA,kBACwB;CACxB,MAAM,YAAY,cAAc;CAChC,MAAM,UAAU;CAChB,MAAM,kBAAkB;AACxB,SAAQ,WAAR;EACE,KAAK,8BACH,QAAO,cAAc,kBAAkB;GACrC,OAAO,cAAc,gBAAgB,KAAK,MAAM;GAChD;GACA,yBAAyB;GACzB;GACA;GACD,CAAC;EACJ,KAAK,mCACH,QAAO,cAAc,kBAAkB;GACrC,OAAO,UAAU,gBAAgB,KAAK,MAAM;GAC5C;GACA,yBAAyB;GACzB;GACA;GACD,CAAC;EACJ,KAAK,wCACH,QAAO,cAAc,kBAAkB;GACrC,OAAO,wBAAwB,gBAAgB,KAAK,MAAM;GAC1D;GACA;GACA;GACD,CAAC;EACJ,QACE,OAAM,IAAI,MAAM,qBAAqB;;;AAyD3C,eAAsB,mCACpB,OACA,KACA,UAE+C,EAC7C,WACE,IAAI,YAAY,KAAK,oBACjB,qCACA,+BACP,EACuB;AAIxB,SAAQ,QAAQ,WAAhB;EACE,KAAK,+BAA+B;GAClC,MAAM,EAAE,WAAW,MAAM,GAAG,SAAS;AACrC,UAAO,cAAc,kBAAkB;IACrC,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,8BAA8B;IACtD,OAAO,cAAc,gBACnB,KACA,OACA,UACD;IACD;IACA,GAAG;IACJ,CAAC;;EAEJ,KAAK,oCAAoC;GACvC,MAAM,EAAE,WAAW,MAAM,GAAG,SAAS;AACrC,UAAO,cAAc,kBAAkB;IACrC,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,mCAAmC;IAC3D,OAAO,UAAU,gBACf,KACA,OACA,UACD;IACD;IACA,GAAG;IACJ,CAAC;;EAEJ,KAAK,yCAAyC;GAC5C,MAAM,EAAE,WAAW,QAAQ,MAAM,GAAG,SAAS;AAmB7C,UAlBiB,cAAc,kBAAkB;IAC/C,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,wCAAwC;IAChE,OAAO,wBAAwB,gBAC7B,KACA,OACA,UACD;IACD;IACA,QACE,UACA,IAAI,aAAa;KACf,gBAAgB;KAChB,WAAW;KACX,UAAU;KACV,WAAW;KACZ,CAAC;IACJ,GAAG;IACJ,CACc;;EAEjB,KAAK,OAAO;GACV,MAAM,EAAE,WAAW,MAAM,GAAG,SAAS;AAWrC,UAViB,cAAc,kBAAkB;IAC/C,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,MAAM;IAC9B,OAAO,SAAS,gBACd,KACA,OACA,UACD;IACD;IACA,GAAG;IACJ,CACc;;EAEjB,KAAK,+CAA+C;GAClD,MAAM,EAAE,WAAW,QAAQ,MAAM,GAAG,SAAS;AAQ7C,UAPiB,cAAc,kBAAkB;IAC/C,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,8CAA8C;IACtE,OAAO,oBAAoB,gBAAgB,KAAK,OAAO,UAAU;IACjE;IACA;IACA,GAAG;IACJ,CACc;;EAEjB,KAAK,oBAAoB;GACvB,MAAM,EAAE,WAAW,QAAQ,MAAM,GAAG,SAAS;AAe7C,UAdiB,cAAc,kBAAkB;IAC/C,MAAM,CAAC,GAAI,QAAQ,EAAE,EAAG,mBAAmB;IAC3C,OAAO,YAAY,gBAAgB,KAAK,OAAO,UAAU;IACzD;IACA,QACE,UACA,IAAI,aAAa;KACf,gBAAgB;KAChB,WAAW;KACX,UAAU;KACV,WAAW;KACZ,CAAC;IACJ,GAAG;IACJ,CACc;;EAEjB,QACE,OAAM,IAAI,MAAM,qBAAqB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["Agent","ZeroShotAgentOutputParser","PREFIX","SUFFIX","PromptTemplate","FORMAT_INSTRUCTIONS","LLMChain","deserializeHelper"],"sources":["../../../src/agents/mrkl/index.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { ToolInterface } from \"@langchain/core/tools\";\nimport { PromptTemplate, renderTemplate } from \"@langchain/core/prompts\";\nimport { LLMChain } from \"../../chains/llm_chain.js\";\nimport { Optional } from \"../../types/type-utils.js\";\nimport { Agent, AgentArgs, OutputParserArgs } from \"../agent.js\";\nimport { deserializeHelper } from \"../helpers.js\";\nimport {\n AgentInput,\n SerializedFromLLMAndTools,\n SerializedZeroShotAgent,\n} from \"../types.js\";\nimport { ZeroShotAgentOutputParser } from \"./outputParser.js\";\nimport { FORMAT_INSTRUCTIONS, PREFIX, SUFFIX } from \"./prompt.js\";\n\n/**\n * Interface for creating a prompt for the ZeroShotAgent.\n */\nexport interface ZeroShotCreatePromptArgs {\n /** String to put after the list of tools. */\n suffix?: string;\n /** String to put before the list of tools. */\n prefix?: string;\n /** List of input variables the final prompt will expect. */\n inputVariables?: string[];\n}\n\n/**\n * Type for the input to the ZeroShotAgent, with the 'outputParser'\n * property made optional.\n */\nexport type ZeroShotAgentInput = Optional<AgentInput, \"outputParser\">;\n\n/**\n * Agent for the MRKL chain.\n * @augments Agent\n * @example\n * ```typescript\n *\n * const agent = new ZeroShotAgent({\n * llmChain: new LLMChain({\n * llm: new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 }),\n * prompt: ZeroShotAgent.createPrompt([new SerpAPI(), new Calculator()], {\n * prefix: `Answer the following questions as best you can, but speaking as a pirate might speak. You have access to the following tools:`,\n * suffix: `Begin! Remember to speak as a pirate when giving your final answer. Use lots of \"Args\"\n * Question: {input}\n * {agent_scratchpad}`,\n * inputVariables: [\"input\", \"agent_scratchpad\"],\n * }),\n * }),\n * allowedTools: [\"search\", \"calculator\"],\n * });\n *\n * const result = await agent.invoke({\n * input: `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`,\n * });\n * ```\n */\nexport class ZeroShotAgent extends Agent {\n static lc_name() {\n return \"ZeroShotAgent\";\n }\n\n lc_namespace = [\"langchain\", \"agents\", \"mrkl\"];\n\n declare ToolType: ToolInterface;\n\n constructor(input: ZeroShotAgentInput) {\n const outputParser =\n input?.outputParser ?? ZeroShotAgent.getDefaultOutputParser();\n super({ ...input, outputParser });\n }\n\n _agentType() {\n return \"zero-shot-react-description\" as const;\n }\n\n observationPrefix() {\n return \"Observation: \";\n }\n\n llmPrefix() {\n return \"Thought:\";\n }\n\n /**\n * Returns the default output parser for the ZeroShotAgent.\n * @param fields Optional arguments for the output parser.\n * @returns An instance of ZeroShotAgentOutputParser.\n */\n static getDefaultOutputParser(fields?: OutputParserArgs) {\n return new ZeroShotAgentOutputParser(fields);\n }\n\n /**\n * Validates the tools for the ZeroShotAgent. Throws an error if any tool\n * does not have a description.\n * @param tools List of tools to validate.\n */\n static validateTools(tools: ToolInterface[]) {\n const descriptionlessTool = tools.find((tool) => !tool.description);\n if (descriptionlessTool) {\n const msg =\n `Got a tool ${descriptionlessTool.name} without a description.` +\n ` This agent requires descriptions for all tools.`;\n throw new Error(msg);\n }\n }\n\n /**\n * Create prompt in the style of the zero shot agent.\n *\n * @param tools - List of tools the agent will have access to, used to format the prompt.\n * @param args - Arguments to create the prompt with.\n * @param args.suffix - String to put after the list of tools.\n * @param args.prefix - String to put before the list of tools.\n * @param args.inputVariables - List of input variables the final prompt will expect.\n */\n static createPrompt(tools: ToolInterface[], args?: ZeroShotCreatePromptArgs) {\n const {\n prefix = PREFIX,\n suffix = SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n } = args ?? {};\n const toolStrings = tools\n .map((tool) => `${tool.name}: ${tool.description}`)\n .join(\"\\n\");\n\n const toolNames = tools.map((tool) => `\"${tool.name}\"`).join(\", \");\n\n const formatInstructions = renderTemplate(FORMAT_INSTRUCTIONS, \"f-string\", {\n tool_names: toolNames,\n });\n\n const template = [prefix, toolStrings, formatInstructions, suffix].join(\n \"\\n\\n\"\n );\n\n return new PromptTemplate({\n template,\n inputVariables,\n });\n }\n\n /**\n * Creates a ZeroShotAgent from a Large Language Model and a set of tools.\n * @param llm The Large Language Model to use.\n * @param tools The tools for the agent to use.\n * @param args Optional arguments for creating the agent.\n * @returns A new instance of ZeroShotAgent.\n */\n static fromLLMAndTools(\n llm: BaseLanguageModelInterface,\n tools: ToolInterface[],\n args?: ZeroShotCreatePromptArgs & AgentArgs\n ) {\n ZeroShotAgent.validateTools(tools);\n const prompt = ZeroShotAgent.createPrompt(tools, args);\n const outputParser =\n args?.outputParser ?? ZeroShotAgent.getDefaultOutputParser();\n const chain = new LLMChain({\n prompt,\n llm,\n callbacks: args?.callbacks ?? args?.callbackManager,\n });\n\n return new ZeroShotAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n outputParser,\n });\n }\n\n static async deserialize(\n data: SerializedZeroShotAgent & {\n llm?: BaseLanguageModelInterface;\n tools?: ToolInterface[];\n }\n ): Promise<ZeroShotAgent> {\n const { llm, tools, ...rest } = data;\n return deserializeHelper(\n llm,\n tools,\n rest,\n (\n llm: BaseLanguageModelInterface,\n tools: ToolInterface[],\n args: SerializedFromLLMAndTools\n ) =>\n ZeroShotAgent.fromLLMAndTools(llm, tools, {\n prefix: args.prefix,\n suffix: args.suffix,\n inputVariables: args.input_variables,\n }),\n (args) => new ZeroShotAgent(args)\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DA,IAAa,gBAAb,MAAa,sBAAsBA,cAAAA,MAAM;CACvC,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAU;EAAO;CAI9C,YAAY,OAA2B;EACrC,MAAM,eACJ,OAAO,gBAAgB,cAAc,wBAAwB;AAC/D,QAAM;GAAE,GAAG;GAAO;GAAc,CAAC;;CAGnC,aAAa;AACX,SAAO;;CAGT,oBAAoB;AAClB,SAAO;;CAGT,YAAY;AACV,SAAO;;;;;;;CAQT,OAAO,uBAAuB,QAA2B;AACvD,SAAO,IAAIC,qBAAAA,0BAA0B,OAAO;;;;;;;CAQ9C,OAAO,cAAc,OAAwB;EAC3C,MAAM,sBAAsB,MAAM,MAAM,SAAS,CAAC,KAAK,YAAY;AACnE,MAAI,qBAAqB;GACvB,MAAM,MACJ,cAAc,oBAAoB,KAAK;AAEzC,SAAM,IAAI,MAAM,IAAI;;;;;;;;;;;;CAaxB,OAAO,aAAa,OAAwB,MAAiC;EAC3E,MAAM,EACJ,SAASC,eAAAA,QACT,SAASC,eAAAA,QACT,iBAAiB,CAAC,SAAS,mBAAmB,KAC5C,QAAQ,EAAE;AAed,SAAO,IAAIC,wBAAAA,eAAe;GACxB,UALe;IAAC;IAVE,MACjB,KAAK,SAAS,GAAG,KAAK,KAAK,IAAI,KAAK,cAAc,CAClD,KAAK,KAAK;gDAI6BC,eAAAA,qBAAqB,YAAY,EACzE,YAHgB,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,GAAG,CAAC,KAAK,KAAK,EAIjE,CAAC;IAEyD;IAAO,CAAC,KACjE,OACD;GAIC;GACD,CAAC;;;;;;;;;CAUJ,OAAO,gBACL,KACA,OACA,MACA;AACA,gBAAc,cAAc,MAAM;EAClC,MAAM,SAAS,cAAc,aAAa,OAAO,KAAK;EACtD,MAAM,eACJ,MAAM,gBAAgB,cAAc,wBAAwB;AAO9D,SAAO,IAAI,cAAc;GACvB,UAPY,IAAIC,kBAAAA,SAAS;IACzB;IACA;IACA,WAAW,MAAM,aAAa,MAAM;IACrC,CAAC;GAIA,cAAc,MAAM,KAAK,MAAM,EAAE,KAAK;GACtC;GACD,CAAC;;CAGJ,aAAa,YACX,MAIwB;EACxB,MAAM,EAAE,KAAK,OAAO,GAAG,SAAS;AAChC,SAAOC,gBAAAA,kBACL,KACA,OACA,OAEE,KACA,OACA,SAEA,cAAc,gBAAgB,KAAK,OAAO;GACxC,QAAQ,KAAK;GACb,QAAQ,KAAK;GACb,gBAAgB,KAAK;GACtB,CAAC,GACH,SAAS,IAAI,cAAc,KAAK,CAClC"}
1
+ {"version":3,"file":"index.cjs","names":["Agent","ZeroShotAgentOutputParser","PREFIX","SUFFIX","PromptTemplate","FORMAT_INSTRUCTIONS","LLMChain","deserializeHelper"],"sources":["../../../src/agents/mrkl/index.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { ToolInterface } from \"@langchain/core/tools\";\nimport { PromptTemplate, renderTemplate } from \"@langchain/core/prompts\";\nimport { LLMChain } from \"../../chains/llm_chain.js\";\nimport { Optional } from \"../../types/type-utils.js\";\nimport { Agent, AgentArgs, OutputParserArgs } from \"../agent.js\";\nimport { deserializeHelper } from \"../helpers.js\";\nimport {\n AgentInput,\n SerializedFromLLMAndTools,\n SerializedZeroShotAgent,\n} from \"../types.js\";\nimport { ZeroShotAgentOutputParser } from \"./outputParser.js\";\nimport { FORMAT_INSTRUCTIONS, PREFIX, SUFFIX } from \"./prompt.js\";\n\n/**\n * Interface for creating a prompt for the ZeroShotAgent.\n */\nexport interface ZeroShotCreatePromptArgs {\n /** String to put after the list of tools. */\n suffix?: string;\n /** String to put before the list of tools. */\n prefix?: string;\n /** List of input variables the final prompt will expect. */\n inputVariables?: string[];\n}\n\n/**\n * Type for the input to the ZeroShotAgent, with the 'outputParser'\n * property made optional.\n */\nexport type ZeroShotAgentInput = Optional<AgentInput, \"outputParser\">;\n\n/**\n * Agent for the MRKL chain.\n * @augments Agent\n * @example\n * ```typescript\n *\n * const agent = new ZeroShotAgent({\n * llmChain: new LLMChain({\n * llm: new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 }),\n * prompt: ZeroShotAgent.createPrompt([new SerpAPI(), new Calculator()], {\n * prefix: `Answer the following questions as best you can, but speaking as a pirate might speak. You have access to the following tools:`,\n * suffix: `Begin! Remember to speak as a pirate when giving your final answer. Use lots of \"Args\"\n * Question: {input}\n * {agent_scratchpad}`,\n * inputVariables: [\"input\", \"agent_scratchpad\"],\n * }),\n * }),\n * allowedTools: [\"search\", \"calculator\"],\n * });\n *\n * const result = await agent.invoke({\n * input: `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`,\n * });\n * ```\n */\nexport class ZeroShotAgent extends Agent {\n static lc_name() {\n return \"ZeroShotAgent\";\n }\n\n lc_namespace = [\"langchain\", \"agents\", \"mrkl\"];\n\n declare ToolType: ToolInterface;\n\n constructor(input: ZeroShotAgentInput) {\n const outputParser =\n input?.outputParser ?? ZeroShotAgent.getDefaultOutputParser();\n super({ ...input, outputParser });\n }\n\n _agentType() {\n return \"zero-shot-react-description\" as const;\n }\n\n observationPrefix() {\n return \"Observation: \";\n }\n\n llmPrefix() {\n return \"Thought:\";\n }\n\n /**\n * Returns the default output parser for the ZeroShotAgent.\n * @param fields Optional arguments for the output parser.\n * @returns An instance of ZeroShotAgentOutputParser.\n */\n static getDefaultOutputParser(fields?: OutputParserArgs) {\n return new ZeroShotAgentOutputParser(fields);\n }\n\n /**\n * Validates the tools for the ZeroShotAgent. Throws an error if any tool\n * does not have a description.\n * @param tools List of tools to validate.\n */\n static validateTools(tools: ToolInterface[]) {\n const descriptionlessTool = tools.find((tool) => !tool.description);\n if (descriptionlessTool) {\n const msg =\n `Got a tool ${descriptionlessTool.name} without a description.` +\n ` This agent requires descriptions for all tools.`;\n throw new Error(msg);\n }\n }\n\n /**\n * Create prompt in the style of the zero shot agent.\n *\n * @param tools - List of tools the agent will have access to, used to format the prompt.\n * @param args - Arguments to create the prompt with.\n * @param args.suffix - String to put after the list of tools.\n * @param args.prefix - String to put before the list of tools.\n * @param args.inputVariables - List of input variables the final prompt will expect.\n */\n static createPrompt(tools: ToolInterface[], args?: ZeroShotCreatePromptArgs) {\n const {\n prefix = PREFIX,\n suffix = SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n } = args ?? {};\n const toolStrings = tools\n .map((tool) => `${tool.name}: ${tool.description}`)\n .join(\"\\n\");\n\n const toolNames = tools.map((tool) => `\"${tool.name}\"`).join(\", \");\n\n const formatInstructions = renderTemplate(FORMAT_INSTRUCTIONS, \"f-string\", {\n tool_names: toolNames,\n });\n\n const template = [prefix, toolStrings, formatInstructions, suffix].join(\n \"\\n\\n\"\n );\n\n return new PromptTemplate({\n template,\n inputVariables,\n });\n }\n\n /**\n * Creates a ZeroShotAgent from a Large Language Model and a set of tools.\n * @param llm The Large Language Model to use.\n * @param tools The tools for the agent to use.\n * @param args Optional arguments for creating the agent.\n * @returns A new instance of ZeroShotAgent.\n */\n static fromLLMAndTools(\n llm: BaseLanguageModelInterface,\n tools: ToolInterface[],\n args?: ZeroShotCreatePromptArgs & AgentArgs\n ) {\n ZeroShotAgent.validateTools(tools);\n const prompt = ZeroShotAgent.createPrompt(tools, args);\n const outputParser =\n args?.outputParser ?? ZeroShotAgent.getDefaultOutputParser();\n const chain = new LLMChain({\n prompt,\n llm,\n callbacks: args?.callbacks ?? args?.callbackManager,\n });\n\n return new ZeroShotAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n outputParser,\n });\n }\n\n static async deserialize(\n data: SerializedZeroShotAgent & {\n llm?: BaseLanguageModelInterface;\n tools?: ToolInterface[];\n }\n ): Promise<ZeroShotAgent> {\n const { llm, tools, ...rest } = data;\n return deserializeHelper(\n llm,\n tools,\n rest,\n (\n llm: BaseLanguageModelInterface,\n tools: ToolInterface[],\n args: SerializedFromLLMAndTools\n ) =>\n ZeroShotAgent.fromLLMAndTools(llm, tools, {\n prefix: args.prefix,\n suffix: args.suffix,\n inputVariables: args.input_variables,\n }),\n (args) => new ZeroShotAgent(args)\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DA,IAAa,gBAAb,MAAa,sBAAsBA,cAAAA,MAAM;CACvC,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAU;EAAO;CAI9C,YAAY,OAA2B;EACrC,MAAM,eACJ,OAAO,gBAAgB,cAAc,wBAAwB;AAC/D,QAAM;GAAE,GAAG;GAAO;GAAc,CAAC;;CAGnC,aAAa;AACX,SAAO;;CAGT,oBAAoB;AAClB,SAAO;;CAGT,YAAY;AACV,SAAO;;;;;;;CAQT,OAAO,uBAAuB,QAA2B;AACvD,SAAO,IAAIC,qBAAAA,0BAA0B,OAAO;;;;;;;CAQ9C,OAAO,cAAc,OAAwB;EAC3C,MAAM,sBAAsB,MAAM,MAAM,SAAS,CAAC,KAAK,YAAY;AACnE,MAAI,qBAAqB;GACvB,MAAM,MACJ,cAAc,oBAAoB,KAAK;AAEzC,SAAM,IAAI,MAAM,IAAI;;;;;;;;;;;;CAaxB,OAAO,aAAa,OAAwB,MAAiC;EAC3E,MAAM,EACJ,SAASC,eAAAA,QACT,SAASC,eAAAA,QACT,iBAAiB,CAAC,SAAS,mBAAmB,KAC5C,QAAQ,EAAE;AAed,SAAO,IAAIC,wBAAAA,eAAe;GACxB,UALe;IAAC;IAVE,MACjB,KAAK,SAAS,GAAG,KAAK,KAAK,IAAI,KAAK,cAAc,CAClD,KAAK,KAQ6B;gDAJKC,eAAAA,qBAAqB,YAAY,EACzE,YAHgB,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,GAAG,CAAC,KAAK,KAGtC,EACtB,CAEwD;IAAE;IAAO,CAAC,KACjE,OAIQ;GACR;GACD,CAAC;;;;;;;;;CAUJ,OAAO,gBACL,KACA,OACA,MACA;AACA,gBAAc,cAAc,MAAM;EAClC,MAAM,SAAS,cAAc,aAAa,OAAO,KAAK;EACtD,MAAM,eACJ,MAAM,gBAAgB,cAAc,wBAAwB;AAO9D,SAAO,IAAI,cAAc;GACvB,UAAU,IAPMC,kBAAAA,SAAS;IACzB;IACA;IACA,WAAW,MAAM,aAAa,MAAM;IACrC,CAGgB;GACf,cAAc,MAAM,KAAK,MAAM,EAAE,KAAK;GACtC;GACD,CAAC;;CAGJ,aAAa,YACX,MAIwB;EACxB,MAAM,EAAE,KAAK,OAAO,GAAG,SAAS;AAChC,SAAOC,gBAAAA,kBACL,KACA,OACA,OAEE,KACA,OACA,SAEA,cAAc,gBAAgB,KAAK,OAAO;GACxC,QAAQ,KAAK;GACb,QAAQ,KAAK;GACb,gBAAgB,KAAK;GACtB,CAAC,GACH,SAAS,IAAI,cAAc,KAAK,CAClC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/agents/mrkl/index.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { ToolInterface } from \"@langchain/core/tools\";\nimport { PromptTemplate, renderTemplate } from \"@langchain/core/prompts\";\nimport { LLMChain } from \"../../chains/llm_chain.js\";\nimport { Optional } from \"../../types/type-utils.js\";\nimport { Agent, AgentArgs, OutputParserArgs } from \"../agent.js\";\nimport { deserializeHelper } from \"../helpers.js\";\nimport {\n AgentInput,\n SerializedFromLLMAndTools,\n SerializedZeroShotAgent,\n} from \"../types.js\";\nimport { ZeroShotAgentOutputParser } from \"./outputParser.js\";\nimport { FORMAT_INSTRUCTIONS, PREFIX, SUFFIX } from \"./prompt.js\";\n\n/**\n * Interface for creating a prompt for the ZeroShotAgent.\n */\nexport interface ZeroShotCreatePromptArgs {\n /** String to put after the list of tools. */\n suffix?: string;\n /** String to put before the list of tools. */\n prefix?: string;\n /** List of input variables the final prompt will expect. */\n inputVariables?: string[];\n}\n\n/**\n * Type for the input to the ZeroShotAgent, with the 'outputParser'\n * property made optional.\n */\nexport type ZeroShotAgentInput = Optional<AgentInput, \"outputParser\">;\n\n/**\n * Agent for the MRKL chain.\n * @augments Agent\n * @example\n * ```typescript\n *\n * const agent = new ZeroShotAgent({\n * llmChain: new LLMChain({\n * llm: new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 }),\n * prompt: ZeroShotAgent.createPrompt([new SerpAPI(), new Calculator()], {\n * prefix: `Answer the following questions as best you can, but speaking as a pirate might speak. You have access to the following tools:`,\n * suffix: `Begin! Remember to speak as a pirate when giving your final answer. Use lots of \"Args\"\n * Question: {input}\n * {agent_scratchpad}`,\n * inputVariables: [\"input\", \"agent_scratchpad\"],\n * }),\n * }),\n * allowedTools: [\"search\", \"calculator\"],\n * });\n *\n * const result = await agent.invoke({\n * input: `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`,\n * });\n * ```\n */\nexport class ZeroShotAgent extends Agent {\n static lc_name() {\n return \"ZeroShotAgent\";\n }\n\n lc_namespace = [\"langchain\", \"agents\", \"mrkl\"];\n\n declare ToolType: ToolInterface;\n\n constructor(input: ZeroShotAgentInput) {\n const outputParser =\n input?.outputParser ?? ZeroShotAgent.getDefaultOutputParser();\n super({ ...input, outputParser });\n }\n\n _agentType() {\n return \"zero-shot-react-description\" as const;\n }\n\n observationPrefix() {\n return \"Observation: \";\n }\n\n llmPrefix() {\n return \"Thought:\";\n }\n\n /**\n * Returns the default output parser for the ZeroShotAgent.\n * @param fields Optional arguments for the output parser.\n * @returns An instance of ZeroShotAgentOutputParser.\n */\n static getDefaultOutputParser(fields?: OutputParserArgs) {\n return new ZeroShotAgentOutputParser(fields);\n }\n\n /**\n * Validates the tools for the ZeroShotAgent. Throws an error if any tool\n * does not have a description.\n * @param tools List of tools to validate.\n */\n static validateTools(tools: ToolInterface[]) {\n const descriptionlessTool = tools.find((tool) => !tool.description);\n if (descriptionlessTool) {\n const msg =\n `Got a tool ${descriptionlessTool.name} without a description.` +\n ` This agent requires descriptions for all tools.`;\n throw new Error(msg);\n }\n }\n\n /**\n * Create prompt in the style of the zero shot agent.\n *\n * @param tools - List of tools the agent will have access to, used to format the prompt.\n * @param args - Arguments to create the prompt with.\n * @param args.suffix - String to put after the list of tools.\n * @param args.prefix - String to put before the list of tools.\n * @param args.inputVariables - List of input variables the final prompt will expect.\n */\n static createPrompt(tools: ToolInterface[], args?: ZeroShotCreatePromptArgs) {\n const {\n prefix = PREFIX,\n suffix = SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n } = args ?? {};\n const toolStrings = tools\n .map((tool) => `${tool.name}: ${tool.description}`)\n .join(\"\\n\");\n\n const toolNames = tools.map((tool) => `\"${tool.name}\"`).join(\", \");\n\n const formatInstructions = renderTemplate(FORMAT_INSTRUCTIONS, \"f-string\", {\n tool_names: toolNames,\n });\n\n const template = [prefix, toolStrings, formatInstructions, suffix].join(\n \"\\n\\n\"\n );\n\n return new PromptTemplate({\n template,\n inputVariables,\n });\n }\n\n /**\n * Creates a ZeroShotAgent from a Large Language Model and a set of tools.\n * @param llm The Large Language Model to use.\n * @param tools The tools for the agent to use.\n * @param args Optional arguments for creating the agent.\n * @returns A new instance of ZeroShotAgent.\n */\n static fromLLMAndTools(\n llm: BaseLanguageModelInterface,\n tools: ToolInterface[],\n args?: ZeroShotCreatePromptArgs & AgentArgs\n ) {\n ZeroShotAgent.validateTools(tools);\n const prompt = ZeroShotAgent.createPrompt(tools, args);\n const outputParser =\n args?.outputParser ?? ZeroShotAgent.getDefaultOutputParser();\n const chain = new LLMChain({\n prompt,\n llm,\n callbacks: args?.callbacks ?? args?.callbackManager,\n });\n\n return new ZeroShotAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n outputParser,\n });\n }\n\n static async deserialize(\n data: SerializedZeroShotAgent & {\n llm?: BaseLanguageModelInterface;\n tools?: ToolInterface[];\n }\n ): Promise<ZeroShotAgent> {\n const { llm, tools, ...rest } = data;\n return deserializeHelper(\n llm,\n tools,\n rest,\n (\n llm: BaseLanguageModelInterface,\n tools: ToolInterface[],\n args: SerializedFromLLMAndTools\n ) =>\n ZeroShotAgent.fromLLMAndTools(llm, tools, {\n prefix: args.prefix,\n suffix: args.suffix,\n inputVariables: args.input_variables,\n }),\n (args) => new ZeroShotAgent(args)\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DA,IAAa,gBAAb,MAAa,sBAAsB,MAAM;CACvC,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAU;EAAO;CAI9C,YAAY,OAA2B;EACrC,MAAM,eACJ,OAAO,gBAAgB,cAAc,wBAAwB;AAC/D,QAAM;GAAE,GAAG;GAAO;GAAc,CAAC;;CAGnC,aAAa;AACX,SAAO;;CAGT,oBAAoB;AAClB,SAAO;;CAGT,YAAY;AACV,SAAO;;;;;;;CAQT,OAAO,uBAAuB,QAA2B;AACvD,SAAO,IAAI,0BAA0B,OAAO;;;;;;;CAQ9C,OAAO,cAAc,OAAwB;EAC3C,MAAM,sBAAsB,MAAM,MAAM,SAAS,CAAC,KAAK,YAAY;AACnE,MAAI,qBAAqB;GACvB,MAAM,MACJ,cAAc,oBAAoB,KAAK;AAEzC,SAAM,IAAI,MAAM,IAAI;;;;;;;;;;;;CAaxB,OAAO,aAAa,OAAwB,MAAiC;EAC3E,MAAM,EACJ,SAAS,QACT,SAAS,QACT,iBAAiB,CAAC,SAAS,mBAAmB,KAC5C,QAAQ,EAAE;AAed,SAAO,IAAI,eAAe;GACxB,UALe;IAAC;IAVE,MACjB,KAAK,SAAS,GAAG,KAAK,KAAK,IAAI,KAAK,cAAc,CAClD,KAAK,KAAK;IAIc,eAAe,qBAAqB,YAAY,EACzE,YAHgB,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,GAAG,CAAC,KAAK,KAAK,EAIjE,CAAC;IAEyD;IAAO,CAAC,KACjE,OACD;GAIC;GACD,CAAC;;;;;;;;;CAUJ,OAAO,gBACL,KACA,OACA,MACA;AACA,gBAAc,cAAc,MAAM;EAClC,MAAM,SAAS,cAAc,aAAa,OAAO,KAAK;EACtD,MAAM,eACJ,MAAM,gBAAgB,cAAc,wBAAwB;AAO9D,SAAO,IAAI,cAAc;GACvB,UAPY,IAAI,SAAS;IACzB;IACA;IACA,WAAW,MAAM,aAAa,MAAM;IACrC,CAAC;GAIA,cAAc,MAAM,KAAK,MAAM,EAAE,KAAK;GACtC;GACD,CAAC;;CAGJ,aAAa,YACX,MAIwB;EACxB,MAAM,EAAE,KAAK,OAAO,GAAG,SAAS;AAChC,SAAO,kBACL,KACA,OACA,OAEE,KACA,OACA,SAEA,cAAc,gBAAgB,KAAK,OAAO;GACxC,QAAQ,KAAK;GACb,QAAQ,KAAK;GACb,gBAAgB,KAAK;GACtB,CAAC,GACH,SAAS,IAAI,cAAc,KAAK,CAClC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/agents/mrkl/index.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { ToolInterface } from \"@langchain/core/tools\";\nimport { PromptTemplate, renderTemplate } from \"@langchain/core/prompts\";\nimport { LLMChain } from \"../../chains/llm_chain.js\";\nimport { Optional } from \"../../types/type-utils.js\";\nimport { Agent, AgentArgs, OutputParserArgs } from \"../agent.js\";\nimport { deserializeHelper } from \"../helpers.js\";\nimport {\n AgentInput,\n SerializedFromLLMAndTools,\n SerializedZeroShotAgent,\n} from \"../types.js\";\nimport { ZeroShotAgentOutputParser } from \"./outputParser.js\";\nimport { FORMAT_INSTRUCTIONS, PREFIX, SUFFIX } from \"./prompt.js\";\n\n/**\n * Interface for creating a prompt for the ZeroShotAgent.\n */\nexport interface ZeroShotCreatePromptArgs {\n /** String to put after the list of tools. */\n suffix?: string;\n /** String to put before the list of tools. */\n prefix?: string;\n /** List of input variables the final prompt will expect. */\n inputVariables?: string[];\n}\n\n/**\n * Type for the input to the ZeroShotAgent, with the 'outputParser'\n * property made optional.\n */\nexport type ZeroShotAgentInput = Optional<AgentInput, \"outputParser\">;\n\n/**\n * Agent for the MRKL chain.\n * @augments Agent\n * @example\n * ```typescript\n *\n * const agent = new ZeroShotAgent({\n * llmChain: new LLMChain({\n * llm: new ChatOpenAI({ model: \"gpt-4o-mini\", temperature: 0 }),\n * prompt: ZeroShotAgent.createPrompt([new SerpAPI(), new Calculator()], {\n * prefix: `Answer the following questions as best you can, but speaking as a pirate might speak. You have access to the following tools:`,\n * suffix: `Begin! Remember to speak as a pirate when giving your final answer. Use lots of \"Args\"\n * Question: {input}\n * {agent_scratchpad}`,\n * inputVariables: [\"input\", \"agent_scratchpad\"],\n * }),\n * }),\n * allowedTools: [\"search\", \"calculator\"],\n * });\n *\n * const result = await agent.invoke({\n * input: `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`,\n * });\n * ```\n */\nexport class ZeroShotAgent extends Agent {\n static lc_name() {\n return \"ZeroShotAgent\";\n }\n\n lc_namespace = [\"langchain\", \"agents\", \"mrkl\"];\n\n declare ToolType: ToolInterface;\n\n constructor(input: ZeroShotAgentInput) {\n const outputParser =\n input?.outputParser ?? ZeroShotAgent.getDefaultOutputParser();\n super({ ...input, outputParser });\n }\n\n _agentType() {\n return \"zero-shot-react-description\" as const;\n }\n\n observationPrefix() {\n return \"Observation: \";\n }\n\n llmPrefix() {\n return \"Thought:\";\n }\n\n /**\n * Returns the default output parser for the ZeroShotAgent.\n * @param fields Optional arguments for the output parser.\n * @returns An instance of ZeroShotAgentOutputParser.\n */\n static getDefaultOutputParser(fields?: OutputParserArgs) {\n return new ZeroShotAgentOutputParser(fields);\n }\n\n /**\n * Validates the tools for the ZeroShotAgent. Throws an error if any tool\n * does not have a description.\n * @param tools List of tools to validate.\n */\n static validateTools(tools: ToolInterface[]) {\n const descriptionlessTool = tools.find((tool) => !tool.description);\n if (descriptionlessTool) {\n const msg =\n `Got a tool ${descriptionlessTool.name} without a description.` +\n ` This agent requires descriptions for all tools.`;\n throw new Error(msg);\n }\n }\n\n /**\n * Create prompt in the style of the zero shot agent.\n *\n * @param tools - List of tools the agent will have access to, used to format the prompt.\n * @param args - Arguments to create the prompt with.\n * @param args.suffix - String to put after the list of tools.\n * @param args.prefix - String to put before the list of tools.\n * @param args.inputVariables - List of input variables the final prompt will expect.\n */\n static createPrompt(tools: ToolInterface[], args?: ZeroShotCreatePromptArgs) {\n const {\n prefix = PREFIX,\n suffix = SUFFIX,\n inputVariables = [\"input\", \"agent_scratchpad\"],\n } = args ?? {};\n const toolStrings = tools\n .map((tool) => `${tool.name}: ${tool.description}`)\n .join(\"\\n\");\n\n const toolNames = tools.map((tool) => `\"${tool.name}\"`).join(\", \");\n\n const formatInstructions = renderTemplate(FORMAT_INSTRUCTIONS, \"f-string\", {\n tool_names: toolNames,\n });\n\n const template = [prefix, toolStrings, formatInstructions, suffix].join(\n \"\\n\\n\"\n );\n\n return new PromptTemplate({\n template,\n inputVariables,\n });\n }\n\n /**\n * Creates a ZeroShotAgent from a Large Language Model and a set of tools.\n * @param llm The Large Language Model to use.\n * @param tools The tools for the agent to use.\n * @param args Optional arguments for creating the agent.\n * @returns A new instance of ZeroShotAgent.\n */\n static fromLLMAndTools(\n llm: BaseLanguageModelInterface,\n tools: ToolInterface[],\n args?: ZeroShotCreatePromptArgs & AgentArgs\n ) {\n ZeroShotAgent.validateTools(tools);\n const prompt = ZeroShotAgent.createPrompt(tools, args);\n const outputParser =\n args?.outputParser ?? ZeroShotAgent.getDefaultOutputParser();\n const chain = new LLMChain({\n prompt,\n llm,\n callbacks: args?.callbacks ?? args?.callbackManager,\n });\n\n return new ZeroShotAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n outputParser,\n });\n }\n\n static async deserialize(\n data: SerializedZeroShotAgent & {\n llm?: BaseLanguageModelInterface;\n tools?: ToolInterface[];\n }\n ): Promise<ZeroShotAgent> {\n const { llm, tools, ...rest } = data;\n return deserializeHelper(\n llm,\n tools,\n rest,\n (\n llm: BaseLanguageModelInterface,\n tools: ToolInterface[],\n args: SerializedFromLLMAndTools\n ) =>\n ZeroShotAgent.fromLLMAndTools(llm, tools, {\n prefix: args.prefix,\n suffix: args.suffix,\n inputVariables: args.input_variables,\n }),\n (args) => new ZeroShotAgent(args)\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DA,IAAa,gBAAb,MAAa,sBAAsB,MAAM;CACvC,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAU;EAAO;CAI9C,YAAY,OAA2B;EACrC,MAAM,eACJ,OAAO,gBAAgB,cAAc,wBAAwB;AAC/D,QAAM;GAAE,GAAG;GAAO;GAAc,CAAC;;CAGnC,aAAa;AACX,SAAO;;CAGT,oBAAoB;AAClB,SAAO;;CAGT,YAAY;AACV,SAAO;;;;;;;CAQT,OAAO,uBAAuB,QAA2B;AACvD,SAAO,IAAI,0BAA0B,OAAO;;;;;;;CAQ9C,OAAO,cAAc,OAAwB;EAC3C,MAAM,sBAAsB,MAAM,MAAM,SAAS,CAAC,KAAK,YAAY;AACnE,MAAI,qBAAqB;GACvB,MAAM,MACJ,cAAc,oBAAoB,KAAK;AAEzC,SAAM,IAAI,MAAM,IAAI;;;;;;;;;;;;CAaxB,OAAO,aAAa,OAAwB,MAAiC;EAC3E,MAAM,EACJ,SAAS,QACT,SAAS,QACT,iBAAiB,CAAC,SAAS,mBAAmB,KAC5C,QAAQ,EAAE;AAed,SAAO,IAAI,eAAe;GACxB,UALe;IAAC;IAVE,MACjB,KAAK,SAAS,GAAG,KAAK,KAAK,IAAI,KAAK,cAAc,CAClD,KAAK,KAQ6B;IAJV,eAAe,qBAAqB,YAAY,EACzE,YAHgB,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,GAAG,CAAC,KAAK,KAGtC,EACtB,CAEwD;IAAE;IAAO,CAAC,KACjE,OAIQ;GACR;GACD,CAAC;;;;;;;;;CAUJ,OAAO,gBACL,KACA,OACA,MACA;AACA,gBAAc,cAAc,MAAM;EAClC,MAAM,SAAS,cAAc,aAAa,OAAO,KAAK;EACtD,MAAM,eACJ,MAAM,gBAAgB,cAAc,wBAAwB;AAO9D,SAAO,IAAI,cAAc;GACvB,UAAU,IAPM,SAAS;IACzB;IACA;IACA,WAAW,MAAM,aAAa,MAAM;IACrC,CAGgB;GACf,cAAc,MAAM,KAAK,MAAM,EAAE,KAAK;GACtC;GACD,CAAC;;CAGJ,aAAa,YACX,MAIwB;EACxB,MAAM,EAAE,KAAK,OAAO,GAAG,SAAS;AAChC,SAAO,kBACL,KACA,OACA,OAEE,KACA,OACA,SAEA,cAAc,gBAAgB,KAAK,OAAO;GACxC,QAAQ,KAAK;GACb,QAAQ,KAAK;GACb,gBAAgB,KAAK;GACtB,CAAC,GACH,SAAS,IAAI,cAAc,KAAK,CAClC"}
@@ -1 +1 @@
1
- {"version":3,"file":"outputParser.cjs","names":["AgentActionOutputParser","OutputParserException","FORMAT_INSTRUCTIONS"],"sources":["../../../src/agents/mrkl/outputParser.ts"],"sourcesContent":["import { OutputParserException } from \"@langchain/core/output_parsers\";\nimport { OutputParserArgs } from \"../agent.js\";\nimport { AgentActionOutputParser } from \"../types.js\";\n\nimport { FORMAT_INSTRUCTIONS } from \"./prompt.js\";\n\nexport const FINAL_ANSWER_ACTION = \"Final Answer:\";\n/**\n * A class that extends `AgentActionOutputParser` to provide a custom\n * implementation for parsing the output of a ZeroShotAgent action.\n */\nexport class ZeroShotAgentOutputParser extends AgentActionOutputParser {\n lc_namespace = [\"langchain\", \"agents\", \"mrkl\"];\n\n finishToolName: string;\n\n constructor(fields?: OutputParserArgs) {\n super(fields);\n this.finishToolName = fields?.finishToolName || FINAL_ANSWER_ACTION;\n }\n\n /**\n * Parses the text output of an agent action, extracting the tool, tool\n * input, and output.\n * @param text The text output of an agent action.\n * @returns An object containing the tool, tool input, and output extracted from the text, along with the original text as a log.\n */\n async parse(text: string) {\n if (text.includes(this.finishToolName)) {\n const parts = text.split(this.finishToolName);\n const output = parts[parts.length - 1].trim();\n return {\n returnValues: { output },\n log: text,\n };\n }\n\n const match = /Action:([\\s\\S]*?)(?:\\nAction Input:([\\s\\S]*?))?$/.exec(text);\n if (!match) {\n throw new OutputParserException(`Could not parse LLM output: ${text}`);\n }\n\n return {\n tool: match[1].trim(),\n toolInput: match[2]\n ? match[2].trim().replace(/^(\"+)(.*?)(\\1)$/, \"$2\")\n : \"\",\n log: text,\n };\n }\n\n /**\n * Returns the format instructions for parsing the output of an agent\n * action in the style of the ZeroShotAgent.\n * @returns The format instructions for parsing the output.\n */\n getFormatInstructions(): string {\n return FORMAT_INSTRUCTIONS;\n }\n}\n"],"mappings":";;;;;;;;AAWA,IAAa,4BAAb,cAA+CA,cAAAA,wBAAwB;CACrE,eAAe;EAAC;EAAa;EAAU;EAAO;CAE9C;CAEA,YAAY,QAA2B;AACrC,QAAM,OAAO;AACb,OAAK,iBAAiB,QAAQ,kBAAA;;;;;;;;CAShC,MAAM,MAAM,MAAc;AACxB,MAAI,KAAK,SAAS,KAAK,eAAe,EAAE;GACtC,MAAM,QAAQ,KAAK,MAAM,KAAK,eAAe;AAE7C,UAAO;IACL,cAAc,EAAE,QAFH,MAAM,MAAM,SAAS,GAAG,MAAM,EAEnB;IACxB,KAAK;IACN;;EAGH,MAAM,QAAQ,mDAAmD,KAAK,KAAK;AAC3E,MAAI,CAAC,MACH,OAAM,IAAIC,+BAAAA,sBAAsB,+BAA+B,OAAO;AAGxE,SAAO;GACL,MAAM,MAAM,GAAG,MAAM;GACrB,WAAW,MAAM,KACb,MAAM,GAAG,MAAM,CAAC,QAAQ,mBAAmB,KAAK,GAChD;GACJ,KAAK;GACN;;;;;;;CAQH,wBAAgC;AAC9B,SAAOC,eAAAA"}
1
+ {"version":3,"file":"outputParser.cjs","names":["AgentActionOutputParser","OutputParserException","FORMAT_INSTRUCTIONS"],"sources":["../../../src/agents/mrkl/outputParser.ts"],"sourcesContent":["import { OutputParserException } from \"@langchain/core/output_parsers\";\nimport { OutputParserArgs } from \"../agent.js\";\nimport { AgentActionOutputParser } from \"../types.js\";\n\nimport { FORMAT_INSTRUCTIONS } from \"./prompt.js\";\n\nexport const FINAL_ANSWER_ACTION = \"Final Answer:\";\n/**\n * A class that extends `AgentActionOutputParser` to provide a custom\n * implementation for parsing the output of a ZeroShotAgent action.\n */\nexport class ZeroShotAgentOutputParser extends AgentActionOutputParser {\n lc_namespace = [\"langchain\", \"agents\", \"mrkl\"];\n\n finishToolName: string;\n\n constructor(fields?: OutputParserArgs) {\n super(fields);\n this.finishToolName = fields?.finishToolName || FINAL_ANSWER_ACTION;\n }\n\n /**\n * Parses the text output of an agent action, extracting the tool, tool\n * input, and output.\n * @param text The text output of an agent action.\n * @returns An object containing the tool, tool input, and output extracted from the text, along with the original text as a log.\n */\n async parse(text: string) {\n if (text.includes(this.finishToolName)) {\n const parts = text.split(this.finishToolName);\n const output = parts[parts.length - 1].trim();\n return {\n returnValues: { output },\n log: text,\n };\n }\n\n const match = /Action:([\\s\\S]*?)(?:\\nAction Input:([\\s\\S]*?))?$/.exec(text);\n if (!match) {\n throw new OutputParserException(`Could not parse LLM output: ${text}`);\n }\n\n return {\n tool: match[1].trim(),\n toolInput: match[2]\n ? match[2].trim().replace(/^(\"+)(.*?)(\\1)$/, \"$2\")\n : \"\",\n log: text,\n };\n }\n\n /**\n * Returns the format instructions for parsing the output of an agent\n * action in the style of the ZeroShotAgent.\n * @returns The format instructions for parsing the output.\n */\n getFormatInstructions(): string {\n return FORMAT_INSTRUCTIONS;\n }\n}\n"],"mappings":";;;;;;;;AAWA,IAAa,4BAAb,cAA+CA,cAAAA,wBAAwB;CACrE,eAAe;EAAC;EAAa;EAAU;EAAO;CAE9C;CAEA,YAAY,QAA2B;AACrC,QAAM,OAAO;AACb,OAAK,iBAAiB,QAAQ,kBAAA;;;;;;;;CAShC,MAAM,MAAM,MAAc;AACxB,MAAI,KAAK,SAAS,KAAK,eAAe,EAAE;GACtC,MAAM,QAAQ,KAAK,MAAM,KAAK,eAAe;AAE7C,UAAO;IACL,cAAc,EAAE,QAFH,MAAM,MAAM,SAAS,GAAG,MAEf,EAAE;IACxB,KAAK;IACN;;EAGH,MAAM,QAAQ,mDAAmD,KAAK,KAAK;AAC3E,MAAI,CAAC,MACH,OAAM,IAAIC,+BAAAA,sBAAsB,+BAA+B,OAAO;AAGxE,SAAO;GACL,MAAM,MAAM,GAAG,MAAM;GACrB,WAAW,MAAM,KACb,MAAM,GAAG,MAAM,CAAC,QAAQ,mBAAmB,KAAK,GAChD;GACJ,KAAK;GACN;;;;;;;CAQH,wBAAgC;AAC9B,SAAOC,eAAAA"}
@@ -24,10 +24,10 @@ declare class ZeroShotAgentOutputParser extends AgentActionOutputParser {
24
24
  tool?: undefined;
25
25
  toolInput?: undefined;
26
26
  } | {
27
- returnValues?: undefined;
28
27
  tool: string;
29
28
  toolInput: string;
30
29
  log: string;
30
+ returnValues?: undefined;
31
31
  }>;
32
32
  /**
33
33
  * Returns the format instructions for parsing the output of an agent
@@ -1 +1 @@
1
- {"version":3,"file":"outputParser.js","names":[],"sources":["../../../src/agents/mrkl/outputParser.ts"],"sourcesContent":["import { OutputParserException } from \"@langchain/core/output_parsers\";\nimport { OutputParserArgs } from \"../agent.js\";\nimport { AgentActionOutputParser } from \"../types.js\";\n\nimport { FORMAT_INSTRUCTIONS } from \"./prompt.js\";\n\nexport const FINAL_ANSWER_ACTION = \"Final Answer:\";\n/**\n * A class that extends `AgentActionOutputParser` to provide a custom\n * implementation for parsing the output of a ZeroShotAgent action.\n */\nexport class ZeroShotAgentOutputParser extends AgentActionOutputParser {\n lc_namespace = [\"langchain\", \"agents\", \"mrkl\"];\n\n finishToolName: string;\n\n constructor(fields?: OutputParserArgs) {\n super(fields);\n this.finishToolName = fields?.finishToolName || FINAL_ANSWER_ACTION;\n }\n\n /**\n * Parses the text output of an agent action, extracting the tool, tool\n * input, and output.\n * @param text The text output of an agent action.\n * @returns An object containing the tool, tool input, and output extracted from the text, along with the original text as a log.\n */\n async parse(text: string) {\n if (text.includes(this.finishToolName)) {\n const parts = text.split(this.finishToolName);\n const output = parts[parts.length - 1].trim();\n return {\n returnValues: { output },\n log: text,\n };\n }\n\n const match = /Action:([\\s\\S]*?)(?:\\nAction Input:([\\s\\S]*?))?$/.exec(text);\n if (!match) {\n throw new OutputParserException(`Could not parse LLM output: ${text}`);\n }\n\n return {\n tool: match[1].trim(),\n toolInput: match[2]\n ? match[2].trim().replace(/^(\"+)(.*?)(\\1)$/, \"$2\")\n : \"\",\n log: text,\n };\n }\n\n /**\n * Returns the format instructions for parsing the output of an agent\n * action in the style of the ZeroShotAgent.\n * @returns The format instructions for parsing the output.\n */\n getFormatInstructions(): string {\n return FORMAT_INSTRUCTIONS;\n }\n}\n"],"mappings":";;;;;;;AAWA,IAAa,4BAAb,cAA+C,wBAAwB;CACrE,eAAe;EAAC;EAAa;EAAU;EAAO;CAE9C;CAEA,YAAY,QAA2B;AACrC,QAAM,OAAO;AACb,OAAK,iBAAiB,QAAQ,kBAAA;;;;;;;;CAShC,MAAM,MAAM,MAAc;AACxB,MAAI,KAAK,SAAS,KAAK,eAAe,EAAE;GACtC,MAAM,QAAQ,KAAK,MAAM,KAAK,eAAe;AAE7C,UAAO;IACL,cAAc,EAAE,QAFH,MAAM,MAAM,SAAS,GAAG,MAAM,EAEnB;IACxB,KAAK;IACN;;EAGH,MAAM,QAAQ,mDAAmD,KAAK,KAAK;AAC3E,MAAI,CAAC,MACH,OAAM,IAAI,sBAAsB,+BAA+B,OAAO;AAGxE,SAAO;GACL,MAAM,MAAM,GAAG,MAAM;GACrB,WAAW,MAAM,KACb,MAAM,GAAG,MAAM,CAAC,QAAQ,mBAAmB,KAAK,GAChD;GACJ,KAAK;GACN;;;;;;;CAQH,wBAAgC;AAC9B,SAAO"}
1
+ {"version":3,"file":"outputParser.js","names":[],"sources":["../../../src/agents/mrkl/outputParser.ts"],"sourcesContent":["import { OutputParserException } from \"@langchain/core/output_parsers\";\nimport { OutputParserArgs } from \"../agent.js\";\nimport { AgentActionOutputParser } from \"../types.js\";\n\nimport { FORMAT_INSTRUCTIONS } from \"./prompt.js\";\n\nexport const FINAL_ANSWER_ACTION = \"Final Answer:\";\n/**\n * A class that extends `AgentActionOutputParser` to provide a custom\n * implementation for parsing the output of a ZeroShotAgent action.\n */\nexport class ZeroShotAgentOutputParser extends AgentActionOutputParser {\n lc_namespace = [\"langchain\", \"agents\", \"mrkl\"];\n\n finishToolName: string;\n\n constructor(fields?: OutputParserArgs) {\n super(fields);\n this.finishToolName = fields?.finishToolName || FINAL_ANSWER_ACTION;\n }\n\n /**\n * Parses the text output of an agent action, extracting the tool, tool\n * input, and output.\n * @param text The text output of an agent action.\n * @returns An object containing the tool, tool input, and output extracted from the text, along with the original text as a log.\n */\n async parse(text: string) {\n if (text.includes(this.finishToolName)) {\n const parts = text.split(this.finishToolName);\n const output = parts[parts.length - 1].trim();\n return {\n returnValues: { output },\n log: text,\n };\n }\n\n const match = /Action:([\\s\\S]*?)(?:\\nAction Input:([\\s\\S]*?))?$/.exec(text);\n if (!match) {\n throw new OutputParserException(`Could not parse LLM output: ${text}`);\n }\n\n return {\n tool: match[1].trim(),\n toolInput: match[2]\n ? match[2].trim().replace(/^(\"+)(.*?)(\\1)$/, \"$2\")\n : \"\",\n log: text,\n };\n }\n\n /**\n * Returns the format instructions for parsing the output of an agent\n * action in the style of the ZeroShotAgent.\n * @returns The format instructions for parsing the output.\n */\n getFormatInstructions(): string {\n return FORMAT_INSTRUCTIONS;\n }\n}\n"],"mappings":";;;;;;;AAWA,IAAa,4BAAb,cAA+C,wBAAwB;CACrE,eAAe;EAAC;EAAa;EAAU;EAAO;CAE9C;CAEA,YAAY,QAA2B;AACrC,QAAM,OAAO;AACb,OAAK,iBAAiB,QAAQ,kBAAA;;;;;;;;CAShC,MAAM,MAAM,MAAc;AACxB,MAAI,KAAK,SAAS,KAAK,eAAe,EAAE;GACtC,MAAM,QAAQ,KAAK,MAAM,KAAK,eAAe;AAE7C,UAAO;IACL,cAAc,EAAE,QAFH,MAAM,MAAM,SAAS,GAAG,MAEf,EAAE;IACxB,KAAK;IACN;;EAGH,MAAM,QAAQ,mDAAmD,KAAK,KAAK;AAC3E,MAAI,CAAC,MACH,OAAM,IAAI,sBAAsB,+BAA+B,OAAO;AAGxE,SAAO;GACL,MAAM,MAAM,GAAG,MAAM;GACrB,WAAW,MAAM,KACb,MAAM,GAAG,MAAM,CAAC,QAAQ,mBAAmB,KAAK,GAChD;GACJ,KAAK;GACN;;;;;;;CAQH,wBAAgC;AAC9B,SAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["FunctionMessage","AIMessage","Agent","OpenAIFunctionsAgentOutputParser","PREFIX","ChatPromptTemplate","SystemMessagePromptTemplate","MessagesPlaceholder","HumanMessagePromptTemplate","LLMChain","AgentRunnableSequence","RunnablePassthrough","formatToOpenAIFunctionMessages"],"sources":["../../../src/agents/openai_functions/index.ts"],"sourcesContent":["import type {\n BaseLanguageModelInterface,\n BaseLanguageModelInput,\n BaseFunctionCallOptions,\n} from \"@langchain/core/language_models/base\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\nimport type { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { Runnable, RunnablePassthrough } from \"@langchain/core/runnables\";\nimport { ChatOpenAI, ChatOpenAICallOptions } from \"@langchain/openai\";\nimport type {\n AgentAction,\n AgentFinish,\n AgentStep,\n} from \"@langchain/core/agents\";\nimport { convertToOpenAIFunction } from \"@langchain/core/utils/function_calling\";\nimport {\n AIMessage,\n BaseMessage,\n FunctionMessage,\n SystemMessage,\n BaseMessageChunk,\n} from \"@langchain/core/messages\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n MessagesPlaceholder,\n SystemMessagePromptTemplate,\n BasePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport { CallbackManager } from \"@langchain/core/callbacks/manager\";\nimport { Agent, AgentArgs, AgentRunnableSequence } from \"../agent.js\";\nimport { AgentInput } from \"../types.js\";\nimport { PREFIX } from \"./prompt.js\";\nimport { LLMChain } from \"../../chains/llm_chain.js\";\nimport {\n FunctionsAgentAction,\n OpenAIFunctionsAgentOutputParser,\n} from \"../openai/output_parser.js\";\nimport { formatToOpenAIFunctionMessages } from \"../format_scratchpad/openai_functions.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\ntype CallOptionsIfAvailable<T> = T extends { CallOptions: infer CO } ? CO : any;\n\n/**\n * Checks if the given action is a FunctionsAgentAction.\n * @param action The action to check.\n * @returns True if the action is a FunctionsAgentAction, false otherwise.\n */\nfunction isFunctionsAgentAction(\n action: AgentAction | FunctionsAgentAction\n): action is FunctionsAgentAction {\n return (action as FunctionsAgentAction).messageLog !== undefined;\n}\n\nfunction _convertAgentStepToMessages(\n action: AgentAction | FunctionsAgentAction,\n observation: string\n) {\n if (isFunctionsAgentAction(action) && action.messageLog !== undefined) {\n return action.messageLog?.concat(\n new FunctionMessage(observation, action.tool)\n );\n } else {\n return [new AIMessage(action.log)];\n }\n}\n\nexport function _formatIntermediateSteps(\n intermediateSteps: AgentStep[]\n): BaseMessage[] {\n return intermediateSteps.flatMap(({ action, observation }) =>\n _convertAgentStepToMessages(action, observation)\n );\n}\n\n/**\n * Interface for the input data required to create an OpenAIAgent.\n */\nexport interface OpenAIAgentInput extends AgentInput {\n tools: StructuredToolInterface[];\n}\n\n/**\n * Interface for the arguments required to create a prompt for an\n * OpenAIAgent.\n */\nexport interface OpenAIAgentCreatePromptArgs {\n prefix?: string;\n systemMessage?: SystemMessage;\n}\n\n/**\n * Class representing an agent for the OpenAI chat model in LangChain. It\n * extends the Agent class and provides additional functionality specific\n * to the OpenAIAgent type.\n */\nexport class OpenAIAgent extends Agent {\n static lc_name() {\n return \"OpenAIAgent\";\n }\n\n lc_namespace = [\"langchain\", \"agents\", \"openai\"];\n\n _agentType() {\n return \"openai-functions\" as const;\n }\n\n observationPrefix() {\n return \"Observation: \";\n }\n\n llmPrefix() {\n return \"Thought:\";\n }\n\n _stop(): string[] {\n return [\"Observation:\"];\n }\n\n tools: StructuredToolInterface[];\n\n outputParser: OpenAIFunctionsAgentOutputParser =\n new OpenAIFunctionsAgentOutputParser();\n\n constructor(input: Omit<OpenAIAgentInput, \"outputParser\">) {\n super({ ...input, outputParser: undefined });\n this.tools = input.tools;\n }\n\n /**\n * Creates a prompt for the OpenAIAgent using the provided tools and\n * fields.\n * @param _tools The tools to be used in the prompt.\n * @param fields Optional fields for creating the prompt.\n * @returns A BasePromptTemplate object representing the created prompt.\n */\n static createPrompt(\n _tools: StructuredToolInterface[],\n fields?: OpenAIAgentCreatePromptArgs\n ): BasePromptTemplate {\n const { prefix = PREFIX } = fields || {};\n return ChatPromptTemplate.fromMessages([\n SystemMessagePromptTemplate.fromTemplate(prefix),\n new MessagesPlaceholder(\"chat_history\"),\n HumanMessagePromptTemplate.fromTemplate(\"{input}\"),\n new MessagesPlaceholder(\"agent_scratchpad\"),\n ]);\n }\n\n /**\n * Creates an OpenAIAgent from a BaseLanguageModel and a list of tools.\n * @param llm The BaseLanguageModel to use.\n * @param tools The tools to be used by the agent.\n * @param args Optional arguments for creating the agent.\n * @returns An instance of OpenAIAgent.\n */\n static fromLLMAndTools(\n llm: BaseLanguageModelInterface,\n tools: StructuredToolInterface[],\n args?: OpenAIAgentCreatePromptArgs & Pick<AgentArgs, \"callbacks\">\n ) {\n OpenAIAgent.validateTools(tools);\n if (llm._modelType() !== \"base_chat_model\" || llm._llmType() !== \"openai\") {\n throw new Error(\"OpenAIAgent requires an OpenAI chat model\");\n }\n const prompt = OpenAIAgent.createPrompt(tools, args);\n const chain = new LLMChain({\n prompt,\n llm,\n callbacks: args?.callbacks,\n });\n return new OpenAIAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n tools,\n });\n }\n\n /**\n * Constructs a scratch pad from a list of agent steps.\n * @param steps The steps to include in the scratch pad.\n * @returns A string or a list of BaseMessages representing the constructed scratch pad.\n */\n async constructScratchPad(\n steps: AgentStep[]\n ): Promise<string | BaseMessage[]> {\n return _formatIntermediateSteps(steps);\n }\n\n /**\n * Plans the next action or finish state of the agent based on the\n * provided steps, inputs, and optional callback manager.\n * @param steps The steps to consider in planning.\n * @param inputs The inputs to consider in planning.\n * @param callbackManager Optional CallbackManager to use in planning.\n * @returns A Promise that resolves to an AgentAction or AgentFinish object representing the planned action or finish state.\n */\n async plan(\n steps: Array<AgentStep>,\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n // Add scratchpad and stop to inputs\n const thoughts = await this.constructScratchPad(steps);\n const newInputs: ChainValues = {\n ...inputs,\n agent_scratchpad: thoughts,\n };\n if (this._stop().length !== 0) {\n newInputs.stop = this._stop();\n }\n\n // Split inputs between prompt and llm\n const llm = this.llmChain.llm as\n | ChatOpenAI\n | Runnable<\n BaseLanguageModelInput,\n BaseMessageChunk,\n ChatOpenAICallOptions\n >;\n\n const valuesForPrompt = { ...newInputs };\n const valuesForLLM: CallOptionsIfAvailable<typeof llm> = {\n functions: this.tools.map((tool) => convertToOpenAIFunction(tool)),\n };\n const callKeys =\n \"callKeys\" in this.llmChain.llm ? this.llmChain.llm.callKeys : [];\n for (const key of callKeys) {\n if (key in inputs) {\n valuesForLLM[key as keyof CallOptionsIfAvailable<typeof llm>] =\n inputs[key];\n delete valuesForPrompt[key];\n }\n }\n\n const promptValue =\n await this.llmChain.prompt.formatPromptValue(valuesForPrompt);\n\n const message = await (\n llm as Runnable<\n BaseLanguageModelInput,\n BaseMessageChunk,\n ChatOpenAICallOptions\n >\n ).invoke(promptValue.toChatMessages(), {\n ...valuesForLLM,\n callbacks: callbackManager,\n });\n return this.outputParser.parseAIMessage(message);\n }\n}\n\n/**\n * Params used by the createOpenAIFunctionsAgent function.\n */\nexport type CreateOpenAIFunctionsAgentParams = {\n /**\n * LLM to use as the agent. Should work with OpenAI function calling,\n * so must either be an OpenAI model that supports that or a wrapper of\n * a different model that adds in equivalent support.\n */\n llm: BaseChatModel<BaseFunctionCallOptions>;\n /** Tools this agent has access to. */\n tools: StructuredToolInterface[];\n /** The prompt to use, must have an input key for `agent_scratchpad`. */\n prompt: ChatPromptTemplate;\n /**\n * Whether to invoke the underlying model in streaming mode,\n * allowing streaming of intermediate steps. Defaults to true.\n */\n streamRunnable?: boolean;\n};\n\n/**\n * Create an agent that uses OpenAI-style function calling.\n * @param params Params required to create the agent. Includes an LLM, tools, and prompt.\n * @returns A runnable sequence representing an agent. It takes as input all the same input\n * variables as the prompt passed in does. It returns as output either an\n * AgentAction or AgentFinish.\n *\n * @example\n * ```typescript\n * import { AgentExecutor, createOpenAIFunctionsAgent } from \"langchain/agents\";\n * import { pull } from \"langchain/hub\";\n * import type { ChatPromptTemplate } from \"@langchain/core/prompts\";\n * import { AIMessage, HumanMessage } from \"@langchain/core/messages\";\n *\n * import { ChatOpenAI } from \"@langchain/openai\";\n *\n * // Define the tools the agent will have access to.\n * const tools = [...];\n *\n * // Get the prompt to use - you can modify this!\n * // If you want to see the prompt in full, you can at:\n * // https://smith.langchain.com/hub/hwchase17/openai-functions-agent\n * const prompt = await pull<ChatPromptTemplate>(\n * \"hwchase17/openai-functions-agent\"\n * );\n *\n * const llm = new ChatOpenAI({\n * model: \"gpt-4o-mini\",\n * temperature: 0,\n * });\n *\n * const agent = await createOpenAIFunctionsAgent({\n * llm,\n * tools,\n * prompt,\n * });\n *\n * const agentExecutor = new AgentExecutor({\n * agent,\n * tools,\n * });\n *\n * const result = await agentExecutor.invoke({\n * input: \"what is LangChain?\",\n * });\n *\n * // With chat history\n * const result2 = await agentExecutor.invoke({\n * input: \"what's my name?\",\n * chat_history: [\n * new HumanMessage(\"hi! my name is cob\"),\n * new AIMessage(\"Hello Cob! How can I assist you today?\"),\n * ],\n * });\n * ```\n */\nexport async function createOpenAIFunctionsAgent({\n llm,\n tools,\n prompt,\n streamRunnable,\n}: CreateOpenAIFunctionsAgentParams) {\n if (!prompt.inputVariables.includes(\"agent_scratchpad\")) {\n throw new Error(\n [\n `Prompt must have an input variable named \"agent_scratchpad\".`,\n `Found ${JSON.stringify(prompt.inputVariables)} instead.`,\n ].join(\"\\n\")\n );\n }\n const llmWithTools = llm.bindTools\n ? llm.bindTools(tools)\n : llm.withConfig({\n functions: tools.map((tool) => convertToOpenAIFunction(tool)),\n });\n const agent = AgentRunnableSequence.fromRunnables(\n [\n RunnablePassthrough.assign({\n agent_scratchpad: (input: { steps: AgentStep[] }) =>\n formatToOpenAIFunctionMessages(input.steps),\n }),\n prompt,\n llmWithTools,\n new OpenAIFunctionsAgentOutputParser(),\n ],\n {\n name: \"OpenAIFunctionsAgent\",\n streamRunnable,\n singleAction: true,\n }\n );\n return agent;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAiDA,SAAS,uBACP,QACgC;AAChC,QAAQ,OAAgC,eAAe,KAAA;;AAGzD,SAAS,4BACP,QACA,aACA;AACA,KAAI,uBAAuB,OAAO,IAAI,OAAO,eAAe,KAAA,EAC1D,QAAO,OAAO,YAAY,OACxB,IAAIA,yBAAAA,gBAAgB,aAAa,OAAO,KAAK,CAC9C;KAED,QAAO,CAAC,IAAIC,yBAAAA,UAAU,OAAO,IAAI,CAAC;;AAItC,SAAgB,yBACd,mBACe;AACf,QAAO,kBAAkB,SAAS,EAAE,QAAQ,kBAC1C,4BAA4B,QAAQ,YAAY,CACjD;;;;;;;AAwBH,IAAa,cAAb,MAAa,oBAAoBC,cAAAA,MAAM;CACrC,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAU;EAAS;CAEhD,aAAa;AACX,SAAO;;CAGT,oBAAoB;AAClB,SAAO;;CAGT,YAAY;AACV,SAAO;;CAGT,QAAkB;AAChB,SAAO,CAAC,eAAe;;CAGzB;CAEA,eACE,IAAIC,sBAAAA,kCAAkC;CAExC,YAAY,OAA+C;AACzD,QAAM;GAAE,GAAG;GAAO,cAAc,KAAA;GAAW,CAAC;AAC5C,OAAK,QAAQ,MAAM;;;;;;;;;CAUrB,OAAO,aACL,QACA,QACoB;EACpB,MAAM,EAAE,SAASC,eAAAA,WAAW,UAAU,EAAE;AACxC,SAAOC,wBAAAA,mBAAmB,aAAa;GACrCC,wBAAAA,4BAA4B,aAAa,OAAO;GAChD,IAAIC,wBAAAA,oBAAoB,eAAe;GACvCC,wBAAAA,2BAA2B,aAAa,UAAU;GAClD,IAAID,wBAAAA,oBAAoB,mBAAmB;GAC5C,CAAC;;;;;;;;;CAUJ,OAAO,gBACL,KACA,OACA,MACA;AACA,cAAY,cAAc,MAAM;AAChC,MAAI,IAAI,YAAY,KAAK,qBAAqB,IAAI,UAAU,KAAK,SAC/D,OAAM,IAAI,MAAM,4CAA4C;AAQ9D,SAAO,IAAI,YAAY;GACrB,UANY,IAAIE,kBAAAA,SAAS;IACzB,QAFa,YAAY,aAAa,OAAO,KAAK;IAGlD;IACA,WAAW,MAAM;IAClB,CAAC;GAGA,cAAc,MAAM,KAAK,MAAM,EAAE,KAAK;GACtC;GACD,CAAC;;;;;;;CAQJ,MAAM,oBACJ,OACiC;AACjC,SAAO,yBAAyB,MAAM;;;;;;;;;;CAWxC,MAAM,KACJ,OACA,QACA,iBACoC;EAEpC,MAAM,WAAW,MAAM,KAAK,oBAAoB,MAAM;EACtD,MAAM,YAAyB;GAC7B,GAAG;GACH,kBAAkB;GACnB;AACD,MAAI,KAAK,OAAO,CAAC,WAAW,EAC1B,WAAU,OAAO,KAAK,OAAO;EAI/B,MAAM,MAAM,KAAK,SAAS;EAQ1B,MAAM,kBAAkB,EAAE,GAAG,WAAW;EACxC,MAAM,eAAmD,EACvD,WAAW,KAAK,MAAM,KAAK,UAAA,GAAA,uCAAA,yBAAiC,KAAK,CAAC,EACnE;EACD,MAAM,WACJ,cAAc,KAAK,SAAS,MAAM,KAAK,SAAS,IAAI,WAAW,EAAE;AACnE,OAAK,MAAM,OAAO,SAChB,KAAI,OAAO,QAAQ;AACjB,gBAAa,OACX,OAAO;AACT,UAAO,gBAAgB;;EAI3B,MAAM,cACJ,MAAM,KAAK,SAAS,OAAO,kBAAkB,gBAAgB;EAE/D,MAAM,UAAU,MACd,IAKA,OAAO,YAAY,gBAAgB,EAAE;GACrC,GAAG;GACH,WAAW;GACZ,CAAC;AACF,SAAO,KAAK,aAAa,eAAe,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiFpD,eAAsB,2BAA2B,EAC/C,KACA,OACA,QACA,kBACmC;AACnC,KAAI,CAAC,OAAO,eAAe,SAAS,mBAAmB,CACrD,OAAM,IAAI,MACR,CACE,gEACA,SAAS,KAAK,UAAU,OAAO,eAAe,CAAC,WAChD,CAAC,KAAK,KAAK,CACb;CAEH,MAAM,eAAe,IAAI,YACrB,IAAI,UAAU,MAAM,GACpB,IAAI,WAAW,EACb,WAAW,MAAM,KAAK,UAAA,GAAA,uCAAA,yBAAiC,KAAK,CAAC,EAC9D,CAAC;AAiBN,QAhBcC,cAAAA,sBAAsB,cAClC;EACEC,0BAAAA,oBAAoB,OAAO,EACzB,mBAAmB,UACjBC,kDAAAA,+BAA+B,MAAM,MAAM,EAC9C,CAAC;EACF;EACA;EACA,IAAIT,sBAAAA,kCAAkC;EACvC,EACD;EACE,MAAM;EACN;EACA,cAAc;EACf,CACF"}
1
+ {"version":3,"file":"index.cjs","names":["FunctionMessage","AIMessage","Agent","OpenAIFunctionsAgentOutputParser","PREFIX","ChatPromptTemplate","SystemMessagePromptTemplate","MessagesPlaceholder","HumanMessagePromptTemplate","LLMChain","AgentRunnableSequence","RunnablePassthrough","formatToOpenAIFunctionMessages"],"sources":["../../../src/agents/openai_functions/index.ts"],"sourcesContent":["import type {\n BaseLanguageModelInterface,\n BaseLanguageModelInput,\n BaseFunctionCallOptions,\n} from \"@langchain/core/language_models/base\";\nimport type { StructuredToolInterface } from \"@langchain/core/tools\";\nimport type { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\nimport { Runnable, RunnablePassthrough } from \"@langchain/core/runnables\";\nimport { ChatOpenAI, ChatOpenAICallOptions } from \"@langchain/openai\";\nimport type {\n AgentAction,\n AgentFinish,\n AgentStep,\n} from \"@langchain/core/agents\";\nimport { convertToOpenAIFunction } from \"@langchain/core/utils/function_calling\";\nimport {\n AIMessage,\n BaseMessage,\n FunctionMessage,\n SystemMessage,\n BaseMessageChunk,\n} from \"@langchain/core/messages\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n ChatPromptTemplate,\n HumanMessagePromptTemplate,\n MessagesPlaceholder,\n SystemMessagePromptTemplate,\n BasePromptTemplate,\n} from \"@langchain/core/prompts\";\nimport { CallbackManager } from \"@langchain/core/callbacks/manager\";\nimport { Agent, AgentArgs, AgentRunnableSequence } from \"../agent.js\";\nimport { AgentInput } from \"../types.js\";\nimport { PREFIX } from \"./prompt.js\";\nimport { LLMChain } from \"../../chains/llm_chain.js\";\nimport {\n FunctionsAgentAction,\n OpenAIFunctionsAgentOutputParser,\n} from \"../openai/output_parser.js\";\nimport { formatToOpenAIFunctionMessages } from \"../format_scratchpad/openai_functions.js\";\n\n// oxlint-disable-next-line @typescript-eslint/no-explicit-any\ntype CallOptionsIfAvailable<T> = T extends { CallOptions: infer CO } ? CO : any;\n\n/**\n * Checks if the given action is a FunctionsAgentAction.\n * @param action The action to check.\n * @returns True if the action is a FunctionsAgentAction, false otherwise.\n */\nfunction isFunctionsAgentAction(\n action: AgentAction | FunctionsAgentAction\n): action is FunctionsAgentAction {\n return (action as FunctionsAgentAction).messageLog !== undefined;\n}\n\nfunction _convertAgentStepToMessages(\n action: AgentAction | FunctionsAgentAction,\n observation: string\n) {\n if (isFunctionsAgentAction(action) && action.messageLog !== undefined) {\n return action.messageLog?.concat(\n new FunctionMessage(observation, action.tool)\n );\n } else {\n return [new AIMessage(action.log)];\n }\n}\n\nexport function _formatIntermediateSteps(\n intermediateSteps: AgentStep[]\n): BaseMessage[] {\n return intermediateSteps.flatMap(({ action, observation }) =>\n _convertAgentStepToMessages(action, observation)\n );\n}\n\n/**\n * Interface for the input data required to create an OpenAIAgent.\n */\nexport interface OpenAIAgentInput extends AgentInput {\n tools: StructuredToolInterface[];\n}\n\n/**\n * Interface for the arguments required to create a prompt for an\n * OpenAIAgent.\n */\nexport interface OpenAIAgentCreatePromptArgs {\n prefix?: string;\n systemMessage?: SystemMessage;\n}\n\n/**\n * Class representing an agent for the OpenAI chat model in LangChain. It\n * extends the Agent class and provides additional functionality specific\n * to the OpenAIAgent type.\n */\nexport class OpenAIAgent extends Agent {\n static lc_name() {\n return \"OpenAIAgent\";\n }\n\n lc_namespace = [\"langchain\", \"agents\", \"openai\"];\n\n _agentType() {\n return \"openai-functions\" as const;\n }\n\n observationPrefix() {\n return \"Observation: \";\n }\n\n llmPrefix() {\n return \"Thought:\";\n }\n\n _stop(): string[] {\n return [\"Observation:\"];\n }\n\n tools: StructuredToolInterface[];\n\n outputParser: OpenAIFunctionsAgentOutputParser =\n new OpenAIFunctionsAgentOutputParser();\n\n constructor(input: Omit<OpenAIAgentInput, \"outputParser\">) {\n super({ ...input, outputParser: undefined });\n this.tools = input.tools;\n }\n\n /**\n * Creates a prompt for the OpenAIAgent using the provided tools and\n * fields.\n * @param _tools The tools to be used in the prompt.\n * @param fields Optional fields for creating the prompt.\n * @returns A BasePromptTemplate object representing the created prompt.\n */\n static createPrompt(\n _tools: StructuredToolInterface[],\n fields?: OpenAIAgentCreatePromptArgs\n ): BasePromptTemplate {\n const { prefix = PREFIX } = fields || {};\n return ChatPromptTemplate.fromMessages([\n SystemMessagePromptTemplate.fromTemplate(prefix),\n new MessagesPlaceholder(\"chat_history\"),\n HumanMessagePromptTemplate.fromTemplate(\"{input}\"),\n new MessagesPlaceholder(\"agent_scratchpad\"),\n ]);\n }\n\n /**\n * Creates an OpenAIAgent from a BaseLanguageModel and a list of tools.\n * @param llm The BaseLanguageModel to use.\n * @param tools The tools to be used by the agent.\n * @param args Optional arguments for creating the agent.\n * @returns An instance of OpenAIAgent.\n */\n static fromLLMAndTools(\n llm: BaseLanguageModelInterface,\n tools: StructuredToolInterface[],\n args?: OpenAIAgentCreatePromptArgs & Pick<AgentArgs, \"callbacks\">\n ) {\n OpenAIAgent.validateTools(tools);\n if (llm._modelType() !== \"base_chat_model\" || llm._llmType() !== \"openai\") {\n throw new Error(\"OpenAIAgent requires an OpenAI chat model\");\n }\n const prompt = OpenAIAgent.createPrompt(tools, args);\n const chain = new LLMChain({\n prompt,\n llm,\n callbacks: args?.callbacks,\n });\n return new OpenAIAgent({\n llmChain: chain,\n allowedTools: tools.map((t) => t.name),\n tools,\n });\n }\n\n /**\n * Constructs a scratch pad from a list of agent steps.\n * @param steps The steps to include in the scratch pad.\n * @returns A string or a list of BaseMessages representing the constructed scratch pad.\n */\n async constructScratchPad(\n steps: AgentStep[]\n ): Promise<string | BaseMessage[]> {\n return _formatIntermediateSteps(steps);\n }\n\n /**\n * Plans the next action or finish state of the agent based on the\n * provided steps, inputs, and optional callback manager.\n * @param steps The steps to consider in planning.\n * @param inputs The inputs to consider in planning.\n * @param callbackManager Optional CallbackManager to use in planning.\n * @returns A Promise that resolves to an AgentAction or AgentFinish object representing the planned action or finish state.\n */\n async plan(\n steps: Array<AgentStep>,\n inputs: ChainValues,\n callbackManager?: CallbackManager\n ): Promise<AgentAction | AgentFinish> {\n // Add scratchpad and stop to inputs\n const thoughts = await this.constructScratchPad(steps);\n const newInputs: ChainValues = {\n ...inputs,\n agent_scratchpad: thoughts,\n };\n if (this._stop().length !== 0) {\n newInputs.stop = this._stop();\n }\n\n // Split inputs between prompt and llm\n const llm = this.llmChain.llm as\n | ChatOpenAI\n | Runnable<\n BaseLanguageModelInput,\n BaseMessageChunk,\n ChatOpenAICallOptions\n >;\n\n const valuesForPrompt = { ...newInputs };\n const valuesForLLM: CallOptionsIfAvailable<typeof llm> = {\n functions: this.tools.map((tool) => convertToOpenAIFunction(tool)),\n };\n const callKeys =\n \"callKeys\" in this.llmChain.llm ? this.llmChain.llm.callKeys : [];\n for (const key of callKeys) {\n if (key in inputs) {\n valuesForLLM[key as keyof CallOptionsIfAvailable<typeof llm>] =\n inputs[key];\n delete valuesForPrompt[key];\n }\n }\n\n const promptValue =\n await this.llmChain.prompt.formatPromptValue(valuesForPrompt);\n\n const message = await (\n llm as Runnable<\n BaseLanguageModelInput,\n BaseMessageChunk,\n ChatOpenAICallOptions\n >\n ).invoke(promptValue.toChatMessages(), {\n ...valuesForLLM,\n callbacks: callbackManager,\n });\n return this.outputParser.parseAIMessage(message);\n }\n}\n\n/**\n * Params used by the createOpenAIFunctionsAgent function.\n */\nexport type CreateOpenAIFunctionsAgentParams = {\n /**\n * LLM to use as the agent. Should work with OpenAI function calling,\n * so must either be an OpenAI model that supports that or a wrapper of\n * a different model that adds in equivalent support.\n */\n llm: BaseChatModel<BaseFunctionCallOptions>;\n /** Tools this agent has access to. */\n tools: StructuredToolInterface[];\n /** The prompt to use, must have an input key for `agent_scratchpad`. */\n prompt: ChatPromptTemplate;\n /**\n * Whether to invoke the underlying model in streaming mode,\n * allowing streaming of intermediate steps. Defaults to true.\n */\n streamRunnable?: boolean;\n};\n\n/**\n * Create an agent that uses OpenAI-style function calling.\n * @param params Params required to create the agent. Includes an LLM, tools, and prompt.\n * @returns A runnable sequence representing an agent. It takes as input all the same input\n * variables as the prompt passed in does. It returns as output either an\n * AgentAction or AgentFinish.\n *\n * @example\n * ```typescript\n * import { AgentExecutor, createOpenAIFunctionsAgent } from \"langchain/agents\";\n * import { pull } from \"langchain/hub\";\n * import type { ChatPromptTemplate } from \"@langchain/core/prompts\";\n * import { AIMessage, HumanMessage } from \"@langchain/core/messages\";\n *\n * import { ChatOpenAI } from \"@langchain/openai\";\n *\n * // Define the tools the agent will have access to.\n * const tools = [...];\n *\n * // Get the prompt to use - you can modify this!\n * // If you want to see the prompt in full, you can at:\n * // https://smith.langchain.com/hub/hwchase17/openai-functions-agent\n * const prompt = await pull<ChatPromptTemplate>(\n * \"hwchase17/openai-functions-agent\"\n * );\n *\n * const llm = new ChatOpenAI({\n * model: \"gpt-4o-mini\",\n * temperature: 0,\n * });\n *\n * const agent = await createOpenAIFunctionsAgent({\n * llm,\n * tools,\n * prompt,\n * });\n *\n * const agentExecutor = new AgentExecutor({\n * agent,\n * tools,\n * });\n *\n * const result = await agentExecutor.invoke({\n * input: \"what is LangChain?\",\n * });\n *\n * // With chat history\n * const result2 = await agentExecutor.invoke({\n * input: \"what's my name?\",\n * chat_history: [\n * new HumanMessage(\"hi! my name is cob\"),\n * new AIMessage(\"Hello Cob! How can I assist you today?\"),\n * ],\n * });\n * ```\n */\nexport async function createOpenAIFunctionsAgent({\n llm,\n tools,\n prompt,\n streamRunnable,\n}: CreateOpenAIFunctionsAgentParams) {\n if (!prompt.inputVariables.includes(\"agent_scratchpad\")) {\n throw new Error(\n [\n `Prompt must have an input variable named \"agent_scratchpad\".`,\n `Found ${JSON.stringify(prompt.inputVariables)} instead.`,\n ].join(\"\\n\")\n );\n }\n const llmWithTools = llm.bindTools\n ? llm.bindTools(tools)\n : llm.withConfig({\n functions: tools.map((tool) => convertToOpenAIFunction(tool)),\n });\n const agent = AgentRunnableSequence.fromRunnables(\n [\n RunnablePassthrough.assign({\n agent_scratchpad: (input: { steps: AgentStep[] }) =>\n formatToOpenAIFunctionMessages(input.steps),\n }),\n prompt,\n llmWithTools,\n new OpenAIFunctionsAgentOutputParser(),\n ],\n {\n name: \"OpenAIFunctionsAgent\",\n streamRunnable,\n singleAction: true,\n }\n );\n return agent;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAiDA,SAAS,uBACP,QACgC;AAChC,QAAQ,OAAgC,eAAe,KAAA;;AAGzD,SAAS,4BACP,QACA,aACA;AACA,KAAI,uBAAuB,OAAO,IAAI,OAAO,eAAe,KAAA,EAC1D,QAAO,OAAO,YAAY,OACxB,IAAIA,yBAAAA,gBAAgB,aAAa,OAAO,KAAK,CAC9C;KAED,QAAO,CAAC,IAAIC,yBAAAA,UAAU,OAAO,IAAI,CAAC;;AAItC,SAAgB,yBACd,mBACe;AACf,QAAO,kBAAkB,SAAS,EAAE,QAAQ,kBAC1C,4BAA4B,QAAQ,YAAY,CACjD;;;;;;;AAwBH,IAAa,cAAb,MAAa,oBAAoBC,cAAAA,MAAM;CACrC,OAAO,UAAU;AACf,SAAO;;CAGT,eAAe;EAAC;EAAa;EAAU;EAAS;CAEhD,aAAa;AACX,SAAO;;CAGT,oBAAoB;AAClB,SAAO;;CAGT,YAAY;AACV,SAAO;;CAGT,QAAkB;AAChB,SAAO,CAAC,eAAe;;CAGzB;CAEA,eACE,IAAIC,sBAAAA,kCAAkC;CAExC,YAAY,OAA+C;AACzD,QAAM;GAAE,GAAG;GAAO,cAAc,KAAA;GAAW,CAAC;AAC5C,OAAK,QAAQ,MAAM;;;;;;;;;CAUrB,OAAO,aACL,QACA,QACoB;EACpB,MAAM,EAAE,SAASC,eAAAA,WAAW,UAAU,EAAE;AACxC,SAAOC,wBAAAA,mBAAmB,aAAa;GACrCC,wBAAAA,4BAA4B,aAAa,OAAO;GAChD,IAAIC,wBAAAA,oBAAoB,eAAe;GACvCC,wBAAAA,2BAA2B,aAAa,UAAU;GAClD,IAAID,wBAAAA,oBAAoB,mBAAmB;GAC5C,CAAC;;;;;;;;;CAUJ,OAAO,gBACL,KACA,OACA,MACA;AACA,cAAY,cAAc,MAAM;AAChC,MAAI,IAAI,YAAY,KAAK,qBAAqB,IAAI,UAAU,KAAK,SAC/D,OAAM,IAAI,MAAM,4CAA4C;AAQ9D,SAAO,IAAI,YAAY;GACrB,UAAU,IANME,kBAAAA,SAAS;IACzB,QAFa,YAAY,aAAa,OAAO,KAEvC;IACN;IACA,WAAW,MAAM;IAClB,CAEgB;GACf,cAAc,MAAM,KAAK,MAAM,EAAE,KAAK;GACtC;GACD,CAAC;;;;;;;CAQJ,MAAM,oBACJ,OACiC;AACjC,SAAO,yBAAyB,MAAM;;;;;;;;;;CAWxC,MAAM,KACJ,OACA,QACA,iBACoC;EAEpC,MAAM,WAAW,MAAM,KAAK,oBAAoB,MAAM;EACtD,MAAM,YAAyB;GAC7B,GAAG;GACH,kBAAkB;GACnB;AACD,MAAI,KAAK,OAAO,CAAC,WAAW,EAC1B,WAAU,OAAO,KAAK,OAAO;EAI/B,MAAM,MAAM,KAAK,SAAS;EAQ1B,MAAM,kBAAkB,EAAE,GAAG,WAAW;EACxC,MAAM,eAAmD,EACvD,WAAW,KAAK,MAAM,KAAK,UAAA,GAAA,uCAAA,yBAAiC,KAAK,CAAC,EACnE;EACD,MAAM,WACJ,cAAc,KAAK,SAAS,MAAM,KAAK,SAAS,IAAI,WAAW,EAAE;AACnE,OAAK,MAAM,OAAO,SAChB,KAAI,OAAO,QAAQ;AACjB,gBAAa,OACX,OAAO;AACT,UAAO,gBAAgB;;EAI3B,MAAM,cACJ,MAAM,KAAK,SAAS,OAAO,kBAAkB,gBAAgB;EAE/D,MAAM,UAAU,MACd,IAKA,OAAO,YAAY,gBAAgB,EAAE;GACrC,GAAG;GACH,WAAW;GACZ,CAAC;AACF,SAAO,KAAK,aAAa,eAAe,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiFpD,eAAsB,2BAA2B,EAC/C,KACA,OACA,QACA,kBACmC;AACnC,KAAI,CAAC,OAAO,eAAe,SAAS,mBAAmB,CACrD,OAAM,IAAI,MACR,CACE,gEACA,SAAS,KAAK,UAAU,OAAO,eAAe,CAAC,WAChD,CAAC,KAAK,KAAK,CACb;CAEH,MAAM,eAAe,IAAI,YACrB,IAAI,UAAU,MAAM,GACpB,IAAI,WAAW,EACb,WAAW,MAAM,KAAK,UAAA,GAAA,uCAAA,yBAAiC,KAAK,CAAC,EAC9D,CAAC;AAiBN,QAhBcC,cAAAA,sBAAsB,cAClC;EACEC,0BAAAA,oBAAoB,OAAO,EACzB,mBAAmB,UACjBC,kDAAAA,+BAA+B,MAAM,MAAM,EAC9C,CAAC;EACF;EACA;EACA,IAAIT,sBAAAA,kCAAkC;EACvC,EACD;EACE,MAAM;EACN;EACA,cAAc;EACf,CAES"}