beeai-framework 0.1.24 → 0.1.26

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 (147) hide show
  1. package/dist/adapters/a2a/serve/agent_executor.d.cts +1 -1
  2. package/dist/adapters/a2a/serve/agent_executor.d.ts +1 -1
  3. package/dist/adapters/amazon-bedrock/backend/chat.d.cts +1 -1
  4. package/dist/adapters/amazon-bedrock/backend/chat.d.ts +1 -1
  5. package/dist/adapters/amazon-bedrock/backend/embedding.d.cts +1 -1
  6. package/dist/adapters/amazon-bedrock/backend/embedding.d.ts +1 -1
  7. package/dist/adapters/anthropic/backend/chat.d.cts +2 -2
  8. package/dist/adapters/anthropic/backend/chat.d.ts +2 -2
  9. package/dist/adapters/anthropic/backend/embedding.d.cts +1 -1
  10. package/dist/adapters/anthropic/backend/embedding.d.ts +1 -1
  11. package/dist/adapters/azure-openai/backend/chat.d.cts +1 -1
  12. package/dist/adapters/azure-openai/backend/chat.d.ts +1 -1
  13. package/dist/adapters/azure-openai/backend/embedding.d.cts +1 -1
  14. package/dist/adapters/azure-openai/backend/embedding.d.ts +1 -1
  15. package/dist/adapters/dummy/backend/chat.d.cts +3 -1
  16. package/dist/adapters/dummy/backend/chat.d.ts +3 -1
  17. package/dist/adapters/dummy/backend/embedding.d.cts +1 -1
  18. package/dist/adapters/dummy/backend/embedding.d.ts +1 -1
  19. package/dist/adapters/google-vertex/backend/chat.d.cts +2 -2
  20. package/dist/adapters/google-vertex/backend/chat.d.ts +2 -2
  21. package/dist/adapters/google-vertex/backend/embedding.d.cts +1 -1
  22. package/dist/adapters/google-vertex/backend/embedding.d.ts +1 -1
  23. package/dist/adapters/groq/backend/chat.d.cts +1 -1
  24. package/dist/adapters/groq/backend/chat.d.ts +1 -1
  25. package/dist/adapters/groq/backend/embedding.d.cts +1 -1
  26. package/dist/adapters/groq/backend/embedding.d.ts +1 -1
  27. package/dist/adapters/langchain/backend/chat.d.cts +3 -1
  28. package/dist/adapters/langchain/backend/chat.d.ts +3 -1
  29. package/dist/adapters/langchain/backend/embedding.d.cts +1 -1
  30. package/dist/adapters/langchain/backend/embedding.d.ts +1 -1
  31. package/dist/adapters/ollama/backend/chat.d.cts +1 -1
  32. package/dist/adapters/ollama/backend/chat.d.ts +1 -1
  33. package/dist/adapters/ollama/backend/embedding.d.cts +1 -1
  34. package/dist/adapters/ollama/backend/embedding.d.ts +1 -1
  35. package/dist/adapters/openai/backend/chat.d.cts +1 -1
  36. package/dist/adapters/openai/backend/chat.d.ts +1 -1
  37. package/dist/adapters/openai/backend/embedding.d.cts +1 -1
  38. package/dist/adapters/openai/backend/embedding.d.ts +1 -1
  39. package/dist/adapters/vercel/backend/chat.d.cts +3 -1
  40. package/dist/adapters/vercel/backend/chat.d.ts +3 -1
  41. package/dist/adapters/vercel/backend/embedding.d.cts +1 -1
  42. package/dist/adapters/vercel/backend/embedding.d.ts +1 -1
  43. package/dist/adapters/vercel/backend/utils.d.cts +1 -1
  44. package/dist/adapters/vercel/backend/utils.d.ts +1 -1
  45. package/dist/adapters/watsonx/backend/chat.cjs +11 -0
  46. package/dist/adapters/watsonx/backend/chat.cjs.map +1 -1
  47. package/dist/adapters/watsonx/backend/chat.d.cts +3 -1
  48. package/dist/adapters/watsonx/backend/chat.d.ts +3 -1
  49. package/dist/adapters/watsonx/backend/chat.js +11 -0
  50. package/dist/adapters/watsonx/backend/chat.js.map +1 -1
  51. package/dist/adapters/watsonx/backend/embedding.d.cts +1 -1
  52. package/dist/adapters/watsonx/backend/embedding.d.ts +1 -1
  53. package/dist/adapters/xai/backend/chat.d.cts +1 -1
  54. package/dist/adapters/xai/backend/chat.d.ts +1 -1
  55. package/dist/{agent-DHLEPXEA.d.ts → agent-CZGWXO-X.d.ts} +1 -1
  56. package/dist/{agent-Cy4QtsN8.d.cts → agent-PRlGoawI.d.cts} +1 -1
  57. package/dist/agents/experimental/replan/agent.d.cts +1 -1
  58. package/dist/agents/experimental/replan/agent.d.ts +1 -1
  59. package/dist/agents/experimental/streamlit/agent.d.cts +1 -1
  60. package/dist/agents/experimental/streamlit/agent.d.ts +1 -1
  61. package/dist/agents/react/agent.d.cts +2 -2
  62. package/dist/agents/react/agent.d.ts +2 -2
  63. package/dist/agents/react/prompts.d.cts +1 -1
  64. package/dist/agents/react/prompts.d.ts +1 -1
  65. package/dist/agents/react/runners/base.d.cts +2 -2
  66. package/dist/agents/react/runners/base.d.ts +2 -2
  67. package/dist/agents/react/runners/deep-think/prompts.d.cts +1 -1
  68. package/dist/agents/react/runners/deep-think/prompts.d.ts +1 -1
  69. package/dist/agents/react/runners/deep-think/runner.d.cts +3 -3
  70. package/dist/agents/react/runners/deep-think/runner.d.ts +3 -3
  71. package/dist/agents/react/runners/default/runner.d.cts +3 -3
  72. package/dist/agents/react/runners/default/runner.d.ts +3 -3
  73. package/dist/agents/react/runners/granite/prompts.d.cts +1 -1
  74. package/dist/agents/react/runners/granite/prompts.d.ts +1 -1
  75. package/dist/agents/react/runners/granite/runner.d.cts +3 -3
  76. package/dist/agents/react/runners/granite/runner.d.ts +3 -3
  77. package/dist/agents/react/types.d.cts +1 -1
  78. package/dist/agents/react/types.d.ts +1 -1
  79. package/dist/agents/requirement/agent.d.cts +2 -2
  80. package/dist/agents/requirement/agent.d.ts +2 -2
  81. package/dist/agents/requirement/requirements/conditional.d.cts +2 -2
  82. package/dist/agents/requirement/requirements/conditional.d.ts +2 -2
  83. package/dist/agents/requirement/requirements/requirement.d.cts +2 -2
  84. package/dist/agents/requirement/requirements/requirement.d.ts +2 -2
  85. package/dist/agents/requirement/runner.cjs +33 -14
  86. package/dist/agents/requirement/runner.cjs.map +1 -1
  87. package/dist/agents/requirement/runner.d.cts +2 -2
  88. package/dist/agents/requirement/runner.d.ts +2 -2
  89. package/dist/agents/requirement/runner.js +33 -14
  90. package/dist/agents/requirement/runner.js.map +1 -1
  91. package/dist/agents/requirement/types.d.cts +2 -2
  92. package/dist/agents/requirement/types.d.ts +2 -2
  93. package/dist/agents/requirement/utils/llm.d.cts +2 -2
  94. package/dist/agents/requirement/utils/llm.d.ts +2 -2
  95. package/dist/agents/requirement/utils/tool.cjs +13 -2
  96. package/dist/agents/requirement/utils/tool.cjs.map +1 -1
  97. package/dist/agents/requirement/utils/tool.d.cts +2 -2
  98. package/dist/agents/requirement/utils/tool.d.ts +2 -2
  99. package/dist/agents/requirement/utils/tool.js +11 -0
  100. package/dist/agents/requirement/utils/tool.js.map +1 -1
  101. package/dist/agents/toolCalling/agent.d.cts +1 -1
  102. package/dist/agents/toolCalling/agent.d.ts +1 -1
  103. package/dist/backend/backend.d.cts +1 -1
  104. package/dist/backend/backend.d.ts +1 -1
  105. package/dist/backend/chat.cjs +124 -45
  106. package/dist/backend/chat.cjs.map +1 -1
  107. package/dist/backend/chat.d.cts +1 -1
  108. package/dist/backend/chat.d.ts +1 -1
  109. package/dist/backend/chat.js +127 -48
  110. package/dist/backend/chat.js.map +1 -1
  111. package/dist/backend/core.d.cts +2 -2
  112. package/dist/backend/core.d.ts +2 -2
  113. package/dist/backend/embedding.d.cts +1 -1
  114. package/dist/backend/embedding.d.ts +1 -1
  115. package/dist/backend/errors.cjs +25 -0
  116. package/dist/backend/errors.cjs.map +1 -1
  117. package/dist/backend/errors.d.cts +34 -1
  118. package/dist/backend/errors.d.ts +34 -1
  119. package/dist/backend/errors.js +24 -1
  120. package/dist/backend/errors.js.map +1 -1
  121. package/dist/backend/utils.d.cts +1 -1
  122. package/dist/backend/utils.d.ts +1 -1
  123. package/dist/{chat-CC0s8z23.d.cts → chat-BFl85cqt.d.cts} +6 -0
  124. package/dist/{chat-D8SVtw5Q.d.ts → chat-BRuyDeKR.d.ts} +6 -0
  125. package/dist/index.d.cts +1 -1
  126. package/dist/index.d.ts +1 -1
  127. package/dist/memory/summarizeMemory.d.cts +1 -1
  128. package/dist/memory/summarizeMemory.d.ts +1 -1
  129. package/dist/middleware/streamToolCall.cjs +9 -0
  130. package/dist/middleware/streamToolCall.cjs.map +1 -1
  131. package/dist/middleware/streamToolCall.d.cts +10 -2
  132. package/dist/middleware/streamToolCall.d.ts +10 -2
  133. package/dist/middleware/streamToolCall.js +9 -0
  134. package/dist/middleware/streamToolCall.js.map +1 -1
  135. package/dist/tools/custom.d.cts +1 -1
  136. package/dist/tools/custom.d.ts +1 -1
  137. package/dist/tools/llm.d.cts +1 -1
  138. package/dist/tools/llm.d.ts +1 -1
  139. package/dist/tools/python/python.d.cts +1 -1
  140. package/dist/tools/python/python.d.ts +1 -1
  141. package/dist/{types-Dyd4e1G6.d.ts → types-BQ-3LdkE.d.ts} +9 -9
  142. package/dist/{types-D9pn62yF.d.cts → types-CkEtV8R9.d.cts} +9 -9
  143. package/dist/version.cjs +1 -1
  144. package/dist/version.js +1 -1
  145. package/dist/workflows/agent.d.cts +1 -1
  146. package/dist/workflows/agent.d.ts +1 -1
  147. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/middleware/streamToolCall.ts"],"names":["StreamToolCallMiddleware","Middleware","target","key","matchNested","forceStreaming","cleanups","output","ChatModelOutput","buffer","delta","emitter","options","Emitter","root","child","namespace","reset","isEmpty","length","bind","ctx","push","instance","match","meta","creator","ChatModel","name","handleStart","createEmitterOptions","handleNewToken","handleSuccess","unbind","fn","shift","isBlocking","process","toolName","args","parsedArgs","isString","parseBrokenJson","pair","outputStructured","parse","catch","hasProp","JSON","stringify","slice","emit","data","_meta","input","stream","streamPartialToolCalls","messages","value","callbacks","abort","merge","toolCalls","getToolCalls","toolCall","textContent","getTextContent","isPlainObject","parameters"],"mappings":"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","file":"streamToolCall.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Middleware, RunContext, RunInstance } from \"@/context.js\";\nimport { Callback, Emitter, EventMeta } from \"@/emitter/emitter.js\";\nimport { ChatModel, ChatModelEvents } from \"@/backend/chat.js\";\nimport { ChatModelOutput } from \"@/backend/chat.js\";\nimport { Tool } from \"@/tools/base.js\";\nimport { parseBrokenJson } from \"@/internals/helpers/schema.js\";\nimport { isPlainObject, isString } from \"remeda\";\nimport { hasProp } from \"@/internals/helpers/object.js\";\nimport { EmitterOptions, InferCallbackValue } from \"@/emitter/types.js\";\n\n/**\n * Event emitted when the middleware detects an update to the target tool's arguments\n */\nexport interface StreamToolCallMiddlewareUpdateEvent<T = any> {\n /** The validated and structured tool input */\n outputStructured: T | null;\n /** The current value of the target field */\n output: string;\n /** The incremental change since the last update */\n delta: string;\n}\n\n/**\n * Callbacks for StreamToolCallMiddleware events\n */\nexport interface StreamToolCallMiddlewareCallbacks<T = any> {\n update: Callback<StreamToolCallMiddlewareUpdateEvent<T>>;\n}\n\n/**\n * Options for configuring StreamToolCallMiddleware\n */\nexport interface StreamToolCallMiddlewareOptions {\n /** The tool to monitor for streaming updates */\n target: Tool<any>;\n /** The field name in the tool's input schema to stream */\n key: string;\n /** Whether to apply middleware to nested run contexts */\n matchNested?: boolean;\n /** Whether to force streaming on the ChatModel */\n forceStreaming?: boolean;\n}\n\n/**\n * Middleware for handling streaming tool calls in a ChatModel.\n *\n * This middleware observes and listens to ChatModel stream updates and parses\n * the tool calls on demand so that they can be consumed as soon as possible.\n *\n * @example\n * ```typescript\n * const middleware = new StreamToolCallMiddleware({\n * target: thinkTool,\n * key: \"thoughts\",\n * matchNested: false,\n * forceStreaming: true,\n * });\n *\n * middleware.emitter.on(\"update\", (event) => {\n * console.log(\"Delta:\", event.delta);\n * console.log(\"Structured:\", event.outputStructured);\n * });\n *\n * await llm.run(messages, { tools: [thinkTool] }).middleware(middleware);\n * ```\n */\nexport class StreamToolCallMiddleware<T = any> extends Middleware<RunInstance> {\n private readonly target: Tool<any>;\n private readonly key: string;\n private readonly matchNested: boolean;\n private readonly forceStreaming: boolean;\n private readonly cleanups: (() => void)[] = [];\n\n private output = new ChatModelOutput([]);\n private buffer = \"\";\n private delta = \"\";\n\n public readonly emitter: Emitter<StreamToolCallMiddlewareCallbacks<T>>;\n\n constructor(options: StreamToolCallMiddlewareOptions) {\n super();\n\n this.target = options.target;\n this.key = options.key;\n this.matchNested = options.matchNested ?? false;\n this.forceStreaming = options.forceStreaming ?? false;\n\n this.emitter = Emitter.root.child<StreamToolCallMiddlewareCallbacks<T>>({\n namespace: [\"middleware\", \"streamToolCall\"],\n });\n }\n\n reset() {\n this.output = new ChatModelOutput([]);\n this.buffer = \"\";\n this.delta = \"\";\n }\n\n isEmpty() {\n return this.buffer.length === 0;\n }\n\n bind(ctx: RunContext<RunInstance>): void {\n this.reset();\n\n // Listen to ChatModel start event\n this.cleanups.push(\n ctx.instance.emitter.match(\n (meta) => meta.creator instanceof ChatModel && meta.name === \"start\",\n this.handleStart.bind(this),\n this.createEmitterOptions(),\n ),\n );\n\n // Listen to ChatModel newToken event\n this.cleanups.push(\n ctx.instance.emitter.match(\n (meta) => meta.creator instanceof ChatModel && meta.name === \"newToken\",\n this.handleNewToken.bind(this),\n this.createEmitterOptions(),\n ),\n );\n\n // Listen to ChatModel success event\n this.cleanups.push(\n ctx.instance.emitter.match(\n (meta) => meta.creator instanceof ChatModel && meta.name === \"success\",\n this.handleSuccess.bind(this),\n this.createEmitterOptions(),\n ),\n );\n }\n\n unbind(): void {\n // Clean up previous bindings\n while (this.cleanups.length > 0) {\n const fn = this.cleanups.shift()!;\n fn();\n }\n }\n\n protected createEmitterOptions(): EmitterOptions {\n return {\n matchNested: this.matchNested,\n isBlocking: true,\n };\n }\n\n private async process(toolName: string, args: any): Promise<void> {\n if (toolName !== this.target.name) {\n return;\n }\n\n const parsedArgs = isString(args) ? parseBrokenJson(args, { pair: [\"{\", \"}\"] }) : args;\n const outputStructured = (await this.target.parse(parsedArgs).catch(() => null)) as T;\n if (!outputStructured) {\n return;\n }\n\n let output = \"\";\n if (hasProp(outputStructured, this.key as keyof T)) {\n output = (outputStructured as any)[this.key] || \"\";\n if (!isString(output)) {\n output = JSON.stringify(output);\n }\n this.delta = output.slice(this.buffer.length);\n this.buffer = output;\n\n if (!this.delta) {\n return;\n }\n }\n\n await this.emitter.emit(\"update\", {\n outputStructured,\n delta: this.delta,\n output,\n });\n }\n\n private async handleStart(\n data: InferCallbackValue<ChatModelEvents[\"start\"]>,\n _meta: EventMeta,\n ): Promise<void> {\n if (this.forceStreaming) {\n data.input.stream = true;\n data.input.streamPartialToolCalls = true;\n }\n }\n\n private async handleSuccess(\n data: InferCallbackValue<ChatModelEvents[\"success\"]>,\n _meta: EventMeta,\n ): Promise<void> {\n // If we haven't received any tokens yet, process the final output\n if (this.output.messages.length === 0) {\n await this.handleNewToken({ value: data.value, callbacks: { abort: () => {} } }, _meta);\n }\n }\n\n private async handleNewToken(\n data: InferCallbackValue<ChatModelEvents[\"newToken\"]>,\n _meta: EventMeta,\n ): Promise<void> {\n await this.output.merge(data.value);\n\n const toolCalls = this.output.getToolCalls();\n if (toolCalls.length > 0) {\n for (const toolCall of toolCalls) {\n await this.process(toolCall.toolName, toolCall.input);\n }\n return;\n }\n\n // Try to parse text content as a tool call\n const textContent = this.output.getTextContent();\n const toolCall = parseBrokenJson(textContent, { pair: [\"{\", \"}\"] });\n\n if (!toolCall || !isPlainObject(toolCall)) {\n return;\n }\n\n await this.process(toolCall.name as string, toolCall.parameters as any);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/middleware/streamToolCall.ts"],"names":["StreamToolCallMiddleware","Middleware","target","key","matchNested","forceStreaming","cleanups","output","ChatModelOutput","buffer","delta","emitter","options","Emitter","root","child","namespace","reset","add","chunk","handleNewToken","value","callbacks","abort","isEmpty","length","bind","ctx","push","instance","match","meta","creator","ChatModel","name","handleStart","createEmitterOptions","handleSuccess","unbind","fn","shift","isBlocking","process","toolName","args","parsedArgs","isString","parseBrokenJson","pair","outputStructured","parse","catch","hasProp","JSON","stringify","slice","emit","data","_meta","input","stream","streamPartialToolCalls","messages","merge","toolCalls","getToolCalls","toolCall","textContent","getTextContent","isPlainObject","parameters"],"mappings":"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","file":"streamToolCall.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Middleware, RunContext, RunInstance } from \"@/context.js\";\nimport { Callback, Emitter, EventMeta } from \"@/emitter/emitter.js\";\nimport { ChatModel, ChatModelEvents } from \"@/backend/chat.js\";\nimport { ChatModelOutput } from \"@/backend/chat.js\";\nimport { Tool } from \"@/tools/base.js\";\nimport { parseBrokenJson } from \"@/internals/helpers/schema.js\";\nimport { isPlainObject, isString } from \"remeda\";\nimport { hasProp } from \"@/internals/helpers/object.js\";\nimport { EmitterOptions, InferCallbackValue } from \"@/emitter/types.js\";\n\n/**\n * Event emitted when the middleware detects an update to the target tool's arguments\n */\nexport interface StreamToolCallMiddlewareUpdateEvent<T = any> {\n /** The validated and structured tool input */\n outputStructured: T | null;\n /** The current value of the target field */\n output: string;\n /** The incremental change since the last update */\n delta: string;\n}\n\n/**\n * Callbacks for StreamToolCallMiddleware events\n */\nexport interface StreamToolCallMiddlewareCallbacks<T = any> {\n update: Callback<StreamToolCallMiddlewareUpdateEvent<T>>;\n}\n\n/**\n * Options for configuring StreamToolCallMiddleware\n */\nexport interface StreamToolCallMiddlewareOptions {\n /** The tool to monitor for streaming updates */\n target: Tool<any>;\n /** The field name in the tool's input schema to stream */\n key: string;\n /** Whether to apply middleware to nested run contexts */\n matchNested?: boolean;\n /** Whether to force streaming on the ChatModel */\n forceStreaming?: boolean;\n}\n\n/**\n * Middleware for handling streaming tool calls in a ChatModel.\n *\n * This middleware observes and listens to ChatModel stream updates and parses\n * the tool calls on demand so that they can be consumed as soon as possible.\n *\n * @example\n * ```typescript\n * const middleware = new StreamToolCallMiddleware({\n * target: thinkTool,\n * key: \"thoughts\",\n * matchNested: false,\n * forceStreaming: true,\n * });\n *\n * middleware.emitter.on(\"update\", (event) => {\n * console.log(\"Delta:\", event.delta);\n * console.log(\"Structured:\", event.outputStructured);\n * });\n *\n * await llm.run(messages, { tools: [thinkTool] }).middleware(middleware);\n * ```\n */\nexport class StreamToolCallMiddleware<T = any> extends Middleware<RunInstance> {\n private readonly target: Tool<any>;\n private readonly key: string;\n private readonly matchNested: boolean;\n private readonly forceStreaming: boolean;\n private readonly cleanups: (() => void)[] = [];\n\n private output = new ChatModelOutput([]);\n private buffer = \"\";\n private delta = \"\";\n\n public readonly emitter: Emitter<StreamToolCallMiddlewareCallbacks<T>>;\n\n constructor(options: StreamToolCallMiddlewareOptions) {\n super();\n\n this.target = options.target;\n this.key = options.key;\n this.matchNested = options.matchNested ?? false;\n this.forceStreaming = options.forceStreaming ?? false;\n\n this.emitter = Emitter.root.child<StreamToolCallMiddlewareCallbacks<T>>({\n namespace: [\"middleware\", \"streamToolCall\"],\n });\n }\n\n reset() {\n this.output = new ChatModelOutput([]);\n this.buffer = \"\";\n this.delta = \"\";\n }\n\n async add(chunk: ChatModelOutput) {\n await this.handleNewToken(\n {\n value: chunk,\n callbacks: {\n abort: () => {},\n },\n },\n {} as EventMeta,\n );\n }\n\n isEmpty() {\n return this.buffer.length === 0;\n }\n\n bind(ctx: RunContext<RunInstance>): void {\n this.reset();\n\n // Listen to ChatModel start event\n this.cleanups.push(\n ctx.instance.emitter.match(\n (meta) => meta.creator instanceof ChatModel && meta.name === \"start\",\n this.handleStart.bind(this),\n this.createEmitterOptions(),\n ),\n );\n\n // Listen to ChatModel newToken event\n this.cleanups.push(\n ctx.instance.emitter.match(\n (meta) => meta.creator instanceof ChatModel && meta.name === \"newToken\",\n this.handleNewToken.bind(this),\n this.createEmitterOptions(),\n ),\n );\n\n // Listen to ChatModel success event\n this.cleanups.push(\n ctx.instance.emitter.match(\n (meta) => meta.creator instanceof ChatModel && meta.name === \"success\",\n this.handleSuccess.bind(this),\n this.createEmitterOptions(),\n ),\n );\n }\n\n unbind(): void {\n // Clean up previous bindings\n while (this.cleanups.length > 0) {\n const fn = this.cleanups.shift()!;\n fn();\n }\n }\n\n protected createEmitterOptions(): EmitterOptions {\n return {\n matchNested: this.matchNested,\n isBlocking: true,\n };\n }\n\n private async process(toolName: string, args: any): Promise<void> {\n if (toolName !== this.target.name) {\n return;\n }\n\n const parsedArgs = isString(args) ? parseBrokenJson(args, { pair: [\"{\", \"}\"] }) : args;\n const outputStructured = (await this.target.parse(parsedArgs).catch(() => null)) as T;\n if (!outputStructured) {\n return;\n }\n\n let output = \"\";\n if (hasProp(outputStructured, this.key as keyof T)) {\n output = (outputStructured as any)[this.key] || \"\";\n if (!isString(output)) {\n output = JSON.stringify(output);\n }\n this.delta = output.slice(this.buffer.length);\n this.buffer = output;\n\n if (!this.delta) {\n return;\n }\n }\n\n await this.emitter.emit(\"update\", {\n outputStructured,\n delta: this.delta,\n output,\n });\n }\n\n private async handleStart(\n data: InferCallbackValue<ChatModelEvents[\"start\"]>,\n _meta: EventMeta,\n ): Promise<void> {\n if (this.forceStreaming) {\n data.input.stream = true;\n data.input.streamPartialToolCalls = true;\n }\n }\n\n private async handleSuccess(\n data: InferCallbackValue<ChatModelEvents[\"success\"]>,\n _meta: EventMeta,\n ): Promise<void> {\n // If we haven't received any tokens yet, process the final output\n if (this.output.messages.length === 0) {\n await this.handleNewToken({ value: data.value, callbacks: { abort: () => {} } }, _meta);\n }\n }\n\n private async handleNewToken(\n data: InferCallbackValue<ChatModelEvents[\"newToken\"]>,\n _meta: EventMeta,\n ): Promise<void> {\n await this.output.merge(data.value);\n\n const toolCalls = this.output.getToolCalls();\n if (toolCalls.length > 0) {\n for (const toolCall of toolCalls) {\n await this.process(toolCall.toolName, toolCall.input);\n }\n return;\n }\n\n // Try to parse text content as a tool call\n const textContent = this.output.getTextContent();\n const toolCall = parseBrokenJson(textContent, { pair: [\"{\", \"}\"] });\n\n if (!toolCall || !isPlainObject(toolCall)) {\n return;\n }\n\n await this.process(toolCall.name as string, toolCall.parameters as any);\n }\n}\n"]}
@@ -1,16 +1,23 @@
1
1
  import { Middleware, RunInstance, RunContext } from '../context.cjs';
2
2
  import { C as Callback, E as Emitter, a as EmitterOptions } from '../emitter-jN55XZZq.cjs';
3
+ import { n as ChatModelOutput } from '../chat-BFl85cqt.cjs';
3
4
  import { Tool } from '../tools/base.cjs';
4
5
  import '../internals/serializable.cjs';
5
6
  import '../internals/types.cjs';
6
7
  import '../internals/helpers/guards.cjs';
7
8
  import '../internals/helpers/promise.cjs';
8
9
  import '../errors.cjs';
9
- import 'ajv';
10
+ import '../backend/message.cjs';
11
+ import 'ai';
10
12
  import 'promise-based-task';
11
13
  import '../cache/base.cjs';
12
- import '../internals/helpers/schema.cjs';
14
+ import '../backend/constants.cjs';
13
15
  import 'zod';
16
+ import 'ajv';
17
+ import '../template.cjs';
18
+ import '../logger/logger.cjs';
19
+ import 'pino';
20
+ import '../internals/helpers/schema.cjs';
14
21
  import 'zod-to-json-schema';
15
22
 
16
23
  /**
@@ -83,6 +90,7 @@ declare class StreamToolCallMiddleware<T = any> extends Middleware<RunInstance>
83
90
  readonly emitter: Emitter<StreamToolCallMiddlewareCallbacks<T>>;
84
91
  constructor(options: StreamToolCallMiddlewareOptions);
85
92
  reset(): void;
93
+ add(chunk: ChatModelOutput): Promise<void>;
86
94
  isEmpty(): boolean;
87
95
  bind(ctx: RunContext<RunInstance>): void;
88
96
  unbind(): void;
@@ -1,16 +1,23 @@
1
1
  import { Middleware, RunInstance, RunContext } from '../context.js';
2
2
  import { C as Callback, E as Emitter, a as EmitterOptions } from '../emitter-36-9MnvA.js';
3
+ import { n as ChatModelOutput } from '../chat-BRuyDeKR.js';
3
4
  import { Tool } from '../tools/base.js';
4
5
  import '../internals/serializable.js';
5
6
  import '../internals/types.js';
6
7
  import '../internals/helpers/guards.js';
7
8
  import '../internals/helpers/promise.js';
8
9
  import '../errors.js';
9
- import 'ajv';
10
+ import '../backend/message.js';
11
+ import 'ai';
10
12
  import 'promise-based-task';
11
13
  import '../cache/base.js';
12
- import '../internals/helpers/schema.js';
14
+ import '../backend/constants.js';
13
15
  import 'zod';
16
+ import 'ajv';
17
+ import '../template.js';
18
+ import '../logger/logger.js';
19
+ import 'pino';
20
+ import '../internals/helpers/schema.js';
14
21
  import 'zod-to-json-schema';
15
22
 
16
23
  /**
@@ -83,6 +90,7 @@ declare class StreamToolCallMiddleware<T = any> extends Middleware<RunInstance>
83
90
  readonly emitter: Emitter<StreamToolCallMiddlewareCallbacks<T>>;
84
91
  constructor(options: StreamToolCallMiddlewareOptions);
85
92
  reset(): void;
93
+ add(chunk: ChatModelOutput): Promise<void>;
86
94
  isEmpty(): boolean;
87
95
  bind(ctx: RunContext<RunInstance>): void;
88
96
  unbind(): void;
@@ -38,6 +38,15 @@ class StreamToolCallMiddleware extends Middleware {
38
38
  this.buffer = "";
39
39
  this.delta = "";
40
40
  }
41
+ async add(chunk) {
42
+ await this.handleNewToken({
43
+ value: chunk,
44
+ callbacks: {
45
+ abort: /* @__PURE__ */ __name(() => {
46
+ }, "abort")
47
+ }
48
+ }, {});
49
+ }
41
50
  isEmpty() {
42
51
  return this.buffer.length === 0;
43
52
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/middleware/streamToolCall.ts"],"names":["StreamToolCallMiddleware","Middleware","target","key","matchNested","forceStreaming","cleanups","output","ChatModelOutput","buffer","delta","emitter","options","Emitter","root","child","namespace","reset","isEmpty","length","bind","ctx","push","instance","match","meta","creator","ChatModel","name","handleStart","createEmitterOptions","handleNewToken","handleSuccess","unbind","fn","shift","isBlocking","process","toolName","args","parsedArgs","isString","parseBrokenJson","pair","outputStructured","parse","catch","hasProp","JSON","stringify","slice","emit","data","_meta","input","stream","streamPartialToolCalls","messages","value","callbacks","abort","merge","toolCalls","getToolCalls","toolCall","textContent","getTextContent","isPlainObject","parameters"],"mappings":"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","file":"streamToolCall.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Middleware, RunContext, RunInstance } from \"@/context.js\";\nimport { Callback, Emitter, EventMeta } from \"@/emitter/emitter.js\";\nimport { ChatModel, ChatModelEvents } from \"@/backend/chat.js\";\nimport { ChatModelOutput } from \"@/backend/chat.js\";\nimport { Tool } from \"@/tools/base.js\";\nimport { parseBrokenJson } from \"@/internals/helpers/schema.js\";\nimport { isPlainObject, isString } from \"remeda\";\nimport { hasProp } from \"@/internals/helpers/object.js\";\nimport { EmitterOptions, InferCallbackValue } from \"@/emitter/types.js\";\n\n/**\n * Event emitted when the middleware detects an update to the target tool's arguments\n */\nexport interface StreamToolCallMiddlewareUpdateEvent<T = any> {\n /** The validated and structured tool input */\n outputStructured: T | null;\n /** The current value of the target field */\n output: string;\n /** The incremental change since the last update */\n delta: string;\n}\n\n/**\n * Callbacks for StreamToolCallMiddleware events\n */\nexport interface StreamToolCallMiddlewareCallbacks<T = any> {\n update: Callback<StreamToolCallMiddlewareUpdateEvent<T>>;\n}\n\n/**\n * Options for configuring StreamToolCallMiddleware\n */\nexport interface StreamToolCallMiddlewareOptions {\n /** The tool to monitor for streaming updates */\n target: Tool<any>;\n /** The field name in the tool's input schema to stream */\n key: string;\n /** Whether to apply middleware to nested run contexts */\n matchNested?: boolean;\n /** Whether to force streaming on the ChatModel */\n forceStreaming?: boolean;\n}\n\n/**\n * Middleware for handling streaming tool calls in a ChatModel.\n *\n * This middleware observes and listens to ChatModel stream updates and parses\n * the tool calls on demand so that they can be consumed as soon as possible.\n *\n * @example\n * ```typescript\n * const middleware = new StreamToolCallMiddleware({\n * target: thinkTool,\n * key: \"thoughts\",\n * matchNested: false,\n * forceStreaming: true,\n * });\n *\n * middleware.emitter.on(\"update\", (event) => {\n * console.log(\"Delta:\", event.delta);\n * console.log(\"Structured:\", event.outputStructured);\n * });\n *\n * await llm.run(messages, { tools: [thinkTool] }).middleware(middleware);\n * ```\n */\nexport class StreamToolCallMiddleware<T = any> extends Middleware<RunInstance> {\n private readonly target: Tool<any>;\n private readonly key: string;\n private readonly matchNested: boolean;\n private readonly forceStreaming: boolean;\n private readonly cleanups: (() => void)[] = [];\n\n private output = new ChatModelOutput([]);\n private buffer = \"\";\n private delta = \"\";\n\n public readonly emitter: Emitter<StreamToolCallMiddlewareCallbacks<T>>;\n\n constructor(options: StreamToolCallMiddlewareOptions) {\n super();\n\n this.target = options.target;\n this.key = options.key;\n this.matchNested = options.matchNested ?? false;\n this.forceStreaming = options.forceStreaming ?? false;\n\n this.emitter = Emitter.root.child<StreamToolCallMiddlewareCallbacks<T>>({\n namespace: [\"middleware\", \"streamToolCall\"],\n });\n }\n\n reset() {\n this.output = new ChatModelOutput([]);\n this.buffer = \"\";\n this.delta = \"\";\n }\n\n isEmpty() {\n return this.buffer.length === 0;\n }\n\n bind(ctx: RunContext<RunInstance>): void {\n this.reset();\n\n // Listen to ChatModel start event\n this.cleanups.push(\n ctx.instance.emitter.match(\n (meta) => meta.creator instanceof ChatModel && meta.name === \"start\",\n this.handleStart.bind(this),\n this.createEmitterOptions(),\n ),\n );\n\n // Listen to ChatModel newToken event\n this.cleanups.push(\n ctx.instance.emitter.match(\n (meta) => meta.creator instanceof ChatModel && meta.name === \"newToken\",\n this.handleNewToken.bind(this),\n this.createEmitterOptions(),\n ),\n );\n\n // Listen to ChatModel success event\n this.cleanups.push(\n ctx.instance.emitter.match(\n (meta) => meta.creator instanceof ChatModel && meta.name === \"success\",\n this.handleSuccess.bind(this),\n this.createEmitterOptions(),\n ),\n );\n }\n\n unbind(): void {\n // Clean up previous bindings\n while (this.cleanups.length > 0) {\n const fn = this.cleanups.shift()!;\n fn();\n }\n }\n\n protected createEmitterOptions(): EmitterOptions {\n return {\n matchNested: this.matchNested,\n isBlocking: true,\n };\n }\n\n private async process(toolName: string, args: any): Promise<void> {\n if (toolName !== this.target.name) {\n return;\n }\n\n const parsedArgs = isString(args) ? parseBrokenJson(args, { pair: [\"{\", \"}\"] }) : args;\n const outputStructured = (await this.target.parse(parsedArgs).catch(() => null)) as T;\n if (!outputStructured) {\n return;\n }\n\n let output = \"\";\n if (hasProp(outputStructured, this.key as keyof T)) {\n output = (outputStructured as any)[this.key] || \"\";\n if (!isString(output)) {\n output = JSON.stringify(output);\n }\n this.delta = output.slice(this.buffer.length);\n this.buffer = output;\n\n if (!this.delta) {\n return;\n }\n }\n\n await this.emitter.emit(\"update\", {\n outputStructured,\n delta: this.delta,\n output,\n });\n }\n\n private async handleStart(\n data: InferCallbackValue<ChatModelEvents[\"start\"]>,\n _meta: EventMeta,\n ): Promise<void> {\n if (this.forceStreaming) {\n data.input.stream = true;\n data.input.streamPartialToolCalls = true;\n }\n }\n\n private async handleSuccess(\n data: InferCallbackValue<ChatModelEvents[\"success\"]>,\n _meta: EventMeta,\n ): Promise<void> {\n // If we haven't received any tokens yet, process the final output\n if (this.output.messages.length === 0) {\n await this.handleNewToken({ value: data.value, callbacks: { abort: () => {} } }, _meta);\n }\n }\n\n private async handleNewToken(\n data: InferCallbackValue<ChatModelEvents[\"newToken\"]>,\n _meta: EventMeta,\n ): Promise<void> {\n await this.output.merge(data.value);\n\n const toolCalls = this.output.getToolCalls();\n if (toolCalls.length > 0) {\n for (const toolCall of toolCalls) {\n await this.process(toolCall.toolName, toolCall.input);\n }\n return;\n }\n\n // Try to parse text content as a tool call\n const textContent = this.output.getTextContent();\n const toolCall = parseBrokenJson(textContent, { pair: [\"{\", \"}\"] });\n\n if (!toolCall || !isPlainObject(toolCall)) {\n return;\n }\n\n await this.process(toolCall.name as string, toolCall.parameters as any);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/middleware/streamToolCall.ts"],"names":["StreamToolCallMiddleware","Middleware","target","key","matchNested","forceStreaming","cleanups","output","ChatModelOutput","buffer","delta","emitter","options","Emitter","root","child","namespace","reset","add","chunk","handleNewToken","value","callbacks","abort","isEmpty","length","bind","ctx","push","instance","match","meta","creator","ChatModel","name","handleStart","createEmitterOptions","handleSuccess","unbind","fn","shift","isBlocking","process","toolName","args","parsedArgs","isString","parseBrokenJson","pair","outputStructured","parse","catch","hasProp","JSON","stringify","slice","emit","data","_meta","input","stream","streamPartialToolCalls","messages","merge","toolCalls","getToolCalls","toolCall","textContent","getTextContent","isPlainObject","parameters"],"mappings":"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","file":"streamToolCall.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Middleware, RunContext, RunInstance } from \"@/context.js\";\nimport { Callback, Emitter, EventMeta } from \"@/emitter/emitter.js\";\nimport { ChatModel, ChatModelEvents } from \"@/backend/chat.js\";\nimport { ChatModelOutput } from \"@/backend/chat.js\";\nimport { Tool } from \"@/tools/base.js\";\nimport { parseBrokenJson } from \"@/internals/helpers/schema.js\";\nimport { isPlainObject, isString } from \"remeda\";\nimport { hasProp } from \"@/internals/helpers/object.js\";\nimport { EmitterOptions, InferCallbackValue } from \"@/emitter/types.js\";\n\n/**\n * Event emitted when the middleware detects an update to the target tool's arguments\n */\nexport interface StreamToolCallMiddlewareUpdateEvent<T = any> {\n /** The validated and structured tool input */\n outputStructured: T | null;\n /** The current value of the target field */\n output: string;\n /** The incremental change since the last update */\n delta: string;\n}\n\n/**\n * Callbacks for StreamToolCallMiddleware events\n */\nexport interface StreamToolCallMiddlewareCallbacks<T = any> {\n update: Callback<StreamToolCallMiddlewareUpdateEvent<T>>;\n}\n\n/**\n * Options for configuring StreamToolCallMiddleware\n */\nexport interface StreamToolCallMiddlewareOptions {\n /** The tool to monitor for streaming updates */\n target: Tool<any>;\n /** The field name in the tool's input schema to stream */\n key: string;\n /** Whether to apply middleware to nested run contexts */\n matchNested?: boolean;\n /** Whether to force streaming on the ChatModel */\n forceStreaming?: boolean;\n}\n\n/**\n * Middleware for handling streaming tool calls in a ChatModel.\n *\n * This middleware observes and listens to ChatModel stream updates and parses\n * the tool calls on demand so that they can be consumed as soon as possible.\n *\n * @example\n * ```typescript\n * const middleware = new StreamToolCallMiddleware({\n * target: thinkTool,\n * key: \"thoughts\",\n * matchNested: false,\n * forceStreaming: true,\n * });\n *\n * middleware.emitter.on(\"update\", (event) => {\n * console.log(\"Delta:\", event.delta);\n * console.log(\"Structured:\", event.outputStructured);\n * });\n *\n * await llm.run(messages, { tools: [thinkTool] }).middleware(middleware);\n * ```\n */\nexport class StreamToolCallMiddleware<T = any> extends Middleware<RunInstance> {\n private readonly target: Tool<any>;\n private readonly key: string;\n private readonly matchNested: boolean;\n private readonly forceStreaming: boolean;\n private readonly cleanups: (() => void)[] = [];\n\n private output = new ChatModelOutput([]);\n private buffer = \"\";\n private delta = \"\";\n\n public readonly emitter: Emitter<StreamToolCallMiddlewareCallbacks<T>>;\n\n constructor(options: StreamToolCallMiddlewareOptions) {\n super();\n\n this.target = options.target;\n this.key = options.key;\n this.matchNested = options.matchNested ?? false;\n this.forceStreaming = options.forceStreaming ?? false;\n\n this.emitter = Emitter.root.child<StreamToolCallMiddlewareCallbacks<T>>({\n namespace: [\"middleware\", \"streamToolCall\"],\n });\n }\n\n reset() {\n this.output = new ChatModelOutput([]);\n this.buffer = \"\";\n this.delta = \"\";\n }\n\n async add(chunk: ChatModelOutput) {\n await this.handleNewToken(\n {\n value: chunk,\n callbacks: {\n abort: () => {},\n },\n },\n {} as EventMeta,\n );\n }\n\n isEmpty() {\n return this.buffer.length === 0;\n }\n\n bind(ctx: RunContext<RunInstance>): void {\n this.reset();\n\n // Listen to ChatModel start event\n this.cleanups.push(\n ctx.instance.emitter.match(\n (meta) => meta.creator instanceof ChatModel && meta.name === \"start\",\n this.handleStart.bind(this),\n this.createEmitterOptions(),\n ),\n );\n\n // Listen to ChatModel newToken event\n this.cleanups.push(\n ctx.instance.emitter.match(\n (meta) => meta.creator instanceof ChatModel && meta.name === \"newToken\",\n this.handleNewToken.bind(this),\n this.createEmitterOptions(),\n ),\n );\n\n // Listen to ChatModel success event\n this.cleanups.push(\n ctx.instance.emitter.match(\n (meta) => meta.creator instanceof ChatModel && meta.name === \"success\",\n this.handleSuccess.bind(this),\n this.createEmitterOptions(),\n ),\n );\n }\n\n unbind(): void {\n // Clean up previous bindings\n while (this.cleanups.length > 0) {\n const fn = this.cleanups.shift()!;\n fn();\n }\n }\n\n protected createEmitterOptions(): EmitterOptions {\n return {\n matchNested: this.matchNested,\n isBlocking: true,\n };\n }\n\n private async process(toolName: string, args: any): Promise<void> {\n if (toolName !== this.target.name) {\n return;\n }\n\n const parsedArgs = isString(args) ? parseBrokenJson(args, { pair: [\"{\", \"}\"] }) : args;\n const outputStructured = (await this.target.parse(parsedArgs).catch(() => null)) as T;\n if (!outputStructured) {\n return;\n }\n\n let output = \"\";\n if (hasProp(outputStructured, this.key as keyof T)) {\n output = (outputStructured as any)[this.key] || \"\";\n if (!isString(output)) {\n output = JSON.stringify(output);\n }\n this.delta = output.slice(this.buffer.length);\n this.buffer = output;\n\n if (!this.delta) {\n return;\n }\n }\n\n await this.emitter.emit(\"update\", {\n outputStructured,\n delta: this.delta,\n output,\n });\n }\n\n private async handleStart(\n data: InferCallbackValue<ChatModelEvents[\"start\"]>,\n _meta: EventMeta,\n ): Promise<void> {\n if (this.forceStreaming) {\n data.input.stream = true;\n data.input.streamPartialToolCalls = true;\n }\n }\n\n private async handleSuccess(\n data: InferCallbackValue<ChatModelEvents[\"success\"]>,\n _meta: EventMeta,\n ): Promise<void> {\n // If we haven't received any tokens yet, process the final output\n if (this.output.messages.length === 0) {\n await this.handleNewToken({ value: data.value, callbacks: { abort: () => {} } }, _meta);\n }\n }\n\n private async handleNewToken(\n data: InferCallbackValue<ChatModelEvents[\"newToken\"]>,\n _meta: EventMeta,\n ): Promise<void> {\n await this.output.merge(data.value);\n\n const toolCalls = this.output.getToolCalls();\n if (toolCalls.length > 0) {\n for (const toolCall of toolCalls) {\n await this.process(toolCall.toolName, toolCall.input);\n }\n return;\n }\n\n // Try to parse text content as a tool call\n const textContent = this.output.getTextContent();\n const toolCall = parseBrokenJson(textContent, { pair: [\"{\", \"}\"] });\n\n if (!toolCall || !isPlainObject(toolCall)) {\n return;\n }\n\n await this.process(toolCall.name as string, toolCall.parameters as any);\n }\n}\n"]}
@@ -18,7 +18,7 @@ import './python/storage.cjs';
18
18
  import 'fs';
19
19
  import './python/output.cjs';
20
20
  import 'node:tls';
21
- import '../chat-CC0s8z23.cjs';
21
+ import '../chat-BFl85cqt.cjs';
22
22
  import '../backend/message.cjs';
23
23
  import 'ai';
24
24
  import '../backend/constants.cjs';
@@ -18,7 +18,7 @@ import './python/storage.js';
18
18
  import 'fs';
19
19
  import './python/output.js';
20
20
  import 'node:tls';
21
- import '../chat-D8SVtw5Q.js';
21
+ import '../chat-BRuyDeKR.js';
22
22
  import '../backend/message.js';
23
23
  import 'ai';
24
24
  import '../backend/constants.js';
@@ -2,7 +2,7 @@ import { BaseToolOptions, Tool, StringToolOutput, ToolEmitter, ToolInput, BaseTo
2
2
  import { z } from 'zod';
3
3
  import { GetRunContext } from '../context.cjs';
4
4
  import { PromptTemplate } from '../template.cjs';
5
- import { m as ChatModel } from '../chat-CC0s8z23.cjs';
5
+ import { m as ChatModel } from '../chat-BFl85cqt.cjs';
6
6
  import 'ajv';
7
7
  import '../errors.cjs';
8
8
  import '../internals/types.cjs';
@@ -2,7 +2,7 @@ import { BaseToolOptions, Tool, StringToolOutput, ToolEmitter, ToolInput, BaseTo
2
2
  import { z } from 'zod';
3
3
  import { GetRunContext } from '../context.js';
4
4
  import { PromptTemplate } from '../template.js';
5
- import { m as ChatModel } from '../chat-D8SVtw5Q.js';
5
+ import { m as ChatModel } from '../chat-BRuyDeKR.js';
6
6
  import 'ajv';
7
7
  import '../errors.js';
8
8
  import '../internals/types.js';
@@ -8,7 +8,7 @@ import { PythonToolOutput } from './output.cjs';
8
8
  import { ConnectionOptions } from 'node:tls';
9
9
  import { RunContext } from '../../context.cjs';
10
10
  import { E as Emitter } from '../../emitter-jN55XZZq.cjs';
11
- import { m as ChatModel } from '../../chat-CC0s8z23.cjs';
11
+ import { m as ChatModel } from '../../chat-BFl85cqt.cjs';
12
12
  import '../../internals/serializable.cjs';
13
13
  import '../../internals/types.cjs';
14
14
  import '../../internals/helpers/guards.cjs';
@@ -8,7 +8,7 @@ import { PythonToolOutput } from './output.js';
8
8
  import { ConnectionOptions } from 'node:tls';
9
9
  import { RunContext } from '../../context.js';
10
10
  import { E as Emitter } from '../../emitter-36-9MnvA.js';
11
- import { m as ChatModel } from '../../chat-D8SVtw5Q.js';
11
+ import { m as ChatModel } from '../../chat-BRuyDeKR.js';
12
12
  import '../../internals/serializable.js';
13
13
  import '../../internals/types.js';
14
14
  import '../../internals/helpers/guards.js';
@@ -3,7 +3,7 @@ import { AssistantMessage } from './backend/message.js';
3
3
  import { Tool, BaseToolRunOptions, StringToolOutput, AnyTool, ToolOutput } from './tools/base.js';
4
4
  import { FrameworkError } from './errors.js';
5
5
  import { PromptTemplate } from './template.js';
6
- import { f as ChatModelUsage, c as ChatModelToolChoice, n as ChatModelOutput } from './chat-D8SVtw5Q.js';
6
+ import { f as ChatModelUsage, c as ChatModelToolChoice, n as ChatModelOutput } from './chat-BRuyDeKR.js';
7
7
  import { B as BaseAgentRunOptions } from './base-CyFx7BRL.js';
8
8
  import { ZodSchema, z } from 'zod';
9
9
  import { ToolCallPart } from 'ai';
@@ -61,23 +61,23 @@ declare const RequirementAgentSystemPromptInputSchema: z.ZodObject<{
61
61
  allowed: z.ZodString;
62
62
  reason: z.ZodOptional<z.ZodString>;
63
63
  }, "strip", z.ZodTypeAny, {
64
+ inputSchema: string;
64
65
  name: string;
65
66
  description: string;
66
- inputSchema: string;
67
67
  allowed: string;
68
68
  reason?: string | undefined;
69
69
  }, {
70
+ inputSchema: string;
70
71
  name: string;
71
72
  description: string;
72
- inputSchema: string;
73
73
  allowed: string;
74
74
  reason?: string | undefined;
75
75
  }>, "many">;
76
76
  }, "strip", z.ZodTypeAny, {
77
77
  tools: {
78
+ inputSchema: string;
78
79
  name: string;
79
80
  description: string;
80
- inputSchema: string;
81
81
  allowed: string;
82
82
  reason?: string | undefined;
83
83
  }[];
@@ -89,9 +89,9 @@ declare const RequirementAgentSystemPromptInputSchema: z.ZodObject<{
89
89
  finalAnswerInstructions?: string | undefined;
90
90
  }, {
91
91
  tools: {
92
+ inputSchema: string;
92
93
  name: string;
93
94
  description: string;
94
- inputSchema: string;
95
95
  allowed: string;
96
96
  reason?: string | undefined;
97
97
  }[];
@@ -127,21 +127,21 @@ declare const RequirementAgentToolNoResultPromptInputSchema: z.ZodObject<{
127
127
  tool: z.ZodOptional<z.ZodAny>;
128
128
  input: z.ZodUnknown;
129
129
  }, "strip", z.ZodTypeAny, {
130
- input?: unknown;
131
130
  tool?: any;
132
- }, {
133
131
  input?: unknown;
132
+ }, {
134
133
  tool?: any;
134
+ input?: unknown;
135
135
  }>;
136
136
  }, "strip", z.ZodTypeAny, {
137
137
  toolCall: {
138
- input?: unknown;
139
138
  tool?: any;
139
+ input?: unknown;
140
140
  };
141
141
  }, {
142
142
  toolCall: {
143
- input?: unknown;
144
143
  tool?: any;
144
+ input?: unknown;
145
145
  };
146
146
  }>;
147
147
  interface RequirementAgentTemplates {
@@ -3,7 +3,7 @@ import { AssistantMessage } from './backend/message.cjs';
3
3
  import { Tool, BaseToolRunOptions, StringToolOutput, AnyTool, ToolOutput } from './tools/base.cjs';
4
4
  import { FrameworkError } from './errors.cjs';
5
5
  import { PromptTemplate } from './template.cjs';
6
- import { f as ChatModelUsage, c as ChatModelToolChoice, n as ChatModelOutput } from './chat-CC0s8z23.cjs';
6
+ import { f as ChatModelUsage, c as ChatModelToolChoice, n as ChatModelOutput } from './chat-BFl85cqt.cjs';
7
7
  import { B as BaseAgentRunOptions } from './base-XfWeXQ-S.cjs';
8
8
  import { ZodSchema, z } from 'zod';
9
9
  import { ToolCallPart } from 'ai';
@@ -61,23 +61,23 @@ declare const RequirementAgentSystemPromptInputSchema: z.ZodObject<{
61
61
  allowed: z.ZodString;
62
62
  reason: z.ZodOptional<z.ZodString>;
63
63
  }, "strip", z.ZodTypeAny, {
64
+ inputSchema: string;
64
65
  name: string;
65
66
  description: string;
66
- inputSchema: string;
67
67
  allowed: string;
68
68
  reason?: string | undefined;
69
69
  }, {
70
+ inputSchema: string;
70
71
  name: string;
71
72
  description: string;
72
- inputSchema: string;
73
73
  allowed: string;
74
74
  reason?: string | undefined;
75
75
  }>, "many">;
76
76
  }, "strip", z.ZodTypeAny, {
77
77
  tools: {
78
+ inputSchema: string;
78
79
  name: string;
79
80
  description: string;
80
- inputSchema: string;
81
81
  allowed: string;
82
82
  reason?: string | undefined;
83
83
  }[];
@@ -89,9 +89,9 @@ declare const RequirementAgentSystemPromptInputSchema: z.ZodObject<{
89
89
  finalAnswerInstructions?: string | undefined;
90
90
  }, {
91
91
  tools: {
92
+ inputSchema: string;
92
93
  name: string;
93
94
  description: string;
94
- inputSchema: string;
95
95
  allowed: string;
96
96
  reason?: string | undefined;
97
97
  }[];
@@ -127,21 +127,21 @@ declare const RequirementAgentToolNoResultPromptInputSchema: z.ZodObject<{
127
127
  tool: z.ZodOptional<z.ZodAny>;
128
128
  input: z.ZodUnknown;
129
129
  }, "strip", z.ZodTypeAny, {
130
- input?: unknown;
131
130
  tool?: any;
132
- }, {
133
131
  input?: unknown;
132
+ }, {
134
133
  tool?: any;
134
+ input?: unknown;
135
135
  }>;
136
136
  }, "strip", z.ZodTypeAny, {
137
137
  toolCall: {
138
- input?: unknown;
139
138
  tool?: any;
139
+ input?: unknown;
140
140
  };
141
141
  }, {
142
142
  toolCall: {
143
- input?: unknown;
144
143
  tool?: any;
144
+ input?: unknown;
145
145
  };
146
146
  }>;
147
147
  interface RequirementAgentTemplates {
package/dist/version.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  exports.Version = "0.0.0";
4
4
  try {
5
- exports.Version = "0.1.24";
5
+ exports.Version = "0.1.26";
6
6
  } catch {
7
7
  }
8
8
  //# sourceMappingURL=version.cjs.map
package/dist/version.js CHANGED
@@ -1,6 +1,6 @@
1
1
  let Version = "0.0.0";
2
2
  try {
3
- Version = "0.1.24";
3
+ Version = "0.1.26";
4
4
  } catch {
5
5
  }
6
6
 
@@ -5,7 +5,7 @@ import { AnyTool } from '../tools/base.cjs';
5
5
  import { ReadOnlyMemory } from '../memory/base.cjs';
6
6
  import { z } from 'zod';
7
7
  import { a as BaseAgent } from '../base-XfWeXQ-S.cjs';
8
- import { m as ChatModel } from '../chat-CC0s8z23.cjs';
8
+ import { m as ChatModel } from '../chat-BFl85cqt.cjs';
9
9
  import { ToolCallingAgentRunInput, ToolCallingAgentRunOutput, ToolCallingAgentRunOptions, ToolCallingAgentExecutionConfig } from '../agents/toolCalling/types.cjs';
10
10
  import '../emitter-jN55XZZq.cjs';
11
11
  import '../internals/types.cjs';
@@ -5,7 +5,7 @@ import { AnyTool } from '../tools/base.js';
5
5
  import { ReadOnlyMemory } from '../memory/base.js';
6
6
  import { z } from 'zod';
7
7
  import { a as BaseAgent } from '../base-CyFx7BRL.js';
8
- import { m as ChatModel } from '../chat-D8SVtw5Q.js';
8
+ import { m as ChatModel } from '../chat-BRuyDeKR.js';
9
9
  import { ToolCallingAgentRunInput, ToolCallingAgentRunOutput, ToolCallingAgentRunOptions, ToolCallingAgentExecutionConfig } from '../agents/toolCalling/types.js';
10
10
  import '../emitter-36-9MnvA.js';
11
11
  import '../internals/types.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "beeai-framework",
3
- "version": "0.1.24",
3
+ "version": "0.1.26",
4
4
  "license": "Apache-2.0",
5
5
  "description": "BeeAI Framework - LLM Agent Framework",
6
6
  "author": "BeeAI a Series of LF Projects, LLC",