{"version":3,"sources":["../../../src/agents/react/agent.ts"],"names":["ReActAgent","BaseAgent","emitter","Emitter","root","child","namespace","creator","runner","input","duplicate","tools","find","a","i","arr","b","j","name","toUpperCase","ValueError","modelId","llm","toLowerCase","tag","GraniteRunner","DeepThinkRunner","includes","DefaultRunner","register","memory","meta","slice","description","length","extraDescription","map","tool","join","_run","options","run","execution","maxRetriesPerStep","totalMaxRetries","maxIterations","init","finalMessage","state","signal","createIteration","tool_name","tool_input","output","success","add","AssistantMessage","templates","assistant","render","thought","filter","R","isTruthy","toolName","toolInput","call","JSON","stringify","toolOutput","finalAnswer","final_answer","assign","tool_output","key","emit","data","update","value","parsedValue","createdAt","Date","iterations","prompt","UserMessage","result","createSnapshot"],"mappings":"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","file":"agent.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { BaseAgent } from \"@/agents/base.js\";\nimport { AnyTool } from \"@/tools/base.js\";\nimport { BaseMemory } from \"@/memory/base.js\";\nimport { AssistantMessage, Message, UserMessage } from \"@/backend/message.js\";\nimport { AgentMeta } from \"@/agents/types.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport {\n  ReActAgentExecutionConfig,\n  ReActAgentTemplates,\n  ReActAgentCallbacks,\n  ReActAgentRunInput,\n  ReActAgentRunOptions,\n  ReActAgentRunOutput,\n} from \"@/agents/react/types.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { assign } from \"@/internals/helpers/object.js\";\nimport * as R from \"remeda\";\nimport { BaseRunner } from \"@/agents/react/runners/base.js\";\nimport { GraniteRunner } from \"@/agents/react/runners/granite/runner.js\";\nimport { DeepThinkRunner } from \"@/agents/react/runners/deep-think/runner.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { DefaultRunner } from \"@/agents/react/runners/default/runner.js\";\nimport { ChatModel } from \"@/backend/chat.js\";\n\nexport type ReActAgentTemplateFactory<K extends keyof ReActAgentTemplates> = (\n  template: ReActAgentTemplates[K],\n) => ReActAgentTemplates[K];\n\nexport interface ReActAgentInput {\n  llm: ChatModel;\n  tools: AnyTool[];\n  memory: BaseMemory;\n  meta?: Omit<AgentMeta, \"tools\">;\n  templates?: Partial<{\n    [K in keyof ReActAgentTemplates]: ReActAgentTemplates[K] | ReActAgentTemplateFactory<K>;\n  }>;\n  execution?: ReActAgentExecutionConfig;\n  stream?: boolean;\n}\n\nexport class ReActAgent extends BaseAgent<\n  ReActAgentRunInput,\n  ReActAgentRunOutput,\n  ReActAgentRunOptions\n> {\n  public readonly emitter = Emitter.root.child<ReActAgentCallbacks>({\n    namespace: [\"agent\", \"react\"],\n    creator: this,\n  });\n\n  protected runner: new (...args: ConstructorParameters<typeof BaseRunner>) => BaseRunner;\n\n  constructor(protected readonly input: ReActAgentInput) {\n    super();\n\n    const duplicate = input.tools.find((a, i, arr) =>\n      arr.find((b, j) => i !== j && a.name.toUpperCase() === b.name.toUpperCase()),\n    );\n    if (duplicate) {\n      throw new ValueError(\n        `Agent's tools must all have different names. Conflicting tool: ${duplicate.name}.`,\n      );\n    }\n\n    const modelId = this.input.llm.modelId.toLowerCase();\n    this.runner =\n      [\n        { tag: \"granite\", runner: GraniteRunner },\n        { tag: \"deepseek-r1\", runner: DeepThinkRunner },\n      ].find(({ tag }) => modelId.includes(tag))?.runner ?? DefaultRunner;\n  }\n\n  static {\n    this.register();\n  }\n\n  set memory(memory: BaseMemory) {\n    this.input.memory = memory;\n  }\n\n  get memory() {\n    return this.input.memory;\n  }\n\n  get meta(): AgentMeta {\n    const tools = this.input.tools.slice();\n\n    if (this.input.meta) {\n      return { ...this.input.meta, tools };\n    }\n\n    return {\n      name: \"ReAct\",\n      tools,\n      description:\n        \"The Bee framework demonstrates its ability to auto-correct and adapt in real-time, improving the overall reliability and resilience of the system.\",\n      ...(tools.length > 0 && {\n        extraDescription: [\n          `Tools that I can use to accomplish given task.`,\n          ...tools.map((tool) => `Tool '${tool.name}': ${tool.description}.`),\n        ].join(\"\\n\"),\n      }),\n    };\n  }\n\n  protected async _run(\n    input: ReActAgentRunInput,\n    options: ReActAgentRunOptions = {},\n    run: GetRunContext<typeof this>,\n  ): Promise<ReActAgentRunOutput> {\n    const runner = new this.runner(\n      this.input,\n      {\n        ...options,\n        execution: this.input.execution ??\n          options?.execution ?? {\n            maxRetriesPerStep: 3,\n            totalMaxRetries: 20,\n            maxIterations: 10,\n          },\n      },\n      run,\n    );\n    await runner.init(input);\n\n    let finalMessage: Message | undefined;\n    while (!finalMessage) {\n      const { state, meta, emitter, signal } = await runner.createIteration();\n\n      if (state.tool_name && state.tool_input) {\n        const { output, success } = await runner.tool({\n          state,\n          emitter,\n          meta,\n          signal,\n        });\n        await runner.memory.add(\n          new AssistantMessage(\n            runner.templates.assistant.render({\n              thought: [state.thought].filter(R.isTruthy),\n              toolName: [state.tool_name].filter(R.isTruthy),\n              toolInput: [state.tool_input].filter(R.isTruthy).map((call) => JSON.stringify(call)),\n              toolOutput: [output],\n              finalAnswer: [state.final_answer].filter(R.isTruthy),\n            }),\n            { success },\n          ),\n        );\n        assign(state, { tool_output: output });\n\n        for (const key of [\"partialUpdate\", \"update\"] as const) {\n          await emitter.emit(key, {\n            data: state,\n            update: { key: \"tool_output\", value: output, parsedValue: output },\n            meta: { success, ...meta },\n            memory: runner.memory,\n          });\n        }\n      }\n      if (state.final_answer) {\n        finalMessage = new AssistantMessage(state.final_answer, {\n          createdAt: new Date(),\n        });\n        await runner.memory.add(finalMessage);\n        await emitter.emit(\"success\", {\n          data: finalMessage,\n          iterations: runner.iterations,\n          memory: runner.memory,\n          meta,\n        });\n      }\n    }\n\n    if (input.prompt !== null) {\n      await this.input.memory.add(\n        new UserMessage(input.prompt, {\n          createdAt: run.createdAt,\n        }),\n      );\n    }\n\n    await this.input.memory.add(finalMessage);\n    return { result: finalMessage, iterations: runner.iterations, memory: runner.memory };\n  }\n\n  createSnapshot() {\n    return {\n      ...super.createSnapshot(),\n      input: this.input,\n      emitter: this.emitter,\n      runner: this.runner,\n    };\n  }\n}\n"]}