@langchain/classic 1.0.45 → 1.0.47-rc.0

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 (198) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/_virtual/_rolldown/runtime.cjs +1 -1
  3. package/dist/agents/agent.cjs.map +1 -1
  4. package/dist/agents/chat/index.cjs +2 -1
  5. package/dist/agents/chat/index.cjs.map +1 -1
  6. package/dist/agents/chat/index.js +2 -1
  7. package/dist/agents/chat/index.js.map +1 -1
  8. package/dist/agents/chat_convo/index.cjs +7 -5
  9. package/dist/agents/chat_convo/index.cjs.map +1 -1
  10. package/dist/agents/chat_convo/index.js +7 -5
  11. package/dist/agents/chat_convo/index.js.map +1 -1
  12. package/dist/agents/chat_convo/outputParser.cjs.map +1 -1
  13. package/dist/agents/executor.cjs +22 -19
  14. package/dist/agents/executor.cjs.map +1 -1
  15. package/dist/agents/executor.js +22 -19
  16. package/dist/agents/executor.js.map +1 -1
  17. package/dist/agents/format_scratchpad/log_to_message.cjs.map +1 -1
  18. package/dist/agents/format_scratchpad/openai_functions.cjs.map +1 -1
  19. package/dist/agents/mrkl/index.cjs +9 -6
  20. package/dist/agents/mrkl/index.cjs.map +1 -1
  21. package/dist/agents/mrkl/index.js +9 -6
  22. package/dist/agents/mrkl/index.js.map +1 -1
  23. package/dist/agents/mrkl/outputParser.d.ts +1 -1
  24. package/dist/agents/openai_functions/index.cjs +2 -1
  25. package/dist/agents/openai_functions/index.cjs.map +1 -1
  26. package/dist/agents/openai_functions/index.js +2 -1
  27. package/dist/agents/openai_functions/index.js.map +1 -1
  28. package/dist/agents/openai_functions/output_parser.cjs.map +1 -1
  29. package/dist/agents/openai_tools/index.cjs.map +1 -1
  30. package/dist/agents/openai_tools/output_parser.cjs.map +1 -1
  31. package/dist/agents/react/output_parser.cjs.map +1 -1
  32. package/dist/agents/structured_chat/index.cjs +6 -5
  33. package/dist/agents/structured_chat/index.cjs.map +1 -1
  34. package/dist/agents/structured_chat/index.js +6 -5
  35. package/dist/agents/structured_chat/index.js.map +1 -1
  36. package/dist/agents/structured_chat/outputParser.cjs.map +1 -1
  37. package/dist/agents/tool_calling/output_parser.cjs.map +1 -1
  38. package/dist/agents/toolkits/conversational_retrieval/token_buffer_memory.cjs.map +1 -1
  39. package/dist/agents/toolkits/conversational_retrieval/tool.cjs +2 -1
  40. package/dist/agents/toolkits/conversational_retrieval/tool.cjs.map +1 -1
  41. package/dist/agents/toolkits/conversational_retrieval/tool.js +2 -1
  42. package/dist/agents/toolkits/conversational_retrieval/tool.js.map +1 -1
  43. package/dist/agents/toolkits/json/json.cjs +10 -8
  44. package/dist/agents/toolkits/json/json.cjs.map +1 -1
  45. package/dist/agents/toolkits/json/json.js +10 -8
  46. package/dist/agents/toolkits/json/json.js.map +1 -1
  47. package/dist/agents/toolkits/openapi/openapi.cjs +12 -9
  48. package/dist/agents/toolkits/openapi/openapi.cjs.map +1 -1
  49. package/dist/agents/toolkits/openapi/openapi.js +12 -9
  50. package/dist/agents/toolkits/openapi/openapi.js.map +1 -1
  51. package/dist/agents/toolkits/sql/sql.cjs +10 -8
  52. package/dist/agents/toolkits/sql/sql.cjs.map +1 -1
  53. package/dist/agents/toolkits/sql/sql.js +10 -8
  54. package/dist/agents/toolkits/sql/sql.js.map +1 -1
  55. package/dist/agents/toolkits/vectorstore/vectorstore.cjs +20 -16
  56. package/dist/agents/toolkits/vectorstore/vectorstore.cjs.map +1 -1
  57. package/dist/agents/toolkits/vectorstore/vectorstore.js +20 -16
  58. package/dist/agents/toolkits/vectorstore/vectorstore.js.map +1 -1
  59. package/dist/agents/xml/index.cjs +2 -1
  60. package/dist/agents/xml/index.cjs.map +1 -1
  61. package/dist/agents/xml/index.js +2 -1
  62. package/dist/agents/xml/index.js.map +1 -1
  63. package/dist/chains/base.cjs.map +1 -1
  64. package/dist/chains/chat_vector_db_chain.cjs +2 -1
  65. package/dist/chains/chat_vector_db_chain.cjs.map +1 -1
  66. package/dist/chains/chat_vector_db_chain.js +2 -1
  67. package/dist/chains/chat_vector_db_chain.js.map +1 -1
  68. package/dist/chains/conversational_retrieval_chain.cjs +2 -1
  69. package/dist/chains/conversational_retrieval_chain.cjs.map +1 -1
  70. package/dist/chains/conversational_retrieval_chain.js +2 -1
  71. package/dist/chains/conversational_retrieval_chain.js.map +1 -1
  72. package/dist/chains/openai_functions/base.cjs.map +1 -1
  73. package/dist/chains/openai_functions/extraction.cjs.map +1 -1
  74. package/dist/chains/openai_functions/openapi.cjs +9 -8
  75. package/dist/chains/openai_functions/openapi.cjs.map +1 -1
  76. package/dist/chains/openai_functions/openapi.js +9 -8
  77. package/dist/chains/openai_functions/openapi.js.map +1 -1
  78. package/dist/chains/openai_functions/tagging.cjs.map +1 -1
  79. package/dist/chains/openai_moderation.cjs.map +1 -1
  80. package/dist/chains/query_constructor/index.cjs +15 -9
  81. package/dist/chains/query_constructor/index.cjs.map +1 -1
  82. package/dist/chains/query_constructor/index.js +15 -9
  83. package/dist/chains/query_constructor/index.js.map +1 -1
  84. package/dist/chains/query_constructor/parser.cjs +12 -6
  85. package/dist/chains/query_constructor/parser.cjs.map +1 -1
  86. package/dist/chains/query_constructor/parser.js +12 -6
  87. package/dist/chains/query_constructor/parser.js.map +1 -1
  88. package/dist/chains/question_answering/load.cjs +35 -29
  89. package/dist/chains/question_answering/load.cjs.map +1 -1
  90. package/dist/chains/question_answering/load.js +35 -29
  91. package/dist/chains/question_answering/load.js.map +1 -1
  92. package/dist/chains/router/multi_prompt.cjs +5 -3
  93. package/dist/chains/router/multi_prompt.cjs.map +1 -1
  94. package/dist/chains/router/multi_prompt.js +5 -3
  95. package/dist/chains/router/multi_prompt.js.map +1 -1
  96. package/dist/chains/router/multi_retrieval_qa.cjs +18 -11
  97. package/dist/chains/router/multi_retrieval_qa.cjs.map +1 -1
  98. package/dist/chains/router/multi_retrieval_qa.js +18 -11
  99. package/dist/chains/router/multi_retrieval_qa.js.map +1 -1
  100. package/dist/chains/sequential_chain.cjs +6 -5
  101. package/dist/chains/sequential_chain.cjs.map +1 -1
  102. package/dist/chains/sequential_chain.js +6 -5
  103. package/dist/chains/sequential_chain.js.map +1 -1
  104. package/dist/chains/sql_db/sql_db_chain.cjs +2 -1
  105. package/dist/chains/sql_db/sql_db_chain.cjs.map +1 -1
  106. package/dist/chains/sql_db/sql_db_chain.js +2 -1
  107. package/dist/chains/sql_db/sql_db_chain.js.map +1 -1
  108. package/dist/chains/summarization/load.cjs +35 -29
  109. package/dist/chains/summarization/load.cjs.map +1 -1
  110. package/dist/chains/summarization/load.js +35 -29
  111. package/dist/chains/summarization/load.js.map +1 -1
  112. package/dist/chat_models/universal.cjs +12 -10
  113. package/dist/chat_models/universal.cjs.map +1 -1
  114. package/dist/chat_models/universal.js +12 -10
  115. package/dist/chat_models/universal.js.map +1 -1
  116. package/dist/document_loaders/fs/buffer.cjs.map +1 -1
  117. package/dist/document_loaders/fs/directory.cjs.map +1 -1
  118. package/dist/document_loaders/fs/multi_file.cjs.map +1 -1
  119. package/dist/document_loaders/fs/text.cjs.map +1 -1
  120. package/dist/document_transformers/openai_functions.cjs.map +1 -1
  121. package/dist/embeddings/cache_backed.cjs.map +1 -1
  122. package/dist/evaluation/comparison/pairwise.cjs +4 -2
  123. package/dist/evaluation/comparison/pairwise.cjs.map +1 -1
  124. package/dist/evaluation/comparison/pairwise.js +4 -2
  125. package/dist/evaluation/comparison/pairwise.js.map +1 -1
  126. package/dist/evaluation/criteria/criteria.cjs +4 -2
  127. package/dist/evaluation/criteria/criteria.cjs.map +1 -1
  128. package/dist/evaluation/criteria/criteria.js +4 -2
  129. package/dist/evaluation/criteria/criteria.js.map +1 -1
  130. package/dist/experimental/autogpt/agent.cjs +8 -7
  131. package/dist/experimental/autogpt/agent.cjs.map +1 -1
  132. package/dist/experimental/autogpt/agent.js +8 -7
  133. package/dist/experimental/autogpt/agent.js.map +1 -1
  134. package/dist/experimental/autogpt/prompt.cjs +2 -1
  135. package/dist/experimental/autogpt/prompt.cjs.map +1 -1
  136. package/dist/experimental/autogpt/prompt.js +2 -1
  137. package/dist/experimental/autogpt/prompt.js.map +1 -1
  138. package/dist/experimental/autogpt/prompt_generator.cjs.map +1 -1
  139. package/dist/experimental/chains/violation_of_expectations/violation_of_expectations_chain.cjs.map +1 -1
  140. package/dist/experimental/openai_assistant/index.cjs.map +1 -1
  141. package/dist/experimental/plan_and_execute/agent_executor.cjs +3 -2
  142. package/dist/experimental/plan_and_execute/agent_executor.cjs.map +1 -1
  143. package/dist/experimental/plan_and_execute/agent_executor.js +3 -2
  144. package/dist/experimental/plan_and_execute/agent_executor.js.map +1 -1
  145. package/dist/hub/base.cjs.map +1 -1
  146. package/dist/hub/base.js.map +1 -1
  147. package/dist/hub/index.cjs +2 -1
  148. package/dist/hub/index.cjs.map +1 -1
  149. package/dist/hub/index.js +2 -1
  150. package/dist/hub/index.js.map +1 -1
  151. package/dist/hub/node.cjs +4 -2
  152. package/dist/hub/node.cjs.map +1 -1
  153. package/dist/hub/node.js +4 -2
  154. package/dist/hub/node.js.map +1 -1
  155. package/dist/load/index.cjs.map +1 -1
  156. package/dist/memory/buffer_memory.cjs.map +1 -1
  157. package/dist/memory/buffer_token_memory.cjs.map +1 -1
  158. package/dist/memory/buffer_window_memory.cjs.map +1 -1
  159. package/dist/memory/chat_memory.cjs.map +1 -1
  160. package/dist/memory/entity_memory.cjs +2 -1
  161. package/dist/memory/entity_memory.cjs.map +1 -1
  162. package/dist/memory/entity_memory.js +2 -1
  163. package/dist/memory/entity_memory.js.map +1 -1
  164. package/dist/memory/summary.cjs.map +1 -1
  165. package/dist/memory/summary_buffer.cjs.map +1 -1
  166. package/dist/memory/vector_store.cjs.map +1 -1
  167. package/dist/output_parsers/fix.cjs +2 -1
  168. package/dist/output_parsers/fix.cjs.map +1 -1
  169. package/dist/output_parsers/fix.js +2 -1
  170. package/dist/output_parsers/fix.js.map +1 -1
  171. package/dist/output_parsers/openai_functions.cjs.map +1 -1
  172. package/dist/output_parsers/structured.cjs.map +1 -1
  173. package/dist/retrievers/document_compressors/chain_extract.cjs +2 -1
  174. package/dist/retrievers/document_compressors/chain_extract.cjs.map +1 -1
  175. package/dist/retrievers/document_compressors/chain_extract.js +2 -1
  176. package/dist/retrievers/document_compressors/chain_extract.js.map +1 -1
  177. package/dist/retrievers/matryoshka_retriever.cjs.map +1 -1
  178. package/dist/retrievers/multi_query.cjs +2 -1
  179. package/dist/retrievers/multi_query.cjs.map +1 -1
  180. package/dist/retrievers/multi_query.js +2 -1
  181. package/dist/retrievers/multi_query.js.map +1 -1
  182. package/dist/smith/runner_utils.cjs.map +1 -1
  183. package/dist/stores/file/node.cjs.map +1 -1
  184. package/dist/tools/render.cjs.map +1 -1
  185. package/dist/tools/retriever.cjs +2 -1
  186. package/dist/tools/retriever.cjs.map +1 -1
  187. package/dist/tools/retriever.js +2 -1
  188. package/dist/tools/retriever.js.map +1 -1
  189. package/dist/tools/webbrowser.cjs +2 -1
  190. package/dist/tools/webbrowser.cjs.map +1 -1
  191. package/dist/tools/webbrowser.js +2 -1
  192. package/dist/tools/webbrowser.js.map +1 -1
  193. package/dist/util/hub.cjs.map +1 -1
  194. package/dist/vectorstores/memory.cjs +2 -1
  195. package/dist/vectorstores/memory.cjs.map +1 -1
  196. package/dist/vectorstores/memory.js +2 -1
  197. package/dist/vectorstores/memory.js.map +1 -1
  198. package/package.json +45 -45
@@ -1 +1 @@
1
- {"version":3,"file":"executor.cjs","names":["Serializable","CallbackManager","Tool","BaseChain","Runnable","AgentRunnableSequence","RunnableSingleActionAgent","RunnableMultiActionAgent","isRunnableAgent","OutputParserException","ToolInputParsingException"],"sources":["../../src/agents/executor.ts"],"sourcesContent":["import {\n type StructuredToolInterface,\n type ToolInterface,\n ToolInputParsingException,\n Tool,\n} from \"@langchain/core/tools\";\nimport {\n Runnable,\n type RunnableConfig,\n patchConfig,\n} from \"@langchain/core/runnables\";\nimport { AgentAction, AgentFinish, AgentStep } from \"@langchain/core/agents\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n CallbackManager,\n CallbackManagerForChainRun,\n Callbacks,\n} from \"@langchain/core/callbacks/manager\";\nimport { OutputParserException } from \"@langchain/core/output_parsers\";\nimport { Serializable } from \"@langchain/core/load/serializable\";\nimport { SerializedLLMChain } from \"../chains/serde.js\";\nimport { StoppingMethod } from \"./types.js\";\nimport {\n AgentRunnableSequence,\n BaseMultiActionAgent,\n BaseSingleActionAgent,\n RunnableMultiActionAgent,\n RunnableSingleActionAgent,\n isRunnableAgent,\n} from \"./agent.js\";\nimport { BaseChain, ChainInputs } from \"../chains/base.js\";\n\ninterface AgentExecutorIteratorInput {\n agentExecutor: AgentExecutor;\n inputs: Record<string, string>;\n config?: RunnableConfig;\n /** @deprecated Use \"config\" */\n callbacks?: Callbacks;\n /** @deprecated Use \"config\" */\n tags?: string[];\n /** @deprecated Use \"config\" */\n metadata?: Record<string, unknown>;\n runName?: string;\n runManager?: CallbackManagerForChainRun;\n}\n\nexport class AgentExecutorIterator\n extends Serializable\n implements AgentExecutorIteratorInput\n{\n lc_namespace = [\"langchain\", \"agents\", \"executor_iterator\"];\n\n agentExecutor: AgentExecutor;\n\n inputs: Record<string, string>;\n\n config?: RunnableConfig;\n\n /** @deprecated Use \"config\" */\n callbacks?: Callbacks;\n\n /** @deprecated Use \"config\" */\n tags: string[] | undefined;\n\n /** @deprecated Use \"config\" */\n metadata: Record<string, unknown> | undefined;\n\n /** @deprecated Use \"config\" */\n runName: string | undefined;\n\n private _finalOutputs: Record<string, unknown> | undefined;\n\n get finalOutputs(): Record<string, unknown> | undefined {\n return this._finalOutputs;\n }\n\n /** Intended to be used as a setter method, needs to be async. */\n async setFinalOutputs(value: Record<string, unknown> | undefined) {\n this._finalOutputs = undefined;\n if (value) {\n const preparedOutputs: Record<string, unknown> =\n await this.agentExecutor.prepOutputs(this.inputs, value, true);\n this._finalOutputs = preparedOutputs;\n }\n }\n\n runManager: CallbackManagerForChainRun | undefined;\n\n intermediateSteps: AgentStep[] = [];\n\n iterations = 0;\n\n get nameToToolMap(): Record<string, ToolInterface> {\n const toolMap = this.agentExecutor.tools.map((tool) => ({\n [tool.name]: tool,\n }));\n return Object.assign({}, ...toolMap);\n }\n\n constructor(fields: AgentExecutorIteratorInput) {\n super(fields);\n this.agentExecutor = fields.agentExecutor;\n this.inputs = fields.inputs;\n this.callbacks = fields.callbacks;\n this.tags = fields.tags;\n this.metadata = fields.metadata;\n this.runName = fields.runName;\n this.runManager = fields.runManager;\n this.config = fields.config;\n }\n\n /**\n * Reset the iterator to its initial state, clearing intermediate steps,\n * iterations, and the final output.\n */\n reset(): void {\n this.intermediateSteps = [];\n this.iterations = 0;\n this._finalOutputs = undefined;\n }\n\n updateIterations(): void {\n this.iterations += 1;\n }\n\n async *streamIterator() {\n this.reset();\n\n // Loop to handle iteration\n while (true) {\n try {\n if (this.iterations === 0) {\n await this.onFirstStep();\n }\n\n const result = await this._callNext();\n yield result;\n // 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.cjs","names":["Serializable","CallbackManager","Tool","BaseChain","Runnable","AgentRunnableSequence","RunnableSingleActionAgent","RunnableMultiActionAgent","isRunnableAgent","OutputParserException","patchConfig","ToolInputParsingException"],"sources":["../../src/agents/executor.ts"],"sourcesContent":["import {\n type StructuredToolInterface,\n type ToolInterface,\n ToolInputParsingException,\n Tool,\n} from \"@langchain/core/tools\";\nimport {\n Runnable,\n type RunnableConfig,\n patchConfig,\n} from \"@langchain/core/runnables\";\nimport { AgentAction, AgentFinish, AgentStep } from \"@langchain/core/agents\";\nimport { ChainValues } from \"@langchain/core/utils/types\";\nimport {\n CallbackManager,\n CallbackManagerForChainRun,\n Callbacks,\n} from \"@langchain/core/callbacks/manager\";\nimport { OutputParserException } from \"@langchain/core/output_parsers\";\nimport { Serializable } from \"@langchain/core/load/serializable\";\nimport { SerializedLLMChain } from \"../chains/serde.js\";\nimport { StoppingMethod } from \"./types.js\";\nimport {\n AgentRunnableSequence,\n BaseMultiActionAgent,\n BaseSingleActionAgent,\n RunnableMultiActionAgent,\n RunnableSingleActionAgent,\n isRunnableAgent,\n} from \"./agent.js\";\nimport { BaseChain, ChainInputs } from \"../chains/base.js\";\n\ninterface AgentExecutorIteratorInput {\n agentExecutor: AgentExecutor;\n inputs: Record<string, string>;\n config?: RunnableConfig;\n /** @deprecated Use \"config\" */\n callbacks?: Callbacks;\n /** @deprecated Use \"config\" */\n tags?: string[];\n /** @deprecated Use \"config\" */\n metadata?: Record<string, unknown>;\n runName?: string;\n runManager?: CallbackManagerForChainRun;\n}\n\nexport class AgentExecutorIterator\n extends Serializable\n implements AgentExecutorIteratorInput\n{\n lc_namespace = [\"langchain\", \"agents\", \"executor_iterator\"];\n\n agentExecutor: AgentExecutor;\n\n inputs: Record<string, string>;\n\n config?: RunnableConfig;\n\n /** @deprecated Use \"config\" */\n callbacks?: Callbacks;\n\n /** @deprecated Use \"config\" */\n tags: string[] | undefined;\n\n /** @deprecated Use \"config\" */\n metadata: Record<string, unknown> | undefined;\n\n /** @deprecated Use \"config\" */\n runName: string | undefined;\n\n private _finalOutputs: Record<string, unknown> | undefined;\n\n get finalOutputs(): Record<string, unknown> | undefined {\n return this._finalOutputs;\n }\n\n /** Intended to be used as a setter method, needs to be async. */\n async setFinalOutputs(value: Record<string, unknown> | undefined) {\n this._finalOutputs = undefined;\n if (value) {\n const preparedOutputs: Record<string, unknown> =\n await this.agentExecutor.prepOutputs(this.inputs, value, true);\n this._finalOutputs = preparedOutputs;\n }\n }\n\n runManager: CallbackManagerForChainRun | undefined;\n\n intermediateSteps: AgentStep[] = [];\n\n iterations = 0;\n\n get nameToToolMap(): Record<string, ToolInterface> {\n const toolMap = this.agentExecutor.tools.map((tool) => ({\n [tool.name]: tool,\n }));\n return Object.assign({}, ...toolMap);\n }\n\n constructor(fields: AgentExecutorIteratorInput) {\n super(fields);\n this.agentExecutor = fields.agentExecutor;\n this.inputs = fields.inputs;\n this.callbacks = fields.callbacks;\n this.tags = fields.tags;\n this.metadata = fields.metadata;\n this.runName = fields.runName;\n this.runManager = fields.runManager;\n this.config = fields.config;\n }\n\n /**\n * Reset the iterator to its initial state, clearing intermediate steps,\n * iterations, and the final output.\n */\n reset(): void {\n this.intermediateSteps = [];\n this.iterations = 0;\n this._finalOutputs = undefined;\n }\n\n updateIterations(): void {\n this.iterations += 1;\n }\n\n async *streamIterator() {\n this.reset();\n\n // Loop to handle iteration\n while (true) {\n try {\n if (this.iterations === 0) {\n await this.onFirstStep();\n }\n\n const result = await this._callNext();\n yield result;\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (\n \"message\" in e &&\n e.message.startsWith(\"Final outputs already reached: \")\n ) {\n if (!this.finalOutputs) {\n throw e;\n }\n return this.finalOutputs;\n }\n if (this.runManager) {\n await this.runManager.handleChainError(e);\n }\n throw e;\n }\n }\n }\n\n /**\n * Perform any necessary setup for the first step\n * of the asynchronous iterator.\n */\n async onFirstStep(): Promise<void> {\n if (this.iterations === 0) {\n const callbackManager = await CallbackManager.configure(\n this.callbacks ?? this.config?.callbacks,\n this.agentExecutor.callbacks,\n this.tags ?? this.config?.tags,\n this.agentExecutor.tags,\n this.metadata ?? this.config?.metadata,\n this.agentExecutor.metadata,\n {\n verbose: this.agentExecutor.verbose,\n }\n );\n this.runManager = await callbackManager?.handleChainStart(\n this.agentExecutor.toJSON(),\n this.inputs,\n this.config?.runId,\n undefined,\n this.tags ?? this.config?.tags,\n this.metadata ?? this.config?.metadata,\n this.runName ?? this.config?.runName\n );\n if (this.config !== undefined) {\n delete this.config.runId;\n }\n }\n }\n\n /**\n * Execute the next step in the chain using the\n * AgentExecutor's _takeNextStep method.\n */\n async _executeNextStep(\n runManager?: CallbackManagerForChainRun\n ): Promise<AgentFinish | AgentStep[]> {\n return this.agentExecutor._takeNextStep(\n this.nameToToolMap,\n this.inputs,\n this.intermediateSteps,\n runManager,\n this.config\n );\n }\n\n /**\n * Process the output of the next step,\n * handling AgentFinish and tool return cases.\n */\n async _processNextStepOutput(\n nextStepOutput: AgentFinish | AgentStep[],\n runManager?: CallbackManagerForChainRun\n ): Promise<Record<string, string | AgentStep[]>> {\n if (\"returnValues\" in nextStepOutput) {\n const output = await this.agentExecutor._return(\n nextStepOutput as AgentFinish,\n this.intermediateSteps,\n runManager\n );\n if (this.runManager) {\n await this.runManager.handleChainEnd(output);\n }\n await this.setFinalOutputs(output);\n return output;\n }\n\n this.intermediateSteps = this.intermediateSteps.concat(\n nextStepOutput as AgentStep[]\n );\n\n let output: Record<string, string | AgentStep[]> = {};\n if (Array.isArray(nextStepOutput) && nextStepOutput.length === 1) {\n const nextStep = nextStepOutput[0];\n const toolReturn = await this.agentExecutor._getToolReturn(nextStep);\n if (toolReturn) {\n output = await this.agentExecutor._return(\n toolReturn,\n this.intermediateSteps,\n runManager\n );\n await this.runManager?.handleChainEnd(output);\n await this.setFinalOutputs(output);\n }\n }\n output = { intermediateSteps: nextStepOutput as AgentStep[] };\n return output;\n }\n\n async _stop(): Promise<Record<string, unknown>> {\n const output = await this.agentExecutor.agent.returnStoppedResponse(\n this.agentExecutor.earlyStoppingMethod,\n this.intermediateSteps,\n this.inputs\n );\n const returnedOutput = await this.agentExecutor._return(\n output,\n this.intermediateSteps,\n this.runManager\n );\n await this.setFinalOutputs(returnedOutput);\n await this.runManager?.handleChainEnd(returnedOutput);\n return returnedOutput;\n }\n\n async _callNext(): Promise<Record<string, unknown>> {\n // final output already reached: stopiteration (final output)\n if (this.finalOutputs) {\n throw new Error(\n `Final outputs already reached: ${JSON.stringify(\n this.finalOutputs,\n null,\n 2\n )}`\n );\n }\n // timeout/max iterations: stopiteration (stopped response)\n if (!this.agentExecutor.shouldContinueGetter(this.iterations)) {\n return this._stop();\n }\n const nextStepOutput = await this._executeNextStep(this.runManager);\n const output = await this._processNextStepOutput(\n nextStepOutput,\n this.runManager\n );\n this.updateIterations();\n return output;\n }\n}\n\ntype ExtractToolType<T> = T extends { ToolType: infer ToolInterface }\n ? ToolInterface\n : StructuredToolInterface;\n\n/**\n * Interface defining the structure of input data for creating an\n * AgentExecutor. It extends ChainInputs and includes additional\n * properties specific to agent execution.\n */\nexport interface AgentExecutorInput extends ChainInputs {\n agent:\n | BaseSingleActionAgent\n | BaseMultiActionAgent\n | Runnable<\n ChainValues & { steps?: AgentStep[] },\n AgentAction[] | AgentAction | AgentFinish\n >;\n tools: ExtractToolType<this[\"agent\"]>[];\n returnIntermediateSteps?: boolean;\n maxIterations?: number;\n earlyStoppingMethod?: StoppingMethod;\n handleParsingErrors?:\n | boolean\n | string\n | ((e: OutputParserException | ToolInputParsingException) => string);\n handleToolRuntimeErrors?: (e: Error) => string;\n}\n\n// TODO: Type properly with { intermediateSteps?: AgentStep[] };\nexport type AgentExecutorOutput = ChainValues;\n\n/**\n * Tool that just returns the query.\n * Used for exception tracking.\n */\nexport class ExceptionTool extends Tool {\n name = \"_Exception\";\n\n description = \"Exception tool\";\n\n async _call(query: string) {\n return query;\n }\n}\n\n/**\n * A chain managing an agent using tools.\n * @augments BaseChain\n * @example\n * ```typescript\n *\n * const executor = AgentExecutor.fromAgentAndTools({\n * agent: async () => loadAgentFromLangchainHub(),\n * tools: [new SerpAPI(), new Calculator()],\n * returnIntermediateSteps: true,\n * });\n *\n * const result = await executor.invoke({\n * input: `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`,\n * });\n *\n * ```\n */\nexport class AgentExecutor extends BaseChain<ChainValues, AgentExecutorOutput> {\n static lc_name() {\n return \"AgentExecutor\";\n }\n\n get lc_namespace() {\n return [\"langchain\", \"agents\", \"executor\"];\n }\n\n agent: BaseSingleActionAgent | BaseMultiActionAgent;\n\n tools: this[\"agent\"][\"ToolType\"][];\n\n returnIntermediateSteps = false;\n\n maxIterations?: number = 15;\n\n earlyStoppingMethod: StoppingMethod = \"force\";\n\n // TODO: Update BaseChain implementation on breaking change to include this\n returnOnlyOutputs = true;\n\n /**\n * How to handle errors raised by the agent's output parser.\n Defaults to `False`, which raises the error.\n\n If `true`, the error will be sent back to the LLM as an observation.\n If a string, the string itself will be sent to the LLM as an observation.\n If a callable function, the function will be called with the exception\n as an argument, and the result of that function will be passed to the agent\n as an observation.\n */\n handleParsingErrors:\n | boolean\n | string\n | ((e: OutputParserException | ToolInputParsingException) => string) =\n false;\n\n handleToolRuntimeErrors?: (e: Error) => string;\n\n get inputKeys() {\n return this.agent.inputKeys;\n }\n\n get outputKeys() {\n return this.agent.returnValues;\n }\n\n constructor(input: AgentExecutorInput) {\n let agent: BaseSingleActionAgent | BaseMultiActionAgent;\n let returnOnlyOutputs = true;\n if (Runnable.isRunnable(input.agent)) {\n if (AgentRunnableSequence.isAgentRunnableSequence(input.agent)) {\n if (input.agent.singleAction) {\n agent = new RunnableSingleActionAgent({\n runnable: input.agent,\n streamRunnable: input.agent.streamRunnable,\n });\n } else {\n agent = new RunnableMultiActionAgent({\n runnable: input.agent,\n streamRunnable: input.agent.streamRunnable,\n });\n }\n } else {\n agent = new RunnableMultiActionAgent({ runnable: input.agent });\n }\n // TODO: Update BaseChain implementation on breaking change\n returnOnlyOutputs = false;\n } else {\n if (isRunnableAgent(input.agent)) {\n returnOnlyOutputs = false;\n }\n agent = input.agent;\n }\n\n super(input);\n this.agent = agent;\n this.tools = input.tools;\n this.handleParsingErrors =\n input.handleParsingErrors ?? this.handleParsingErrors;\n this.handleToolRuntimeErrors = input.handleToolRuntimeErrors;\n this.returnOnlyOutputs = returnOnlyOutputs;\n if (this.agent._agentActionType() === \"multi\") {\n for (const tool of this.tools) {\n if (tool.returnDirect) {\n throw new Error(\n `Tool with return direct ${tool.name} not supported for multi-action agent.`\n );\n }\n }\n }\n this.returnIntermediateSteps =\n input.returnIntermediateSteps ?? this.returnIntermediateSteps;\n this.maxIterations = input.maxIterations ?? this.maxIterations;\n this.earlyStoppingMethod =\n input.earlyStoppingMethod ?? this.earlyStoppingMethod;\n }\n\n /** Create from agent and a list of tools. */\n static fromAgentAndTools(fields: AgentExecutorInput): AgentExecutor {\n return new AgentExecutor(fields);\n }\n\n get shouldContinueGetter() {\n return this.shouldContinue.bind(this);\n }\n\n /**\n * Method that checks if the agent execution should continue based on the\n * number of iterations.\n * @param iterations The current number of iterations.\n * @returns A boolean indicating whether the agent execution should continue.\n */\n private shouldContinue(iterations: number): boolean {\n return this.maxIterations === undefined || iterations < this.maxIterations;\n }\n\n /** @ignore */\n async _call(\n inputs: ChainValues,\n runManager?: CallbackManagerForChainRun,\n config?: RunnableConfig\n ): Promise<AgentExecutorOutput> {\n const toolsByName = Object.fromEntries(\n this.tools.map((t) => [t.name.toLowerCase(), t])\n );\n const steps: AgentStep[] = [];\n let iterations = 0;\n\n const getOutput = async (\n finishStep: AgentFinish\n ): Promise<AgentExecutorOutput> => {\n const { returnValues } = finishStep;\n const additional = await this.agent.prepareForOutput(returnValues, steps);\n\n await runManager?.handleAgentEnd(finishStep);\n\n let response;\n\n if (this.returnIntermediateSteps) {\n response = { ...returnValues, intermediateSteps: steps, ...additional };\n } else {\n response = { ...returnValues, ...additional };\n }\n if (!this.returnOnlyOutputs) {\n response = { ...inputs, ...response };\n }\n return response;\n };\n\n while (this.shouldContinue(iterations)) {\n let output;\n try {\n output = await this.agent.plan(\n steps,\n inputs,\n runManager?.getChild(),\n config\n );\n } catch (e) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof OutputParserException) {\n let observation;\n let text = e.message;\n if (this.handleParsingErrors === true) {\n if (e.sendToLLM) {\n observation = e.observation;\n text = e.llmOutput ?? \"\";\n } else {\n observation = \"Invalid or incomplete response\";\n }\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n output = {\n tool: \"_Exception\",\n toolInput: observation,\n log: text,\n } as AgentAction;\n } else {\n throw e;\n }\n }\n // Check if the agent has finished\n if (\"returnValues\" in output) {\n return getOutput(output);\n }\n\n let actions: AgentAction[];\n if (Array.isArray(output)) {\n actions = output as AgentAction[];\n } else {\n actions = [output as AgentAction];\n }\n\n const newSteps = await Promise.all(\n actions.map(async (action) => {\n await runManager?.handleAgentAction(action);\n const tool =\n action.tool === \"_Exception\"\n ? new ExceptionTool()\n : toolsByName[action.tool?.toLowerCase()];\n let observation;\n try {\n observation = tool\n ? await tool.invoke(\n action.toolInput,\n patchConfig(config, { callbacks: runManager?.getChild() })\n )\n : `${action.tool} is not a valid tool, try another one.`;\n if (typeof observation !== \"string\") {\n throw new Error(\n \"Received unsupported non-string response from tool call.\"\n );\n }\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof ToolInputParsingException) {\n if (this.handleParsingErrors === true) {\n observation =\n \"Invalid or incomplete tool input. Please try again.\";\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n observation = await new ExceptionTool().call(\n observation,\n runManager?.getChild()\n );\n return { action, observation: observation ?? \"\" };\n } else if (this.handleToolRuntimeErrors !== undefined) {\n observation = this.handleToolRuntimeErrors(e);\n }\n }\n\n return { action, observation: observation ?? \"\" };\n })\n );\n\n steps.push(...newSteps);\n\n const lastStep = steps[steps.length - 1];\n const lastTool = toolsByName[lastStep.action.tool?.toLowerCase()];\n\n if (lastTool?.returnDirect) {\n return getOutput({\n returnValues: { [this.agent.returnValues[0]]: lastStep.observation },\n log: \"\",\n });\n }\n\n iterations += 1;\n }\n\n const finish = await this.agent.returnStoppedResponse(\n this.earlyStoppingMethod,\n steps,\n inputs\n );\n\n return getOutput(finish);\n }\n\n async _takeNextStep(\n nameToolMap: Record<string, ToolInterface>,\n inputs: ChainValues,\n intermediateSteps: AgentStep[],\n runManager?: CallbackManagerForChainRun,\n config?: RunnableConfig\n ): Promise<AgentFinish | AgentStep[]> {\n let output;\n try {\n output = await this.agent.plan(\n intermediateSteps,\n inputs,\n runManager?.getChild(),\n config\n );\n } catch (e) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof OutputParserException) {\n let observation;\n let text = e.message;\n if (this.handleParsingErrors === true) {\n if (e.sendToLLM) {\n observation = e.observation;\n text = e.llmOutput ?? \"\";\n } else {\n observation = \"Invalid or incomplete response\";\n }\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n output = {\n tool: \"_Exception\",\n toolInput: observation,\n log: text,\n } as AgentAction;\n } else {\n throw e;\n }\n }\n\n if (\"returnValues\" in output) {\n return output;\n }\n\n let actions: AgentAction[];\n if (Array.isArray(output)) {\n actions = output as AgentAction[];\n } else {\n actions = [output as AgentAction];\n }\n\n const result: AgentStep[] = [];\n for (const agentAction of actions) {\n let observation = \"\";\n if (runManager) {\n await runManager?.handleAgentAction(agentAction);\n }\n if (agentAction.tool in nameToolMap) {\n const tool = nameToolMap[agentAction.tool];\n try {\n observation = await tool.call(\n agentAction.toolInput,\n runManager?.getChild()\n );\n if (typeof observation !== \"string\") {\n throw new Error(\n \"Received unsupported non-string response from tool call.\"\n );\n }\n } catch (e) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n if (e instanceof ToolInputParsingException) {\n if (this.handleParsingErrors === true) {\n observation =\n \"Invalid or incomplete tool input. Please try again.\";\n } else if (typeof this.handleParsingErrors === \"string\") {\n observation = this.handleParsingErrors;\n } else if (typeof this.handleParsingErrors === \"function\") {\n observation = this.handleParsingErrors(e);\n } else {\n throw e;\n }\n observation = await new ExceptionTool().call(\n observation,\n runManager?.getChild()\n );\n }\n }\n } else {\n observation = `${\n agentAction.tool\n } is not a valid tool, try another available tool: ${Object.keys(\n nameToolMap\n ).join(\", \")}`;\n }\n result.push({\n action: agentAction,\n observation,\n });\n }\n return result;\n }\n\n async _return(\n output: AgentFinish,\n intermediateSteps: AgentStep[],\n runManager?: CallbackManagerForChainRun\n ): Promise<AgentExecutorOutput> {\n if (runManager) {\n await runManager.handleAgentEnd(output);\n }\n const finalOutput: Record<string, unknown> = output.returnValues;\n if (this.returnIntermediateSteps) {\n finalOutput.intermediateSteps = intermediateSteps;\n }\n return finalOutput;\n }\n\n async _getToolReturn(nextStepOutput: AgentStep): Promise<AgentFinish | null> {\n const { action, observation } = nextStepOutput;\n const nameToolMap = Object.fromEntries(\n this.tools.map((t) => [t.name.toLowerCase(), t])\n );\n const [returnValueKey = \"output\"] = this.agent.returnValues;\n // Invalid tools won't be in the map, so we return False.\n if (action.tool in nameToolMap) {\n if (nameToolMap[action.tool].returnDirect) {\n return {\n returnValues: { [returnValueKey]: observation },\n log: \"\",\n };\n }\n }\n return null;\n }\n\n _returnStoppedResponse(earlyStoppingMethod: StoppingMethod) {\n if (earlyStoppingMethod === \"force\") {\n return {\n returnValues: {\n output: \"Agent stopped due to iteration limit or time limit.\",\n },\n log: \"\",\n } as AgentFinish;\n }\n throw new Error(\n `Got unsupported early_stopping_method: ${earlyStoppingMethod}`\n );\n }\n\n async *_streamIterator(\n // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n inputs: Record<string, any>,\n options?: Partial<RunnableConfig>\n ): AsyncGenerator<ChainValues> {\n const agentExecutorIterator = new AgentExecutorIterator({\n inputs,\n agentExecutor: this,\n config: options,\n // TODO: Deprecate these other parameters\n metadata: options?.metadata,\n tags: options?.tags,\n callbacks: options?.callbacks,\n });\n const iterator = agentExecutorIterator.streamIterator();\n for await (const step of iterator) {\n if (!step) {\n continue;\n }\n yield step;\n }\n }\n\n _chainType() {\n return \"agent_executor\" as const;\n }\n\n serialize(): SerializedLLMChain {\n throw new Error(\"Cannot serialize an AgentExecutor\");\n }\n}\n"],"mappings":"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"}
@@ -206,15 +206,16 @@ var AgentExecutor = class AgentExecutor extends BaseChain {
206
206
  let agent;
207
207
  let returnOnlyOutputs = true;
208
208
  if (Runnable.isRunnable(input.agent)) {
209
- if (AgentRunnableSequence.isAgentRunnableSequence(input.agent)) if (input.agent.singleAction) agent = new RunnableSingleActionAgent({
210
- runnable: input.agent,
211
- streamRunnable: input.agent.streamRunnable
212
- });
213
- else agent = new RunnableMultiActionAgent({
214
- runnable: input.agent,
215
- streamRunnable: input.agent.streamRunnable
216
- });
217
- else agent = new RunnableMultiActionAgent({ runnable: input.agent });
209
+ if (AgentRunnableSequence.isAgentRunnableSequence(input.agent)) {
210
+ if (input.agent.singleAction) agent = new RunnableSingleActionAgent({
211
+ runnable: input.agent,
212
+ streamRunnable: input.agent.streamRunnable
213
+ });
214
+ else agent = new RunnableMultiActionAgent({
215
+ runnable: input.agent,
216
+ streamRunnable: input.agent.streamRunnable
217
+ });
218
+ } else agent = new RunnableMultiActionAgent({ runnable: input.agent });
218
219
  returnOnlyOutputs = false;
219
220
  } else {
220
221
  if (isRunnableAgent(input.agent)) returnOnlyOutputs = false;
@@ -282,11 +283,12 @@ var AgentExecutor = class AgentExecutor extends BaseChain {
282
283
  if (e instanceof OutputParserException) {
283
284
  let observation;
284
285
  let text = e.message;
285
- if (this.handleParsingErrors === true) if (e.sendToLLM) {
286
- observation = e.observation;
287
- text = e.llmOutput ?? "";
288
- } else observation = "Invalid or incomplete response";
289
- else if (typeof this.handleParsingErrors === "string") observation = this.handleParsingErrors;
286
+ if (this.handleParsingErrors === true) {
287
+ if (e.sendToLLM) {
288
+ observation = e.observation;
289
+ text = e.llmOutput ?? "";
290
+ } else observation = "Invalid or incomplete response";
291
+ } else if (typeof this.handleParsingErrors === "string") observation = this.handleParsingErrors;
290
292
  else if (typeof this.handleParsingErrors === "function") observation = this.handleParsingErrors(e);
291
293
  else throw e;
292
294
  output = {
@@ -343,11 +345,12 @@ var AgentExecutor = class AgentExecutor extends BaseChain {
343
345
  if (e instanceof OutputParserException) {
344
346
  let observation;
345
347
  let text = e.message;
346
- if (this.handleParsingErrors === true) if (e.sendToLLM) {
347
- observation = e.observation;
348
- text = e.llmOutput ?? "";
349
- } else observation = "Invalid or incomplete response";
350
- else if (typeof this.handleParsingErrors === "string") observation = this.handleParsingErrors;
348
+ if (this.handleParsingErrors === true) {
349
+ if (e.sendToLLM) {
350
+ observation = e.observation;
351
+ text = e.llmOutput ?? "";
352
+ } else observation = "Invalid or incomplete response";
353
+ } else if (typeof this.handleParsingErrors === "string") observation = this.handleParsingErrors;
351
354
  else if (typeof this.handleParsingErrors === "function") observation = this.handleParsingErrors(e);
352
355
  else throw e;
353
356
  output = {
@@ -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_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,YAAY,CAC1B,CAAC,CAAC,KAAK,UAAU,MAAM,EAAE;CAC7D,IAAI,sBAAsB,SAAS,GACjC,MAAM,IAAI,MACR,yDAAyD,sBAC3D;CAGF,MAAM,WAA0B,CAAC;CAEjC,KAAK,MAAM,QAAQ,mBAAmB;EACpC,SAAS,KAAK,IAAIA,yBAAAA,UAAU,KAAK,OAAO,GAAG,CAAC;EAC5C,SAAS,KACP,IAAIC,yBAAAA,cAAAA,GAAAA,wBAAAA,eAAAA,CACa,sBAAsB,YAAY,GAC9C,sBAAsB,KAAK,KAAK,YACnC,CAAC,CACH,CACF;CACF;CACA,OAAO;AACT"}
1
+ {"version":3,"file":"log_to_message.cjs","names":["AIMessage","HumanMessage","renderTemplate"],"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,YAAY,CAC1B,CAAC,CAAC,KAAK,UAAU,MAAM,EAAE;CAC7D,IAAI,sBAAsB,SAAS,GACjC,MAAM,IAAI,MACR,yDAAyD,sBAC3D;CAGF,MAAM,WAA0B,CAAC;CAEjC,KAAK,MAAM,QAAQ,mBAAmB;EACpC,SAAS,KAAK,IAAIA,yBAAAA,UAAU,KAAK,OAAO,GAAG,CAAC;EAC5C,SAAS,KACP,IAAIC,yBAAAA,cAAAA,GACFC,wBAAAA,eAAAA,CAAe,sBAAsB,YAAY,GAC9C,sBAAsB,KAAK,KAAK,YACnC,CAAC,CACH,CACF;CACF;CACA,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"openai_functions.cjs","names":["AIMessage","HumanMessage","TEMPLATE_TOOL_RESPONSE","FunctionMessage"],"sources":["../../../src/agents/format_scratchpad/openai_functions.ts"],"sourcesContent":["import {\n AIMessage,\n type BaseMessage,\n HumanMessage,\n FunctionMessage,\n} from \"@langchain/core/messages\";\nimport type { AgentStep } from \"@langchain/core/agents\";\nimport { renderTemplate } from \"@langchain/core/prompts\";\nimport { TEMPLATE_TOOL_RESPONSE } from \"../chat_convo/prompt.js\";\n\n/**\n * Format a list of AgentSteps into a list of BaseMessage instances for\n * agents that use OpenAI's API. Helpful for passing in previous agent\n * step context into new iterations.\n *\n * @param steps A list of AgentSteps to format.\n * @returns A list of BaseMessages.\n */\nexport function formatForOpenAIFunctions(steps: AgentStep[]): BaseMessage[] {\n const thoughts: BaseMessage[] = [];\n for (const step of steps) {\n thoughts.push(new AIMessage(step.action.log));\n thoughts.push(\n new HumanMessage(\n renderTemplate(TEMPLATE_TOOL_RESPONSE, \"f-string\", {\n observation: step.observation,\n })\n )\n );\n }\n return thoughts;\n}\n\n/**\n * Format a list of AgentSteps into a list of BaseMessage instances for\n * agents that use OpenAI's API. Helpful for passing in previous agent\n * step context into new iterations.\n *\n * @param steps A list of AgentSteps to format.\n * @returns A list of BaseMessages.\n */\nexport function formatToOpenAIFunctionMessages(\n steps: AgentStep[]\n): BaseMessage[] {\n return steps.flatMap(({ action, observation }) => {\n if (\"messageLog\" in action && action.messageLog !== undefined) {\n const log = action.messageLog as BaseMessage[];\n return log.concat(new FunctionMessage(observation, action.tool));\n } else {\n return [new AIMessage(action.log)];\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAkBA,SAAgB,yBAAyB,OAAmC;CAC1E,MAAM,WAA0B,CAAC;CACjC,KAAK,MAAM,QAAQ,OAAO;EACxB,SAAS,KAAK,IAAIA,yBAAAA,UAAU,KAAK,OAAO,GAAG,CAAC;EAC5C,SAAS,KACP,IAAIC,yBAAAA,cAAAA,GAAAA,wBAAAA,eAAAA,CACaC,eAAAA,wBAAwB,YAAY,EACjD,aAAa,KAAK,YACpB,CAAC,CACH,CACF;CACF;CACA,OAAO;AACT;;;;;;;;;AAUA,SAAgB,+BACd,OACe;CACf,OAAO,MAAM,SAAS,EAAE,QAAQ,kBAAkB;EAChD,IAAI,gBAAgB,UAAU,OAAO,eAAe,KAAA,GAElD,OADY,OAAO,WACR,OAAO,IAAIC,yBAAAA,gBAAgB,aAAa,OAAO,IAAI,CAAC;OAE/D,OAAO,CAAC,IAAIH,yBAAAA,UAAU,OAAO,GAAG,CAAC;CAErC,CAAC;AACH"}
1
+ {"version":3,"file":"openai_functions.cjs","names":["AIMessage","HumanMessage","renderTemplate","TEMPLATE_TOOL_RESPONSE","FunctionMessage"],"sources":["../../../src/agents/format_scratchpad/openai_functions.ts"],"sourcesContent":["import {\n AIMessage,\n type BaseMessage,\n HumanMessage,\n FunctionMessage,\n} from \"@langchain/core/messages\";\nimport type { AgentStep } from \"@langchain/core/agents\";\nimport { renderTemplate } from \"@langchain/core/prompts\";\nimport { TEMPLATE_TOOL_RESPONSE } from \"../chat_convo/prompt.js\";\n\n/**\n * Format a list of AgentSteps into a list of BaseMessage instances for\n * agents that use OpenAI's API. Helpful for passing in previous agent\n * step context into new iterations.\n *\n * @param steps A list of AgentSteps to format.\n * @returns A list of BaseMessages.\n */\nexport function formatForOpenAIFunctions(steps: AgentStep[]): BaseMessage[] {\n const thoughts: BaseMessage[] = [];\n for (const step of steps) {\n thoughts.push(new AIMessage(step.action.log));\n thoughts.push(\n new HumanMessage(\n renderTemplate(TEMPLATE_TOOL_RESPONSE, \"f-string\", {\n observation: step.observation,\n })\n )\n );\n }\n return thoughts;\n}\n\n/**\n * Format a list of AgentSteps into a list of BaseMessage instances for\n * agents that use OpenAI's API. Helpful for passing in previous agent\n * step context into new iterations.\n *\n * @param steps A list of AgentSteps to format.\n * @returns A list of BaseMessages.\n */\nexport function formatToOpenAIFunctionMessages(\n steps: AgentStep[]\n): BaseMessage[] {\n return steps.flatMap(({ action, observation }) => {\n if (\"messageLog\" in action && action.messageLog !== undefined) {\n const log = action.messageLog as BaseMessage[];\n return log.concat(new FunctionMessage(observation, action.tool));\n } else {\n return [new AIMessage(action.log)];\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAkBA,SAAgB,yBAAyB,OAAmC;CAC1E,MAAM,WAA0B,CAAC;CACjC,KAAK,MAAM,QAAQ,OAAO;EACxB,SAAS,KAAK,IAAIA,yBAAAA,UAAU,KAAK,OAAO,GAAG,CAAC;EAC5C,SAAS,KACP,IAAIC,yBAAAA,cAAAA,GACFC,wBAAAA,eAAAA,CAAeC,eAAAA,wBAAwB,YAAY,EACjD,aAAa,KAAK,YACpB,CAAC,CACH,CACF;CACF;CACA,OAAO;AACT;;;;;;;;;AAUA,SAAgB,+BACd,OACe;CACf,OAAO,MAAM,SAAS,EAAE,QAAQ,kBAAkB;EAChD,IAAI,gBAAgB,UAAU,OAAO,eAAe,KAAA,GAElD,OADY,OAAO,WACR,OAAO,IAAIC,yBAAAA,gBAAgB,aAAa,OAAO,IAAI,CAAC;OAE/D,OAAO,CAAC,IAAIJ,yBAAAA,UAAU,OAAO,GAAG,CAAC;CAErC,CAAC;AACH"}
@@ -86,13 +86,16 @@ var ZeroShotAgent = class ZeroShotAgent extends require_agent.Agent {
86
86
  */
87
87
  static createPrompt(tools, args) {
88
88
  const { prefix = require_prompt.PREFIX, suffix = require_prompt.SUFFIX, inputVariables = ["input", "agent_scratchpad"] } = args ?? {};
89
+ const toolStrings = tools.map((tool) => `${tool.name}: ${tool.description}`).join("\n");
90
+ const toolNames = tools.map((tool) => `"${tool.name}"`).join(", ");
91
+ const template = [
92
+ prefix,
93
+ toolStrings,
94
+ (0, _langchain_core_prompts.renderTemplate)(require_prompt.FORMAT_INSTRUCTIONS, "f-string", { tool_names: toolNames }),
95
+ suffix
96
+ ].join("\n\n");
89
97
  return new _langchain_core_prompts.PromptTemplate({
90
- template: [
91
- prefix,
92
- tools.map((tool) => `${tool.name}: ${tool.description}`).join("\n"),
93
- (0, _langchain_core_prompts.renderTemplate)(require_prompt.FORMAT_INSTRUCTIONS, "f-string", { tool_names: tools.map((tool) => `"${tool.name}"`).join(", ") }),
94
- suffix
95
- ].join("\n\n"),
98
+ template,
96
99
  inputVariables
97
100
  });
98
101
  }
@@ -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;EACf,OAAO;CACT;CAEA,eAAe;EAAC;EAAa;EAAU;CAAM;CAI7C,YAAY,OAA2B;EACrC,MAAM,eACJ,OAAO,gBAAgB,cAAc,uBAAuB;EAC9D,MAAM;GAAE,GAAG;GAAO;EAAa,CAAC;CAClC;CAEA,aAAa;EACX,OAAO;CACT;CAEA,oBAAoB;EAClB,OAAO;CACT;CAEA,YAAY;EACV,OAAO;CACT;;;;;;CAOA,OAAO,uBAAuB,QAA2B;EACvD,OAAO,IAAIC,qBAAAA,0BAA0B,MAAM;CAC7C;;;;;;CAOA,OAAO,cAAc,OAAwB;EAC3C,MAAM,sBAAsB,MAAM,MAAM,SAAS,CAAC,KAAK,WAAW;EAClE,IAAI,qBAAqB;GACvB,MAAM,MACJ,cAAc,oBAAoB,KAAK;GAEzC,MAAM,IAAI,MAAM,GAAG;EACrB;CACF;;;;;;;;;;CAWA,OAAO,aAAa,OAAwB,MAAiC;EAC3E,MAAM,EACJ,SAASC,eAAAA,QACT,SAASC,eAAAA,QACT,iBAAiB,CAAC,SAAS,kBAAkB,MAC3C,QAAQ,CAAC;EAeb,OAAO,IAAIC,wBAAAA,eAAe;GACxB,UALe;IAAC;IAVE,MACjB,KAAK,SAAS,GAAG,KAAK,KAAK,IAAI,KAAK,aAAa,CAAC,CAClD,KAAK,IAQ4B;KAJMC,GAAAA,wBAAAA,eAAAA,CAAAA,eAAAA,qBAAqB,YAAY,EACzE,YAHgB,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,KAAK,IAGvC,EACtB,CAEwD;IAAG;GAAM,CAAC,CAAC,KACjE,MAIO;GACP;EACF,CAAC;CACH;;;;;;;;CASA,OAAO,gBACL,KACA,OACA,MACA;EACA,cAAc,cAAc,KAAK;EACjC,MAAM,SAAS,cAAc,aAAa,OAAO,IAAI;EACrD,MAAM,eACJ,MAAM,gBAAgB,cAAc,uBAAuB;EAC7D,MAAM,QAAQ,IAAIC,kBAAAA,SAAS;GACzB;GACA;GACA,WAAW,MAAM,aAAa,MAAM;EACtC,CAAC;EAED,OAAO,IAAI,cAAc;GACvB,UAAU;GACV,cAAc,MAAM,KAAK,MAAM,EAAE,IAAI;GACrC;EACF,CAAC;CACH;CAEA,aAAa,YACX,MAIwB;EACxB,MAAM,EAAE,KAAK,OAAO,GAAG,SAAS;EAChC,OAAOC,gBAAAA,kBACL,KACA,OACA,OAEE,KACA,OACA,SAEA,cAAc,gBAAgB,KAAK,OAAO;GACxC,QAAQ,KAAK;GACb,QAAQ,KAAK;GACb,gBAAgB,KAAK;EACvB,CAAC,IACF,SAAS,IAAI,cAAc,IAAI,CAClC;CACF;AACF"}
1
+ {"version":3,"file":"index.cjs","names":["Agent","ZeroShotAgentOutputParser","PREFIX","SUFFIX","renderTemplate","FORMAT_INSTRUCTIONS","PromptTemplate","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;EACf,OAAO;CACT;CAEA,eAAe;EAAC;EAAa;EAAU;CAAM;CAI7C,YAAY,OAA2B;EACrC,MAAM,eACJ,OAAO,gBAAgB,cAAc,uBAAuB;EAC9D,MAAM;GAAE,GAAG;GAAO;EAAa,CAAC;CAClC;CAEA,aAAa;EACX,OAAO;CACT;CAEA,oBAAoB;EAClB,OAAO;CACT;CAEA,YAAY;EACV,OAAO;CACT;;;;;;CAOA,OAAO,uBAAuB,QAA2B;EACvD,OAAO,IAAIC,qBAAAA,0BAA0B,MAAM;CAC7C;;;;;;CAOA,OAAO,cAAc,OAAwB;EAC3C,MAAM,sBAAsB,MAAM,MAAM,SAAS,CAAC,KAAK,WAAW;EAClE,IAAI,qBAAqB;GACvB,MAAM,MACJ,cAAc,oBAAoB,KAAK;GAEzC,MAAM,IAAI,MAAM,GAAG;EACrB;CACF;;;;;;;;;;CAWA,OAAO,aAAa,OAAwB,MAAiC;EAC3E,MAAM,EACJ,SAASC,eAAAA,QACT,SAASC,eAAAA,QACT,iBAAiB,CAAC,SAAS,kBAAkB,MAC3C,QAAQ,CAAC;EACb,MAAM,cAAc,MACjB,KAAK,SAAS,GAAG,KAAK,KAAK,IAAI,KAAK,aAAa,CAAC,CAClD,KAAK,IAAI;EAEZ,MAAM,YAAY,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI;EAMjE,MAAM,WAAW;GAAC;GAAQ;IAJCC,GAAAA,wBAAAA,eAAAA,CAAeC,eAAAA,qBAAqB,YAAY,EACzE,YAAY,UACd,CAEwD;GAAG;EAAM,CAAC,CAAC,KACjE,MACF;EAEA,OAAO,IAAIC,wBAAAA,eAAe;GACxB;GACA;EACF,CAAC;CACH;;;;;;;;CASA,OAAO,gBACL,KACA,OACA,MACA;EACA,cAAc,cAAc,KAAK;EACjC,MAAM,SAAS,cAAc,aAAa,OAAO,IAAI;EACrD,MAAM,eACJ,MAAM,gBAAgB,cAAc,uBAAuB;EAC7D,MAAM,QAAQ,IAAIC,kBAAAA,SAAS;GACzB;GACA;GACA,WAAW,MAAM,aAAa,MAAM;EACtC,CAAC;EAED,OAAO,IAAI,cAAc;GACvB,UAAU;GACV,cAAc,MAAM,KAAK,MAAM,EAAE,IAAI;GACrC;EACF,CAAC;CACH;CAEA,aAAa,YACX,MAIwB;EACxB,MAAM,EAAE,KAAK,OAAO,GAAG,SAAS;EAChC,OAAOC,gBAAAA,kBACL,KACA,OACA,OAEE,KACA,OACA,SAEA,cAAc,gBAAgB,KAAK,OAAO;GACxC,QAAQ,KAAK;GACb,QAAQ,KAAK;GACb,gBAAgB,KAAK;EACvB,CAAC,IACF,SAAS,IAAI,cAAc,IAAI,CAClC;CACF;AACF"}
@@ -86,13 +86,16 @@ var ZeroShotAgent = class ZeroShotAgent extends Agent {
86
86
  */
87
87
  static createPrompt(tools, args) {
88
88
  const { prefix = PREFIX, suffix = SUFFIX, inputVariables = ["input", "agent_scratchpad"] } = args ?? {};
89
+ const toolStrings = tools.map((tool) => `${tool.name}: ${tool.description}`).join("\n");
90
+ const toolNames = tools.map((tool) => `"${tool.name}"`).join(", ");
91
+ const template = [
92
+ prefix,
93
+ toolStrings,
94
+ renderTemplate(FORMAT_INSTRUCTIONS, "f-string", { tool_names: toolNames }),
95
+ suffix
96
+ ].join("\n\n");
89
97
  return new PromptTemplate({
90
- template: [
91
- prefix,
92
- tools.map((tool) => `${tool.name}: ${tool.description}`).join("\n"),
93
- renderTemplate(FORMAT_INSTRUCTIONS, "f-string", { tool_names: tools.map((tool) => `"${tool.name}"`).join(", ") }),
94
- suffix
95
- ].join("\n\n"),
98
+ template,
96
99
  inputVariables
97
100
  });
98
101
  }
@@ -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;EACf,OAAO;CACT;CAEA,eAAe;EAAC;EAAa;EAAU;CAAM;CAI7C,YAAY,OAA2B;EACrC,MAAM,eACJ,OAAO,gBAAgB,cAAc,uBAAuB;EAC9D,MAAM;GAAE,GAAG;GAAO;EAAa,CAAC;CAClC;CAEA,aAAa;EACX,OAAO;CACT;CAEA,oBAAoB;EAClB,OAAO;CACT;CAEA,YAAY;EACV,OAAO;CACT;;;;;;CAOA,OAAO,uBAAuB,QAA2B;EACvD,OAAO,IAAI,0BAA0B,MAAM;CAC7C;;;;;;CAOA,OAAO,cAAc,OAAwB;EAC3C,MAAM,sBAAsB,MAAM,MAAM,SAAS,CAAC,KAAK,WAAW;EAClE,IAAI,qBAAqB;GACvB,MAAM,MACJ,cAAc,oBAAoB,KAAK;GAEzC,MAAM,IAAI,MAAM,GAAG;EACrB;CACF;;;;;;;;;;CAWA,OAAO,aAAa,OAAwB,MAAiC;EAC3E,MAAM,EACJ,SAAS,QACT,SAAS,QACT,iBAAiB,CAAC,SAAS,kBAAkB,MAC3C,QAAQ,CAAC;EAeb,OAAO,IAAI,eAAe;GACxB,UALe;IAAC;IAVE,MACjB,KAAK,SAAS,GAAG,KAAK,KAAK,IAAI,KAAK,aAAa,CAAC,CAClD,KAAK,IAQ4B;IAJT,eAAe,qBAAqB,YAAY,EACzE,YAHgB,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,KAAK,IAGvC,EACtB,CAEwD;IAAG;GAAM,CAAC,CAAC,KACjE,MAIO;GACP;EACF,CAAC;CACH;;;;;;;;CASA,OAAO,gBACL,KACA,OACA,MACA;EACA,cAAc,cAAc,KAAK;EACjC,MAAM,SAAS,cAAc,aAAa,OAAO,IAAI;EACrD,MAAM,eACJ,MAAM,gBAAgB,cAAc,uBAAuB;EAC7D,MAAM,QAAQ,IAAI,SAAS;GACzB;GACA;GACA,WAAW,MAAM,aAAa,MAAM;EACtC,CAAC;EAED,OAAO,IAAI,cAAc;GACvB,UAAU;GACV,cAAc,MAAM,KAAK,MAAM,EAAE,IAAI;GACrC;EACF,CAAC;CACH;CAEA,aAAa,YACX,MAIwB;EACxB,MAAM,EAAE,KAAK,OAAO,GAAG,SAAS;EAChC,OAAO,kBACL,KACA,OACA,OAEE,KACA,OACA,SAEA,cAAc,gBAAgB,KAAK,OAAO;GACxC,QAAQ,KAAK;GACb,QAAQ,KAAK;GACb,gBAAgB,KAAK;EACvB,CAAC,IACF,SAAS,IAAI,cAAc,IAAI,CAClC;CACF;AACF"}
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;EACf,OAAO;CACT;CAEA,eAAe;EAAC;EAAa;EAAU;CAAM;CAI7C,YAAY,OAA2B;EACrC,MAAM,eACJ,OAAO,gBAAgB,cAAc,uBAAuB;EAC9D,MAAM;GAAE,GAAG;GAAO;EAAa,CAAC;CAClC;CAEA,aAAa;EACX,OAAO;CACT;CAEA,oBAAoB;EAClB,OAAO;CACT;CAEA,YAAY;EACV,OAAO;CACT;;;;;;CAOA,OAAO,uBAAuB,QAA2B;EACvD,OAAO,IAAI,0BAA0B,MAAM;CAC7C;;;;;;CAOA,OAAO,cAAc,OAAwB;EAC3C,MAAM,sBAAsB,MAAM,MAAM,SAAS,CAAC,KAAK,WAAW;EAClE,IAAI,qBAAqB;GACvB,MAAM,MACJ,cAAc,oBAAoB,KAAK;GAEzC,MAAM,IAAI,MAAM,GAAG;EACrB;CACF;;;;;;;;;;CAWA,OAAO,aAAa,OAAwB,MAAiC;EAC3E,MAAM,EACJ,SAAS,QACT,SAAS,QACT,iBAAiB,CAAC,SAAS,kBAAkB,MAC3C,QAAQ,CAAC;EACb,MAAM,cAAc,MACjB,KAAK,SAAS,GAAG,KAAK,KAAK,IAAI,KAAK,aAAa,CAAC,CAClD,KAAK,IAAI;EAEZ,MAAM,YAAY,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI;EAMjE,MAAM,WAAW;GAAC;GAAQ;GAJC,eAAe,qBAAqB,YAAY,EACzE,YAAY,UACd,CAEwD;GAAG;EAAM,CAAC,CAAC,KACjE,MACF;EAEA,OAAO,IAAI,eAAe;GACxB;GACA;EACF,CAAC;CACH;;;;;;;;CASA,OAAO,gBACL,KACA,OACA,MACA;EACA,cAAc,cAAc,KAAK;EACjC,MAAM,SAAS,cAAc,aAAa,OAAO,IAAI;EACrD,MAAM,eACJ,MAAM,gBAAgB,cAAc,uBAAuB;EAC7D,MAAM,QAAQ,IAAI,SAAS;GACzB;GACA;GACA,WAAW,MAAM,aAAa,MAAM;EACtC,CAAC;EAED,OAAO,IAAI,cAAc;GACvB,UAAU;GACV,cAAc,MAAM,KAAK,MAAM,EAAE,IAAI;GACrC;EACF,CAAC;CACH;CAEA,aAAa,YACX,MAIwB;EACxB,MAAM,EAAE,KAAK,OAAO,GAAG,SAAS;EAChC,OAAO,kBACL,KACA,OACA,OAEE,KACA,OACA,SAEA,cAAc,gBAAgB,KAAK,OAAO;GACxC,QAAQ,KAAK;GACb,QAAQ,KAAK;GACb,gBAAgB,KAAK;EACvB,CAAC,IACF,SAAS,IAAI,cAAc,IAAI,CAClC;CACF;AACF"}
@@ -23,10 +23,10 @@ declare class ZeroShotAgentOutputParser extends AgentActionOutputParser {
23
23
  tool?: undefined;
24
24
  toolInput?: undefined;
25
25
  } | {
26
+ returnValues?: undefined;
26
27
  tool: string;
27
28
  toolInput: string;
28
29
  log: string;
29
- returnValues?: undefined;
30
30
  }>;
31
31
  /**
32
32
  * Returns the format instructions for parsing the output of an agent
@@ -85,8 +85,9 @@ var OpenAIAgent = class OpenAIAgent extends require_agent.Agent {
85
85
  static fromLLMAndTools(llm, tools, args) {
86
86
  OpenAIAgent.validateTools(tools);
87
87
  if (llm._modelType() !== "base_chat_model" || llm._llmType() !== "openai") throw new Error("OpenAIAgent requires an OpenAI chat model");
88
+ const prompt = OpenAIAgent.createPrompt(tools, args);
88
89
  const chain = new require_llm_chain.LLMChain({
89
- prompt: OpenAIAgent.createPrompt(tools, args),
90
+ prompt,
90
91
  llm,
91
92
  callbacks: args?.callbacks
92
93
  });