beeai-framework 0.1.21 → 0.1.22

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 (303) hide show
  1. package/dist/adapters/a2a/agents/agent.d.cts +6 -10
  2. package/dist/adapters/a2a/agents/agent.d.ts +6 -10
  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 +6 -10
  12. package/dist/adapters/acp/agents/agent.d.ts +6 -10
  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 +8 -6
  16. package/dist/adapters/agentstack/agents/agent.d.ts +8 -6
  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 +2 -2
  24. package/dist/adapters/anthropic/backend/chat.d.ts +2 -2
  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 +2 -2
  32. package/dist/adapters/dummy/backend/chat.d.ts +2 -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 +2 -2
  44. package/dist/adapters/langchain/backend/chat.d.ts +2 -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 +2 -2
  58. package/dist/adapters/vercel/backend/chat.d.ts +2 -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.cjs +15 -0
  62. package/dist/adapters/vercel/backend/utils.cjs.map +1 -1
  63. package/dist/adapters/vercel/backend/utils.d.cts +4 -3
  64. package/dist/adapters/vercel/backend/utils.d.ts +4 -3
  65. package/dist/adapters/vercel/backend/utils.js +15 -1
  66. package/dist/adapters/vercel/backend/utils.js.map +1 -1
  67. package/dist/adapters/watsonx/backend/chat.d.cts +2 -2
  68. package/dist/adapters/watsonx/backend/chat.d.ts +2 -2
  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-DvvVGvLr.d.cts → agent-BMfyig7X.d.cts} +5 -4
  74. package/dist/{agent-CHebzsQB.d.ts → agent-Dxw8AGWb.d.ts} +5 -4
  75. package/dist/agents/base.cjs +5 -2
  76. package/dist/agents/base.cjs.map +1 -1
  77. package/dist/agents/base.d.cts +2 -2
  78. package/dist/agents/base.d.ts +2 -2
  79. package/dist/agents/base.js +5 -2
  80. package/dist/agents/base.js.map +1 -1
  81. package/dist/agents/experimental/replan/agent.d.cts +3 -3
  82. package/dist/agents/experimental/replan/agent.d.ts +3 -3
  83. package/dist/agents/experimental/replan/prompts.d.cts +1 -1
  84. package/dist/agents/experimental/replan/prompts.d.ts +1 -1
  85. package/dist/agents/experimental/streamlit/agent.d.cts +8 -12
  86. package/dist/agents/experimental/streamlit/agent.d.ts +8 -12
  87. package/dist/agents/react/agent.d.cts +4 -4
  88. package/dist/agents/react/agent.d.ts +4 -4
  89. package/dist/agents/react/prompts.d.cts +1 -1
  90. package/dist/agents/react/prompts.d.ts +1 -1
  91. package/dist/agents/react/runners/base.d.cts +4 -4
  92. package/dist/agents/react/runners/base.d.ts +4 -4
  93. package/dist/agents/react/runners/deep-think/prompts.d.cts +1 -1
  94. package/dist/agents/react/runners/deep-think/prompts.d.ts +1 -1
  95. package/dist/agents/react/runners/deep-think/runner.d.cts +5 -5
  96. package/dist/agents/react/runners/deep-think/runner.d.ts +5 -5
  97. package/dist/agents/react/runners/default/runner.d.cts +5 -5
  98. package/dist/agents/react/runners/default/runner.d.ts +5 -5
  99. package/dist/agents/react/runners/granite/prompts.d.cts +1 -1
  100. package/dist/agents/react/runners/granite/prompts.d.ts +1 -1
  101. package/dist/agents/react/runners/granite/runner.d.cts +5 -5
  102. package/dist/agents/react/runners/granite/runner.d.ts +5 -5
  103. package/dist/agents/react/types.d.cts +2 -2
  104. package/dist/agents/react/types.d.ts +2 -2
  105. package/dist/agents/requirement/agent.cjs +162 -0
  106. package/dist/agents/requirement/agent.cjs.map +1 -0
  107. package/dist/agents/requirement/agent.d.cts +29 -0
  108. package/dist/agents/requirement/agent.d.ts +29 -0
  109. package/dist/agents/requirement/agent.js +160 -0
  110. package/dist/agents/requirement/agent.js.map +1 -0
  111. package/dist/agents/requirement/prompts.cjs +95 -0
  112. package/dist/agents/requirement/prompts.cjs.map +1 -0
  113. package/dist/agents/requirement/prompts.d.cts +107 -0
  114. package/dist/agents/requirement/prompts.d.ts +107 -0
  115. package/dist/agents/requirement/prompts.js +90 -0
  116. package/dist/agents/requirement/prompts.js.map +1 -0
  117. package/dist/agents/requirement/requirements/conditional.cjs +190 -0
  118. package/dist/agents/requirement/requirements/conditional.cjs.map +1 -0
  119. package/dist/agents/requirement/requirements/conditional.d.cts +71 -0
  120. package/dist/agents/requirement/requirements/conditional.d.ts +71 -0
  121. package/dist/agents/requirement/requirements/conditional.js +188 -0
  122. package/dist/agents/requirement/requirements/conditional.js.map +1 -0
  123. package/dist/agents/requirement/requirements/requirement.cjs +107 -0
  124. package/dist/agents/requirement/requirements/requirement.cjs.map +1 -0
  125. package/dist/agents/requirement/requirements/requirement.d.cts +59 -0
  126. package/dist/agents/requirement/requirements/requirement.d.ts +59 -0
  127. package/dist/agents/requirement/requirements/requirement.js +104 -0
  128. package/dist/agents/requirement/requirements/requirement.js.map +1 -0
  129. package/dist/agents/requirement/requirements/utils.cjs +74 -0
  130. package/dist/agents/requirement/requirements/utils.cjs.map +1 -0
  131. package/dist/agents/requirement/requirements/utils.d.cts +40 -0
  132. package/dist/agents/requirement/requirements/utils.d.ts +40 -0
  133. package/dist/agents/requirement/requirements/utils.js +69 -0
  134. package/dist/agents/requirement/requirements/utils.js.map +1 -0
  135. package/dist/agents/requirement/runner.cjs +252 -0
  136. package/dist/agents/requirement/runner.cjs.map +1 -0
  137. package/dist/agents/requirement/runner.d.cts +117 -0
  138. package/dist/agents/requirement/runner.d.ts +117 -0
  139. package/dist/agents/requirement/runner.js +250 -0
  140. package/dist/agents/requirement/runner.js.map +1 -0
  141. package/dist/agents/requirement/types.cjs +40 -0
  142. package/dist/agents/requirement/types.cjs.map +1 -0
  143. package/dist/agents/requirement/types.d.cts +24 -0
  144. package/dist/agents/requirement/types.d.ts +24 -0
  145. package/dist/agents/requirement/types.js +35 -0
  146. package/dist/agents/requirement/types.js.map +1 -0
  147. package/dist/agents/requirement/utils/llm.cjs +202 -0
  148. package/dist/agents/requirement/utils/llm.cjs.map +1 -0
  149. package/dist/agents/requirement/utils/llm.d.cts +50 -0
  150. package/dist/agents/requirement/utils/llm.d.ts +50 -0
  151. package/dist/agents/requirement/utils/llm.js +199 -0
  152. package/dist/agents/requirement/utils/llm.js.map +1 -0
  153. package/dist/agents/requirement/utils/tool.cjs +94 -0
  154. package/dist/agents/requirement/utils/tool.cjs.map +1 -0
  155. package/dist/agents/requirement/utils/tool.d.cts +24 -0
  156. package/dist/agents/requirement/utils/tool.d.ts +24 -0
  157. package/dist/agents/requirement/utils/tool.js +91 -0
  158. package/dist/agents/requirement/utils/tool.js.map +1 -0
  159. package/dist/agents/requirement/utils/toolCallChecker.cjs +61 -0
  160. package/dist/agents/requirement/utils/toolCallChecker.cjs.map +1 -0
  161. package/dist/agents/requirement/utils/toolCallChecker.d.cts +28 -0
  162. package/dist/agents/requirement/utils/toolCallChecker.d.ts +28 -0
  163. package/dist/agents/requirement/utils/toolCallChecker.js +59 -0
  164. package/dist/agents/requirement/utils/toolCallChecker.js.map +1 -0
  165. package/dist/agents/toolCalling/agent.d.cts +8 -12
  166. package/dist/agents/toolCalling/agent.d.ts +8 -12
  167. package/dist/agents/toolCalling/types.d.cts +1 -1
  168. package/dist/agents/toolCalling/types.d.ts +1 -1
  169. package/dist/agents/types.d.cts +2 -2
  170. package/dist/agents/types.d.ts +2 -2
  171. package/dist/backend/backend.d.cts +2 -2
  172. package/dist/backend/backend.d.ts +2 -2
  173. package/dist/backend/chat.d.cts +2 -2
  174. package/dist/backend/chat.d.ts +2 -2
  175. package/dist/backend/core.d.cts +2 -2
  176. package/dist/backend/core.d.ts +2 -2
  177. package/dist/backend/embedding.d.cts +2 -2
  178. package/dist/backend/embedding.d.ts +2 -2
  179. package/dist/backend/utils.d.cts +2 -2
  180. package/dist/backend/utils.d.ts +2 -2
  181. package/dist/{base-BQgDlcGa.d.ts → base-BurRTBA7.d.ts} +4 -2
  182. package/dist/{base-CwcxwybB.d.cts → base-v-PYIq5G.d.cts} +4 -2
  183. package/dist/{chat-C0s-o6ll.d.ts → chat-BbCYMAdE.d.ts} +1 -1
  184. package/dist/{chat-CRb3vUVg.d.cts → chat-DB_cf15S.d.cts} +1 -1
  185. package/dist/context.cjs +22 -5
  186. package/dist/context.cjs.map +1 -1
  187. package/dist/context.d.cts +19 -6
  188. package/dist/context.d.ts +19 -6
  189. package/dist/context.js +23 -7
  190. package/dist/context.js.map +1 -1
  191. package/dist/emitter/emitter.cjs +19 -13
  192. package/dist/emitter/emitter.cjs.map +1 -1
  193. package/dist/emitter/emitter.d.cts +1 -1
  194. package/dist/emitter/emitter.d.ts +1 -1
  195. package/dist/emitter/emitter.js +19 -13
  196. package/dist/emitter/emitter.js.map +1 -1
  197. package/dist/emitter/types.d.cts +1 -1
  198. package/dist/emitter/types.d.ts +1 -1
  199. package/dist/{emitter-DpqUYjXH.d.cts → emitter-CGKd_-kK.d.cts} +3 -2
  200. package/dist/{emitter-CZFbzlUi.d.ts → emitter-CN7I4uSV.d.ts} +3 -2
  201. package/dist/index.d.cts +5 -5
  202. package/dist/index.d.ts +5 -5
  203. package/dist/internals/fetcher.d.cts +1 -1
  204. package/dist/internals/fetcher.d.ts +1 -1
  205. package/dist/internals/helpers/prototype.cjs +5 -0
  206. package/dist/internals/helpers/prototype.cjs.map +1 -1
  207. package/dist/internals/helpers/prototype.d.cts +2 -1
  208. package/dist/internals/helpers/prototype.d.ts +2 -1
  209. package/dist/internals/helpers/prototype.js +5 -1
  210. package/dist/internals/helpers/prototype.js.map +1 -1
  211. package/dist/internals/types.cjs.map +1 -1
  212. package/dist/internals/types.d.cts +1 -1
  213. package/dist/internals/types.d.ts +1 -1
  214. package/dist/internals/types.js.map +1 -1
  215. package/dist/memory/summarizeMemory.d.cts +2 -2
  216. package/dist/memory/summarizeMemory.d.ts +2 -2
  217. package/dist/middleware/trajectory.cjs +322 -0
  218. package/dist/middleware/trajectory.cjs.map +1 -0
  219. package/dist/middleware/trajectory.d.cts +115 -0
  220. package/dist/middleware/trajectory.d.ts +115 -0
  221. package/dist/middleware/trajectory.js +320 -0
  222. package/dist/middleware/trajectory.js.map +1 -0
  223. package/dist/parsers/linePrefix.d.cts +1 -1
  224. package/dist/parsers/linePrefix.d.ts +1 -1
  225. package/dist/serializer/serializer.cjs +5 -4
  226. package/dist/serializer/serializer.cjs.map +1 -1
  227. package/dist/serializer/serializer.d.cts +1 -1
  228. package/dist/serializer/serializer.d.ts +1 -1
  229. package/dist/serializer/serializer.js +5 -4
  230. package/dist/serializer/serializer.js.map +1 -1
  231. package/dist/serializer/utils.cjs +3 -0
  232. package/dist/serializer/utils.cjs.map +1 -1
  233. package/dist/serializer/utils.d.cts +1 -1
  234. package/dist/serializer/utils.d.ts +1 -1
  235. package/dist/serializer/utils.js +3 -0
  236. package/dist/serializer/utils.js.map +1 -1
  237. package/dist/{serializer-CQxucveV.d.ts → serializer-53t8gGQa.d.ts} +3 -2
  238. package/dist/{serializer-BKn50Vnx.d.cts → serializer-c51B2z6d.d.cts} +3 -2
  239. package/dist/template.cjs +20 -0
  240. package/dist/template.cjs.map +1 -1
  241. package/dist/template.d.cts +1 -0
  242. package/dist/template.d.ts +1 -0
  243. package/dist/template.js +20 -0
  244. package/dist/template.js.map +1 -1
  245. package/dist/tools/arxiv.d.cts +1 -1
  246. package/dist/tools/arxiv.d.ts +1 -1
  247. package/dist/tools/base.cjs.map +1 -1
  248. package/dist/tools/base.d.cts +3 -2
  249. package/dist/tools/base.d.ts +3 -2
  250. package/dist/tools/base.js.map +1 -1
  251. package/dist/tools/calculator.d.cts +1 -1
  252. package/dist/tools/calculator.d.ts +1 -1
  253. package/dist/tools/custom.d.cts +2 -2
  254. package/dist/tools/custom.d.ts +2 -2
  255. package/dist/tools/database/elasticsearch.d.cts +1 -1
  256. package/dist/tools/database/elasticsearch.d.ts +1 -1
  257. package/dist/tools/database/milvus.d.cts +1 -1
  258. package/dist/tools/database/milvus.d.ts +1 -1
  259. package/dist/tools/database/qdrant.d.cts +1 -1
  260. package/dist/tools/database/qdrant.d.ts +1 -1
  261. package/dist/tools/database/sql.d.cts +1 -1
  262. package/dist/tools/database/sql.d.ts +1 -1
  263. package/dist/tools/llm.d.cts +2 -2
  264. package/dist/tools/llm.d.ts +2 -2
  265. package/dist/tools/mcp.d.cts +1 -1
  266. package/dist/tools/mcp.d.ts +1 -1
  267. package/dist/tools/openapi.d.cts +1 -1
  268. package/dist/tools/openapi.d.ts +1 -1
  269. package/dist/tools/python/output.d.cts +1 -1
  270. package/dist/tools/python/output.d.ts +1 -1
  271. package/dist/tools/python/python.d.cts +2 -2
  272. package/dist/tools/python/python.d.ts +2 -2
  273. package/dist/tools/search/base.d.cts +1 -1
  274. package/dist/tools/search/base.d.ts +1 -1
  275. package/dist/tools/search/duckDuckGoSearch.d.cts +1 -1
  276. package/dist/tools/search/duckDuckGoSearch.d.ts +1 -1
  277. package/dist/tools/search/googleSearch.d.cts +1 -1
  278. package/dist/tools/search/googleSearch.d.ts +1 -1
  279. package/dist/tools/search/searXNGSearch.d.cts +1 -1
  280. package/dist/tools/search/searXNGSearch.d.ts +1 -1
  281. package/dist/tools/search/wikipedia.d.cts +1 -1
  282. package/dist/tools/search/wikipedia.d.ts +1 -1
  283. package/dist/tools/similarity.d.cts +1 -1
  284. package/dist/tools/similarity.d.ts +1 -1
  285. package/dist/tools/think.cjs +52 -0
  286. package/dist/tools/think.cjs.map +1 -0
  287. package/dist/tools/think.d.cts +47 -0
  288. package/dist/tools/think.d.ts +47 -0
  289. package/dist/tools/think.js +50 -0
  290. package/dist/tools/think.js.map +1 -0
  291. package/dist/tools/weather/openMeteo.d.cts +1 -1
  292. package/dist/tools/weather/openMeteo.d.ts +1 -1
  293. package/dist/tools/web/webCrawler.d.cts +1 -1
  294. package/dist/tools/web/webCrawler.d.ts +1 -1
  295. package/dist/types-BXkkbABd.d.ts +213 -0
  296. package/dist/types-Cx6f43du.d.cts +213 -0
  297. package/dist/version.cjs +1 -1
  298. package/dist/version.js +1 -1
  299. package/dist/workflows/agent.d.cts +3 -3
  300. package/dist/workflows/agent.d.ts +3 -3
  301. package/dist/workflows/workflow.d.cts +1 -1
  302. package/dist/workflows/workflow.d.ts +1 -1
  303. package/package.json +4 -4
@@ -0,0 +1,250 @@
1
+ import { v4 } from 'uuid';
2
+ import { AgentError } from '../base.js';
3
+ import { AssistantMessage, ToolMessage } from '../../backend/message.js';
4
+ import { UnconstrainedMemory } from '../../memory/unconstrainedMemory.js';
5
+ import { RetryCounter } from '../../internals/helpers/counter.js';
6
+ import { RequirementsReasoner, createSystemMessage } from './utils/llm.js';
7
+ import { FinalAnswerTool, runTool } from './utils/tool.js';
8
+ import { parseBrokenJson } from '../../internals/helpers/schema.js';
9
+ import { mergeTokenUsage } from '../../adapters/vercel/backend/utils.js';
10
+
11
+ var __defProp = Object.defineProperty;
12
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
13
+ const TEMP_MESSAGE_KEY = "tempMessage";
14
+ class RequirementAgentRunner {
15
+ static {
16
+ __name(this, "RequirementAgentRunner");
17
+ }
18
+ llm;
19
+ runConfig;
20
+ requirements;
21
+ toolCallCycleChecker;
22
+ ctx;
23
+ forceFinalAnswerAsTool;
24
+ templates;
25
+ state;
26
+ reasoner;
27
+ iterationErrorCounter;
28
+ globalErrorCounter;
29
+ constructor(llm, runConfig, tools, requirements, expectedOutput, toolCallCycleChecker, ctx, forceFinalAnswerAsTool, templates) {
30
+ this.llm = llm;
31
+ this.runConfig = runConfig;
32
+ this.requirements = requirements;
33
+ this.toolCallCycleChecker = toolCallCycleChecker;
34
+ this.ctx = ctx;
35
+ this.forceFinalAnswerAsTool = forceFinalAnswerAsTool;
36
+ this.templates = templates;
37
+ this.state = {
38
+ answer: null,
39
+ result: null,
40
+ memory: new UnconstrainedMemory(),
41
+ steps: [],
42
+ iteration: 0,
43
+ usage: {
44
+ totalTokens: 0,
45
+ promptTokens: 0,
46
+ completionTokens: 0,
47
+ reasoningTokens: 0,
48
+ cachedPromptTokens: void 0
49
+ }
50
+ };
51
+ this.requirements = requirements;
52
+ const finalAnswer = new FinalAnswerTool(expectedOutput, this.state);
53
+ this.reasoner = new RequirementsReasoner(tools, finalAnswer, ctx);
54
+ const maxRetriesPerIteration = runConfig.maxRetriesPerStep ?? 0;
55
+ this.iterationErrorCounter = new RetryCounter(maxRetriesPerIteration, AgentError);
56
+ const maxRetries = Math.max(maxRetriesPerIteration, runConfig.totalMaxRetries ?? 0);
57
+ this.globalErrorCounter = new RetryCounter(maxRetries, AgentError);
58
+ }
59
+ incrementIteration() {
60
+ this.state.iteration++;
61
+ if (this.runConfig.maxIterations && this.state.iteration > this.runConfig.maxIterations) {
62
+ throw new AgentError(`Agent was not able to resolve the task in ${this.state.iteration} iterations.`);
63
+ }
64
+ }
65
+ 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);
73
+ }
74
+ return response;
75
+ }
76
+ async prepareLLMRequest(request) {
77
+ const messages = [
78
+ await createSystemMessage(this.templates.system, request),
79
+ ...this.state.memory.messages
80
+ ];
81
+ const options = {
82
+ maxRetries: this.runConfig.maxRetriesPerStep,
83
+ tools: request.allowedTools,
84
+ toolChoice: request.toolChoice,
85
+ stream: false
86
+ };
87
+ return {
88
+ messages,
89
+ options
90
+ };
91
+ }
92
+ async createFinalAnswerToolCall(fullText) {
93
+ const parsed = parseBrokenJson(fullText, {
94
+ pair: [
95
+ "{",
96
+ "}"
97
+ ]
98
+ });
99
+ if (!parsed) {
100
+ if (!this.reasoner.finalAnswer.customSchema) {
101
+ return new AssistantMessage([
102
+ {
103
+ type: "tool-call",
104
+ toolCallId: `call_${v4().substring(0, 8)}`,
105
+ toolName: this.reasoner.finalAnswer.name,
106
+ input: this.reasoner.finalAnswer.inputSchema().parse({
107
+ response: fullText
108
+ })
109
+ }
110
+ ]);
111
+ }
112
+ return null;
113
+ }
114
+ return new AssistantMessage([
115
+ {
116
+ type: "tool-call",
117
+ toolCallId: `call_${v4().substring(0, 8)}`,
118
+ toolName: this.reasoner.finalAnswer.name,
119
+ input: parsed
120
+ }
121
+ ]);
122
+ }
123
+ async createRequest(extraRules = []) {
124
+ return await this.reasoner.createRequest(this.state, this.forceFinalAnswerAsTool, extraRules);
125
+ }
126
+ async invokeToolCalls(tools, toolCalls) {
127
+ const toolResults = [];
128
+ const results = await Promise.all(toolCalls.map((msg) => runTool(tools, msg, {
129
+ state: this.state
130
+ })));
131
+ for (const toolCall of results) {
132
+ this.state.steps.push({
133
+ id: v4(),
134
+ iteration: this.state.iteration,
135
+ input: toolCall.input,
136
+ output: toolCall.output,
137
+ tool: toolCall.tool,
138
+ error: toolCall.error
139
+ });
140
+ let result;
141
+ if (toolCall.error) {
142
+ result = this.templates.toolError.render({
143
+ reason: toolCall.error.explain()
144
+ });
145
+ } else {
146
+ result = !toolCall.output.isEmpty() ? toolCall.output.getTextContent() : this.templates.toolNoResult.render({
147
+ toolCall: {
148
+ tool: toolCall.tool,
149
+ input: toolCall.input
150
+ }
151
+ });
152
+ }
153
+ toolResults.push(new ToolMessage({
154
+ type: "tool-result",
155
+ toolName: toolCall.tool?.name || toolCall.msg.toolName,
156
+ toolCallId: toolCall.msg.toolCallId,
157
+ output: {
158
+ type: "text",
159
+ value: result
160
+ }
161
+ }));
162
+ if (toolCall.error) {
163
+ this.iterationErrorCounter.use(toolCall.error);
164
+ this.globalErrorCounter.use(toolCall.error);
165
+ }
166
+ }
167
+ return toolResults;
168
+ }
169
+ async addMessages(messages) {
170
+ await this.state.memory.addMany(messages);
171
+ }
172
+ async run() {
173
+ if (this.state.answer) {
174
+ return this.state;
175
+ }
176
+ await this.reasoner.update(this.requirements);
177
+ while (!this.state.answer) {
178
+ this.incrementIteration();
179
+ const request = await this.createRequest();
180
+ await this.ctx.emitter.emit("start", {
181
+ state: this.state,
182
+ request
183
+ });
184
+ const response = await this.runIteration(request);
185
+ await this.ctx.emitter.emit("success", {
186
+ state: this.state,
187
+ response
188
+ });
189
+ }
190
+ return this.state;
191
+ }
192
+ async runIteration(request) {
193
+ const response = await this.runLLM(request);
194
+ const toolCalls = response.getToolCalls();
195
+ if (toolCalls.length === 0) {
196
+ const textMessages = response.getTextMessages();
197
+ const text = textMessages.map((m) => m.text).join("\n");
198
+ if (!text || request.canStop) {
199
+ throw new AgentError("Model produced an empty response.");
200
+ }
201
+ const finalAnswerToolCall = await this.createFinalAnswerToolCall(text);
202
+ if (!finalAnswerToolCall) {
203
+ const err = new AgentError("Model produced an invalid final answer tool call.");
204
+ this.iterationErrorCounter.use(err);
205
+ this.globalErrorCounter.use(err);
206
+ await this.reasoner.update([]);
207
+ const updatedRequest = await this.createRequest([
208
+ {
209
+ target: this.reasoner.finalAnswer.name,
210
+ allowed: true,
211
+ hidden: false,
212
+ forced: false,
213
+ preventStop: false
214
+ }
215
+ ]);
216
+ this.forceFinalAnswerAsTool = true;
217
+ return await this.runIteration(updatedRequest);
218
+ }
219
+ await this.state.memory.add(finalAnswerToolCall);
220
+ toolCalls.push(...finalAnswerToolCall.getToolCalls());
221
+ } else {
222
+ await this.state.memory.addMany(response.messages);
223
+ }
224
+ for (const toolCallMsg of toolCalls) {
225
+ this.toolCallCycleChecker.register(toolCallMsg);
226
+ if (this.toolCallCycleChecker.cycleFound) {
227
+ this.toolCallCycleChecker.reset();
228
+ const updatedRequest = await this.createRequest([
229
+ {
230
+ target: toolCallMsg.toolName,
231
+ allowed: false,
232
+ hidden: false,
233
+ forced: true,
234
+ preventStop: false
235
+ }
236
+ ]);
237
+ return await this.runIteration(updatedRequest);
238
+ }
239
+ }
240
+ const toolResults = await this.invokeToolCalls(request.allowedTools, toolCalls);
241
+ await this.state.memory.addMany(toolResults);
242
+ const tempMessages = this.state.memory.messages.filter((msg) => msg.meta[TEMP_MESSAGE_KEY]);
243
+ await this.state.memory.deleteMany(tempMessages);
244
+ return response;
245
+ }
246
+ }
247
+
248
+ export { RequirementAgentRunner };
249
+ //# sourceMappingURL=runner.js.map
250
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +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.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"]}
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ var zod = require('zod');
4
+
5
+ const RequirementAgentSystemPromptInputSchema = zod.z.object({
6
+ role: zod.z.string().optional(),
7
+ instructions: zod.z.string().optional(),
8
+ notes: zod.z.string().optional(),
9
+ finalAnswerName: zod.z.string(),
10
+ finalAnswerSchema: zod.z.string().optional(),
11
+ finalAnswerInstructions: zod.z.string().optional(),
12
+ tools: zod.z.array(zod.z.object({
13
+ name: zod.z.string(),
14
+ description: zod.z.string(),
15
+ inputSchema: zod.z.string(),
16
+ allowed: zod.z.string(),
17
+ reason: zod.z.string().optional()
18
+ }))
19
+ });
20
+ const RequirementAgentTaskPromptInputSchema = zod.z.object({
21
+ prompt: zod.z.string(),
22
+ context: zod.z.string().optional(),
23
+ expectedOutput: zod.z.string().optional()
24
+ });
25
+ const RequirementAgentToolErrorPromptInputSchema = zod.z.object({
26
+ reason: zod.z.string()
27
+ });
28
+ const RequirementAgentToolNoResultPromptInputSchema = zod.z.object({
29
+ toolCall: zod.z.object({
30
+ tool: zod.z.any().optional(),
31
+ input: zod.z.unknown()
32
+ })
33
+ });
34
+
35
+ exports.RequirementAgentSystemPromptInputSchema = RequirementAgentSystemPromptInputSchema;
36
+ exports.RequirementAgentTaskPromptInputSchema = RequirementAgentTaskPromptInputSchema;
37
+ exports.RequirementAgentToolErrorPromptInputSchema = RequirementAgentToolErrorPromptInputSchema;
38
+ exports.RequirementAgentToolNoResultPromptInputSchema = RequirementAgentToolNoResultPromptInputSchema;
39
+ //# sourceMappingURL=types.cjs.map
40
+ //# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/agents/requirement/types.ts"],"names":["RequirementAgentSystemPromptInputSchema","z","object","role","string","optional","instructions","notes","finalAnswerName","finalAnswerSchema","finalAnswerInstructions","tools","array","name","description","inputSchema","allowed","reason","RequirementAgentTaskPromptInputSchema","prompt","context","expectedOutput","RequirementAgentToolErrorPromptInputSchema","RequirementAgentToolNoResultPromptInputSchema","toolCall","tool","any","input","unknown"],"mappings":";;;;AAeO,MAAMA,uCAAAA,GAA0CC,MAAEC,MAAAA,CAAO;EAC9DC,IAAAA,EAAMF,KAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;EACzBC,YAAAA,EAAcL,KAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;EACjCE,KAAAA,EAAON,KAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;AAC1BG,EAAAA,eAAAA,EAAiBP,MAAEG,MAAAA,EAAM;EACzBK,iBAAAA,EAAmBR,KAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;EACtCK,uBAAAA,EAAyBT,KAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;EAC5CM,KAAAA,EAAOV,KAAAA,CAAEW,KAAAA,CACPX,KAAAA,CAAEC,MAAAA,CAAO;AACPW,IAAAA,IAAAA,EAAMZ,MAAEG,MAAAA,EAAM;AACdU,IAAAA,WAAAA,EAAab,MAAEG,MAAAA,EAAM;AACrBW,IAAAA,WAAAA,EAAad,MAAEG,MAAAA,EAAM;AACrBY,IAAAA,OAAAA,EAASf,MAAEG,MAAAA,EAAM;IACjBa,MAAAA,EAAQhB,KAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA;AACrB,GAAA,CAAA;AAEJ,CAAA;AAEO,MAAMa,qCAAAA,GAAwCjB,MAAEC,MAAAA,CAAO;AAC5DiB,EAAAA,MAAAA,EAAQlB,MAAEG,MAAAA,EAAM;EAChBgB,OAAAA,EAASnB,KAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;EAC5BgB,cAAAA,EAAgBpB,KAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA;AAC7B,CAAA;AAEO,MAAMiB,0CAAAA,GAA6CrB,MAAEC,MAAAA,CAAO;AACjEe,EAAAA,MAAAA,EAAQhB,MAAEG,MAAAA;AACZ,CAAA;AAEO,MAAMmB,6CAAAA,GAAgDtB,MAAEC,MAAAA,CAAO;AACpEsB,EAAAA,QAAAA,EAAUvB,MAAEC,MAAAA,CAAO;IACjBuB,IAAAA,EAAMxB,KAAAA,CAAEyB,GAAAA,EAAG,CAAGrB,QAAAA,EAAQ;AACtBsB,IAAAA,KAAAA,EAAO1B,MAAE2B,OAAAA;GACX;AACF,CAAA","file":"types.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { BaseMemory } from \"@/memory/base.js\";\nimport { AssistantMessage } from \"@/backend/message.js\";\nimport { AnyTool, ToolOutput } from \"@/tools/base.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { PromptTemplate } from \"@/template.js\";\nimport { ChatModelOutput, ChatModelToolChoice, ChatModelUsage } from \"@/backend/chat.js\";\nimport { BaseAgentRunOptions } from \"@/agents/base.js\";\nimport { z } from \"zod\";\nimport { FinalAnswerTool } from \"@/agents/requirement/utils/tool.js\";\n\nexport const RequirementAgentSystemPromptInputSchema = z.object({\n role: z.string().optional(),\n instructions: z.string().optional(),\n notes: z.string().optional(),\n finalAnswerName: z.string(),\n finalAnswerSchema: z.string().optional(),\n finalAnswerInstructions: z.string().optional(),\n tools: z.array(\n z.object({\n name: z.string(),\n description: z.string(),\n inputSchema: z.string(),\n allowed: z.string(),\n reason: z.string().optional(),\n }),\n ),\n});\n\nexport const RequirementAgentTaskPromptInputSchema = z.object({\n prompt: z.string(),\n context: z.string().optional(),\n expectedOutput: z.string().optional(),\n});\n\nexport const RequirementAgentToolErrorPromptInputSchema = z.object({\n reason: z.string(),\n});\n\nexport const RequirementAgentToolNoResultPromptInputSchema = z.object({\n toolCall: z.object({\n tool: z.any().optional(),\n input: z.unknown(),\n }),\n});\n\n// Template collection\nexport interface RequirementAgentTemplates {\n system: PromptTemplate<typeof RequirementAgentSystemPromptInputSchema>;\n task: PromptTemplate<typeof RequirementAgentTaskPromptInputSchema>;\n toolError: PromptTemplate<typeof RequirementAgentToolErrorPromptInputSchema>;\n toolNoResult: PromptTemplate<typeof RequirementAgentToolNoResultPromptInputSchema>;\n}\n\n// Run state types\nexport interface RequirementAgentRunStateStep {\n id: string;\n iteration: number;\n tool: AnyTool | null;\n input: unknown;\n output: ToolOutput;\n error: FrameworkError | null;\n}\n\nexport interface RequirementAgentRunState {\n answer: AssistantMessage | null;\n result: unknown;\n memory: BaseMemory;\n iteration: number;\n steps: RequirementAgentRunStateStep[];\n usage: ChatModelUsage;\n // cost: ChatModelCost; TODO: not supported yet\n}\n\n// Agent output\nexport interface RequirementAgentOutput {\n result: AssistantMessage;\n memory: BaseMemory;\n state: RequirementAgentRunState;\n}\n\n// Internal request structure\nexport interface RequirementAgentRequest {\n tools: AnyTool[];\n allowedTools: AnyTool[];\n reasonByTool: WeakMap<AnyTool, string | undefined>;\n hiddenTools: AnyTool[];\n toolChoice: ChatModelToolChoice;\n finalAnswer: FinalAnswerTool;\n canStop: boolean;\n}\n\n// Execution configuration\nexport interface RequirementAgentExecutionConfig {\n maxRetriesPerStep?: number;\n totalMaxRetries?: number;\n maxIterations?: number;\n}\n\n// Run input and options\nexport interface RequirementAgentRunInput {\n prompt: string | null;\n context?: string;\n expectedOutput?: string | z.ZodSchema;\n}\n\nexport interface RequirementAgentRunOptions extends BaseAgentRunOptions {\n execution?: RequirementAgentExecutionConfig;\n}\n\n// Event callback types\nexport interface RequirementAgentCallbacks {\n start: (data: { state: RequirementAgentRunState; request: RequirementAgentRequest }) => void;\n success: (data: { state: RequirementAgentRunState; response: ChatModelOutput }) => void;\n finalAnswer: (data: {\n state: RequirementAgentRunState;\n output: string;\n delta: string;\n outputStructured: unknown;\n }) => void;\n}\n"]}
@@ -0,0 +1,24 @@
1
+ import '../../memory/base.cjs';
2
+ import '../../backend/message.cjs';
3
+ import '../../tools/base.cjs';
4
+ import '../../errors.cjs';
5
+ import '../../template.cjs';
6
+ import '../../chat-DB_cf15S.cjs';
7
+ import '../../base-v-PYIq5G.cjs';
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';
10
+ import '../../internals/serializable.cjs';
11
+ import '../../internals/types.cjs';
12
+ import '../../internals/helpers/guards.cjs';
13
+ import 'ai';
14
+ import 'ajv';
15
+ import '../../context.cjs';
16
+ import '../../emitter-CGKd_-kK.cjs';
17
+ import '../../internals/helpers/promise.cjs';
18
+ import 'promise-based-task';
19
+ import '../../cache/base.cjs';
20
+ import '../../internals/helpers/schema.cjs';
21
+ import 'zod-to-json-schema';
22
+ import '../../backend/constants.cjs';
23
+ import '../../logger/logger.cjs';
24
+ import 'pino';
@@ -0,0 +1,24 @@
1
+ import '../../memory/base.js';
2
+ import '../../backend/message.js';
3
+ import '../../tools/base.js';
4
+ import '../../errors.js';
5
+ import '../../template.js';
6
+ import '../../chat-BbCYMAdE.js';
7
+ import '../../base-BurRTBA7.js';
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';
10
+ import '../../internals/serializable.js';
11
+ import '../../internals/types.js';
12
+ import '../../internals/helpers/guards.js';
13
+ import 'ai';
14
+ import 'ajv';
15
+ import '../../context.js';
16
+ import '../../emitter-CN7I4uSV.js';
17
+ import '../../internals/helpers/promise.js';
18
+ import 'promise-based-task';
19
+ import '../../cache/base.js';
20
+ import '../../internals/helpers/schema.js';
21
+ import 'zod-to-json-schema';
22
+ import '../../backend/constants.js';
23
+ import '../../logger/logger.js';
24
+ import 'pino';
@@ -0,0 +1,35 @@
1
+ import { z } from 'zod';
2
+
3
+ const RequirementAgentSystemPromptInputSchema = z.object({
4
+ role: z.string().optional(),
5
+ instructions: z.string().optional(),
6
+ notes: z.string().optional(),
7
+ finalAnswerName: z.string(),
8
+ finalAnswerSchema: z.string().optional(),
9
+ finalAnswerInstructions: z.string().optional(),
10
+ tools: z.array(z.object({
11
+ name: z.string(),
12
+ description: z.string(),
13
+ inputSchema: z.string(),
14
+ allowed: z.string(),
15
+ reason: z.string().optional()
16
+ }))
17
+ });
18
+ const RequirementAgentTaskPromptInputSchema = z.object({
19
+ prompt: z.string(),
20
+ context: z.string().optional(),
21
+ expectedOutput: z.string().optional()
22
+ });
23
+ const RequirementAgentToolErrorPromptInputSchema = z.object({
24
+ reason: z.string()
25
+ });
26
+ const RequirementAgentToolNoResultPromptInputSchema = z.object({
27
+ toolCall: z.object({
28
+ tool: z.any().optional(),
29
+ input: z.unknown()
30
+ })
31
+ });
32
+
33
+ export { RequirementAgentSystemPromptInputSchema, RequirementAgentTaskPromptInputSchema, RequirementAgentToolErrorPromptInputSchema, RequirementAgentToolNoResultPromptInputSchema };
34
+ //# sourceMappingURL=types.js.map
35
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/agents/requirement/types.ts"],"names":["RequirementAgentSystemPromptInputSchema","z","object","role","string","optional","instructions","notes","finalAnswerName","finalAnswerSchema","finalAnswerInstructions","tools","array","name","description","inputSchema","allowed","reason","RequirementAgentTaskPromptInputSchema","prompt","context","expectedOutput","RequirementAgentToolErrorPromptInputSchema","RequirementAgentToolNoResultPromptInputSchema","toolCall","tool","any","input","unknown"],"mappings":";;AAeO,MAAMA,uCAAAA,GAA0CC,EAAEC,MAAAA,CAAO;EAC9DC,IAAAA,EAAMF,CAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;EACzBC,YAAAA,EAAcL,CAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;EACjCE,KAAAA,EAAON,CAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;AAC1BG,EAAAA,eAAAA,EAAiBP,EAAEG,MAAAA,EAAM;EACzBK,iBAAAA,EAAmBR,CAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;EACtCK,uBAAAA,EAAyBT,CAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;EAC5CM,KAAAA,EAAOV,CAAAA,CAAEW,KAAAA,CACPX,CAAAA,CAAEC,MAAAA,CAAO;AACPW,IAAAA,IAAAA,EAAMZ,EAAEG,MAAAA,EAAM;AACdU,IAAAA,WAAAA,EAAab,EAAEG,MAAAA,EAAM;AACrBW,IAAAA,WAAAA,EAAad,EAAEG,MAAAA,EAAM;AACrBY,IAAAA,OAAAA,EAASf,EAAEG,MAAAA,EAAM;IACjBa,MAAAA,EAAQhB,CAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA;AACrB,GAAA,CAAA;AAEJ,CAAA;AAEO,MAAMa,qCAAAA,GAAwCjB,EAAEC,MAAAA,CAAO;AAC5DiB,EAAAA,MAAAA,EAAQlB,EAAEG,MAAAA,EAAM;EAChBgB,OAAAA,EAASnB,CAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA,EAAQ;EAC5BgB,cAAAA,EAAgBpB,CAAAA,CAAEG,MAAAA,EAAM,CAAGC,QAAAA;AAC7B,CAAA;AAEO,MAAMiB,0CAAAA,GAA6CrB,EAAEC,MAAAA,CAAO;AACjEe,EAAAA,MAAAA,EAAQhB,EAAEG,MAAAA;AACZ,CAAA;AAEO,MAAMmB,6CAAAA,GAAgDtB,EAAEC,MAAAA,CAAO;AACpEsB,EAAAA,QAAAA,EAAUvB,EAAEC,MAAAA,CAAO;IACjBuB,IAAAA,EAAMxB,CAAAA,CAAEyB,GAAAA,EAAG,CAAGrB,QAAAA,EAAQ;AACtBsB,IAAAA,KAAAA,EAAO1B,EAAE2B,OAAAA;GACX;AACF,CAAA","file":"types.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { BaseMemory } from \"@/memory/base.js\";\nimport { AssistantMessage } from \"@/backend/message.js\";\nimport { AnyTool, ToolOutput } from \"@/tools/base.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { PromptTemplate } from \"@/template.js\";\nimport { ChatModelOutput, ChatModelToolChoice, ChatModelUsage } from \"@/backend/chat.js\";\nimport { BaseAgentRunOptions } from \"@/agents/base.js\";\nimport { z } from \"zod\";\nimport { FinalAnswerTool } from \"@/agents/requirement/utils/tool.js\";\n\nexport const RequirementAgentSystemPromptInputSchema = z.object({\n role: z.string().optional(),\n instructions: z.string().optional(),\n notes: z.string().optional(),\n finalAnswerName: z.string(),\n finalAnswerSchema: z.string().optional(),\n finalAnswerInstructions: z.string().optional(),\n tools: z.array(\n z.object({\n name: z.string(),\n description: z.string(),\n inputSchema: z.string(),\n allowed: z.string(),\n reason: z.string().optional(),\n }),\n ),\n});\n\nexport const RequirementAgentTaskPromptInputSchema = z.object({\n prompt: z.string(),\n context: z.string().optional(),\n expectedOutput: z.string().optional(),\n});\n\nexport const RequirementAgentToolErrorPromptInputSchema = z.object({\n reason: z.string(),\n});\n\nexport const RequirementAgentToolNoResultPromptInputSchema = z.object({\n toolCall: z.object({\n tool: z.any().optional(),\n input: z.unknown(),\n }),\n});\n\n// Template collection\nexport interface RequirementAgentTemplates {\n system: PromptTemplate<typeof RequirementAgentSystemPromptInputSchema>;\n task: PromptTemplate<typeof RequirementAgentTaskPromptInputSchema>;\n toolError: PromptTemplate<typeof RequirementAgentToolErrorPromptInputSchema>;\n toolNoResult: PromptTemplate<typeof RequirementAgentToolNoResultPromptInputSchema>;\n}\n\n// Run state types\nexport interface RequirementAgentRunStateStep {\n id: string;\n iteration: number;\n tool: AnyTool | null;\n input: unknown;\n output: ToolOutput;\n error: FrameworkError | null;\n}\n\nexport interface RequirementAgentRunState {\n answer: AssistantMessage | null;\n result: unknown;\n memory: BaseMemory;\n iteration: number;\n steps: RequirementAgentRunStateStep[];\n usage: ChatModelUsage;\n // cost: ChatModelCost; TODO: not supported yet\n}\n\n// Agent output\nexport interface RequirementAgentOutput {\n result: AssistantMessage;\n memory: BaseMemory;\n state: RequirementAgentRunState;\n}\n\n// Internal request structure\nexport interface RequirementAgentRequest {\n tools: AnyTool[];\n allowedTools: AnyTool[];\n reasonByTool: WeakMap<AnyTool, string | undefined>;\n hiddenTools: AnyTool[];\n toolChoice: ChatModelToolChoice;\n finalAnswer: FinalAnswerTool;\n canStop: boolean;\n}\n\n// Execution configuration\nexport interface RequirementAgentExecutionConfig {\n maxRetriesPerStep?: number;\n totalMaxRetries?: number;\n maxIterations?: number;\n}\n\n// Run input and options\nexport interface RequirementAgentRunInput {\n prompt: string | null;\n context?: string;\n expectedOutput?: string | z.ZodSchema;\n}\n\nexport interface RequirementAgentRunOptions extends BaseAgentRunOptions {\n execution?: RequirementAgentExecutionConfig;\n}\n\n// Event callback types\nexport interface RequirementAgentCallbacks {\n start: (data: { state: RequirementAgentRunState; request: RequirementAgentRequest }) => void;\n success: (data: { state: RequirementAgentRunState; response: ChatModelOutput }) => void;\n finalAnswer: (data: {\n state: RequirementAgentRunState;\n output: string;\n delta: string;\n outputStructured: unknown;\n }) => void;\n}\n"]}
@@ -0,0 +1,202 @@
1
+ 'use strict';
2
+
3
+ var base_cjs$1 = require('../../../tools/base.cjs');
4
+ var base_cjs = require('../../base.cjs');
5
+ var message_cjs = require('../../../backend/message.cjs');
6
+ var remeda = require('remeda');
7
+
8
+ var __defProp = Object.defineProperty;
9
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
+ class RequirementsReasoner {
11
+ static {
12
+ __name(this, "RequirementsReasoner");
13
+ }
14
+ tools;
15
+ entries = [];
16
+ context;
17
+ finalAnswer;
18
+ constructor(tools, finalAnswer, context) {
19
+ this.tools = [
20
+ ...tools,
21
+ finalAnswer
22
+ ];
23
+ this.finalAnswer = finalAnswer;
24
+ this.context = context;
25
+ }
26
+ async update(requirements) {
27
+ this.entries = [];
28
+ for (const requirement of requirements) {
29
+ this.entries.push(requirement);
30
+ }
31
+ for (const entry of this.entries) {
32
+ const emitter = this.context.emitter.child({
33
+ groupId: remeda.toCamelCase(entry.name),
34
+ creator: entry
35
+ });
36
+ emitter.namespace.push("requirement");
37
+ const tools = [
38
+ ...this.tools
39
+ ];
40
+ await emitter.emit("init", {
41
+ tools
42
+ });
43
+ await entry.init(tools, this.context);
44
+ }
45
+ }
46
+ findToolByName(name) {
47
+ const tool = this.tools.find((t) => t.name === name);
48
+ if (!tool) {
49
+ throw new Error(`Tool '${name}' not found in (${this.tools.map((t) => t.name).join(", ")}).`);
50
+ }
51
+ return tool;
52
+ }
53
+ async createRequest(state, forceTool, extraRules = []) {
54
+ const hidden = [];
55
+ const allowed = [];
56
+ const allTools = [
57
+ ...this.tools
58
+ ];
59
+ const reasonByTool = /* @__PURE__ */ new WeakMap();
60
+ let preventStop = false;
61
+ const preventStepRefs = [];
62
+ let forced = null;
63
+ let forcedLevel = 0;
64
+ const rulesByTool = /* @__PURE__ */ new Map();
65
+ for (const tool of this.tools) {
66
+ rulesByTool.set(tool.name, []);
67
+ }
68
+ for (const requirement of this.entries.filter((e) => e.enabled)) {
69
+ const generatedRules = await requirement.run(state);
70
+ for (const rule of generatedRules) {
71
+ const tool = this.findToolByName(rule.target);
72
+ const rules = rulesByTool.get(tool.name) || [];
73
+ rules.push({
74
+ priority: requirement.priority,
75
+ rule,
76
+ requirement
77
+ });
78
+ rulesByTool.set(tool.name, rules);
79
+ }
80
+ }
81
+ for (const rule of extraRules) {
82
+ if (!rulesByTool.has(rule.target)) {
83
+ throw new Error(`Tool '${rule.target}' not found.`);
84
+ }
85
+ const rules = rulesByTool.get(rule.target);
86
+ const priority = rules.length > 0 ? Math.max(...rules.map((r) => r.priority)) + 1 : 1;
87
+ rules.push({
88
+ priority,
89
+ rule,
90
+ requirement: null
91
+ });
92
+ }
93
+ for (const [toolName, rules] of rulesByTool.entries()) {
94
+ const tool = this.findToolByName(toolName);
95
+ rules.sort((a, b) => b.priority - a.priority);
96
+ const maxPriority = rules.length > 0 ? rules[0].priority : 1;
97
+ let isAllowed = true;
98
+ let isForced = false;
99
+ let isHidden = false;
100
+ let isPreventStop = false;
101
+ for (const ruleEntry of rules) {
102
+ const rule = ruleEntry.rule;
103
+ if (!rule.allowed) {
104
+ isAllowed = false;
105
+ }
106
+ if (rule.hidden) {
107
+ isHidden = true;
108
+ }
109
+ if (rule.forced) {
110
+ isForced = true;
111
+ }
112
+ if (rule.preventStop) {
113
+ isPreventStop = true;
114
+ preventStepRefs.push(ruleEntry);
115
+ }
116
+ if (rule.reason) {
117
+ reasonByTool.set(tool, rule.reason);
118
+ }
119
+ }
120
+ if (isAllowed && isHidden) {
121
+ isAllowed = false;
122
+ }
123
+ if (isAllowed) {
124
+ if (!allowed.includes(tool)) {
125
+ allowed.push(tool);
126
+ }
127
+ if (isForced && (!forced || forcedLevel < maxPriority)) {
128
+ forced = tool;
129
+ forcedLevel = maxPriority;
130
+ }
131
+ }
132
+ if (isHidden) {
133
+ if (!hidden.includes(tool)) {
134
+ hidden.push(tool);
135
+ }
136
+ }
137
+ if (isPreventStop) {
138
+ preventStop = true;
139
+ }
140
+ }
141
+ if (forced) {
142
+ allowed.length = 0;
143
+ if (!allowed.includes(forced)) {
144
+ allowed.push(forced);
145
+ }
146
+ if (!allowed.includes(this.finalAnswer)) {
147
+ allowed.push(this.finalAnswer);
148
+ }
149
+ }
150
+ if (preventStop && forced !== this.finalAnswer) {
151
+ const finalAnswerIndex = allowed.indexOf(this.finalAnswer);
152
+ if (finalAnswerIndex !== -1) {
153
+ allowed.splice(finalAnswerIndex, 1);
154
+ }
155
+ }
156
+ if (allowed.length === 0) {
157
+ throw new base_cjs.AgentError("One of the generated rules is preventing the agent from continuing. This indicates that the provided requirements may conflict with each other. See the following rules and their attached requirements that are preventing the agent from continuing.\n" + JSON.stringify(preventStepRefs, null, 2));
158
+ }
159
+ let toolChoice = forced || "required";
160
+ if (allowed.length === 1) {
161
+ toolChoice = allowed[0];
162
+ }
163
+ if (!(toolChoice instanceof base_cjs$1.Tool) && !forceTool && !preventStop) {
164
+ toolChoice = "auto";
165
+ }
166
+ return {
167
+ tools: allTools,
168
+ allowedTools: allowed,
169
+ reasonByTool,
170
+ toolChoice,
171
+ finalAnswer: this.finalAnswer,
172
+ hiddenTools: hidden,
173
+ canStop: !preventStop
174
+ };
175
+ }
176
+ }
177
+ async function createSystemMessage(template, request) {
178
+ return new message_cjs.SystemMessage(template.render({
179
+ tools: await Promise.all(request.tools.filter((tool) => !request.hiddenTools.includes(tool)).map(async (tool) => ({
180
+ name: tool.name,
181
+ description: tool.description,
182
+ inputSchema: JSON.stringify(await tool.inputSchema(), null, 2),
183
+ allowed: String(request.allowedTools.includes(tool)),
184
+ reason: request.reasonByTool.get(tool)
185
+ }))),
186
+ finalAnswerName: request.finalAnswer.name,
187
+ finalAnswerSchema: request.finalAnswer.customSchema ? JSON.stringify(request.finalAnswer.inputSchema, null, 2) : void 0,
188
+ finalAnswerInstructions: request.finalAnswer.instructions,
189
+ // default
190
+ role: void 0,
191
+ // default
192
+ instructions: void 0,
193
+ // default
194
+ notes: void 0
195
+ }));
196
+ }
197
+ __name(createSystemMessage, "createSystemMessage");
198
+
199
+ exports.RequirementsReasoner = RequirementsReasoner;
200
+ exports.createSystemMessage = createSystemMessage;
201
+ //# sourceMappingURL=llm.cjs.map
202
+ //# sourceMappingURL=llm.cjs.map