beeai-framework 0.1.22 → 0.1.24

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 (273) hide show
  1. package/dist/adapters/a2a/agents/agent.d.cts +2 -2
  2. package/dist/adapters/a2a/agents/agent.d.ts +2 -2
  3. package/dist/adapters/a2a/agents/events.d.cts +1 -1
  4. package/dist/adapters/a2a/agents/events.d.ts +1 -1
  5. package/dist/adapters/a2a/agents/types.d.cts +2 -2
  6. package/dist/adapters/a2a/agents/types.d.ts +2 -2
  7. package/dist/adapters/a2a/serve/agent_executor.d.cts +3 -3
  8. package/dist/adapters/a2a/serve/agent_executor.d.ts +3 -3
  9. package/dist/adapters/a2a/serve/server.d.cts +2 -2
  10. package/dist/adapters/a2a/serve/server.d.ts +2 -2
  11. package/dist/adapters/acp/agents/agent.d.cts +2 -2
  12. package/dist/adapters/acp/agents/agent.d.ts +2 -2
  13. package/dist/adapters/acp/agents/events.d.cts +1 -1
  14. package/dist/adapters/acp/agents/events.d.ts +1 -1
  15. package/dist/adapters/agentstack/agents/agent.d.cts +2 -2
  16. package/dist/adapters/agentstack/agents/agent.d.ts +2 -2
  17. package/dist/adapters/agentstack/agents/events.d.cts +1 -1
  18. package/dist/adapters/agentstack/agents/events.d.ts +1 -1
  19. package/dist/adapters/amazon-bedrock/backend/chat.d.cts +4 -4
  20. package/dist/adapters/amazon-bedrock/backend/chat.d.ts +4 -4
  21. package/dist/adapters/amazon-bedrock/backend/embedding.d.cts +2 -2
  22. package/dist/adapters/amazon-bedrock/backend/embedding.d.ts +2 -2
  23. package/dist/adapters/anthropic/backend/chat.d.cts +5 -5
  24. package/dist/adapters/anthropic/backend/chat.d.ts +5 -5
  25. package/dist/adapters/anthropic/backend/embedding.d.cts +2 -2
  26. package/dist/adapters/anthropic/backend/embedding.d.ts +2 -2
  27. package/dist/adapters/azure-openai/backend/chat.d.cts +4 -4
  28. package/dist/adapters/azure-openai/backend/chat.d.ts +4 -4
  29. package/dist/adapters/azure-openai/backend/embedding.d.cts +2 -2
  30. package/dist/adapters/azure-openai/backend/embedding.d.ts +2 -2
  31. package/dist/adapters/dummy/backend/chat.d.cts +5 -4
  32. package/dist/adapters/dummy/backend/chat.d.ts +5 -4
  33. package/dist/adapters/dummy/backend/embedding.d.cts +2 -2
  34. package/dist/adapters/dummy/backend/embedding.d.ts +2 -2
  35. package/dist/adapters/google-vertex/backend/chat.d.cts +4 -4
  36. package/dist/adapters/google-vertex/backend/chat.d.ts +4 -4
  37. package/dist/adapters/google-vertex/backend/embedding.d.cts +2 -2
  38. package/dist/adapters/google-vertex/backend/embedding.d.ts +2 -2
  39. package/dist/adapters/groq/backend/chat.d.cts +4 -4
  40. package/dist/adapters/groq/backend/chat.d.ts +4 -4
  41. package/dist/adapters/groq/backend/embedding.d.cts +2 -2
  42. package/dist/adapters/groq/backend/embedding.d.ts +2 -2
  43. package/dist/adapters/langchain/backend/chat.d.cts +5 -4
  44. package/dist/adapters/langchain/backend/chat.d.ts +5 -4
  45. package/dist/adapters/langchain/backend/embedding.d.cts +2 -2
  46. package/dist/adapters/langchain/backend/embedding.d.ts +2 -2
  47. package/dist/adapters/langchain/tools.d.cts +1 -1
  48. package/dist/adapters/langchain/tools.d.ts +1 -1
  49. package/dist/adapters/ollama/backend/chat.cjs +1 -2
  50. package/dist/adapters/ollama/backend/chat.cjs.map +1 -1
  51. package/dist/adapters/ollama/backend/chat.d.cts +4 -5
  52. package/dist/adapters/ollama/backend/chat.d.ts +4 -5
  53. package/dist/adapters/ollama/backend/chat.js +1 -2
  54. package/dist/adapters/ollama/backend/chat.js.map +1 -1
  55. package/dist/adapters/ollama/backend/embedding.d.cts +2 -2
  56. package/dist/adapters/ollama/backend/embedding.d.ts +2 -2
  57. package/dist/adapters/openai/backend/chat.d.cts +4 -4
  58. package/dist/adapters/openai/backend/chat.d.ts +4 -4
  59. package/dist/adapters/openai/backend/embedding.d.cts +2 -2
  60. package/dist/adapters/openai/backend/embedding.d.ts +2 -2
  61. package/dist/adapters/vercel/backend/chat.cjs +77 -17
  62. package/dist/adapters/vercel/backend/chat.cjs.map +1 -1
  63. package/dist/adapters/vercel/backend/chat.d.cts +5 -4
  64. package/dist/adapters/vercel/backend/chat.d.ts +5 -4
  65. package/dist/adapters/vercel/backend/chat.js +77 -17
  66. package/dist/adapters/vercel/backend/chat.js.map +1 -1
  67. package/dist/adapters/vercel/backend/embedding.d.cts +2 -2
  68. package/dist/adapters/vercel/backend/embedding.d.ts +2 -2
  69. package/dist/adapters/vercel/backend/utils.cjs +17 -0
  70. package/dist/adapters/vercel/backend/utils.cjs.map +1 -1
  71. package/dist/adapters/vercel/backend/utils.d.cts +5 -4
  72. package/dist/adapters/vercel/backend/utils.d.ts +5 -4
  73. package/dist/adapters/vercel/backend/utils.js +17 -1
  74. package/dist/adapters/vercel/backend/utils.js.map +1 -1
  75. package/dist/adapters/watsonx/backend/chat.cjs +40 -13
  76. package/dist/adapters/watsonx/backend/chat.cjs.map +1 -1
  77. package/dist/adapters/watsonx/backend/chat.d.cts +7 -6
  78. package/dist/adapters/watsonx/backend/chat.d.ts +7 -6
  79. package/dist/adapters/watsonx/backend/chat.js +40 -13
  80. package/dist/adapters/watsonx/backend/chat.js.map +1 -1
  81. package/dist/adapters/watsonx/backend/embedding.d.cts +2 -2
  82. package/dist/adapters/watsonx/backend/embedding.d.ts +2 -2
  83. package/dist/adapters/xai/backend/chat.d.cts +4 -4
  84. package/dist/adapters/xai/backend/chat.d.ts +4 -4
  85. package/dist/{agent-BMfyig7X.d.cts → agent-Cy4QtsN8.d.cts} +4 -4
  86. package/dist/{agent-Dxw8AGWb.d.ts → agent-DHLEPXEA.d.ts} +4 -4
  87. package/dist/agents/base.d.cts +2 -2
  88. package/dist/agents/base.d.ts +2 -2
  89. package/dist/agents/experimental/replan/agent.d.cts +3 -3
  90. package/dist/agents/experimental/replan/agent.d.ts +3 -3
  91. package/dist/agents/experimental/replan/prompts.d.cts +1 -1
  92. package/dist/agents/experimental/replan/prompts.d.ts +1 -1
  93. package/dist/agents/experimental/streamlit/agent.d.cts +3 -3
  94. package/dist/agents/experimental/streamlit/agent.d.ts +3 -3
  95. package/dist/agents/react/agent.d.cts +4 -4
  96. package/dist/agents/react/agent.d.ts +4 -4
  97. package/dist/agents/react/prompts.d.cts +1 -1
  98. package/dist/agents/react/prompts.d.ts +1 -1
  99. package/dist/agents/react/runners/base.d.cts +4 -4
  100. package/dist/agents/react/runners/base.d.ts +4 -4
  101. package/dist/agents/react/runners/deep-think/prompts.d.cts +1 -1
  102. package/dist/agents/react/runners/deep-think/prompts.d.ts +1 -1
  103. package/dist/agents/react/runners/deep-think/runner.d.cts +5 -5
  104. package/dist/agents/react/runners/deep-think/runner.d.ts +5 -5
  105. package/dist/agents/react/runners/default/runner.d.cts +6 -6
  106. package/dist/agents/react/runners/default/runner.d.ts +6 -6
  107. package/dist/agents/react/runners/granite/prompts.d.cts +1 -1
  108. package/dist/agents/react/runners/granite/prompts.d.ts +1 -1
  109. package/dist/agents/react/runners/granite/runner.d.cts +5 -5
  110. package/dist/agents/react/runners/granite/runner.d.ts +5 -5
  111. package/dist/agents/react/types.d.cts +2 -2
  112. package/dist/agents/react/types.d.ts +2 -2
  113. package/dist/agents/requirement/agent.cjs +1 -1
  114. package/dist/agents/requirement/agent.cjs.map +1 -1
  115. package/dist/agents/requirement/agent.d.cts +4 -4
  116. package/dist/agents/requirement/agent.d.ts +4 -4
  117. package/dist/agents/requirement/agent.js +1 -1
  118. package/dist/agents/requirement/agent.js.map +1 -1
  119. package/dist/agents/requirement/prompts.d.cts +2 -2
  120. package/dist/agents/requirement/prompts.d.ts +2 -2
  121. package/dist/agents/requirement/requirements/conditional.d.cts +4 -4
  122. package/dist/agents/requirement/requirements/conditional.d.ts +4 -4
  123. package/dist/agents/requirement/requirements/requirement.d.cts +4 -4
  124. package/dist/agents/requirement/requirements/requirement.d.ts +4 -4
  125. package/dist/agents/requirement/requirements/utils.d.cts +1 -1
  126. package/dist/agents/requirement/requirements/utils.d.ts +1 -1
  127. package/dist/agents/requirement/runner.cjs +31 -15
  128. package/dist/agents/requirement/runner.cjs.map +1 -1
  129. package/dist/agents/requirement/runner.d.cts +13 -15
  130. package/dist/agents/requirement/runner.d.ts +13 -15
  131. package/dist/agents/requirement/runner.js +31 -15
  132. package/dist/agents/requirement/runner.js.map +1 -1
  133. package/dist/agents/requirement/types.d.cts +4 -4
  134. package/dist/agents/requirement/types.d.ts +4 -4
  135. package/dist/agents/requirement/utils/llm.d.cts +4 -4
  136. package/dist/agents/requirement/utils/llm.d.ts +4 -4
  137. package/dist/agents/requirement/utils/tool.cjs +2 -1
  138. package/dist/agents/requirement/utils/tool.cjs.map +1 -1
  139. package/dist/agents/requirement/utils/tool.d.cts +4 -4
  140. package/dist/agents/requirement/utils/tool.d.ts +4 -4
  141. package/dist/agents/requirement/utils/tool.js +2 -1
  142. package/dist/agents/requirement/utils/tool.js.map +1 -1
  143. package/dist/agents/toolCalling/agent.cjs +4 -1
  144. package/dist/agents/toolCalling/agent.cjs.map +1 -1
  145. package/dist/agents/toolCalling/agent.d.cts +6 -3
  146. package/dist/agents/toolCalling/agent.d.ts +6 -3
  147. package/dist/agents/toolCalling/agent.js +5 -2
  148. package/dist/agents/toolCalling/agent.js.map +1 -1
  149. package/dist/agents/toolCalling/types.d.cts +1 -1
  150. package/dist/agents/toolCalling/types.d.ts +1 -1
  151. package/dist/agents/types.d.cts +2 -2
  152. package/dist/agents/types.d.ts +2 -2
  153. package/dist/backend/backend.d.cts +2 -2
  154. package/dist/backend/backend.d.ts +2 -2
  155. package/dist/backend/chat.cjs +125 -5
  156. package/dist/backend/chat.cjs.map +1 -1
  157. package/dist/backend/chat.d.cts +3 -3
  158. package/dist/backend/chat.d.ts +3 -3
  159. package/dist/backend/chat.js +127 -7
  160. package/dist/backend/chat.js.map +1 -1
  161. package/dist/backend/core.d.cts +3 -3
  162. package/dist/backend/core.d.ts +3 -3
  163. package/dist/backend/embedding.d.cts +2 -2
  164. package/dist/backend/embedding.d.ts +2 -2
  165. package/dist/backend/message.cjs +20 -13
  166. package/dist/backend/message.cjs.map +1 -1
  167. package/dist/backend/message.d.cts +7 -3
  168. package/dist/backend/message.d.ts +7 -3
  169. package/dist/backend/message.js +20 -13
  170. package/dist/backend/message.js.map +1 -1
  171. package/dist/backend/utils.d.cts +2 -2
  172. package/dist/backend/utils.d.ts +2 -2
  173. package/dist/{base-BurRTBA7.d.ts → base-CyFx7BRL.d.ts} +2 -2
  174. package/dist/{base-v-PYIq5G.d.cts → base-XfWeXQ-S.d.cts} +2 -2
  175. package/dist/{chat-DB_cf15S.d.cts → chat-CC0s8z23.d.cts} +10 -9
  176. package/dist/{chat-BbCYMAdE.d.ts → chat-D8SVtw5Q.d.ts} +10 -9
  177. package/dist/context.d.cts +1 -1
  178. package/dist/context.d.ts +1 -1
  179. package/dist/emitter/emitter.cjs +2 -1
  180. package/dist/emitter/emitter.cjs.map +1 -1
  181. package/dist/emitter/emitter.d.cts +1 -1
  182. package/dist/emitter/emitter.d.ts +1 -1
  183. package/dist/emitter/emitter.js +2 -1
  184. package/dist/emitter/emitter.js.map +1 -1
  185. package/dist/emitter/types.d.cts +1 -1
  186. package/dist/emitter/types.d.ts +1 -1
  187. package/dist/{emitter-CN7I4uSV.d.ts → emitter-36-9MnvA.d.ts} +2 -2
  188. package/dist/{emitter-CGKd_-kK.d.cts → emitter-jN55XZZq.d.cts} +2 -2
  189. package/dist/index.d.cts +3 -3
  190. package/dist/index.d.ts +3 -3
  191. package/dist/internals/fetcher.d.cts +1 -1
  192. package/dist/internals/fetcher.d.ts +1 -1
  193. package/dist/internals/helpers/object.cjs +18 -0
  194. package/dist/internals/helpers/object.cjs.map +1 -1
  195. package/dist/internals/helpers/object.d.cts +2 -1
  196. package/dist/internals/helpers/object.d.ts +2 -1
  197. package/dist/internals/helpers/object.js +18 -1
  198. package/dist/internals/helpers/object.js.map +1 -1
  199. package/dist/memory/summarizeMemory.d.cts +2 -2
  200. package/dist/memory/summarizeMemory.d.ts +2 -2
  201. package/dist/middleware/streamToolCall.cjs +138 -0
  202. package/dist/middleware/streamToolCall.cjs.map +1 -0
  203. package/dist/middleware/streamToolCall.d.cts +96 -0
  204. package/dist/middleware/streamToolCall.d.ts +96 -0
  205. package/dist/middleware/streamToolCall.js +136 -0
  206. package/dist/middleware/streamToolCall.js.map +1 -0
  207. package/dist/middleware/trajectory.cjs +14 -5
  208. package/dist/middleware/trajectory.cjs.map +1 -1
  209. package/dist/middleware/trajectory.d.cts +1 -1
  210. package/dist/middleware/trajectory.d.ts +1 -1
  211. package/dist/middleware/trajectory.js +13 -4
  212. package/dist/middleware/trajectory.js.map +1 -1
  213. package/dist/parsers/linePrefix.d.cts +1 -1
  214. package/dist/parsers/linePrefix.d.ts +1 -1
  215. package/dist/tools/arxiv.d.cts +1 -1
  216. package/dist/tools/arxiv.d.ts +1 -1
  217. package/dist/tools/base.d.cts +1 -1
  218. package/dist/tools/base.d.ts +1 -1
  219. package/dist/tools/calculator.d.cts +1 -1
  220. package/dist/tools/calculator.d.ts +1 -1
  221. package/dist/tools/custom.d.cts +2 -2
  222. package/dist/tools/custom.d.ts +2 -2
  223. package/dist/tools/database/elasticsearch.d.cts +1 -1
  224. package/dist/tools/database/elasticsearch.d.ts +1 -1
  225. package/dist/tools/database/milvus.d.cts +1 -1
  226. package/dist/tools/database/milvus.d.ts +1 -1
  227. package/dist/tools/database/qdrant.d.cts +1 -1
  228. package/dist/tools/database/qdrant.d.ts +1 -1
  229. package/dist/tools/database/sql.d.cts +1 -1
  230. package/dist/tools/database/sql.d.ts +1 -1
  231. package/dist/tools/handoff.cjs +68 -0
  232. package/dist/tools/handoff.cjs.map +1 -0
  233. package/dist/tools/handoff.d.cts +47 -0
  234. package/dist/tools/handoff.d.ts +47 -0
  235. package/dist/tools/handoff.js +66 -0
  236. package/dist/tools/handoff.js.map +1 -0
  237. package/dist/tools/llm.d.cts +2 -2
  238. package/dist/tools/llm.d.ts +2 -2
  239. package/dist/tools/mcp.d.cts +1 -1
  240. package/dist/tools/mcp.d.ts +1 -1
  241. package/dist/tools/openapi.d.cts +1 -1
  242. package/dist/tools/openapi.d.ts +1 -1
  243. package/dist/tools/python/output.d.cts +1 -1
  244. package/dist/tools/python/output.d.ts +1 -1
  245. package/dist/tools/python/python.d.cts +2 -2
  246. package/dist/tools/python/python.d.ts +2 -2
  247. package/dist/tools/search/base.d.cts +1 -1
  248. package/dist/tools/search/base.d.ts +1 -1
  249. package/dist/tools/search/duckDuckGoSearch.d.cts +1 -1
  250. package/dist/tools/search/duckDuckGoSearch.d.ts +1 -1
  251. package/dist/tools/search/googleSearch.d.cts +1 -1
  252. package/dist/tools/search/googleSearch.d.ts +1 -1
  253. package/dist/tools/search/searXNGSearch.d.cts +1 -1
  254. package/dist/tools/search/searXNGSearch.d.ts +1 -1
  255. package/dist/tools/search/wikipedia.d.cts +1 -1
  256. package/dist/tools/search/wikipedia.d.ts +1 -1
  257. package/dist/tools/similarity.d.cts +1 -1
  258. package/dist/tools/similarity.d.ts +1 -1
  259. package/dist/tools/think.d.cts +1 -1
  260. package/dist/tools/think.d.ts +1 -1
  261. package/dist/tools/weather/openMeteo.d.cts +1 -1
  262. package/dist/tools/weather/openMeteo.d.ts +1 -1
  263. package/dist/tools/web/webCrawler.d.cts +1 -1
  264. package/dist/tools/web/webCrawler.d.ts +1 -1
  265. package/dist/{types-Cx6f43du.d.cts → types-D9pn62yF.d.cts} +3 -3
  266. package/dist/{types-BXkkbABd.d.ts → types-Dyd4e1G6.d.ts} +3 -3
  267. package/dist/version.cjs +1 -1
  268. package/dist/version.js +1 -1
  269. package/dist/workflows/agent.d.cts +40 -40
  270. package/dist/workflows/agent.d.ts +40 -40
  271. package/dist/workflows/workflow.d.cts +1 -1
  272. package/dist/workflows/workflow.d.ts +1 -1
  273. package/package.json +8 -8
@@ -1,7 +1,7 @@
1
1
  import { AnyTool, AnyToolClass } from '../../../tools/base.js';
2
2
  import 'ajv';
3
3
  import '../../../context.js';
4
- import '../../../emitter-CN7I4uSV.js';
4
+ import '../../../emitter-36-9MnvA.js';
5
5
  import '../../../internals/types.js';
6
6
  import '../../../internals/helpers/guards.js';
7
7
  import '../../../internals/serializable.js';
@@ -9,6 +9,7 @@ var llm_cjs = require('./utils/llm.cjs');
9
9
  var tool_cjs = require('./utils/tool.cjs');
10
10
  var schema_cjs = require('../../internals/helpers/schema.cjs');
11
11
  var utils_cjs = require('../../adapters/vercel/backend/utils.cjs');
12
+ var streamToolCall_cjs = require('../../middleware/streamToolCall.cjs');
12
13
 
13
14
  var __defProp = Object.defineProperty;
14
15
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
@@ -65,30 +66,28 @@ class RequirementAgentRunner {
65
66
  }
66
67
  }
67
68
  async runLLM(request) {
68
- const { messages, options } = await this.prepareLLMRequest(request);
69
- const response = await this.llm.create({
70
- ...options,
71
- messages
72
- });
73
- if (response.usage) {
74
- utils_cjs.mergeTokenUsage(this.state.usage, response.usage);
69
+ const streamMiddleware = this.createFinalAnswerStream(request.finalAnswer);
70
+ try {
71
+ const input = await this.prepareLLMRequest(request);
72
+ const response = await this.llm.create(input).middleware(streamMiddleware);
73
+ if (response.usage) {
74
+ utils_cjs.mergeTokenUsage(this.state.usage, response.usage);
75
+ }
76
+ return response;
77
+ } finally {
78
+ streamMiddleware.unbind();
75
79
  }
76
- return response;
77
80
  }
78
81
  async prepareLLMRequest(request) {
79
82
  const messages = [
80
83
  await llm_cjs.createSystemMessage(this.templates.system, request),
81
84
  ...this.state.memory.messages
82
85
  ];
83
- const options = {
84
- maxRetries: this.runConfig.maxRetriesPerStep,
85
- tools: request.allowedTools,
86
- toolChoice: request.toolChoice,
87
- stream: false
88
- };
89
86
  return {
90
87
  messages,
91
- options
88
+ tools: request.allowedTools,
89
+ toolChoice: request.toolChoice,
90
+ streamPartialToolCalls: true
92
91
  };
93
92
  }
94
93
  async createFinalAnswerToolCall(fullText) {
@@ -245,6 +244,23 @@ class RequirementAgentRunner {
245
244
  await this.state.memory.deleteMany(tempMessages);
246
245
  return response;
247
246
  }
247
+ createFinalAnswerStream(finalAnswer) {
248
+ const middleware = new streamToolCall_cjs.StreamToolCallMiddleware({
249
+ target: finalAnswer,
250
+ forceStreaming: false,
251
+ key: "response",
252
+ matchNested: false
253
+ });
254
+ middleware.emitter.on("update", async (data, _) => {
255
+ await this.ctx.emitter.emit("finalAnswer", {
256
+ state: this.state,
257
+ output: data.output,
258
+ delta: data.delta,
259
+ outputStructured: void 0
260
+ });
261
+ });
262
+ return middleware;
263
+ }
248
264
  }
249
265
 
250
266
  exports.RequirementAgentRunner = RequirementAgentRunner;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/agents/requirement/runner.ts"],"names":["TEMP_MESSAGE_KEY","RequirementAgentRunner","state","reasoner","iterationErrorCounter","globalErrorCounter","llm","runConfig","tools","requirements","expectedOutput","toolCallCycleChecker","ctx","forceFinalAnswerAsTool","templates","answer","result","memory","UnconstrainedMemory","steps","iteration","usage","totalTokens","promptTokens","completionTokens","reasoningTokens","cachedPromptTokens","undefined","finalAnswer","FinalAnswerTool","RequirementsReasoner","maxRetriesPerIteration","maxRetriesPerStep","RetryCounter","AgentError","maxRetries","Math","max","totalMaxRetries","incrementIteration","maxIterations","runLLM","request","messages","options","prepareLLMRequest","response","create","mergeTokenUsage","createSystemMessage","system","allowedTools","toolChoice","stream","createFinalAnswerToolCall","fullText","parsed","parseBrokenJson","pair","customSchema","AssistantMessage","type","toolCallId","uuidv4","substring","toolName","name","input","inputSchema","parse","createRequest","extraRules","invokeToolCalls","toolCalls","toolResults","results","Promise","all","map","msg","runTool","toolCall","push","id","output","tool","error","toolError","render","reason","explain","isEmpty","getTextContent","toolNoResult","ToolMessage","value","use","addMessages","addMany","run","update","emitter","emit","runIteration","getToolCalls","length","textMessages","getTextMessages","text","m","join","canStop","finalAnswerToolCall","err","updatedRequest","target","allowed","hidden","forced","preventStop","add","toolCallMsg","register","cycleFound","reset","tempMessages","filter","meta","deleteMany"],"mappings":"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","file":"runner.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { v4 as uuidv4 } from \"uuid\";\nimport { AgentError } from \"@/agents/base.js\";\nimport { ChatModel, ChatModelOutput } from \"@/backend/chat.js\";\nimport { AssistantMessage, Message, ToolMessage } from \"@/backend/message.js\";\nimport { ToolCallPart } from \"ai\";\nimport { AnyTool } from \"@/tools/base.js\";\nimport { UnconstrainedMemory } from \"@/memory/unconstrainedMemory.js\";\nimport { RetryCounter } from \"@/internals/helpers/counter.js\";\nimport { RunContext } from \"@/context.js\";\nimport {\n RequirementAgentExecutionConfig,\n RequirementAgentRequest,\n RequirementAgentRunState,\n RequirementAgentTemplates,\n} from \"./types.js\";\nimport { Requirement, Rule } from \"./requirements/requirement.js\";\nimport { RequirementsReasoner, createSystemMessage } from \"./utils/llm.js\";\nimport { FinalAnswerTool, runTool } from \"./utils/tool.js\";\nimport { ToolCallChecker } from \"./utils/toolCallChecker.js\";\nimport { z } from \"zod\";\nimport { parseBrokenJson } from \"@/internals/helpers/schema.js\";\nimport { RequirementAgent } from \"@/agents/requirement/agent.js\";\nimport { mergeTokenUsage } from \"@/adapters/vercel/backend/utils.js\";\n\nconst TEMP_MESSAGE_KEY = \"tempMessage\";\n\n/**\n * Runner for RequirementAgent execution\n */\nexport class RequirementAgentRunner {\n protected readonly state: RequirementAgentRunState;\n protected readonly reasoner: RequirementsReasoner;\n protected readonly iterationErrorCounter: RetryCounter;\n protected readonly globalErrorCounter: RetryCounter;\n\n constructor(\n protected readonly llm: ChatModel,\n protected readonly runConfig: RequirementAgentExecutionConfig,\n tools: AnyTool[],\n protected readonly requirements: Requirement[],\n expectedOutput: string | z.ZodSchema | null,\n protected readonly toolCallCycleChecker: ToolCallChecker,\n protected readonly ctx: RunContext<RequirementAgent>,\n protected forceFinalAnswerAsTool: boolean,\n protected readonly templates: RequirementAgentTemplates,\n ) {\n this.state = {\n answer: null,\n result: null,\n memory: new UnconstrainedMemory(),\n steps: [],\n iteration: 0,\n usage: {\n totalTokens: 0,\n promptTokens: 0,\n completionTokens: 0,\n reasoningTokens: 0,\n cachedPromptTokens: undefined,\n },\n };\n\n this.requirements = requirements;\n const finalAnswer = new FinalAnswerTool(expectedOutput, this.state);\n this.reasoner = new RequirementsReasoner(tools, finalAnswer, ctx);\n\n const maxRetriesPerIteration = runConfig.maxRetriesPerStep ?? 0;\n this.iterationErrorCounter = new RetryCounter(maxRetriesPerIteration, AgentError);\n\n const maxRetries = Math.max(maxRetriesPerIteration, runConfig.totalMaxRetries ?? 0);\n this.globalErrorCounter = new RetryCounter(maxRetries, AgentError);\n }\n\n protected incrementIteration(): void {\n this.state.iteration++;\n\n if (this.runConfig.maxIterations && this.state.iteration > this.runConfig.maxIterations) {\n throw new AgentError(\n `Agent was not able to resolve the task in ${this.state.iteration} iterations.`,\n );\n }\n }\n\n protected async runLLM(request: RequirementAgentRequest): Promise<ChatModelOutput> {\n const { messages, options } = await this.prepareLLMRequest(request);\n const response = await this.llm.create({ ...options, messages });\n\n if (response.usage) {\n mergeTokenUsage(this.state.usage, response.usage);\n }\n\n return response;\n }\n\n protected async prepareLLMRequest(request: RequirementAgentRequest) {\n const messages: Message[] = [\n await createSystemMessage(this.templates.system, request),\n ...this.state.memory.messages,\n ];\n\n const options = {\n maxRetries: this.runConfig.maxRetriesPerStep,\n tools: request.allowedTools,\n toolChoice: request.toolChoice,\n stream: false,\n };\n\n return { messages, options };\n }\n\n protected async createFinalAnswerToolCall(fullText: string): Promise<AssistantMessage | null> {\n // Try to extract JSON from text\n const parsed = parseBrokenJson(fullText, { pair: [\"{\", \"}\"] });\n if (!parsed) {\n // If no JSON and no custom schema, wrap in default schema\n if (!this.reasoner.finalAnswer.customSchema) {\n return new AssistantMessage([\n {\n type: \"tool-call\",\n toolCallId: `call_${uuidv4().substring(0, 8)}`,\n toolName: this.reasoner.finalAnswer.name,\n input: this.reasoner.finalAnswer.inputSchema().parse({ response: fullText }),\n },\n ]);\n }\n return null;\n }\n\n return new AssistantMessage([\n {\n type: \"tool-call\",\n toolCallId: `call_${uuidv4().substring(0, 8)}`,\n toolName: this.reasoner.finalAnswer.name,\n input: parsed,\n },\n ]);\n }\n\n protected async createRequest(extraRules: Rule[] = []): Promise<RequirementAgentRequest> {\n return await this.reasoner.createRequest(this.state, this.forceFinalAnswerAsTool, extraRules);\n }\n\n protected async invokeToolCalls(\n tools: AnyTool[],\n toolCalls: ToolCallPart[],\n ): Promise<ToolMessage[]> {\n const toolResults: ToolMessage[] = [];\n\n const results = await Promise.all(\n toolCalls.map((msg) => runTool(tools, msg, { state: this.state })),\n );\n\n for (const toolCall of results) {\n this.state.steps.push({\n id: uuidv4(),\n iteration: this.state.iteration,\n input: toolCall.input,\n output: toolCall.output,\n tool: toolCall.tool,\n error: toolCall.error,\n });\n\n let result: string;\n if (toolCall.error) {\n result = this.templates.toolError.render({\n reason: toolCall.error.explain(),\n });\n } else {\n result = !toolCall.output.isEmpty()\n ? toolCall.output.getTextContent()\n : this.templates.toolNoResult.render({\n toolCall: { tool: toolCall.tool, input: toolCall.input },\n });\n }\n\n toolResults.push(\n new ToolMessage({\n type: \"tool-result\",\n toolName: toolCall.tool?.name || toolCall.msg.toolName,\n toolCallId: toolCall.msg.toolCallId,\n output: { type: \"text\", value: result },\n }),\n );\n\n if (toolCall.error) {\n this.iterationErrorCounter.use(toolCall.error);\n this.globalErrorCounter.use(toolCall.error);\n }\n }\n\n return toolResults;\n }\n\n async addMessages(messages: Message[]): Promise<void> {\n await this.state.memory.addMany(messages);\n }\n\n async run(): Promise<RequirementAgentRunState> {\n if (this.state.answer) {\n return this.state;\n }\n\n // Initialize requirements\n await this.reasoner.update(this.requirements);\n\n while (!this.state.answer) {\n this.incrementIteration();\n\n const request = await this.createRequest();\n await this.ctx.emitter.emit(\"start\", { state: this.state, request });\n const response = await this.runIteration(request);\n await this.ctx.emitter.emit(\"success\", { state: this.state, response });\n }\n\n return this.state;\n }\n\n protected async runIteration(request: RequirementAgentRequest): Promise<ChatModelOutput> {\n const response = await this.runLLM(request);\n\n // Try to cast text message to final answer tool call if allowed\n const toolCalls = response.getToolCalls();\n if (toolCalls.length === 0) {\n const textMessages = response.getTextMessages();\n const text = textMessages.map((m) => m.text).join(\"\\n\");\n\n if (!text || request.canStop) {\n throw new AgentError(\"Model produced an empty response.\");\n }\n\n const finalAnswerToolCall = await this.createFinalAnswerToolCall(text);\n if (!finalAnswerToolCall) {\n const err = new AgentError(\"Model produced an invalid final answer tool call.\");\n this.iterationErrorCounter.use(err);\n this.globalErrorCounter.use(err);\n\n await this.reasoner.update([]);\n const updatedRequest = await this.createRequest([\n {\n target: this.reasoner.finalAnswer.name,\n allowed: true,\n hidden: false,\n forced: false,\n preventStop: false,\n },\n ]);\n this.forceFinalAnswerAsTool = true;\n return await this.runIteration(updatedRequest);\n }\n\n await this.state.memory.add(finalAnswerToolCall);\n toolCalls.push(...finalAnswerToolCall.getToolCalls());\n } else {\n await this.state.memory.addMany(response.messages);\n }\n\n // Check for cycles\n for (const toolCallMsg of toolCalls) {\n this.toolCallCycleChecker.register(toolCallMsg);\n if (this.toolCallCycleChecker.cycleFound) {\n this.toolCallCycleChecker.reset();\n const updatedRequest = await this.createRequest([\n {\n target: toolCallMsg.toolName,\n allowed: false,\n hidden: false,\n forced: true,\n preventStop: false,\n },\n ]);\n return await this.runIteration(updatedRequest);\n }\n }\n\n const toolResults = await this.invokeToolCalls(request.allowedTools, toolCalls);\n await this.state.memory.addMany(toolResults);\n\n // Delete temporary messages\n const tempMessages = this.state.memory.messages.filter((msg) => msg.meta[TEMP_MESSAGE_KEY]);\n await this.state.memory.deleteMany(tempMessages);\n\n return response;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/agents/requirement/runner.ts"],"names":["TEMP_MESSAGE_KEY","RequirementAgentRunner","state","reasoner","iterationErrorCounter","globalErrorCounter","llm","runConfig","tools","requirements","expectedOutput","toolCallCycleChecker","ctx","forceFinalAnswerAsTool","templates","answer","result","memory","UnconstrainedMemory","steps","iteration","usage","totalTokens","promptTokens","completionTokens","reasoningTokens","cachedPromptTokens","undefined","finalAnswer","FinalAnswerTool","RequirementsReasoner","maxRetriesPerIteration","maxRetriesPerStep","RetryCounter","AgentError","maxRetries","Math","max","totalMaxRetries","incrementIteration","maxIterations","runLLM","request","streamMiddleware","createFinalAnswerStream","input","prepareLLMRequest","response","create","middleware","mergeTokenUsage","unbind","messages","createSystemMessage","system","allowedTools","toolChoice","streamPartialToolCalls","createFinalAnswerToolCall","fullText","parsed","parseBrokenJson","pair","customSchema","AssistantMessage","type","toolCallId","uuidv4","substring","toolName","name","inputSchema","parse","createRequest","extraRules","invokeToolCalls","toolCalls","toolResults","results","Promise","all","map","msg","runTool","toolCall","push","id","output","tool","error","toolError","render","reason","explain","isEmpty","getTextContent","toolNoResult","ToolMessage","value","use","addMessages","addMany","run","update","emitter","emit","runIteration","getToolCalls","length","textMessages","getTextMessages","text","m","join","canStop","finalAnswerToolCall","err","updatedRequest","target","allowed","hidden","forced","preventStop","add","toolCallMsg","register","cycleFound","reset","tempMessages","filter","meta","deleteMany","StreamToolCallMiddleware","forceStreaming","key","matchNested","on","data","_","delta","outputStructured"],"mappings":"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","file":"runner.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { v4 as uuidv4 } from \"uuid\";\nimport { AgentError } from \"@/agents/base.js\";\nimport { ChatModel, ChatModelInput, ChatModelOutput } from \"@/backend/chat.js\";\nimport { AssistantMessage, Message, ToolMessage } from \"@/backend/message.js\";\nimport { ToolCallPart } from \"ai\";\nimport { AnyTool } from \"@/tools/base.js\";\nimport { UnconstrainedMemory } from \"@/memory/unconstrainedMemory.js\";\nimport { RetryCounter } from \"@/internals/helpers/counter.js\";\nimport { RunContext } from \"@/context.js\";\nimport {\n RequirementAgentExecutionConfig,\n RequirementAgentRequest,\n RequirementAgentRunState,\n RequirementAgentTemplates,\n} from \"./types.js\";\nimport { Requirement, Rule } from \"./requirements/requirement.js\";\nimport { RequirementsReasoner, createSystemMessage } from \"./utils/llm.js\";\nimport { FinalAnswerTool, runTool } from \"./utils/tool.js\";\nimport { ToolCallChecker } from \"./utils/toolCallChecker.js\";\nimport { z } from \"zod\";\nimport { parseBrokenJson } from \"@/internals/helpers/schema.js\";\nimport { RequirementAgent } from \"@/agents/requirement/agent.js\";\nimport { mergeTokenUsage } from \"@/adapters/vercel/backend/utils.js\";\nimport { StreamToolCallMiddleware } from \"@/middleware/streamToolCall.js\";\n\nconst TEMP_MESSAGE_KEY = \"tempMessage\";\n\n/**\n * Runner for RequirementAgent execution\n */\nexport class RequirementAgentRunner {\n protected readonly state: RequirementAgentRunState;\n protected readonly reasoner: RequirementsReasoner;\n protected readonly iterationErrorCounter: RetryCounter;\n protected readonly globalErrorCounter: RetryCounter;\n\n constructor(\n protected readonly llm: ChatModel,\n protected readonly runConfig: RequirementAgentExecutionConfig,\n tools: AnyTool[],\n protected readonly requirements: Requirement[],\n expectedOutput: string | z.ZodSchema | null,\n protected readonly toolCallCycleChecker: ToolCallChecker,\n protected readonly ctx: RunContext<RequirementAgent>,\n protected forceFinalAnswerAsTool: boolean,\n protected readonly templates: RequirementAgentTemplates,\n ) {\n this.state = {\n answer: null,\n result: null,\n memory: new UnconstrainedMemory(),\n steps: [],\n iteration: 0,\n usage: {\n totalTokens: 0,\n promptTokens: 0,\n completionTokens: 0,\n reasoningTokens: 0,\n cachedPromptTokens: undefined,\n },\n };\n\n this.requirements = requirements;\n const finalAnswer = new FinalAnswerTool(expectedOutput, this.state);\n this.reasoner = new RequirementsReasoner(tools, finalAnswer, ctx);\n\n const maxRetriesPerIteration = runConfig.maxRetriesPerStep ?? 0;\n this.iterationErrorCounter = new RetryCounter(maxRetriesPerIteration, AgentError);\n\n const maxRetries = Math.max(maxRetriesPerIteration, runConfig.totalMaxRetries ?? 0);\n this.globalErrorCounter = new RetryCounter(maxRetries, AgentError);\n }\n\n protected incrementIteration(): void {\n this.state.iteration++;\n\n if (this.runConfig.maxIterations && this.state.iteration > this.runConfig.maxIterations) {\n throw new AgentError(\n `Agent was not able to resolve the task in ${this.state.iteration} iterations.`,\n );\n }\n }\n\n protected async runLLM(request: RequirementAgentRequest): Promise<ChatModelOutput> {\n const streamMiddleware = this.createFinalAnswerStream(request.finalAnswer);\n try {\n const input = await this.prepareLLMRequest(request);\n const response = await this.llm.create(input).middleware(streamMiddleware);\n\n if (response.usage) {\n mergeTokenUsage(this.state.usage, response.usage);\n }\n\n return response;\n } finally {\n streamMiddleware.unbind();\n }\n }\n\n protected async prepareLLMRequest(request: RequirementAgentRequest): Promise<ChatModelInput> {\n const messages: Message[] = [\n await createSystemMessage(this.templates.system, request),\n ...this.state.memory.messages,\n ];\n\n return {\n messages,\n tools: request.allowedTools,\n toolChoice: request.toolChoice,\n streamPartialToolCalls: true,\n };\n }\n\n protected async createFinalAnswerToolCall(fullText: string): Promise<AssistantMessage | null> {\n // Try to extract JSON from text\n const parsed = parseBrokenJson(fullText, { pair: [\"{\", \"}\"] });\n if (!parsed) {\n // If no JSON and no custom schema, wrap in default schema\n if (!this.reasoner.finalAnswer.customSchema) {\n return new AssistantMessage([\n {\n type: \"tool-call\",\n toolCallId: `call_${uuidv4().substring(0, 8)}`,\n toolName: this.reasoner.finalAnswer.name,\n input: this.reasoner.finalAnswer.inputSchema().parse({ response: fullText }),\n },\n ]);\n }\n return null;\n }\n\n return new AssistantMessage([\n {\n type: \"tool-call\",\n toolCallId: `call_${uuidv4().substring(0, 8)}`,\n toolName: this.reasoner.finalAnswer.name,\n input: parsed,\n },\n ]);\n }\n\n protected async createRequest(extraRules: Rule[] = []): Promise<RequirementAgentRequest> {\n return await this.reasoner.createRequest(this.state, this.forceFinalAnswerAsTool, extraRules);\n }\n\n protected async invokeToolCalls(\n tools: AnyTool[],\n toolCalls: ToolCallPart[],\n ): Promise<ToolMessage[]> {\n const toolResults: ToolMessage[] = [];\n\n const results = await Promise.all(\n toolCalls.map((msg) => runTool(tools, msg, { state: this.state })),\n );\n\n for (const toolCall of results) {\n this.state.steps.push({\n id: uuidv4(),\n iteration: this.state.iteration,\n input: toolCall.input,\n output: toolCall.output,\n tool: toolCall.tool,\n error: toolCall.error,\n });\n\n let result: string;\n if (toolCall.error) {\n result = this.templates.toolError.render({\n reason: toolCall.error.explain(),\n });\n } else {\n result = !toolCall.output.isEmpty()\n ? toolCall.output.getTextContent()\n : this.templates.toolNoResult.render({\n toolCall: { tool: toolCall.tool, input: toolCall.input },\n });\n }\n toolResults.push(\n new ToolMessage({\n type: \"tool-result\",\n toolName: toolCall.tool?.name || toolCall.msg.toolName,\n toolCallId: toolCall.msg.toolCallId,\n output: { type: \"text\", value: result },\n }),\n );\n\n if (toolCall.error) {\n this.iterationErrorCounter.use(toolCall.error);\n this.globalErrorCounter.use(toolCall.error);\n }\n }\n\n return toolResults;\n }\n\n async addMessages(messages: Message[]): Promise<void> {\n await this.state.memory.addMany(messages);\n }\n\n async run(): Promise<RequirementAgentRunState> {\n if (this.state.answer) {\n return this.state;\n }\n\n // Initialize requirements\n await this.reasoner.update(this.requirements);\n\n while (!this.state.answer) {\n this.incrementIteration();\n\n const request = await this.createRequest();\n await this.ctx.emitter.emit(\"start\", { state: this.state, request });\n const response = await this.runIteration(request);\n await this.ctx.emitter.emit(\"success\", { state: this.state, response });\n }\n\n return this.state;\n }\n\n protected async runIteration(request: RequirementAgentRequest): Promise<ChatModelOutput> {\n const response = await this.runLLM(request);\n\n // Try to cast text message to final answer tool call if allowed\n const toolCalls = response.getToolCalls();\n if (toolCalls.length === 0) {\n const textMessages = response.getTextMessages();\n const text = textMessages.map((m) => m.text).join(\"\\n\");\n\n if (!text || request.canStop) {\n throw new AgentError(\"Model produced an empty response.\");\n }\n\n const finalAnswerToolCall = await this.createFinalAnswerToolCall(text);\n if (!finalAnswerToolCall) {\n const err = new AgentError(\"Model produced an invalid final answer tool call.\");\n this.iterationErrorCounter.use(err);\n this.globalErrorCounter.use(err);\n\n await this.reasoner.update([]);\n const updatedRequest = await this.createRequest([\n {\n target: this.reasoner.finalAnswer.name,\n allowed: true,\n hidden: false,\n forced: false,\n preventStop: false,\n },\n ]);\n this.forceFinalAnswerAsTool = true;\n return await this.runIteration(updatedRequest);\n }\n\n await this.state.memory.add(finalAnswerToolCall);\n toolCalls.push(...finalAnswerToolCall.getToolCalls());\n } else {\n await this.state.memory.addMany(response.messages);\n }\n\n // Check for cycles\n for (const toolCallMsg of toolCalls) {\n this.toolCallCycleChecker.register(toolCallMsg);\n if (this.toolCallCycleChecker.cycleFound) {\n this.toolCallCycleChecker.reset();\n const updatedRequest = await this.createRequest([\n {\n target: toolCallMsg.toolName,\n allowed: false,\n hidden: false,\n forced: true,\n preventStop: false,\n },\n ]);\n return await this.runIteration(updatedRequest);\n }\n }\n\n const toolResults = await this.invokeToolCalls(request.allowedTools, toolCalls);\n await this.state.memory.addMany(toolResults);\n\n // Delete temporary messages\n const tempMessages = this.state.memory.messages.filter((msg) => msg.meta[TEMP_MESSAGE_KEY]);\n await this.state.memory.deleteMany(tempMessages);\n\n return response;\n }\n\n private createFinalAnswerStream(finalAnswer: FinalAnswerTool) {\n const middleware = new StreamToolCallMiddleware({\n target: finalAnswer,\n forceStreaming: false,\n key: \"response\",\n matchNested: false,\n });\n middleware.emitter.on(\"update\", async (data, _) => {\n await this.ctx.emitter.emit(\"finalAnswer\", {\n state: this.state,\n output: data.output,\n delta: data.delta,\n outputStructured: undefined,\n });\n });\n return middleware;\n }\n}\n"]}
@@ -1,13 +1,13 @@
1
1
  import { RunContext, MiddlewareType, GetRunContext } from '../../context.cjs';
2
2
  import * as zod from 'zod';
3
3
  import { z } from 'zod';
4
- import { a as BaseAgent, b as AgentMeta } from '../../base-v-PYIq5G.cjs';
4
+ import { a as BaseAgent, c as AgentMeta } from '../../base-XfWeXQ-S.cjs';
5
5
  import { AnyTool } from '../../tools/base.cjs';
6
6
  import { BaseMemory } from '../../memory/base.cjs';
7
- import { E as Emitter } from '../../emitter-CGKd_-kK.cjs';
8
- import { m as ChatModel, n as ChatModelOutput, c as ChatModelToolChoice } from '../../chat-DB_cf15S.cjs';
9
- import { Message, MessageContentPart, AssistantMessage, ToolMessage } from '../../backend/message.cjs';
10
- import { c as RequirementAgentExecutionConfig, d as RequirementAgentTemplates, R as RequirementAgentRunState, a as RequirementAgentRequest, e as RequirementAgentRunInput, f as RequirementAgentOutput, g as RequirementAgentRunOptions, h as RequirementAgentCallbacks } from '../../types-Cx6f43du.cjs';
7
+ import { E as Emitter } from '../../emitter-jN55XZZq.cjs';
8
+ import { m as ChatModel, n as ChatModelOutput, d as ChatModelInput } from '../../chat-CC0s8z23.cjs';
9
+ import { AssistantMessage, ToolMessage, Message } from '../../backend/message.cjs';
10
+ import { c as RequirementAgentExecutionConfig, d as RequirementAgentTemplates, R as RequirementAgentRunState, a as RequirementAgentRequest, e as RequirementAgentRunInput, f as RequirementAgentOutput, g as RequirementAgentRunOptions, h as RequirementAgentCallbacks } from '../../types-D9pn62yF.cjs';
11
11
  import { Requirement, Rule } from './requirements/requirement.cjs';
12
12
  import { ToolCallPart } from 'ai';
13
13
  import { RetryCounter } from '../../internals/helpers/counter.cjs';
@@ -28,6 +28,11 @@ import '../../template.cjs';
28
28
  import '../../logger/logger.cjs';
29
29
  import 'pino';
30
30
 
31
+ /**
32
+ * Copyright 2025 © BeeAI a Series of LF Projects, LLC
33
+ * SPDX-License-Identifier: Apache-2.0
34
+ */
35
+
31
36
  /**
32
37
  * Runner for RequirementAgent execution
33
38
  */
@@ -46,21 +51,14 @@ declare class RequirementAgentRunner {
46
51
  constructor(llm: ChatModel, runConfig: RequirementAgentExecutionConfig, tools: AnyTool[], requirements: Requirement[], expectedOutput: string | z.ZodSchema | null, toolCallCycleChecker: ToolCallChecker, ctx: RunContext<RequirementAgent>, forceFinalAnswerAsTool: boolean, templates: RequirementAgentTemplates);
47
52
  protected incrementIteration(): void;
48
53
  protected runLLM(request: RequirementAgentRequest): Promise<ChatModelOutput>;
49
- protected prepareLLMRequest(request: RequirementAgentRequest): Promise<{
50
- messages: Message<MessageContentPart, string>[];
51
- options: {
52
- maxRetries: number | undefined;
53
- tools: AnyTool[];
54
- toolChoice: ChatModelToolChoice;
55
- stream: boolean;
56
- };
57
- }>;
54
+ protected prepareLLMRequest(request: RequirementAgentRequest): Promise<ChatModelInput>;
58
55
  protected createFinalAnswerToolCall(fullText: string): Promise<AssistantMessage | null>;
59
56
  protected createRequest(extraRules?: Rule[]): Promise<RequirementAgentRequest>;
60
57
  protected invokeToolCalls(tools: AnyTool[], toolCalls: ToolCallPart[]): Promise<ToolMessage[]>;
61
58
  addMessages(messages: Message[]): Promise<void>;
62
59
  run(): Promise<RequirementAgentRunState>;
63
60
  protected runIteration(request: RequirementAgentRequest): Promise<ChatModelOutput>;
61
+ private createFinalAnswerStream;
64
62
  }
65
63
 
66
64
  type RequirementAgentTemplateFactory<K extends keyof RequirementAgentTemplates> = (template: RequirementAgentTemplates[K]) => RequirementAgentTemplates[K];
@@ -106,7 +104,7 @@ declare class RequirementAgent extends BaseAgent<RequirementAgentRunInput, Requi
106
104
  createSnapshot(): {
107
105
  input: InternalRequirementAgentInput;
108
106
  emitter: Emitter<RequirementAgentCallbacks>;
109
- runnerClass: new (llm: ChatModel, runConfig: RequirementAgentExecutionConfig, tools: AnyTool[], requirements: Requirement[], expectedOutput: string | zod.ZodType<any, zod.ZodTypeDef, any> | null, toolCallCycleChecker: ToolCallChecker, ctx: RunContext<RequirementAgent, any>, forceFinalAnswerAsTool: boolean, templates: RequirementAgentTemplates) => RequirementAgentRunner;
107
+ runner: new (llm: ChatModel, runConfig: RequirementAgentExecutionConfig, tools: AnyTool[], requirements: Requirement[], expectedOutput: string | zod.ZodType<any, zod.ZodTypeDef, any> | null, toolCallCycleChecker: ToolCallChecker, ctx: RunContext<RequirementAgent, any>, forceFinalAnswerAsTool: boolean, templates: RequirementAgentTemplates) => RequirementAgentRunner;
110
108
  isRunning: boolean;
111
109
  middlewares: MiddlewareType<any>[];
112
110
  };
@@ -1,13 +1,13 @@
1
1
  import { RunContext, MiddlewareType, GetRunContext } from '../../context.js';
2
2
  import * as zod from 'zod';
3
3
  import { z } from 'zod';
4
- import { a as BaseAgent, b as AgentMeta } from '../../base-BurRTBA7.js';
4
+ import { a as BaseAgent, c as AgentMeta } from '../../base-CyFx7BRL.js';
5
5
  import { AnyTool } from '../../tools/base.js';
6
6
  import { BaseMemory } from '../../memory/base.js';
7
- import { E as Emitter } from '../../emitter-CN7I4uSV.js';
8
- import { m as ChatModel, n as ChatModelOutput, c as ChatModelToolChoice } from '../../chat-BbCYMAdE.js';
9
- import { Message, MessageContentPart, AssistantMessage, ToolMessage } from '../../backend/message.js';
10
- import { c as RequirementAgentExecutionConfig, d as RequirementAgentTemplates, R as RequirementAgentRunState, a as RequirementAgentRequest, e as RequirementAgentRunInput, f as RequirementAgentOutput, g as RequirementAgentRunOptions, h as RequirementAgentCallbacks } from '../../types-BXkkbABd.js';
7
+ import { E as Emitter } from '../../emitter-36-9MnvA.js';
8
+ import { m as ChatModel, n as ChatModelOutput, d as ChatModelInput } from '../../chat-D8SVtw5Q.js';
9
+ import { AssistantMessage, ToolMessage, Message } from '../../backend/message.js';
10
+ import { c as RequirementAgentExecutionConfig, d as RequirementAgentTemplates, R as RequirementAgentRunState, a as RequirementAgentRequest, e as RequirementAgentRunInput, f as RequirementAgentOutput, g as RequirementAgentRunOptions, h as RequirementAgentCallbacks } from '../../types-Dyd4e1G6.js';
11
11
  import { Requirement, Rule } from './requirements/requirement.js';
12
12
  import { ToolCallPart } from 'ai';
13
13
  import { RetryCounter } from '../../internals/helpers/counter.js';
@@ -28,6 +28,11 @@ import '../../template.js';
28
28
  import '../../logger/logger.js';
29
29
  import 'pino';
30
30
 
31
+ /**
32
+ * Copyright 2025 © BeeAI a Series of LF Projects, LLC
33
+ * SPDX-License-Identifier: Apache-2.0
34
+ */
35
+
31
36
  /**
32
37
  * Runner for RequirementAgent execution
33
38
  */
@@ -46,21 +51,14 @@ declare class RequirementAgentRunner {
46
51
  constructor(llm: ChatModel, runConfig: RequirementAgentExecutionConfig, tools: AnyTool[], requirements: Requirement[], expectedOutput: string | z.ZodSchema | null, toolCallCycleChecker: ToolCallChecker, ctx: RunContext<RequirementAgent>, forceFinalAnswerAsTool: boolean, templates: RequirementAgentTemplates);
47
52
  protected incrementIteration(): void;
48
53
  protected runLLM(request: RequirementAgentRequest): Promise<ChatModelOutput>;
49
- protected prepareLLMRequest(request: RequirementAgentRequest): Promise<{
50
- messages: Message<MessageContentPart, string>[];
51
- options: {
52
- maxRetries: number | undefined;
53
- tools: AnyTool[];
54
- toolChoice: ChatModelToolChoice;
55
- stream: boolean;
56
- };
57
- }>;
54
+ protected prepareLLMRequest(request: RequirementAgentRequest): Promise<ChatModelInput>;
58
55
  protected createFinalAnswerToolCall(fullText: string): Promise<AssistantMessage | null>;
59
56
  protected createRequest(extraRules?: Rule[]): Promise<RequirementAgentRequest>;
60
57
  protected invokeToolCalls(tools: AnyTool[], toolCalls: ToolCallPart[]): Promise<ToolMessage[]>;
61
58
  addMessages(messages: Message[]): Promise<void>;
62
59
  run(): Promise<RequirementAgentRunState>;
63
60
  protected runIteration(request: RequirementAgentRequest): Promise<ChatModelOutput>;
61
+ private createFinalAnswerStream;
64
62
  }
65
63
 
66
64
  type RequirementAgentTemplateFactory<K extends keyof RequirementAgentTemplates> = (template: RequirementAgentTemplates[K]) => RequirementAgentTemplates[K];
@@ -106,7 +104,7 @@ declare class RequirementAgent extends BaseAgent<RequirementAgentRunInput, Requi
106
104
  createSnapshot(): {
107
105
  input: InternalRequirementAgentInput;
108
106
  emitter: Emitter<RequirementAgentCallbacks>;
109
- runnerClass: new (llm: ChatModel, runConfig: RequirementAgentExecutionConfig, tools: AnyTool[], requirements: Requirement[], expectedOutput: string | zod.ZodType<any, zod.ZodTypeDef, any> | null, toolCallCycleChecker: ToolCallChecker, ctx: RunContext<RequirementAgent, any>, forceFinalAnswerAsTool: boolean, templates: RequirementAgentTemplates) => RequirementAgentRunner;
107
+ runner: new (llm: ChatModel, runConfig: RequirementAgentExecutionConfig, tools: AnyTool[], requirements: Requirement[], expectedOutput: string | zod.ZodType<any, zod.ZodTypeDef, any> | null, toolCallCycleChecker: ToolCallChecker, ctx: RunContext<RequirementAgent, any>, forceFinalAnswerAsTool: boolean, templates: RequirementAgentTemplates) => RequirementAgentRunner;
110
108
  isRunning: boolean;
111
109
  middlewares: MiddlewareType<any>[];
112
110
  };
@@ -7,6 +7,7 @@ import { RequirementsReasoner, createSystemMessage } from './utils/llm.js';
7
7
  import { FinalAnswerTool, runTool } from './utils/tool.js';
8
8
  import { parseBrokenJson } from '../../internals/helpers/schema.js';
9
9
  import { mergeTokenUsage } from '../../adapters/vercel/backend/utils.js';
10
+ import { StreamToolCallMiddleware } from '../../middleware/streamToolCall.js';
10
11
 
11
12
  var __defProp = Object.defineProperty;
12
13
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
@@ -63,30 +64,28 @@ class RequirementAgentRunner {
63
64
  }
64
65
  }
65
66
  async runLLM(request) {
66
- const { messages, options } = await this.prepareLLMRequest(request);
67
- const response = await this.llm.create({
68
- ...options,
69
- messages
70
- });
71
- if (response.usage) {
72
- mergeTokenUsage(this.state.usage, response.usage);
67
+ const streamMiddleware = this.createFinalAnswerStream(request.finalAnswer);
68
+ try {
69
+ const input = await this.prepareLLMRequest(request);
70
+ const response = await this.llm.create(input).middleware(streamMiddleware);
71
+ if (response.usage) {
72
+ mergeTokenUsage(this.state.usage, response.usage);
73
+ }
74
+ return response;
75
+ } finally {
76
+ streamMiddleware.unbind();
73
77
  }
74
- return response;
75
78
  }
76
79
  async prepareLLMRequest(request) {
77
80
  const messages = [
78
81
  await createSystemMessage(this.templates.system, request),
79
82
  ...this.state.memory.messages
80
83
  ];
81
- const options = {
82
- maxRetries: this.runConfig.maxRetriesPerStep,
83
- tools: request.allowedTools,
84
- toolChoice: request.toolChoice,
85
- stream: false
86
- };
87
84
  return {
88
85
  messages,
89
- options
86
+ tools: request.allowedTools,
87
+ toolChoice: request.toolChoice,
88
+ streamPartialToolCalls: true
90
89
  };
91
90
  }
92
91
  async createFinalAnswerToolCall(fullText) {
@@ -243,6 +242,23 @@ class RequirementAgentRunner {
243
242
  await this.state.memory.deleteMany(tempMessages);
244
243
  return response;
245
244
  }
245
+ createFinalAnswerStream(finalAnswer) {
246
+ const middleware = new StreamToolCallMiddleware({
247
+ target: finalAnswer,
248
+ forceStreaming: false,
249
+ key: "response",
250
+ matchNested: false
251
+ });
252
+ middleware.emitter.on("update", async (data, _) => {
253
+ await this.ctx.emitter.emit("finalAnswer", {
254
+ state: this.state,
255
+ output: data.output,
256
+ delta: data.delta,
257
+ outputStructured: void 0
258
+ });
259
+ });
260
+ return middleware;
261
+ }
246
262
  }
247
263
 
248
264
  export { RequirementAgentRunner };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/agents/requirement/runner.ts"],"names":["TEMP_MESSAGE_KEY","RequirementAgentRunner","state","reasoner","iterationErrorCounter","globalErrorCounter","llm","runConfig","tools","requirements","expectedOutput","toolCallCycleChecker","ctx","forceFinalAnswerAsTool","templates","answer","result","memory","UnconstrainedMemory","steps","iteration","usage","totalTokens","promptTokens","completionTokens","reasoningTokens","cachedPromptTokens","undefined","finalAnswer","FinalAnswerTool","RequirementsReasoner","maxRetriesPerIteration","maxRetriesPerStep","RetryCounter","AgentError","maxRetries","Math","max","totalMaxRetries","incrementIteration","maxIterations","runLLM","request","messages","options","prepareLLMRequest","response","create","mergeTokenUsage","createSystemMessage","system","allowedTools","toolChoice","stream","createFinalAnswerToolCall","fullText","parsed","parseBrokenJson","pair","customSchema","AssistantMessage","type","toolCallId","uuidv4","substring","toolName","name","input","inputSchema","parse","createRequest","extraRules","invokeToolCalls","toolCalls","toolResults","results","Promise","all","map","msg","runTool","toolCall","push","id","output","tool","error","toolError","render","reason","explain","isEmpty","getTextContent","toolNoResult","ToolMessage","value","use","addMessages","addMany","run","update","emitter","emit","runIteration","getToolCalls","length","textMessages","getTextMessages","text","m","join","canStop","finalAnswerToolCall","err","updatedRequest","target","allowed","hidden","forced","preventStop","add","toolCallMsg","register","cycleFound","reset","tempMessages","filter","meta","deleteMany"],"mappings":";;;;;;;;;;;;AA6BA,MAAMA,gBAAAA,GAAmB,aAAA;AAKlB,MAAMC,sBAAAA,CAAAA;EAlCb;;;;;;;;;;AAmCqBC,EAAAA,KAAAA;AACAC,EAAAA,QAAAA;AACAC,EAAAA,qBAAAA;AACAC,EAAAA,kBAAAA;EAEnB,WAAA,CACqBC,GAAAA,EACAC,WACnBC,KAAAA,EACmBC,YAAAA,EACnBC,gBACmBC,oBAAAA,EACAC,GAAAA,EACTC,wBACSC,SAAAA,EACnB;SATmBR,GAAAA,GAAAA,GAAAA;SACAC,SAAAA,GAAAA,SAAAA;SAEAE,YAAAA,GAAAA,YAAAA;SAEAE,oBAAAA,GAAAA,oBAAAA;SACAC,GAAAA,GAAAA,GAAAA;SACTC,sBAAAA,GAAAA,sBAAAA;SACSC,SAAAA,GAAAA,SAAAA;AAEnB,IAAA,IAAA,CAAKZ,KAAAA,GAAQ;MACXa,MAAAA,EAAQ,IAAA;MACRC,MAAAA,EAAQ,IAAA;AACRC,MAAAA,MAAAA,EAAQ,IAAIC,mBAAAA,EAAAA;AACZC,MAAAA,KAAAA,EAAO,EAAA;MACPC,SAAAA,EAAW,CAAA;MACXC,KAAAA,EAAO;QACLC,WAAAA,EAAa,CAAA;QACbC,YAAAA,EAAc,CAAA;QACdC,gBAAAA,EAAkB,CAAA;QAClBC,eAAAA,EAAiB,CAAA;QACjBC,kBAAAA,EAAoBC;AACtB;AACF,KAAA;AAEA,IAAA,IAAA,CAAKlB,YAAAA,GAAeA,YAAAA;AACpB,IAAA,MAAMmB,WAAAA,GAAc,IAAIC,eAAAA,CAAgBnB,cAAAA,EAAgB,KAAKR,KAAK,CAAA;AAClE,IAAA,IAAA,CAAKC,QAAAA,GAAW,IAAI2B,oBAAAA,CAAqBtB,KAAAA,EAAOoB,aAAahB,GAAAA,CAAAA;AAE7D,IAAA,MAAMmB,sBAAAA,GAAyBxB,UAAUyB,iBAAAA,IAAqB,CAAA;AAC9D,IAAA,IAAA,CAAK5B,qBAAAA,GAAwB,IAAI6B,YAAAA,CAAaF,sBAAAA,EAAwBG,UAAAA,CAAAA;AAEtE,IAAA,MAAMC,aAAaC,IAAAA,CAAKC,GAAAA,CAAIN,sBAAAA,EAAwBxB,SAAAA,CAAU+B,mBAAmB,CAAA,CAAA;AACjF,IAAA,IAAA,CAAKjC,kBAAAA,GAAqB,IAAI4B,YAAAA,CAAaE,UAAAA,EAAYD,UAAAA,CAAAA;AACzD;EAEUK,kBAAAA,GAA2B;AACnC,IAAA,IAAA,CAAKrC,KAAAA,CAAMkB,SAAAA,EAAAA;AAEX,IAAA,IAAI,IAAA,CAAKb,UAAUiC,aAAAA,IAAiB,IAAA,CAAKtC,MAAMkB,SAAAA,GAAY,IAAA,CAAKb,UAAUiC,aAAAA,EAAe;AACvF,MAAA,MAAM,IAAIN,UAAAA,CACR,CAAA,0CAAA,EAA6C,IAAA,CAAKhC,KAAAA,CAAMkB,SAAS,CAAA,YAAA,CAAc,CAAA;AAEnF;AACF;AAEA,EAAA,MAAgBqB,OAAOC,OAAAA,EAA4D;AACjF,IAAA,MAAM,EAAEC,QAAAA,EAAUC,OAAAA,KAAY,MAAM,IAAA,CAAKC,kBAAkBH,OAAAA,CAAAA;AAC3D,IAAA,MAAMI,QAAAA,GAAW,MAAM,IAAA,CAAKxC,GAAAA,CAAIyC,MAAAA,CAAO;MAAE,GAAGH,OAAAA;AAASD,MAAAA;KAAS,CAAA;AAE9D,IAAA,IAAIG,SAASzB,KAAAA,EAAO;AAClB2B,MAAAA,eAAAA,CAAgB,IAAA,CAAK9C,KAAAA,CAAMmB,KAAAA,EAAOyB,QAAAA,CAASzB,KAAK,CAAA;AAClD;AAEA,IAAA,OAAOyB,QAAAA;AACT;AAEA,EAAA,MAAgBD,kBAAkBH,OAAAA,EAAkC;AAClE,IAAA,MAAMC,QAAAA,GAAsB;AAC1B,MAAA,MAAMM,mBAAAA,CAAoB,IAAA,CAAKnC,SAAAA,CAAUoC,MAAAA,EAAQR,OAAAA,CAAAA;AAC9C,MAAA,GAAA,IAAA,CAAKxC,MAAMe,MAAAA,CAAO0B;;AAGvB,IAAA,MAAMC,OAAAA,GAAU;AACdT,MAAAA,UAAAA,EAAY,KAAK5B,SAAAA,CAAUyB,iBAAAA;AAC3BxB,MAAAA,KAAAA,EAAOkC,OAAAA,CAAQS,YAAAA;AACfC,MAAAA,UAAAA,EAAYV,OAAAA,CAAQU,UAAAA;MACpBC,MAAAA,EAAQ;AACV,KAAA;AAEA,IAAA,OAAO;AAAEV,MAAAA,QAAAA;AAAUC,MAAAA;AAAQ,KAAA;AAC7B;AAEA,EAAA,MAAgBU,0BAA0BC,QAAAA,EAAoD;AAE5F,IAAA,MAAMC,MAAAA,GAASC,gBAAgBF,QAAAA,EAAU;MAAEG,IAAAA,EAAM;AAAC,QAAA,GAAA;AAAK,QAAA;;KAAK,CAAA;AAC5D,IAAA,IAAI,CAACF,MAAAA,EAAQ;AAEX,MAAA,IAAI,CAAC,IAAA,CAAKrD,QAAAA,CAASyB,WAAAA,CAAY+B,YAAAA,EAAc;AAC3C,QAAA,OAAO,IAAIC,gBAAAA,CAAiB;AAC1B,UAAA;YACEC,IAAAA,EAAM,WAAA;AACNC,YAAAA,UAAAA,EAAY,QAAQC,EAAAA,EAAAA,CAASC,SAAAA,CAAU,CAAA,EAAG,CAAA,CAAA,CAAA,CAAA;YAC1CC,QAAAA,EAAU,IAAA,CAAK9D,SAASyB,WAAAA,CAAYsC,IAAAA;AACpCC,YAAAA,KAAAA,EAAO,IAAA,CAAKhE,QAAAA,CAASyB,WAAAA,CAAYwC,WAAAA,GAAcC,KAAAA,CAAM;cAAEvB,QAAAA,EAAUS;aAAS;AAC5E;AACD,SAAA,CAAA;AACH;AACA,MAAA,OAAO,IAAA;AACT;AAEA,IAAA,OAAO,IAAIK,gBAAAA,CAAiB;AAC1B,MAAA;QACEC,IAAAA,EAAM,WAAA;AACNC,QAAAA,UAAAA,EAAY,QAAQC,EAAAA,EAAAA,CAASC,SAAAA,CAAU,CAAA,EAAG,CAAA,CAAA,CAAA,CAAA;QAC1CC,QAAAA,EAAU,IAAA,CAAK9D,SAASyB,WAAAA,CAAYsC,IAAAA;QACpCC,KAAAA,EAAOX;AACT;AACD,KAAA,CAAA;AACH;EAEA,MAAgBc,aAAAA,CAAcC,UAAAA,GAAqB,EAAA,EAAsC;AACvF,IAAA,OAAO,MAAM,KAAKpE,QAAAA,CAASmE,aAAAA,CAAc,KAAKpE,KAAAA,EAAO,IAAA,CAAKW,wBAAwB0D,UAAAA,CAAAA;AACpF;EAEA,MAAgBC,eAAAA,CACdhE,OACAiE,SAAAA,EACwB;AACxB,IAAA,MAAMC,cAA6B,EAAA;AAEnC,IAAA,MAAMC,OAAAA,GAAU,MAAMC,OAAAA,CAAQC,GAAAA,CAC5BJ,SAAAA,CAAUK,IAAI,CAACC,GAAAA,KAAQC,OAAAA,CAAQxE,KAAAA,EAAOuE,GAAAA,EAAK;AAAE7E,MAAAA,KAAAA,EAAO,IAAA,CAAKA;AAAM,KAAA,CAAA,CAAA,CAAA;AAGjE,IAAA,KAAA,MAAW+E,YAAYN,OAAAA,EAAS;AAC9B,MAAA,IAAA,CAAKzE,KAAAA,CAAMiB,MAAM+D,IAAAA,CAAK;AACpBC,QAAAA,EAAAA,EAAIpB,EAAAA,EAAAA;AACJ3C,QAAAA,SAAAA,EAAW,KAAKlB,KAAAA,CAAMkB,SAAAA;AACtB+C,QAAAA,KAAAA,EAAOc,QAAAA,CAASd,KAAAA;AAChBiB,QAAAA,MAAAA,EAAQH,QAAAA,CAASG,MAAAA;AACjBC,QAAAA,IAAAA,EAAMJ,QAAAA,CAASI,IAAAA;AACfC,QAAAA,KAAAA,EAAOL,QAAAA,CAASK;OAClB,CAAA;AAEA,MAAA,IAAItE,MAAAA;AACJ,MAAA,IAAIiE,SAASK,KAAAA,EAAO;AAClBtE,QAAAA,MAAAA,GAAS,IAAA,CAAKF,SAAAA,CAAUyE,SAAAA,CAAUC,MAAAA,CAAO;UACvCC,MAAAA,EAAQR,QAAAA,CAASK,MAAMI,OAAAA;SACzB,CAAA;OACF,MAAO;AACL1E,QAAAA,MAAAA,GAAS,CAACiE,QAAAA,CAASG,MAAAA,CAAOO,OAAAA,EAAO,GAC7BV,QAAAA,CAASG,MAAAA,CAAOQ,cAAAA,EAAc,GAC9B,IAAA,CAAK9E,SAAAA,CAAU+E,YAAAA,CAAaL,MAAAA,CAAO;UACjCP,QAAAA,EAAU;AAAEI,YAAAA,IAAAA,EAAMJ,QAAAA,CAASI,IAAAA;AAAMlB,YAAAA,KAAAA,EAAOc,QAAAA,CAASd;AAAM;SACzD,CAAA;AACN;AAEAO,MAAAA,WAAAA,CAAYQ,IAAAA,CACV,IAAIY,WAAAA,CAAY;QACdjC,IAAAA,EAAM,aAAA;AACNI,QAAAA,QAAAA,EAAUgB,QAAAA,CAASI,IAAAA,EAAMnB,IAAAA,IAAQe,QAAAA,CAASF,GAAAA,CAAId,QAAAA;AAC9CH,QAAAA,UAAAA,EAAYmB,SAASF,GAAAA,CAAIjB,UAAAA;QACzBsB,MAAAA,EAAQ;UAAEvB,IAAAA,EAAM,MAAA;UAAQkC,KAAAA,EAAO/E;AAAO;AACxC,OAAA,CAAA,CAAA;AAGF,MAAA,IAAIiE,SAASK,KAAAA,EAAO;AAClB,QAAA,IAAA,CAAKlF,qBAAAA,CAAsB4F,GAAAA,CAAIf,QAAAA,CAASK,KAAK,CAAA;AAC7C,QAAA,IAAA,CAAKjF,kBAAAA,CAAmB2F,GAAAA,CAAIf,QAAAA,CAASK,KAAK,CAAA;AAC5C;AACF;AAEA,IAAA,OAAOZ,WAAAA;AACT;AAEA,EAAA,MAAMuB,YAAYtD,QAAAA,EAAoC;AACpD,IAAA,MAAM,IAAA,CAAKzC,KAAAA,CAAMe,MAAAA,CAAOiF,OAAAA,CAAQvD,QAAAA,CAAAA;AAClC;AAEA,EAAA,MAAMwD,GAAAA,GAAyC;AAC7C,IAAA,IAAI,IAAA,CAAKjG,MAAMa,MAAAA,EAAQ;AACrB,MAAA,OAAO,IAAA,CAAKb,KAAAA;AACd;AAGA,IAAA,MAAM,IAAA,CAAKC,QAAAA,CAASiG,MAAAA,CAAO,IAAA,CAAK3F,YAAY,CAAA;AAE5C,IAAA,OAAO,CAAC,IAAA,CAAKP,KAAAA,CAAMa,MAAAA,EAAQ;AACzB,MAAA,IAAA,CAAKwB,kBAAAA,EAAkB;AAEvB,MAAA,MAAMG,OAAAA,GAAU,MAAM,IAAA,CAAK4B,aAAAA,EAAa;AACxC,MAAA,MAAM,IAAA,CAAK1D,GAAAA,CAAIyF,OAAAA,CAAQC,IAAAA,CAAK,OAAA,EAAS;AAAEpG,QAAAA,KAAAA,EAAO,IAAA,CAAKA,KAAAA;AAAOwC,QAAAA;OAAQ,CAAA;AAClE,MAAA,MAAMI,QAAAA,GAAW,MAAM,IAAA,CAAKyD,YAAAA,CAAa7D,OAAAA,CAAAA;AACzC,MAAA,MAAM,IAAA,CAAK9B,GAAAA,CAAIyF,OAAAA,CAAQC,IAAAA,CAAK,SAAA,EAAW;AAAEpG,QAAAA,KAAAA,EAAO,IAAA,CAAKA,KAAAA;AAAO4C,QAAAA;OAAS,CAAA;AACvE;AAEA,IAAA,OAAO,IAAA,CAAK5C,KAAAA;AACd;AAEA,EAAA,MAAgBqG,aAAa7D,OAAAA,EAA4D;AACvF,IAAA,MAAMI,QAAAA,GAAW,MAAM,IAAA,CAAKL,MAAAA,CAAOC,OAAAA,CAAAA;AAGnC,IAAA,MAAM+B,SAAAA,GAAY3B,SAAS0D,YAAAA,EAAY;AACvC,IAAA,IAAI/B,SAAAA,CAAUgC,WAAW,CAAA,EAAG;AAC1B,MAAA,MAAMC,YAAAA,GAAe5D,SAAS6D,eAAAA,EAAe;AAC7C,MAAA,MAAMC,IAAAA,GAAOF,aAAa5B,GAAAA,CAAI,CAAC+B,MAAMA,CAAAA,CAAED,IAAI,CAAA,CAAEE,IAAAA,CAAK,IAAA,CAAA;AAElD,MAAA,IAAI,CAACF,IAAAA,IAAQlE,OAAAA,CAAQqE,OAAAA,EAAS;AAC5B,QAAA,MAAM,IAAI7E,WAAW,mCAAA,CAAA;AACvB;AAEA,MAAA,MAAM8E,mBAAAA,GAAsB,MAAM,IAAA,CAAK1D,yBAAAA,CAA0BsD,IAAAA,CAAAA;AACjE,MAAA,IAAI,CAACI,mBAAAA,EAAqB;AACxB,QAAA,MAAMC,GAAAA,GAAM,IAAI/E,UAAAA,CAAW,mDAAA,CAAA;AAC3B,QAAA,IAAA,CAAK9B,qBAAAA,CAAsB4F,IAAIiB,GAAAA,CAAAA;AAC/B,QAAA,IAAA,CAAK5G,kBAAAA,CAAmB2F,IAAIiB,GAAAA,CAAAA;AAE5B,QAAA,MAAM,IAAA,CAAK9G,QAAAA,CAASiG,MAAAA,CAAO,EAAE,CAAA;AAC7B,QAAA,MAAMc,cAAAA,GAAiB,MAAM,IAAA,CAAK5C,aAAAA,CAAc;AAC9C,UAAA;YACE6C,MAAAA,EAAQ,IAAA,CAAKhH,SAASyB,WAAAA,CAAYsC,IAAAA;YAClCkD,OAAAA,EAAS,IAAA;YACTC,MAAAA,EAAQ,KAAA;YACRC,MAAAA,EAAQ,KAAA;YACRC,WAAAA,EAAa;AACf;AACD,SAAA,CAAA;AACD,QAAA,IAAA,CAAK1G,sBAAAA,GAAyB,IAAA;AAC9B,QAAA,OAAO,MAAM,IAAA,CAAK0F,YAAAA,CAAaW,cAAAA,CAAAA;AACjC;AAEA,MAAA,MAAM,IAAA,CAAKhH,KAAAA,CAAMe,MAAAA,CAAOuG,GAAAA,CAAIR,mBAAAA,CAAAA;AAC5BvC,MAAAA,SAAAA,CAAUS,IAAAA,CAAI,GAAI8B,mBAAAA,CAAoBR,YAAAA,EAAY,CAAA;KACpD,MAAO;AACL,MAAA,MAAM,IAAA,CAAKtG,KAAAA,CAAMe,MAAAA,CAAOiF,OAAAA,CAAQpD,SAASH,QAAQ,CAAA;AACnD;AAGA,IAAA,KAAA,MAAW8E,eAAehD,SAAAA,EAAW;AACnC,MAAA,IAAA,CAAK9D,oBAAAA,CAAqB+G,SAASD,WAAAA,CAAAA;AACnC,MAAA,IAAI,IAAA,CAAK9G,qBAAqBgH,UAAAA,EAAY;AACxC,QAAA,IAAA,CAAKhH,qBAAqBiH,KAAAA,EAAK;AAC/B,QAAA,MAAMV,cAAAA,GAAiB,MAAM,IAAA,CAAK5C,aAAAA,CAAc;AAC9C,UAAA;AACE6C,YAAAA,MAAAA,EAAQM,WAAAA,CAAYxD,QAAAA;YACpBmD,OAAAA,EAAS,KAAA;YACTC,MAAAA,EAAQ,KAAA;YACRC,MAAAA,EAAQ,IAAA;YACRC,WAAAA,EAAa;AACf;AACD,SAAA,CAAA;AACD,QAAA,OAAO,MAAM,IAAA,CAAKhB,YAAAA,CAAaW,cAAAA,CAAAA;AACjC;AACF;AAEA,IAAA,MAAMxC,cAAc,MAAM,IAAA,CAAKF,eAAAA,CAAgB9B,OAAAA,CAAQS,cAAcsB,SAAAA,CAAAA;AACrE,IAAA,MAAM,IAAA,CAAKvE,KAAAA,CAAMe,MAAAA,CAAOiF,OAAAA,CAAQxB,WAAAA,CAAAA;AAGhC,IAAA,MAAMmD,YAAAA,GAAe,IAAA,CAAK3H,KAAAA,CAAMe,MAAAA,CAAO0B,QAAAA,CAASmF,MAAAA,CAAO,CAAC/C,GAAAA,KAAQA,GAAAA,CAAIgD,IAAAA,CAAK/H,gBAAAA,CAAiB,CAAA;AAC1F,IAAA,MAAM,IAAA,CAAKE,KAAAA,CAAMe,MAAAA,CAAO+G,UAAAA,CAAWH,YAAAA,CAAAA;AAEnC,IAAA,OAAO/E,QAAAA;AACT;AACF","file":"runner.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { v4 as uuidv4 } from \"uuid\";\nimport { AgentError } from \"@/agents/base.js\";\nimport { ChatModel, ChatModelOutput } from \"@/backend/chat.js\";\nimport { AssistantMessage, Message, ToolMessage } from \"@/backend/message.js\";\nimport { ToolCallPart } from \"ai\";\nimport { AnyTool } from \"@/tools/base.js\";\nimport { UnconstrainedMemory } from \"@/memory/unconstrainedMemory.js\";\nimport { RetryCounter } from \"@/internals/helpers/counter.js\";\nimport { RunContext } from \"@/context.js\";\nimport {\n RequirementAgentExecutionConfig,\n RequirementAgentRequest,\n RequirementAgentRunState,\n RequirementAgentTemplates,\n} from \"./types.js\";\nimport { Requirement, Rule } from \"./requirements/requirement.js\";\nimport { RequirementsReasoner, createSystemMessage } from \"./utils/llm.js\";\nimport { FinalAnswerTool, runTool } from \"./utils/tool.js\";\nimport { ToolCallChecker } from \"./utils/toolCallChecker.js\";\nimport { z } from \"zod\";\nimport { parseBrokenJson } from \"@/internals/helpers/schema.js\";\nimport { RequirementAgent } from \"@/agents/requirement/agent.js\";\nimport { mergeTokenUsage } from \"@/adapters/vercel/backend/utils.js\";\n\nconst TEMP_MESSAGE_KEY = \"tempMessage\";\n\n/**\n * Runner for RequirementAgent execution\n */\nexport class RequirementAgentRunner {\n protected readonly state: RequirementAgentRunState;\n protected readonly reasoner: RequirementsReasoner;\n protected readonly iterationErrorCounter: RetryCounter;\n protected readonly globalErrorCounter: RetryCounter;\n\n constructor(\n protected readonly llm: ChatModel,\n protected readonly runConfig: RequirementAgentExecutionConfig,\n tools: AnyTool[],\n protected readonly requirements: Requirement[],\n expectedOutput: string | z.ZodSchema | null,\n protected readonly toolCallCycleChecker: ToolCallChecker,\n protected readonly ctx: RunContext<RequirementAgent>,\n protected forceFinalAnswerAsTool: boolean,\n protected readonly templates: RequirementAgentTemplates,\n ) {\n this.state = {\n answer: null,\n result: null,\n memory: new UnconstrainedMemory(),\n steps: [],\n iteration: 0,\n usage: {\n totalTokens: 0,\n promptTokens: 0,\n completionTokens: 0,\n reasoningTokens: 0,\n cachedPromptTokens: undefined,\n },\n };\n\n this.requirements = requirements;\n const finalAnswer = new FinalAnswerTool(expectedOutput, this.state);\n this.reasoner = new RequirementsReasoner(tools, finalAnswer, ctx);\n\n const maxRetriesPerIteration = runConfig.maxRetriesPerStep ?? 0;\n this.iterationErrorCounter = new RetryCounter(maxRetriesPerIteration, AgentError);\n\n const maxRetries = Math.max(maxRetriesPerIteration, runConfig.totalMaxRetries ?? 0);\n this.globalErrorCounter = new RetryCounter(maxRetries, AgentError);\n }\n\n protected incrementIteration(): void {\n this.state.iteration++;\n\n if (this.runConfig.maxIterations && this.state.iteration > this.runConfig.maxIterations) {\n throw new AgentError(\n `Agent was not able to resolve the task in ${this.state.iteration} iterations.`,\n );\n }\n }\n\n protected async runLLM(request: RequirementAgentRequest): Promise<ChatModelOutput> {\n const { messages, options } = await this.prepareLLMRequest(request);\n const response = await this.llm.create({ ...options, messages });\n\n if (response.usage) {\n mergeTokenUsage(this.state.usage, response.usage);\n }\n\n return response;\n }\n\n protected async prepareLLMRequest(request: RequirementAgentRequest) {\n const messages: Message[] = [\n await createSystemMessage(this.templates.system, request),\n ...this.state.memory.messages,\n ];\n\n const options = {\n maxRetries: this.runConfig.maxRetriesPerStep,\n tools: request.allowedTools,\n toolChoice: request.toolChoice,\n stream: false,\n };\n\n return { messages, options };\n }\n\n protected async createFinalAnswerToolCall(fullText: string): Promise<AssistantMessage | null> {\n // Try to extract JSON from text\n const parsed = parseBrokenJson(fullText, { pair: [\"{\", \"}\"] });\n if (!parsed) {\n // If no JSON and no custom schema, wrap in default schema\n if (!this.reasoner.finalAnswer.customSchema) {\n return new AssistantMessage([\n {\n type: \"tool-call\",\n toolCallId: `call_${uuidv4().substring(0, 8)}`,\n toolName: this.reasoner.finalAnswer.name,\n input: this.reasoner.finalAnswer.inputSchema().parse({ response: fullText }),\n },\n ]);\n }\n return null;\n }\n\n return new AssistantMessage([\n {\n type: \"tool-call\",\n toolCallId: `call_${uuidv4().substring(0, 8)}`,\n toolName: this.reasoner.finalAnswer.name,\n input: parsed,\n },\n ]);\n }\n\n protected async createRequest(extraRules: Rule[] = []): Promise<RequirementAgentRequest> {\n return await this.reasoner.createRequest(this.state, this.forceFinalAnswerAsTool, extraRules);\n }\n\n protected async invokeToolCalls(\n tools: AnyTool[],\n toolCalls: ToolCallPart[],\n ): Promise<ToolMessage[]> {\n const toolResults: ToolMessage[] = [];\n\n const results = await Promise.all(\n toolCalls.map((msg) => runTool(tools, msg, { state: this.state })),\n );\n\n for (const toolCall of results) {\n this.state.steps.push({\n id: uuidv4(),\n iteration: this.state.iteration,\n input: toolCall.input,\n output: toolCall.output,\n tool: toolCall.tool,\n error: toolCall.error,\n });\n\n let result: string;\n if (toolCall.error) {\n result = this.templates.toolError.render({\n reason: toolCall.error.explain(),\n });\n } else {\n result = !toolCall.output.isEmpty()\n ? toolCall.output.getTextContent()\n : this.templates.toolNoResult.render({\n toolCall: { tool: toolCall.tool, input: toolCall.input },\n });\n }\n\n toolResults.push(\n new ToolMessage({\n type: \"tool-result\",\n toolName: toolCall.tool?.name || toolCall.msg.toolName,\n toolCallId: toolCall.msg.toolCallId,\n output: { type: \"text\", value: result },\n }),\n );\n\n if (toolCall.error) {\n this.iterationErrorCounter.use(toolCall.error);\n this.globalErrorCounter.use(toolCall.error);\n }\n }\n\n return toolResults;\n }\n\n async addMessages(messages: Message[]): Promise<void> {\n await this.state.memory.addMany(messages);\n }\n\n async run(): Promise<RequirementAgentRunState> {\n if (this.state.answer) {\n return this.state;\n }\n\n // Initialize requirements\n await this.reasoner.update(this.requirements);\n\n while (!this.state.answer) {\n this.incrementIteration();\n\n const request = await this.createRequest();\n await this.ctx.emitter.emit(\"start\", { state: this.state, request });\n const response = await this.runIteration(request);\n await this.ctx.emitter.emit(\"success\", { state: this.state, response });\n }\n\n return this.state;\n }\n\n protected async runIteration(request: RequirementAgentRequest): Promise<ChatModelOutput> {\n const response = await this.runLLM(request);\n\n // Try to cast text message to final answer tool call if allowed\n const toolCalls = response.getToolCalls();\n if (toolCalls.length === 0) {\n const textMessages = response.getTextMessages();\n const text = textMessages.map((m) => m.text).join(\"\\n\");\n\n if (!text || request.canStop) {\n throw new AgentError(\"Model produced an empty response.\");\n }\n\n const finalAnswerToolCall = await this.createFinalAnswerToolCall(text);\n if (!finalAnswerToolCall) {\n const err = new AgentError(\"Model produced an invalid final answer tool call.\");\n this.iterationErrorCounter.use(err);\n this.globalErrorCounter.use(err);\n\n await this.reasoner.update([]);\n const updatedRequest = await this.createRequest([\n {\n target: this.reasoner.finalAnswer.name,\n allowed: true,\n hidden: false,\n forced: false,\n preventStop: false,\n },\n ]);\n this.forceFinalAnswerAsTool = true;\n return await this.runIteration(updatedRequest);\n }\n\n await this.state.memory.add(finalAnswerToolCall);\n toolCalls.push(...finalAnswerToolCall.getToolCalls());\n } else {\n await this.state.memory.addMany(response.messages);\n }\n\n // Check for cycles\n for (const toolCallMsg of toolCalls) {\n this.toolCallCycleChecker.register(toolCallMsg);\n if (this.toolCallCycleChecker.cycleFound) {\n this.toolCallCycleChecker.reset();\n const updatedRequest = await this.createRequest([\n {\n target: toolCallMsg.toolName,\n allowed: false,\n hidden: false,\n forced: true,\n preventStop: false,\n },\n ]);\n return await this.runIteration(updatedRequest);\n }\n }\n\n const toolResults = await this.invokeToolCalls(request.allowedTools, toolCalls);\n await this.state.memory.addMany(toolResults);\n\n // Delete temporary messages\n const tempMessages = this.state.memory.messages.filter((msg) => msg.meta[TEMP_MESSAGE_KEY]);\n await this.state.memory.deleteMany(tempMessages);\n\n return response;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/agents/requirement/runner.ts"],"names":["TEMP_MESSAGE_KEY","RequirementAgentRunner","state","reasoner","iterationErrorCounter","globalErrorCounter","llm","runConfig","tools","requirements","expectedOutput","toolCallCycleChecker","ctx","forceFinalAnswerAsTool","templates","answer","result","memory","UnconstrainedMemory","steps","iteration","usage","totalTokens","promptTokens","completionTokens","reasoningTokens","cachedPromptTokens","undefined","finalAnswer","FinalAnswerTool","RequirementsReasoner","maxRetriesPerIteration","maxRetriesPerStep","RetryCounter","AgentError","maxRetries","Math","max","totalMaxRetries","incrementIteration","maxIterations","runLLM","request","streamMiddleware","createFinalAnswerStream","input","prepareLLMRequest","response","create","middleware","mergeTokenUsage","unbind","messages","createSystemMessage","system","allowedTools","toolChoice","streamPartialToolCalls","createFinalAnswerToolCall","fullText","parsed","parseBrokenJson","pair","customSchema","AssistantMessage","type","toolCallId","uuidv4","substring","toolName","name","inputSchema","parse","createRequest","extraRules","invokeToolCalls","toolCalls","toolResults","results","Promise","all","map","msg","runTool","toolCall","push","id","output","tool","error","toolError","render","reason","explain","isEmpty","getTextContent","toolNoResult","ToolMessage","value","use","addMessages","addMany","run","update","emitter","emit","runIteration","getToolCalls","length","textMessages","getTextMessages","text","m","join","canStop","finalAnswerToolCall","err","updatedRequest","target","allowed","hidden","forced","preventStop","add","toolCallMsg","register","cycleFound","reset","tempMessages","filter","meta","deleteMany","StreamToolCallMiddleware","forceStreaming","key","matchNested","on","data","_","delta","outputStructured"],"mappings":"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","file":"runner.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { v4 as uuidv4 } from \"uuid\";\nimport { AgentError } from \"@/agents/base.js\";\nimport { ChatModel, ChatModelInput, ChatModelOutput } from \"@/backend/chat.js\";\nimport { AssistantMessage, Message, ToolMessage } from \"@/backend/message.js\";\nimport { ToolCallPart } from \"ai\";\nimport { AnyTool } from \"@/tools/base.js\";\nimport { UnconstrainedMemory } from \"@/memory/unconstrainedMemory.js\";\nimport { RetryCounter } from \"@/internals/helpers/counter.js\";\nimport { RunContext } from \"@/context.js\";\nimport {\n RequirementAgentExecutionConfig,\n RequirementAgentRequest,\n RequirementAgentRunState,\n RequirementAgentTemplates,\n} from \"./types.js\";\nimport { Requirement, Rule } from \"./requirements/requirement.js\";\nimport { RequirementsReasoner, createSystemMessage } from \"./utils/llm.js\";\nimport { FinalAnswerTool, runTool } from \"./utils/tool.js\";\nimport { ToolCallChecker } from \"./utils/toolCallChecker.js\";\nimport { z } from \"zod\";\nimport { parseBrokenJson } from \"@/internals/helpers/schema.js\";\nimport { RequirementAgent } from \"@/agents/requirement/agent.js\";\nimport { mergeTokenUsage } from \"@/adapters/vercel/backend/utils.js\";\nimport { StreamToolCallMiddleware } from \"@/middleware/streamToolCall.js\";\n\nconst TEMP_MESSAGE_KEY = \"tempMessage\";\n\n/**\n * Runner for RequirementAgent execution\n */\nexport class RequirementAgentRunner {\n protected readonly state: RequirementAgentRunState;\n protected readonly reasoner: RequirementsReasoner;\n protected readonly iterationErrorCounter: RetryCounter;\n protected readonly globalErrorCounter: RetryCounter;\n\n constructor(\n protected readonly llm: ChatModel,\n protected readonly runConfig: RequirementAgentExecutionConfig,\n tools: AnyTool[],\n protected readonly requirements: Requirement[],\n expectedOutput: string | z.ZodSchema | null,\n protected readonly toolCallCycleChecker: ToolCallChecker,\n protected readonly ctx: RunContext<RequirementAgent>,\n protected forceFinalAnswerAsTool: boolean,\n protected readonly templates: RequirementAgentTemplates,\n ) {\n this.state = {\n answer: null,\n result: null,\n memory: new UnconstrainedMemory(),\n steps: [],\n iteration: 0,\n usage: {\n totalTokens: 0,\n promptTokens: 0,\n completionTokens: 0,\n reasoningTokens: 0,\n cachedPromptTokens: undefined,\n },\n };\n\n this.requirements = requirements;\n const finalAnswer = new FinalAnswerTool(expectedOutput, this.state);\n this.reasoner = new RequirementsReasoner(tools, finalAnswer, ctx);\n\n const maxRetriesPerIteration = runConfig.maxRetriesPerStep ?? 0;\n this.iterationErrorCounter = new RetryCounter(maxRetriesPerIteration, AgentError);\n\n const maxRetries = Math.max(maxRetriesPerIteration, runConfig.totalMaxRetries ?? 0);\n this.globalErrorCounter = new RetryCounter(maxRetries, AgentError);\n }\n\n protected incrementIteration(): void {\n this.state.iteration++;\n\n if (this.runConfig.maxIterations && this.state.iteration > this.runConfig.maxIterations) {\n throw new AgentError(\n `Agent was not able to resolve the task in ${this.state.iteration} iterations.`,\n );\n }\n }\n\n protected async runLLM(request: RequirementAgentRequest): Promise<ChatModelOutput> {\n const streamMiddleware = this.createFinalAnswerStream(request.finalAnswer);\n try {\n const input = await this.prepareLLMRequest(request);\n const response = await this.llm.create(input).middleware(streamMiddleware);\n\n if (response.usage) {\n mergeTokenUsage(this.state.usage, response.usage);\n }\n\n return response;\n } finally {\n streamMiddleware.unbind();\n }\n }\n\n protected async prepareLLMRequest(request: RequirementAgentRequest): Promise<ChatModelInput> {\n const messages: Message[] = [\n await createSystemMessage(this.templates.system, request),\n ...this.state.memory.messages,\n ];\n\n return {\n messages,\n tools: request.allowedTools,\n toolChoice: request.toolChoice,\n streamPartialToolCalls: true,\n };\n }\n\n protected async createFinalAnswerToolCall(fullText: string): Promise<AssistantMessage | null> {\n // Try to extract JSON from text\n const parsed = parseBrokenJson(fullText, { pair: [\"{\", \"}\"] });\n if (!parsed) {\n // If no JSON and no custom schema, wrap in default schema\n if (!this.reasoner.finalAnswer.customSchema) {\n return new AssistantMessage([\n {\n type: \"tool-call\",\n toolCallId: `call_${uuidv4().substring(0, 8)}`,\n toolName: this.reasoner.finalAnswer.name,\n input: this.reasoner.finalAnswer.inputSchema().parse({ response: fullText }),\n },\n ]);\n }\n return null;\n }\n\n return new AssistantMessage([\n {\n type: \"tool-call\",\n toolCallId: `call_${uuidv4().substring(0, 8)}`,\n toolName: this.reasoner.finalAnswer.name,\n input: parsed,\n },\n ]);\n }\n\n protected async createRequest(extraRules: Rule[] = []): Promise<RequirementAgentRequest> {\n return await this.reasoner.createRequest(this.state, this.forceFinalAnswerAsTool, extraRules);\n }\n\n protected async invokeToolCalls(\n tools: AnyTool[],\n toolCalls: ToolCallPart[],\n ): Promise<ToolMessage[]> {\n const toolResults: ToolMessage[] = [];\n\n const results = await Promise.all(\n toolCalls.map((msg) => runTool(tools, msg, { state: this.state })),\n );\n\n for (const toolCall of results) {\n this.state.steps.push({\n id: uuidv4(),\n iteration: this.state.iteration,\n input: toolCall.input,\n output: toolCall.output,\n tool: toolCall.tool,\n error: toolCall.error,\n });\n\n let result: string;\n if (toolCall.error) {\n result = this.templates.toolError.render({\n reason: toolCall.error.explain(),\n });\n } else {\n result = !toolCall.output.isEmpty()\n ? toolCall.output.getTextContent()\n : this.templates.toolNoResult.render({\n toolCall: { tool: toolCall.tool, input: toolCall.input },\n });\n }\n toolResults.push(\n new ToolMessage({\n type: \"tool-result\",\n toolName: toolCall.tool?.name || toolCall.msg.toolName,\n toolCallId: toolCall.msg.toolCallId,\n output: { type: \"text\", value: result },\n }),\n );\n\n if (toolCall.error) {\n this.iterationErrorCounter.use(toolCall.error);\n this.globalErrorCounter.use(toolCall.error);\n }\n }\n\n return toolResults;\n }\n\n async addMessages(messages: Message[]): Promise<void> {\n await this.state.memory.addMany(messages);\n }\n\n async run(): Promise<RequirementAgentRunState> {\n if (this.state.answer) {\n return this.state;\n }\n\n // Initialize requirements\n await this.reasoner.update(this.requirements);\n\n while (!this.state.answer) {\n this.incrementIteration();\n\n const request = await this.createRequest();\n await this.ctx.emitter.emit(\"start\", { state: this.state, request });\n const response = await this.runIteration(request);\n await this.ctx.emitter.emit(\"success\", { state: this.state, response });\n }\n\n return this.state;\n }\n\n protected async runIteration(request: RequirementAgentRequest): Promise<ChatModelOutput> {\n const response = await this.runLLM(request);\n\n // Try to cast text message to final answer tool call if allowed\n const toolCalls = response.getToolCalls();\n if (toolCalls.length === 0) {\n const textMessages = response.getTextMessages();\n const text = textMessages.map((m) => m.text).join(\"\\n\");\n\n if (!text || request.canStop) {\n throw new AgentError(\"Model produced an empty response.\");\n }\n\n const finalAnswerToolCall = await this.createFinalAnswerToolCall(text);\n if (!finalAnswerToolCall) {\n const err = new AgentError(\"Model produced an invalid final answer tool call.\");\n this.iterationErrorCounter.use(err);\n this.globalErrorCounter.use(err);\n\n await this.reasoner.update([]);\n const updatedRequest = await this.createRequest([\n {\n target: this.reasoner.finalAnswer.name,\n allowed: true,\n hidden: false,\n forced: false,\n preventStop: false,\n },\n ]);\n this.forceFinalAnswerAsTool = true;\n return await this.runIteration(updatedRequest);\n }\n\n await this.state.memory.add(finalAnswerToolCall);\n toolCalls.push(...finalAnswerToolCall.getToolCalls());\n } else {\n await this.state.memory.addMany(response.messages);\n }\n\n // Check for cycles\n for (const toolCallMsg of toolCalls) {\n this.toolCallCycleChecker.register(toolCallMsg);\n if (this.toolCallCycleChecker.cycleFound) {\n this.toolCallCycleChecker.reset();\n const updatedRequest = await this.createRequest([\n {\n target: toolCallMsg.toolName,\n allowed: false,\n hidden: false,\n forced: true,\n preventStop: false,\n },\n ]);\n return await this.runIteration(updatedRequest);\n }\n }\n\n const toolResults = await this.invokeToolCalls(request.allowedTools, toolCalls);\n await this.state.memory.addMany(toolResults);\n\n // Delete temporary messages\n const tempMessages = this.state.memory.messages.filter((msg) => msg.meta[TEMP_MESSAGE_KEY]);\n await this.state.memory.deleteMany(tempMessages);\n\n return response;\n }\n\n private createFinalAnswerStream(finalAnswer: FinalAnswerTool) {\n const middleware = new StreamToolCallMiddleware({\n target: finalAnswer,\n forceStreaming: false,\n key: \"response\",\n matchNested: false,\n });\n middleware.emitter.on(\"update\", async (data, _) => {\n await this.ctx.emitter.emit(\"finalAnswer\", {\n state: this.state,\n output: data.output,\n delta: data.delta,\n outputStructured: undefined,\n });\n });\n return middleware;\n }\n}\n"]}
@@ -3,17 +3,17 @@ import '../../backend/message.cjs';
3
3
  import '../../tools/base.cjs';
4
4
  import '../../errors.cjs';
5
5
  import '../../template.cjs';
6
- import '../../chat-DB_cf15S.cjs';
7
- import '../../base-v-PYIq5G.cjs';
6
+ import '../../chat-CC0s8z23.cjs';
7
+ import '../../base-XfWeXQ-S.cjs';
8
8
  import 'zod';
9
- export { h as RequirementAgentCallbacks, c as RequirementAgentExecutionConfig, f as RequirementAgentOutput, a as RequirementAgentRequest, e as RequirementAgentRunInput, g as RequirementAgentRunOptions, R as RequirementAgentRunState, l as RequirementAgentRunStateStep, b as RequirementAgentSystemPromptInputSchema, i as RequirementAgentTaskPromptInputSchema, d as RequirementAgentTemplates, j as RequirementAgentToolErrorPromptInputSchema, k as RequirementAgentToolNoResultPromptInputSchema } from '../../types-Cx6f43du.cjs';
9
+ export { h as RequirementAgentCallbacks, c as RequirementAgentExecutionConfig, f as RequirementAgentOutput, a as RequirementAgentRequest, e as RequirementAgentRunInput, g as RequirementAgentRunOptions, R as RequirementAgentRunState, l as RequirementAgentRunStateStep, b as RequirementAgentSystemPromptInputSchema, i as RequirementAgentTaskPromptInputSchema, d as RequirementAgentTemplates, j as RequirementAgentToolErrorPromptInputSchema, k as RequirementAgentToolNoResultPromptInputSchema } from '../../types-D9pn62yF.cjs';
10
10
  import '../../internals/serializable.cjs';
11
11
  import '../../internals/types.cjs';
12
12
  import '../../internals/helpers/guards.cjs';
13
13
  import 'ai';
14
14
  import 'ajv';
15
15
  import '../../context.cjs';
16
- import '../../emitter-CGKd_-kK.cjs';
16
+ import '../../emitter-jN55XZZq.cjs';
17
17
  import '../../internals/helpers/promise.cjs';
18
18
  import 'promise-based-task';
19
19
  import '../../cache/base.cjs';
@@ -3,17 +3,17 @@ import '../../backend/message.js';
3
3
  import '../../tools/base.js';
4
4
  import '../../errors.js';
5
5
  import '../../template.js';
6
- import '../../chat-BbCYMAdE.js';
7
- import '../../base-BurRTBA7.js';
6
+ import '../../chat-D8SVtw5Q.js';
7
+ import '../../base-CyFx7BRL.js';
8
8
  import 'zod';
9
- export { h as RequirementAgentCallbacks, c as RequirementAgentExecutionConfig, f as RequirementAgentOutput, a as RequirementAgentRequest, e as RequirementAgentRunInput, g as RequirementAgentRunOptions, R as RequirementAgentRunState, l as RequirementAgentRunStateStep, b as RequirementAgentSystemPromptInputSchema, i as RequirementAgentTaskPromptInputSchema, d as RequirementAgentTemplates, j as RequirementAgentToolErrorPromptInputSchema, k as RequirementAgentToolNoResultPromptInputSchema } from '../../types-BXkkbABd.js';
9
+ export { h as RequirementAgentCallbacks, c as RequirementAgentExecutionConfig, f as RequirementAgentOutput, a as RequirementAgentRequest, e as RequirementAgentRunInput, g as RequirementAgentRunOptions, R as RequirementAgentRunState, l as RequirementAgentRunStateStep, b as RequirementAgentSystemPromptInputSchema, i as RequirementAgentTaskPromptInputSchema, d as RequirementAgentTemplates, j as RequirementAgentToolErrorPromptInputSchema, k as RequirementAgentToolNoResultPromptInputSchema } from '../../types-Dyd4e1G6.js';
10
10
  import '../../internals/serializable.js';
11
11
  import '../../internals/types.js';
12
12
  import '../../internals/helpers/guards.js';
13
13
  import 'ai';
14
14
  import 'ajv';
15
15
  import '../../context.js';
16
- import '../../emitter-CN7I4uSV.js';
16
+ import '../../emitter-36-9MnvA.js';
17
17
  import '../../internals/helpers/promise.js';
18
18
  import 'promise-based-task';
19
19
  import '../../cache/base.js';
@@ -2,7 +2,7 @@ import { AnyTool } from '../../../tools/base.cjs';
2
2
  import { RunContext } from '../../../context.cjs';
3
3
  import { SystemMessage } from '../../../backend/message.cjs';
4
4
  import { PromptTemplate } from '../../../template.cjs';
5
- import { F as FinalAnswerTool, R as RequirementAgentRunState, a as RequirementAgentRequest, b as RequirementAgentSystemPromptInputSchema } from '../../../types-Cx6f43du.cjs';
5
+ import { F as FinalAnswerTool, R as RequirementAgentRunState, a as RequirementAgentRequest, b as RequirementAgentSystemPromptInputSchema } from '../../../types-D9pn62yF.cjs';
6
6
  import { Requirement, Rule } from '../requirements/requirement.cjs';
7
7
  import 'ajv';
8
8
  import '../../../errors.cjs';
@@ -14,15 +14,15 @@ import '../../../cache/base.cjs';
14
14
  import '../../../internals/helpers/schema.cjs';
15
15
  import 'zod';
16
16
  import 'zod-to-json-schema';
17
- import '../../../emitter-CGKd_-kK.cjs';
17
+ import '../../../emitter-jN55XZZq.cjs';
18
18
  import '../../../internals/helpers/promise.cjs';
19
19
  import 'ai';
20
20
  import '../../../memory/base.cjs';
21
- import '../../../chat-DB_cf15S.cjs';
21
+ import '../../../chat-CC0s8z23.cjs';
22
22
  import '../../../backend/constants.cjs';
23
23
  import '../../../logger/logger.cjs';
24
24
  import 'pino';
25
- import '../../../base-v-PYIq5G.cjs';
25
+ import '../../../base-XfWeXQ-S.cjs';
26
26
 
27
27
  /**
28
28
  * Copyright 2025 © BeeAI a Series of LF Projects, LLC
@@ -2,7 +2,7 @@ import { AnyTool } from '../../../tools/base.js';
2
2
  import { RunContext } from '../../../context.js';
3
3
  import { SystemMessage } from '../../../backend/message.js';
4
4
  import { PromptTemplate } from '../../../template.js';
5
- import { F as FinalAnswerTool, R as RequirementAgentRunState, a as RequirementAgentRequest, b as RequirementAgentSystemPromptInputSchema } from '../../../types-BXkkbABd.js';
5
+ import { F as FinalAnswerTool, R as RequirementAgentRunState, a as RequirementAgentRequest, b as RequirementAgentSystemPromptInputSchema } from '../../../types-Dyd4e1G6.js';
6
6
  import { Requirement, Rule } from '../requirements/requirement.js';
7
7
  import 'ajv';
8
8
  import '../../../errors.js';
@@ -14,15 +14,15 @@ import '../../../cache/base.js';
14
14
  import '../../../internals/helpers/schema.js';
15
15
  import 'zod';
16
16
  import 'zod-to-json-schema';
17
- import '../../../emitter-CN7I4uSV.js';
17
+ import '../../../emitter-36-9MnvA.js';
18
18
  import '../../../internals/helpers/promise.js';
19
19
  import 'ai';
20
20
  import '../../../memory/base.js';
21
- import '../../../chat-BbCYMAdE.js';
21
+ import '../../../chat-D8SVtw5Q.js';
22
22
  import '../../../backend/constants.js';
23
23
  import '../../../logger/logger.js';
24
24
  import 'pino';
25
- import '../../../base-BurRTBA7.js';
25
+ import '../../../base-CyFx7BRL.js';
26
26
 
27
27
  /**
28
28
  * Copyright 2025 © BeeAI a Series of LF Projects, LLC
@@ -23,7 +23,8 @@ async function runTool(tools, msg, context) {
23
23
  }
24
24
  result.output = await result.tool.run(result.input).context({
25
25
  ...context,
26
- toolCallMsg: msg
26
+ toolCallMsg: msg,
27
+ [base_cjs.Tool.contextKeys.Memory]: context.state.memory
27
28
  });
28
29
  } catch (e) {
29
30
  if (e instanceof base_cjs.ToolError) {