beeai-framework 0.1.24 → 0.1.25

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 (227) 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 +2 -2
  20. package/dist/adapters/amazon-bedrock/backend/chat.d.ts +2 -2
  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 +3 -3
  24. package/dist/adapters/anthropic/backend/chat.d.ts +3 -3
  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 +2 -2
  28. package/dist/adapters/azure-openai/backend/chat.d.ts +2 -2
  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 +4 -2
  32. package/dist/adapters/dummy/backend/chat.d.ts +4 -2
  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 +2 -2
  36. package/dist/adapters/google-vertex/backend/chat.d.ts +2 -2
  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 +2 -2
  40. package/dist/adapters/groq/backend/chat.d.ts +2 -2
  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 +4 -2
  44. package/dist/adapters/langchain/backend/chat.d.ts +4 -2
  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.d.cts +2 -2
  50. package/dist/adapters/ollama/backend/chat.d.ts +2 -2
  51. package/dist/adapters/ollama/backend/embedding.d.cts +2 -2
  52. package/dist/adapters/ollama/backend/embedding.d.ts +2 -2
  53. package/dist/adapters/openai/backend/chat.d.cts +2 -2
  54. package/dist/adapters/openai/backend/chat.d.ts +2 -2
  55. package/dist/adapters/openai/backend/embedding.d.cts +2 -2
  56. package/dist/adapters/openai/backend/embedding.d.ts +2 -2
  57. package/dist/adapters/vercel/backend/chat.d.cts +4 -2
  58. package/dist/adapters/vercel/backend/chat.d.ts +4 -2
  59. package/dist/adapters/vercel/backend/embedding.d.cts +2 -2
  60. package/dist/adapters/vercel/backend/embedding.d.ts +2 -2
  61. package/dist/adapters/vercel/backend/utils.d.cts +2 -2
  62. package/dist/adapters/vercel/backend/utils.d.ts +2 -2
  63. package/dist/adapters/watsonx/backend/chat.cjs +8 -0
  64. package/dist/adapters/watsonx/backend/chat.cjs.map +1 -1
  65. package/dist/adapters/watsonx/backend/chat.d.cts +4 -2
  66. package/dist/adapters/watsonx/backend/chat.d.ts +4 -2
  67. package/dist/adapters/watsonx/backend/chat.js +8 -0
  68. package/dist/adapters/watsonx/backend/chat.js.map +1 -1
  69. package/dist/adapters/watsonx/backend/embedding.d.cts +2 -2
  70. package/dist/adapters/watsonx/backend/embedding.d.ts +2 -2
  71. package/dist/adapters/xai/backend/chat.d.cts +2 -2
  72. package/dist/adapters/xai/backend/chat.d.ts +2 -2
  73. package/dist/{agent-Cy4QtsN8.d.cts → agent-CuJD7Szg.d.cts} +3 -3
  74. package/dist/{agent-DHLEPXEA.d.ts → agent-DIyHPkn2.d.ts} +3 -3
  75. package/dist/agents/base.d.cts +2 -2
  76. package/dist/agents/base.d.ts +2 -2
  77. package/dist/agents/experimental/replan/agent.d.cts +3 -3
  78. package/dist/agents/experimental/replan/agent.d.ts +3 -3
  79. package/dist/agents/experimental/replan/prompts.d.cts +1 -1
  80. package/dist/agents/experimental/replan/prompts.d.ts +1 -1
  81. package/dist/agents/experimental/streamlit/agent.d.cts +3 -3
  82. package/dist/agents/experimental/streamlit/agent.d.ts +3 -3
  83. package/dist/agents/react/agent.d.cts +4 -4
  84. package/dist/agents/react/agent.d.ts +4 -4
  85. package/dist/agents/react/runners/base.d.cts +4 -4
  86. package/dist/agents/react/runners/base.d.ts +4 -4
  87. package/dist/agents/react/runners/deep-think/runner.d.cts +4 -4
  88. package/dist/agents/react/runners/deep-think/runner.d.ts +4 -4
  89. package/dist/agents/react/runners/default/runner.d.cts +4 -4
  90. package/dist/agents/react/runners/default/runner.d.ts +4 -4
  91. package/dist/agents/react/runners/granite/runner.d.cts +4 -4
  92. package/dist/agents/react/runners/granite/runner.d.ts +4 -4
  93. package/dist/agents/react/types.d.cts +2 -2
  94. package/dist/agents/react/types.d.ts +2 -2
  95. package/dist/agents/requirement/agent.d.cts +4 -4
  96. package/dist/agents/requirement/agent.d.ts +4 -4
  97. package/dist/agents/requirement/requirements/conditional.d.cts +4 -4
  98. package/dist/agents/requirement/requirements/conditional.d.ts +4 -4
  99. package/dist/agents/requirement/requirements/requirement.d.cts +4 -4
  100. package/dist/agents/requirement/requirements/requirement.d.ts +4 -4
  101. package/dist/agents/requirement/requirements/utils.d.cts +1 -1
  102. package/dist/agents/requirement/requirements/utils.d.ts +1 -1
  103. package/dist/agents/requirement/runner.cjs +21 -13
  104. package/dist/agents/requirement/runner.cjs.map +1 -1
  105. package/dist/agents/requirement/runner.d.cts +4 -4
  106. package/dist/agents/requirement/runner.d.ts +4 -4
  107. package/dist/agents/requirement/runner.js +21 -13
  108. package/dist/agents/requirement/runner.js.map +1 -1
  109. package/dist/agents/requirement/types.d.cts +4 -4
  110. package/dist/agents/requirement/types.d.ts +4 -4
  111. package/dist/agents/requirement/utils/llm.d.cts +4 -4
  112. package/dist/agents/requirement/utils/llm.d.ts +4 -4
  113. package/dist/agents/requirement/utils/tool.cjs +13 -2
  114. package/dist/agents/requirement/utils/tool.cjs.map +1 -1
  115. package/dist/agents/requirement/utils/tool.d.cts +4 -4
  116. package/dist/agents/requirement/utils/tool.d.ts +4 -4
  117. package/dist/agents/requirement/utils/tool.js +11 -0
  118. package/dist/agents/requirement/utils/tool.js.map +1 -1
  119. package/dist/agents/toolCalling/agent.d.cts +3 -3
  120. package/dist/agents/toolCalling/agent.d.ts +3 -3
  121. package/dist/agents/toolCalling/types.d.cts +1 -1
  122. package/dist/agents/toolCalling/types.d.ts +1 -1
  123. package/dist/agents/types.d.cts +2 -2
  124. package/dist/agents/types.d.ts +2 -2
  125. package/dist/backend/backend.d.cts +2 -2
  126. package/dist/backend/backend.d.ts +2 -2
  127. package/dist/backend/chat.cjs +124 -45
  128. package/dist/backend/chat.cjs.map +1 -1
  129. package/dist/backend/chat.d.cts +2 -2
  130. package/dist/backend/chat.d.ts +2 -2
  131. package/dist/backend/chat.js +127 -48
  132. package/dist/backend/chat.js.map +1 -1
  133. package/dist/backend/core.d.cts +3 -3
  134. package/dist/backend/core.d.ts +3 -3
  135. package/dist/backend/embedding.d.cts +2 -2
  136. package/dist/backend/embedding.d.ts +2 -2
  137. package/dist/backend/errors.cjs +25 -0
  138. package/dist/backend/errors.cjs.map +1 -1
  139. package/dist/backend/errors.d.cts +34 -1
  140. package/dist/backend/errors.d.ts +34 -1
  141. package/dist/backend/errors.js +24 -1
  142. package/dist/backend/errors.js.map +1 -1
  143. package/dist/backend/utils.d.cts +2 -2
  144. package/dist/backend/utils.d.ts +2 -2
  145. package/dist/{base-CyFx7BRL.d.ts → base-BfhNzUYf.d.ts} +1 -1
  146. package/dist/{base-XfWeXQ-S.d.cts → base-BqzN2QwB.d.cts} +1 -1
  147. package/dist/{chat-D8SVtw5Q.d.ts → chat-DTxmaKP0.d.ts} +7 -1
  148. package/dist/{chat-CC0s8z23.d.cts → chat-DaqV3woF.d.cts} +7 -1
  149. package/dist/context.d.cts +1 -1
  150. package/dist/context.d.ts +1 -1
  151. package/dist/emitter/emitter.d.cts +1 -1
  152. package/dist/emitter/emitter.d.ts +1 -1
  153. package/dist/emitter/types.d.cts +1 -1
  154. package/dist/emitter/types.d.ts +1 -1
  155. package/dist/index.d.cts +3 -3
  156. package/dist/index.d.ts +3 -3
  157. package/dist/internals/fetcher.d.cts +1 -1
  158. package/dist/internals/fetcher.d.ts +1 -1
  159. package/dist/memory/summarizeMemory.d.cts +2 -2
  160. package/dist/memory/summarizeMemory.d.ts +2 -2
  161. package/dist/middleware/streamToolCall.cjs +9 -0
  162. package/dist/middleware/streamToolCall.cjs.map +1 -1
  163. package/dist/middleware/streamToolCall.d.cts +11 -3
  164. package/dist/middleware/streamToolCall.d.ts +11 -3
  165. package/dist/middleware/streamToolCall.js +9 -0
  166. package/dist/middleware/streamToolCall.js.map +1 -1
  167. package/dist/middleware/trajectory.d.cts +1 -1
  168. package/dist/middleware/trajectory.d.ts +1 -1
  169. package/dist/parsers/linePrefix.d.cts +1 -1
  170. package/dist/parsers/linePrefix.d.ts +1 -1
  171. package/dist/tools/arxiv.d.cts +1 -1
  172. package/dist/tools/arxiv.d.ts +1 -1
  173. package/dist/tools/base.d.cts +1 -1
  174. package/dist/tools/base.d.ts +1 -1
  175. package/dist/tools/calculator.d.cts +1 -1
  176. package/dist/tools/calculator.d.ts +1 -1
  177. package/dist/tools/custom.d.cts +2 -2
  178. package/dist/tools/custom.d.ts +2 -2
  179. package/dist/tools/database/elasticsearch.d.cts +1 -1
  180. package/dist/tools/database/elasticsearch.d.ts +1 -1
  181. package/dist/tools/database/milvus.d.cts +3 -3
  182. package/dist/tools/database/milvus.d.ts +3 -3
  183. package/dist/tools/database/qdrant.d.cts +1 -1
  184. package/dist/tools/database/qdrant.d.ts +1 -1
  185. package/dist/tools/database/sql.d.cts +1 -1
  186. package/dist/tools/database/sql.d.ts +1 -1
  187. package/dist/tools/handoff.d.cts +2 -2
  188. package/dist/tools/handoff.d.ts +2 -2
  189. package/dist/tools/llm.d.cts +2 -2
  190. package/dist/tools/llm.d.ts +2 -2
  191. package/dist/tools/mcp.d.cts +1 -1
  192. package/dist/tools/mcp.d.ts +1 -1
  193. package/dist/tools/openapi.d.cts +1 -1
  194. package/dist/tools/openapi.d.ts +1 -1
  195. package/dist/tools/python/output.d.cts +1 -1
  196. package/dist/tools/python/output.d.ts +1 -1
  197. package/dist/tools/python/python.d.cts +2 -2
  198. package/dist/tools/python/python.d.ts +2 -2
  199. package/dist/tools/search/base.d.cts +1 -1
  200. package/dist/tools/search/base.d.ts +1 -1
  201. package/dist/tools/search/duckDuckGoSearch.d.cts +1 -1
  202. package/dist/tools/search/duckDuckGoSearch.d.ts +1 -1
  203. package/dist/tools/search/googleSearch.d.cts +1 -1
  204. package/dist/tools/search/googleSearch.d.ts +1 -1
  205. package/dist/tools/search/searXNGSearch.d.cts +1 -1
  206. package/dist/tools/search/searXNGSearch.d.ts +1 -1
  207. package/dist/tools/search/wikipedia.d.cts +1 -1
  208. package/dist/tools/search/wikipedia.d.ts +1 -1
  209. package/dist/tools/similarity.d.cts +1 -1
  210. package/dist/tools/similarity.d.ts +1 -1
  211. package/dist/tools/think.d.cts +1 -1
  212. package/dist/tools/think.d.ts +1 -1
  213. package/dist/tools/weather/openMeteo.d.cts +1 -1
  214. package/dist/tools/weather/openMeteo.d.ts +1 -1
  215. package/dist/tools/web/webCrawler.d.cts +1 -1
  216. package/dist/tools/web/webCrawler.d.ts +1 -1
  217. package/dist/{types-Dyd4e1G6.d.ts → types-YT-WdK3m.d.ts} +11 -11
  218. package/dist/{types-D9pn62yF.d.cts → types-YoNQSxQH.d.cts} +11 -11
  219. package/dist/version.cjs +1 -1
  220. package/dist/version.js +1 -1
  221. package/dist/workflows/agent.d.cts +40 -40
  222. package/dist/workflows/agent.d.ts +40 -40
  223. package/dist/workflows/workflow.d.cts +1 -1
  224. package/dist/workflows/workflow.d.ts +1 -1
  225. package/package.json +1 -1
  226. package/dist/{emitter-36-9MnvA.d.ts → emitter-CL56qab4.d.ts} +1 -1
  227. package/dist/{emitter-jN55XZZq.d.cts → emitter-UkIkNrek.d.cts} +1 -1
@@ -1,12 +1,12 @@
1
1
  import '../../context.cjs';
2
2
  import 'zod';
3
- import '../../base-XfWeXQ-S.cjs';
3
+ import '../../base-BqzN2QwB.cjs';
4
4
  import '../../tools/base.cjs';
5
5
  import '../../memory/base.cjs';
6
- import '../../emitter-jN55XZZq.cjs';
7
- import '../../chat-CC0s8z23.cjs';
6
+ import '../../emitter-UkIkNrek.cjs';
7
+ import '../../chat-DaqV3woF.cjs';
8
8
  import '../../backend/message.cjs';
9
- import '../../types-D9pn62yF.cjs';
9
+ import '../../types-YoNQSxQH.cjs';
10
10
  import './requirements/requirement.cjs';
11
11
  export { b as RequirementAgent, a as RequirementAgentInput, R as RequirementAgentTemplateFactory } from './runner.cjs';
12
12
  import './utils/toolCallChecker.cjs';
@@ -1,12 +1,12 @@
1
1
  import '../../context.js';
2
2
  import 'zod';
3
- import '../../base-CyFx7BRL.js';
3
+ import '../../base-BfhNzUYf.js';
4
4
  import '../../tools/base.js';
5
5
  import '../../memory/base.js';
6
- import '../../emitter-36-9MnvA.js';
7
- import '../../chat-D8SVtw5Q.js';
6
+ import '../../emitter-CL56qab4.js';
7
+ import '../../chat-DTxmaKP0.js';
8
8
  import '../../backend/message.js';
9
- import '../../types-Dyd4e1G6.js';
9
+ import '../../types-YT-WdK3m.js';
10
10
  import './requirements/requirement.js';
11
11
  export { b as RequirementAgent, a as RequirementAgentInput, R as RequirementAgentTemplateFactory } from './runner.js';
12
12
  import './utils/toolCallChecker.js';
@@ -2,8 +2,8 @@ import { Requirement, Rule } from './requirement.cjs';
2
2
  import { MultiTargetType, TargetType } from './utils.cjs';
3
3
  import { AnyTool } from '../../../tools/base.cjs';
4
4
  import { RunContext } from '../../../context.cjs';
5
- import { R as RequirementAgentRunState } from '../../../types-D9pn62yF.cjs';
6
- import '../../../emitter-jN55XZZq.cjs';
5
+ import { R as RequirementAgentRunState } from '../../../types-YoNQSxQH.cjs';
6
+ import '../../../emitter-UkIkNrek.cjs';
7
7
  import '../../../internals/types.cjs';
8
8
  import '../../../internals/helpers/guards.cjs';
9
9
  import '../../../internals/serializable.cjs';
@@ -19,11 +19,11 @@ import '../../../memory/base.cjs';
19
19
  import '../../../backend/message.cjs';
20
20
  import 'ai';
21
21
  import '../../../template.cjs';
22
- import '../../../chat-CC0s8z23.cjs';
22
+ import '../../../chat-DaqV3woF.cjs';
23
23
  import '../../../backend/constants.cjs';
24
24
  import '../../../logger/logger.cjs';
25
25
  import 'pino';
26
- import '../../../base-XfWeXQ-S.cjs';
26
+ import '../../../base-BqzN2QwB.cjs';
27
27
 
28
28
  /**
29
29
  * Copyright 2025 © BeeAI a Series of LF Projects, LLC
@@ -2,8 +2,8 @@ import { Requirement, Rule } from './requirement.js';
2
2
  import { MultiTargetType, TargetType } from './utils.js';
3
3
  import { AnyTool } from '../../../tools/base.js';
4
4
  import { RunContext } from '../../../context.js';
5
- import { R as RequirementAgentRunState } from '../../../types-Dyd4e1G6.js';
6
- import '../../../emitter-36-9MnvA.js';
5
+ import { R as RequirementAgentRunState } from '../../../types-YT-WdK3m.js';
6
+ import '../../../emitter-CL56qab4.js';
7
7
  import '../../../internals/types.js';
8
8
  import '../../../internals/helpers/guards.js';
9
9
  import '../../../internals/serializable.js';
@@ -19,11 +19,11 @@ import '../../../memory/base.js';
19
19
  import '../../../backend/message.js';
20
20
  import 'ai';
21
21
  import '../../../template.js';
22
- import '../../../chat-D8SVtw5Q.js';
22
+ import '../../../chat-DTxmaKP0.js';
23
23
  import '../../../backend/constants.js';
24
24
  import '../../../logger/logger.js';
25
25
  import 'pino';
26
- import '../../../base-CyFx7BRL.js';
26
+ import '../../../base-BfhNzUYf.js';
27
27
 
28
28
  /**
29
29
  * Copyright 2025 © BeeAI a Series of LF Projects, LLC
@@ -1,8 +1,8 @@
1
1
  import { MiddlewareType, Run, RunContext } from '../../../context.cjs';
2
2
  import { AnyTool } from '../../../tools/base.cjs';
3
- import { E as Emitter, C as Callback } from '../../../emitter-jN55XZZq.cjs';
3
+ import { E as Emitter, C as Callback } from '../../../emitter-UkIkNrek.cjs';
4
4
  import { FrameworkError } from '../../../errors.cjs';
5
- import { R as RequirementAgentRunState } from '../../../types-D9pn62yF.cjs';
5
+ import { R as RequirementAgentRunState } from '../../../types-YoNQSxQH.cjs';
6
6
  import '../../../internals/serializable.cjs';
7
7
  import '../../../internals/types.cjs';
8
8
  import '../../../internals/helpers/guards.cjs';
@@ -17,11 +17,11 @@ import '../../../memory/base.cjs';
17
17
  import '../../../backend/message.cjs';
18
18
  import 'ai';
19
19
  import '../../../template.cjs';
20
- import '../../../chat-CC0s8z23.cjs';
20
+ import '../../../chat-DaqV3woF.cjs';
21
21
  import '../../../backend/constants.cjs';
22
22
  import '../../../logger/logger.cjs';
23
23
  import 'pino';
24
- import '../../../base-XfWeXQ-S.cjs';
24
+ import '../../../base-BqzN2QwB.cjs';
25
25
 
26
26
  interface Rule {
27
27
  target: string;
@@ -1,8 +1,8 @@
1
1
  import { MiddlewareType, Run, RunContext } from '../../../context.js';
2
2
  import { AnyTool } from '../../../tools/base.js';
3
- import { E as Emitter, C as Callback } from '../../../emitter-36-9MnvA.js';
3
+ import { E as Emitter, C as Callback } from '../../../emitter-CL56qab4.js';
4
4
  import { FrameworkError } from '../../../errors.js';
5
- import { R as RequirementAgentRunState } from '../../../types-Dyd4e1G6.js';
5
+ import { R as RequirementAgentRunState } from '../../../types-YT-WdK3m.js';
6
6
  import '../../../internals/serializable.js';
7
7
  import '../../../internals/types.js';
8
8
  import '../../../internals/helpers/guards.js';
@@ -17,11 +17,11 @@ import '../../../memory/base.js';
17
17
  import '../../../backend/message.js';
18
18
  import 'ai';
19
19
  import '../../../template.js';
20
- import '../../../chat-D8SVtw5Q.js';
20
+ import '../../../chat-DTxmaKP0.js';
21
21
  import '../../../backend/constants.js';
22
22
  import '../../../logger/logger.js';
23
23
  import 'pino';
24
- import '../../../base-CyFx7BRL.js';
24
+ import '../../../base-BfhNzUYf.js';
25
25
 
26
26
  interface Rule {
27
27
  target: string;
@@ -1,7 +1,7 @@
1
1
  import { AnyTool, AnyToolClass } from '../../../tools/base.cjs';
2
2
  import 'ajv';
3
3
  import '../../../context.cjs';
4
- import '../../../emitter-jN55XZZq.cjs';
4
+ import '../../../emitter-UkIkNrek.cjs';
5
5
  import '../../../internals/types.cjs';
6
6
  import '../../../internals/helpers/guards.cjs';
7
7
  import '../../../internals/serializable.cjs';
@@ -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-36-9MnvA.js';
4
+ import '../../../emitter-CL56qab4.js';
5
5
  import '../../../internals/types.js';
6
6
  import '../../../internals/helpers/guards.js';
7
7
  import '../../../internals/serializable.js';
@@ -2,6 +2,7 @@
2
2
 
3
3
  var uuid = require('uuid');
4
4
  var base_cjs = require('../base.cjs');
5
+ var chat_cjs = require('../../backend/chat.cjs');
5
6
  var message_cjs = require('../../backend/message.cjs');
6
7
  var unconstrainedMemory_cjs = require('../../memory/unconstrainedMemory.cjs');
7
8
  var counter_cjs = require('../../internals/helpers/counter.cjs');
@@ -87,7 +88,8 @@ class RequirementAgentRunner {
87
88
  messages,
88
89
  tools: request.allowedTools,
89
90
  toolChoice: request.toolChoice,
90
- streamPartialToolCalls: true
91
+ streamPartialToolCalls: true,
92
+ maxRetries: this.runConfig.maxRetriesPerStep ?? 0
91
93
  };
92
94
  }
93
95
  async createFinalAnswerToolCall(fullText) {
@@ -192,18 +194,22 @@ class RequirementAgentRunner {
192
194
  }
193
195
  async runIteration(request) {
194
196
  const response = await this.runLLM(request);
195
- const toolCalls = response.getToolCalls();
196
- if (toolCalls.length === 0) {
197
+ if (response.getToolCalls().length === 0) {
197
198
  const textMessages = response.getTextMessages();
198
199
  const text = textMessages.map((m) => m.text).join("\n");
199
- if (!text || request.canStop) {
200
- throw new base_cjs.AgentError("Model produced an empty response.");
201
- }
202
- const finalAnswerToolCall = await this.createFinalAnswerToolCall(text);
203
- if (!finalAnswerToolCall) {
200
+ const finalAnswerToolCall = text && request.canStop ? await this.createFinalAnswerToolCall(text) : null;
201
+ if (finalAnswerToolCall) {
202
+ const stream = this.createFinalAnswerStream(request.finalAnswer);
203
+ await stream.add(new chat_cjs.ChatModelOutput([
204
+ finalAnswerToolCall
205
+ ]));
206
+ } else {
204
207
  const err = new base_cjs.AgentError("Model produced an invalid final answer tool call.");
205
208
  this.iterationErrorCounter.use(err);
206
209
  this.globalErrorCounter.use(err);
210
+ if (!request.canStop) {
211
+ return await this.runIteration(request);
212
+ }
207
213
  await this.reasoner.update([]);
208
214
  const updatedRequest = await this.createRequest([
209
215
  {
@@ -217,11 +223,10 @@ class RequirementAgentRunner {
217
223
  this.forceFinalAnswerAsTool = true;
218
224
  return await this.runIteration(updatedRequest);
219
225
  }
220
- await this.state.memory.add(finalAnswerToolCall);
221
- toolCalls.push(...finalAnswerToolCall.getToolCalls());
222
- } else {
223
- await this.state.memory.addMany(response.messages);
226
+ response.messages.length = 0;
227
+ response.messages.push(finalAnswerToolCall);
224
228
  }
229
+ const toolCalls = response.getToolCalls();
225
230
  for (const toolCallMsg of toolCalls) {
226
231
  this.toolCallCycleChecker.register(toolCallMsg);
227
232
  if (this.toolCallCycleChecker.cycleFound) {
@@ -239,7 +244,10 @@ class RequirementAgentRunner {
239
244
  }
240
245
  }
241
246
  const toolResults = await this.invokeToolCalls(request.allowedTools, toolCalls);
242
- await this.state.memory.addMany(toolResults);
247
+ await this.state.memory.addMany([
248
+ ...response.messages,
249
+ ...toolResults
250
+ ]);
243
251
  const tempMessages = this.state.memory.messages.filter((msg) => msg.meta[TEMP_MESSAGE_KEY]);
244
252
  await this.state.memory.deleteMany(tempMessages);
245
253
  return response;
@@ -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","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
+ {"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","finalAnswerToolCall","canStop","stream","add","ChatModelOutput","err","updatedRequest","target","allowed","hidden","forced","preventStop","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 maxRetries: this.runConfig.maxRetriesPerStep ?? 0,\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 if (response.getToolCalls().length === 0) {\n const textMessages = response.getTextMessages();\n const text = textMessages.map((m) => m.text).join(\"\\n\");\n\n const finalAnswerToolCall =\n text && request.canStop ? await this.createFinalAnswerToolCall(text) : null;\n if (finalAnswerToolCall) {\n const stream = this.createFinalAnswerStream(request.finalAnswer);\n await stream.add(new ChatModelOutput([finalAnswerToolCall]));\n } else {\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 if (!request.canStop) {\n return await this.runIteration(request);\n }\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 response.messages.length = 0;\n response.messages.push(finalAnswerToolCall);\n }\n\n // Check for cycles\n const toolCalls = response.getToolCalls();\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([...response.messages, ...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, c as AgentMeta } from '../../base-XfWeXQ-S.cjs';
4
+ import { a as BaseAgent, c as AgentMeta } from '../../base-BqzN2QwB.cjs';
5
5
  import { AnyTool } from '../../tools/base.cjs';
6
6
  import { BaseMemory } from '../../memory/base.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';
7
+ import { E as Emitter } from '../../emitter-UkIkNrek.cjs';
8
+ import { m as ChatModel, n as ChatModelOutput, d as ChatModelInput } from '../../chat-DaqV3woF.cjs';
9
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';
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-YoNQSxQH.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';
@@ -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, c as AgentMeta } from '../../base-CyFx7BRL.js';
4
+ import { a as BaseAgent, c as AgentMeta } from '../../base-BfhNzUYf.js';
5
5
  import { AnyTool } from '../../tools/base.js';
6
6
  import { BaseMemory } from '../../memory/base.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';
7
+ import { E as Emitter } from '../../emitter-CL56qab4.js';
8
+ import { m as ChatModel, n as ChatModelOutput, d as ChatModelInput } from '../../chat-DTxmaKP0.js';
9
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';
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-YT-WdK3m.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';
@@ -1,5 +1,6 @@
1
1
  import { v4 } from 'uuid';
2
2
  import { AgentError } from '../base.js';
3
+ import { ChatModelOutput } from '../../backend/chat.js';
3
4
  import { AssistantMessage, ToolMessage } from '../../backend/message.js';
4
5
  import { UnconstrainedMemory } from '../../memory/unconstrainedMemory.js';
5
6
  import { RetryCounter } from '../../internals/helpers/counter.js';
@@ -85,7 +86,8 @@ class RequirementAgentRunner {
85
86
  messages,
86
87
  tools: request.allowedTools,
87
88
  toolChoice: request.toolChoice,
88
- streamPartialToolCalls: true
89
+ streamPartialToolCalls: true,
90
+ maxRetries: this.runConfig.maxRetriesPerStep ?? 0
89
91
  };
90
92
  }
91
93
  async createFinalAnswerToolCall(fullText) {
@@ -190,18 +192,22 @@ class RequirementAgentRunner {
190
192
  }
191
193
  async runIteration(request) {
192
194
  const response = await this.runLLM(request);
193
- const toolCalls = response.getToolCalls();
194
- if (toolCalls.length === 0) {
195
+ if (response.getToolCalls().length === 0) {
195
196
  const textMessages = response.getTextMessages();
196
197
  const text = textMessages.map((m) => m.text).join("\n");
197
- if (!text || request.canStop) {
198
- throw new AgentError("Model produced an empty response.");
199
- }
200
- const finalAnswerToolCall = await this.createFinalAnswerToolCall(text);
201
- if (!finalAnswerToolCall) {
198
+ const finalAnswerToolCall = text && request.canStop ? await this.createFinalAnswerToolCall(text) : null;
199
+ if (finalAnswerToolCall) {
200
+ const stream = this.createFinalAnswerStream(request.finalAnswer);
201
+ await stream.add(new ChatModelOutput([
202
+ finalAnswerToolCall
203
+ ]));
204
+ } else {
202
205
  const err = new AgentError("Model produced an invalid final answer tool call.");
203
206
  this.iterationErrorCounter.use(err);
204
207
  this.globalErrorCounter.use(err);
208
+ if (!request.canStop) {
209
+ return await this.runIteration(request);
210
+ }
205
211
  await this.reasoner.update([]);
206
212
  const updatedRequest = await this.createRequest([
207
213
  {
@@ -215,11 +221,10 @@ class RequirementAgentRunner {
215
221
  this.forceFinalAnswerAsTool = true;
216
222
  return await this.runIteration(updatedRequest);
217
223
  }
218
- await this.state.memory.add(finalAnswerToolCall);
219
- toolCalls.push(...finalAnswerToolCall.getToolCalls());
220
- } else {
221
- await this.state.memory.addMany(response.messages);
224
+ response.messages.length = 0;
225
+ response.messages.push(finalAnswerToolCall);
222
226
  }
227
+ const toolCalls = response.getToolCalls();
223
228
  for (const toolCallMsg of toolCalls) {
224
229
  this.toolCallCycleChecker.register(toolCallMsg);
225
230
  if (this.toolCallCycleChecker.cycleFound) {
@@ -237,7 +242,10 @@ class RequirementAgentRunner {
237
242
  }
238
243
  }
239
244
  const toolResults = await this.invokeToolCalls(request.allowedTools, toolCalls);
240
- await this.state.memory.addMany(toolResults);
245
+ await this.state.memory.addMany([
246
+ ...response.messages,
247
+ ...toolResults
248
+ ]);
241
249
  const tempMessages = this.state.memory.messages.filter((msg) => msg.meta[TEMP_MESSAGE_KEY]);
242
250
  await this.state.memory.deleteMany(tempMessages);
243
251
  return response;
@@ -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","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":";;;;;;;;;;;;;AA8BA,MAAMA,gBAAAA,GAAmB,aAAA;AAKlB,MAAMC,sBAAAA,CAAAA;EAnCb;;;;;;;;;;AAoCqBC,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,MAAMC,gBAAAA,GAAmB,IAAA,CAAKC,uBAAAA,CAAwBF,OAAAA,CAAQd,WAAW,CAAA;AACzE,IAAA,IAAI;AACF,MAAA,MAAMiB,KAAAA,GAAQ,MAAM,IAAA,CAAKC,iBAAAA,CAAkBJ,OAAAA,CAAAA;AAC3C,MAAA,MAAMK,QAAAA,GAAW,MAAM,IAAA,CAAKzC,GAAAA,CAAI0C,OAAOH,KAAAA,CAAAA,CAAOI,WAAWN,gBAAAA,CAAAA;AAEzD,MAAA,IAAII,SAAS1B,KAAAA,EAAO;AAClB6B,QAAAA,eAAAA,CAAgB,IAAA,CAAKhD,KAAAA,CAAMmB,KAAAA,EAAO0B,QAAAA,CAAS1B,KAAK,CAAA;AAClD;AAEA,MAAA,OAAO0B,QAAAA;KACT,SAAA;AACEJ,MAAAA,gBAAAA,CAAiBQ,MAAAA,EAAM;AACzB;AACF;AAEA,EAAA,MAAgBL,kBAAkBJ,OAAAA,EAA2D;AAC3F,IAAA,MAAMU,QAAAA,GAAsB;AAC1B,MAAA,MAAMC,mBAAAA,CAAoB,IAAA,CAAKvC,SAAAA,CAAUwC,MAAAA,EAAQZ,OAAAA,CAAAA;AAC9C,MAAA,GAAA,IAAA,CAAKxC,MAAMe,MAAAA,CAAOmC;;AAGvB,IAAA,OAAO;AACLA,MAAAA,QAAAA;AACA5C,MAAAA,KAAAA,EAAOkC,OAAAA,CAAQa,YAAAA;AACfC,MAAAA,UAAAA,EAAYd,OAAAA,CAAQc,UAAAA;MACpBC,sBAAAA,EAAwB;AAC1B,KAAA;AACF;AAEA,EAAA,MAAgBC,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,CAAKzD,QAAAA,CAASyB,WAAAA,CAAYmC,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,CAAKlE,SAASyB,WAAAA,CAAY0C,IAAAA;AACpCzB,YAAAA,KAAAA,EAAO,IAAA,CAAK1C,QAAAA,CAASyB,WAAAA,CAAY2C,WAAAA,GAAcC,KAAAA,CAAM;cAAEzB,QAAAA,EAAUY;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,CAAKlE,SAASyB,WAAAA,CAAY0C,IAAAA;QACpCzB,KAAAA,EAAOe;AACT;AACD,KAAA,CAAA;AACH;EAEA,MAAgBa,aAAAA,CAAcC,UAAAA,GAAqB,EAAA,EAAsC;AACvF,IAAA,OAAO,MAAM,KAAKvE,QAAAA,CAASsE,aAAAA,CAAc,KAAKvE,KAAAA,EAAO,IAAA,CAAKW,wBAAwB6D,UAAAA,CAAAA;AACpF;EAEA,MAAgBC,eAAAA,CACdnE,OACAoE,SAAAA,EACwB;AACxB,IAAA,MAAMC,cAA6B,EAAA;AAEnC,IAAA,MAAMC,OAAAA,GAAU,MAAMC,OAAAA,CAAQC,GAAAA,CAC5BJ,SAAAA,CAAUK,IAAI,CAACC,GAAAA,KAAQC,OAAAA,CAAQ3E,KAAAA,EAAO0E,GAAAA,EAAK;AAAEhF,MAAAA,KAAAA,EAAO,IAAA,CAAKA;AAAM,KAAA,CAAA,CAAA,CAAA;AAGjE,IAAA,KAAA,MAAWkF,YAAYN,OAAAA,EAAS;AAC9B,MAAA,IAAA,CAAK5E,KAAAA,CAAMiB,MAAMkE,IAAAA,CAAK;AACpBC,QAAAA,EAAAA,EAAInB,EAAAA,EAAAA;AACJ/C,QAAAA,SAAAA,EAAW,KAAKlB,KAAAA,CAAMkB,SAAAA;AACtByB,QAAAA,KAAAA,EAAOuC,QAAAA,CAASvC,KAAAA;AAChB0C,QAAAA,MAAAA,EAAQH,QAAAA,CAASG,MAAAA;AACjBC,QAAAA,IAAAA,EAAMJ,QAAAA,CAASI,IAAAA;AACfC,QAAAA,KAAAA,EAAOL,QAAAA,CAASK;OAClB,CAAA;AAEA,MAAA,IAAIzE,MAAAA;AACJ,MAAA,IAAIoE,SAASK,KAAAA,EAAO;AAClBzE,QAAAA,MAAAA,GAAS,IAAA,CAAKF,SAAAA,CAAU4E,SAAAA,CAAUC,MAAAA,CAAO;UACvCC,MAAAA,EAAQR,QAAAA,CAASK,MAAMI,OAAAA;SACzB,CAAA;OACF,MAAO;AACL7E,QAAAA,MAAAA,GAAS,CAACoE,QAAAA,CAASG,MAAAA,CAAOO,OAAAA,EAAO,GAC7BV,QAAAA,CAASG,MAAAA,CAAOQ,cAAAA,EAAc,GAC9B,IAAA,CAAKjF,SAAAA,CAAUkF,YAAAA,CAAaL,MAAAA,CAAO;UACjCP,QAAAA,EAAU;AAAEI,YAAAA,IAAAA,EAAMJ,QAAAA,CAASI,IAAAA;AAAM3C,YAAAA,KAAAA,EAAOuC,QAAAA,CAASvC;AAAM;SACzD,CAAA;AACN;AACAgC,MAAAA,WAAAA,CAAYQ,IAAAA,CACV,IAAIY,WAAAA,CAAY;QACdhC,IAAAA,EAAM,aAAA;AACNI,QAAAA,QAAAA,EAAUe,QAAAA,CAASI,IAAAA,EAAMlB,IAAAA,IAAQc,QAAAA,CAASF,GAAAA,CAAIb,QAAAA;AAC9CH,QAAAA,UAAAA,EAAYkB,SAASF,GAAAA,CAAIhB,UAAAA;QACzBqB,MAAAA,EAAQ;UAAEtB,IAAAA,EAAM,MAAA;UAAQiC,KAAAA,EAAOlF;AAAO;AACxC,OAAA,CAAA,CAAA;AAGF,MAAA,IAAIoE,SAASK,KAAAA,EAAO;AAClB,QAAA,IAAA,CAAKrF,qBAAAA,CAAsB+F,GAAAA,CAAIf,QAAAA,CAASK,KAAK,CAAA;AAC7C,QAAA,IAAA,CAAKpF,kBAAAA,CAAmB8F,GAAAA,CAAIf,QAAAA,CAASK,KAAK,CAAA;AAC5C;AACF;AAEA,IAAA,OAAOZ,WAAAA;AACT;AAEA,EAAA,MAAMuB,YAAYhD,QAAAA,EAAoC;AACpD,IAAA,MAAM,IAAA,CAAKlD,KAAAA,CAAMe,MAAAA,CAAOoF,OAAAA,CAAQjD,QAAAA,CAAAA;AAClC;AAEA,EAAA,MAAMkD,GAAAA,GAAyC;AAC7C,IAAA,IAAI,IAAA,CAAKpG,MAAMa,MAAAA,EAAQ;AACrB,MAAA,OAAO,IAAA,CAAKb,KAAAA;AACd;AAGA,IAAA,MAAM,IAAA,CAAKC,QAAAA,CAASoG,MAAAA,CAAO,IAAA,CAAK9F,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,CAAK+B,aAAAA,EAAa;AACxC,MAAA,MAAM,IAAA,CAAK7D,GAAAA,CAAI4F,OAAAA,CAAQC,IAAAA,CAAK,OAAA,EAAS;AAAEvG,QAAAA,KAAAA,EAAO,IAAA,CAAKA,KAAAA;AAAOwC,QAAAA;OAAQ,CAAA;AAClE,MAAA,MAAMK,QAAAA,GAAW,MAAM,IAAA,CAAK2D,YAAAA,CAAahE,OAAAA,CAAAA;AACzC,MAAA,MAAM,IAAA,CAAK9B,GAAAA,CAAI4F,OAAAA,CAAQC,IAAAA,CAAK,SAAA,EAAW;AAAEvG,QAAAA,KAAAA,EAAO,IAAA,CAAKA,KAAAA;AAAO6C,QAAAA;OAAS,CAAA;AACvE;AAEA,IAAA,OAAO,IAAA,CAAK7C,KAAAA;AACd;AAEA,EAAA,MAAgBwG,aAAahE,OAAAA,EAA4D;AACvF,IAAA,MAAMK,QAAAA,GAAW,MAAM,IAAA,CAAKN,MAAAA,CAAOC,OAAAA,CAAAA;AAGnC,IAAA,MAAMkC,SAAAA,GAAY7B,SAAS4D,YAAAA,EAAY;AACvC,IAAA,IAAI/B,SAAAA,CAAUgC,WAAW,CAAA,EAAG;AAC1B,MAAA,MAAMC,YAAAA,GAAe9D,SAAS+D,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,IAAQrE,OAAAA,CAAQwE,OAAAA,EAAS;AAC5B,QAAA,MAAM,IAAIhF,WAAW,mCAAA,CAAA;AACvB;AAEA,MAAA,MAAMiF,mBAAAA,GAAsB,MAAM,IAAA,CAAKzD,yBAAAA,CAA0BqD,IAAAA,CAAAA;AACjE,MAAA,IAAI,CAACI,mBAAAA,EAAqB;AACxB,QAAA,MAAMC,GAAAA,GAAM,IAAIlF,UAAAA,CAAW,mDAAA,CAAA;AAC3B,QAAA,IAAA,CAAK9B,qBAAAA,CAAsB+F,IAAIiB,GAAAA,CAAAA;AAC/B,QAAA,IAAA,CAAK/G,kBAAAA,CAAmB8F,IAAIiB,GAAAA,CAAAA;AAE5B,QAAA,MAAM,IAAA,CAAKjH,QAAAA,CAASoG,MAAAA,CAAO,EAAE,CAAA;AAC7B,QAAA,MAAMc,cAAAA,GAAiB,MAAM,IAAA,CAAK5C,aAAAA,CAAc;AAC9C,UAAA;YACE6C,MAAAA,EAAQ,IAAA,CAAKnH,SAASyB,WAAAA,CAAY0C,IAAAA;YAClCiD,OAAAA,EAAS,IAAA;YACTC,MAAAA,EAAQ,KAAA;YACRC,MAAAA,EAAQ,KAAA;YACRC,WAAAA,EAAa;AACf;AACD,SAAA,CAAA;AACD,QAAA,IAAA,CAAK7G,sBAAAA,GAAyB,IAAA;AAC9B,QAAA,OAAO,MAAM,IAAA,CAAK6F,YAAAA,CAAaW,cAAAA,CAAAA;AACjC;AAEA,MAAA,MAAM,IAAA,CAAKnH,KAAAA,CAAMe,MAAAA,CAAO0G,GAAAA,CAAIR,mBAAAA,CAAAA;AAC5BvC,MAAAA,SAAAA,CAAUS,IAAAA,CAAI,GAAI8B,mBAAAA,CAAoBR,YAAAA,EAAY,CAAA;KACpD,MAAO;AACL,MAAA,MAAM,IAAA,CAAKzG,KAAAA,CAAMe,MAAAA,CAAOoF,OAAAA,CAAQtD,SAASK,QAAQ,CAAA;AACnD;AAGA,IAAA,KAAA,MAAWwE,eAAehD,SAAAA,EAAW;AACnC,MAAA,IAAA,CAAKjE,oBAAAA,CAAqBkH,SAASD,WAAAA,CAAAA;AACnC,MAAA,IAAI,IAAA,CAAKjH,qBAAqBmH,UAAAA,EAAY;AACxC,QAAA,IAAA,CAAKnH,qBAAqBoH,KAAAA,EAAK;AAC/B,QAAA,MAAMV,cAAAA,GAAiB,MAAM,IAAA,CAAK5C,aAAAA,CAAc;AAC9C,UAAA;AACE6C,YAAAA,MAAAA,EAAQM,WAAAA,CAAYvD,QAAAA;YACpBkD,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,CAAgBjC,OAAAA,CAAQa,cAAcqB,SAAAA,CAAAA;AACrE,IAAA,MAAM,IAAA,CAAK1E,KAAAA,CAAMe,MAAAA,CAAOoF,OAAAA,CAAQxB,WAAAA,CAAAA;AAGhC,IAAA,MAAMmD,YAAAA,GAAe,IAAA,CAAK9H,KAAAA,CAAMe,MAAAA,CAAOmC,QAAAA,CAAS6E,MAAAA,CAAO,CAAC/C,GAAAA,KAAQA,GAAAA,CAAIgD,IAAAA,CAAKlI,gBAAAA,CAAiB,CAAA;AAC1F,IAAA,MAAM,IAAA,CAAKE,KAAAA,CAAMe,MAAAA,CAAOkH,UAAAA,CAAWH,YAAAA,CAAAA;AAEnC,IAAA,OAAOjF,QAAAA;AACT;AAEQH,EAAAA,uBAAAA,CAAwBhB,WAAAA,EAA8B;AAC5D,IAAA,MAAMqB,UAAAA,GAAa,IAAImF,wBAAAA,CAAyB;MAC9Cd,MAAAA,EAAQ1F,WAAAA;MACRyG,cAAAA,EAAgB,KAAA;MAChBC,GAAAA,EAAK,UAAA;MACLC,WAAAA,EAAa;KACf,CAAA;AACAtF,IAAAA,UAAAA,CAAWuD,OAAAA,CAAQgC,EAAAA,CAAG,QAAA,EAAU,OAAOC,MAAMC,CAAAA,KAAAA;AAC3C,MAAA,MAAM,IAAA,CAAK9H,GAAAA,CAAI4F,OAAAA,CAAQC,IAAAA,CAAK,aAAA,EAAe;AACzCvG,QAAAA,KAAAA,EAAO,IAAA,CAAKA,KAAAA;AACZqF,QAAAA,MAAAA,EAAQkD,IAAAA,CAAKlD,MAAAA;AACboD,QAAAA,KAAAA,EAAOF,IAAAA,CAAKE,KAAAA;QACZC,gBAAAA,EAAkBjH;OACpB,CAAA;KACF,CAAA;AACA,IAAA,OAAOsB,UAAAA;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, 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
+ {"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","finalAnswerToolCall","canStop","stream","add","ChatModelOutput","err","updatedRequest","target","allowed","hidden","forced","preventStop","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 maxRetries: this.runConfig.maxRetriesPerStep ?? 0,\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 if (response.getToolCalls().length === 0) {\n const textMessages = response.getTextMessages();\n const text = textMessages.map((m) => m.text).join(\"\\n\");\n\n const finalAnswerToolCall =\n text && request.canStop ? await this.createFinalAnswerToolCall(text) : null;\n if (finalAnswerToolCall) {\n const stream = this.createFinalAnswerStream(request.finalAnswer);\n await stream.add(new ChatModelOutput([finalAnswerToolCall]));\n } else {\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 if (!request.canStop) {\n return await this.runIteration(request);\n }\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 response.messages.length = 0;\n response.messages.push(finalAnswerToolCall);\n }\n\n // Check for cycles\n const toolCalls = response.getToolCalls();\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([...response.messages, ...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-CC0s8z23.cjs';
7
- import '../../base-XfWeXQ-S.cjs';
6
+ import '../../chat-DaqV3woF.cjs';
7
+ import '../../base-BqzN2QwB.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-D9pn62yF.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-YoNQSxQH.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-jN55XZZq.cjs';
16
+ import '../../emitter-UkIkNrek.cjs';
17
17
  import '../../internals/helpers/promise.cjs';
18
18
  import 'promise-based-task';
19
19
  import '../../cache/base.cjs';