beeai-framework 0.1.21 → 0.1.23

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 (335) 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.cjs +1 -2
  50. package/dist/adapters/ollama/backend/chat.cjs.map +1 -1
  51. package/dist/adapters/ollama/backend/chat.d.cts +2 -3
  52. package/dist/adapters/ollama/backend/chat.d.ts +2 -3
  53. package/dist/adapters/ollama/backend/chat.js +1 -2
  54. package/dist/adapters/ollama/backend/chat.js.map +1 -1
  55. package/dist/adapters/ollama/backend/embedding.d.cts +2 -2
  56. package/dist/adapters/ollama/backend/embedding.d.ts +2 -2
  57. package/dist/adapters/openai/backend/chat.d.cts +2 -2
  58. package/dist/adapters/openai/backend/chat.d.ts +2 -2
  59. package/dist/adapters/openai/backend/embedding.d.cts +2 -2
  60. package/dist/adapters/openai/backend/embedding.d.ts +2 -2
  61. package/dist/adapters/vercel/backend/chat.cjs +77 -17
  62. package/dist/adapters/vercel/backend/chat.cjs.map +1 -1
  63. package/dist/adapters/vercel/backend/chat.d.cts +2 -2
  64. package/dist/adapters/vercel/backend/chat.d.ts +2 -2
  65. package/dist/adapters/vercel/backend/chat.js +77 -17
  66. package/dist/adapters/vercel/backend/chat.js.map +1 -1
  67. package/dist/adapters/vercel/backend/embedding.d.cts +2 -2
  68. package/dist/adapters/vercel/backend/embedding.d.ts +2 -2
  69. package/dist/adapters/vercel/backend/utils.cjs +32 -0
  70. package/dist/adapters/vercel/backend/utils.cjs.map +1 -1
  71. package/dist/adapters/vercel/backend/utils.d.cts +6 -4
  72. package/dist/adapters/vercel/backend/utils.d.ts +6 -4
  73. package/dist/adapters/vercel/backend/utils.js +31 -1
  74. package/dist/adapters/vercel/backend/utils.js.map +1 -1
  75. package/dist/adapters/watsonx/backend/chat.cjs +7 -8
  76. package/dist/adapters/watsonx/backend/chat.cjs.map +1 -1
  77. package/dist/adapters/watsonx/backend/chat.d.cts +4 -4
  78. package/dist/adapters/watsonx/backend/chat.d.ts +4 -4
  79. package/dist/adapters/watsonx/backend/chat.js +7 -8
  80. package/dist/adapters/watsonx/backend/chat.js.map +1 -1
  81. package/dist/adapters/watsonx/backend/embedding.d.cts +2 -2
  82. package/dist/adapters/watsonx/backend/embedding.d.ts +2 -2
  83. package/dist/adapters/xai/backend/chat.d.cts +2 -2
  84. package/dist/adapters/xai/backend/chat.d.ts +2 -2
  85. package/dist/{agent-DvvVGvLr.d.cts → agent-BVuc9Nfn.d.cts} +5 -4
  86. package/dist/{agent-CHebzsQB.d.ts → agent-Cuy8Q4gw.d.ts} +5 -4
  87. package/dist/agents/base.cjs +5 -2
  88. package/dist/agents/base.cjs.map +1 -1
  89. package/dist/agents/base.d.cts +2 -2
  90. package/dist/agents/base.d.ts +2 -2
  91. package/dist/agents/base.js +5 -2
  92. package/dist/agents/base.js.map +1 -1
  93. package/dist/agents/experimental/replan/agent.d.cts +3 -3
  94. package/dist/agents/experimental/replan/agent.d.ts +3 -3
  95. package/dist/agents/experimental/replan/prompts.d.cts +1 -1
  96. package/dist/agents/experimental/replan/prompts.d.ts +1 -1
  97. package/dist/agents/experimental/streamlit/agent.d.cts +8 -12
  98. package/dist/agents/experimental/streamlit/agent.d.ts +8 -12
  99. package/dist/agents/react/agent.d.cts +4 -4
  100. package/dist/agents/react/agent.d.ts +4 -4
  101. package/dist/agents/react/runners/base.d.cts +4 -4
  102. package/dist/agents/react/runners/base.d.ts +4 -4
  103. package/dist/agents/react/runners/deep-think/runner.d.cts +4 -4
  104. package/dist/agents/react/runners/deep-think/runner.d.ts +4 -4
  105. package/dist/agents/react/runners/default/runner.d.cts +5 -5
  106. package/dist/agents/react/runners/default/runner.d.ts +5 -5
  107. package/dist/agents/react/runners/granite/runner.d.cts +4 -4
  108. package/dist/agents/react/runners/granite/runner.d.ts +4 -4
  109. package/dist/agents/react/types.d.cts +2 -2
  110. package/dist/agents/react/types.d.ts +2 -2
  111. package/dist/agents/requirement/agent.cjs +162 -0
  112. package/dist/agents/requirement/agent.cjs.map +1 -0
  113. package/dist/agents/requirement/agent.d.cts +29 -0
  114. package/dist/agents/requirement/agent.d.ts +29 -0
  115. package/dist/agents/requirement/agent.js +160 -0
  116. package/dist/agents/requirement/agent.js.map +1 -0
  117. package/dist/agents/requirement/prompts.cjs +95 -0
  118. package/dist/agents/requirement/prompts.cjs.map +1 -0
  119. package/dist/agents/requirement/prompts.d.cts +107 -0
  120. package/dist/agents/requirement/prompts.d.ts +107 -0
  121. package/dist/agents/requirement/prompts.js +90 -0
  122. package/dist/agents/requirement/prompts.js.map +1 -0
  123. package/dist/agents/requirement/requirements/conditional.cjs +190 -0
  124. package/dist/agents/requirement/requirements/conditional.cjs.map +1 -0
  125. package/dist/agents/requirement/requirements/conditional.d.cts +71 -0
  126. package/dist/agents/requirement/requirements/conditional.d.ts +71 -0
  127. package/dist/agents/requirement/requirements/conditional.js +188 -0
  128. package/dist/agents/requirement/requirements/conditional.js.map +1 -0
  129. package/dist/agents/requirement/requirements/requirement.cjs +107 -0
  130. package/dist/agents/requirement/requirements/requirement.cjs.map +1 -0
  131. package/dist/agents/requirement/requirements/requirement.d.cts +59 -0
  132. package/dist/agents/requirement/requirements/requirement.d.ts +59 -0
  133. package/dist/agents/requirement/requirements/requirement.js +104 -0
  134. package/dist/agents/requirement/requirements/requirement.js.map +1 -0
  135. package/dist/agents/requirement/requirements/utils.cjs +74 -0
  136. package/dist/agents/requirement/requirements/utils.cjs.map +1 -0
  137. package/dist/agents/requirement/requirements/utils.d.cts +40 -0
  138. package/dist/agents/requirement/requirements/utils.d.ts +40 -0
  139. package/dist/agents/requirement/requirements/utils.js +69 -0
  140. package/dist/agents/requirement/requirements/utils.js.map +1 -0
  141. package/dist/agents/requirement/runner.cjs +268 -0
  142. package/dist/agents/requirement/runner.cjs.map +1 -0
  143. package/dist/agents/requirement/runner.d.cts +115 -0
  144. package/dist/agents/requirement/runner.d.ts +115 -0
  145. package/dist/agents/requirement/runner.js +266 -0
  146. package/dist/agents/requirement/runner.js.map +1 -0
  147. package/dist/agents/requirement/types.cjs +40 -0
  148. package/dist/agents/requirement/types.cjs.map +1 -0
  149. package/dist/agents/requirement/types.d.cts +24 -0
  150. package/dist/agents/requirement/types.d.ts +24 -0
  151. package/dist/agents/requirement/types.js +35 -0
  152. package/dist/agents/requirement/types.js.map +1 -0
  153. package/dist/agents/requirement/utils/llm.cjs +202 -0
  154. package/dist/agents/requirement/utils/llm.cjs.map +1 -0
  155. package/dist/agents/requirement/utils/llm.d.cts +50 -0
  156. package/dist/agents/requirement/utils/llm.d.ts +50 -0
  157. package/dist/agents/requirement/utils/llm.js +199 -0
  158. package/dist/agents/requirement/utils/llm.js.map +1 -0
  159. package/dist/agents/requirement/utils/tool.cjs +95 -0
  160. package/dist/agents/requirement/utils/tool.cjs.map +1 -0
  161. package/dist/agents/requirement/utils/tool.d.cts +24 -0
  162. package/dist/agents/requirement/utils/tool.d.ts +24 -0
  163. package/dist/agents/requirement/utils/tool.js +92 -0
  164. package/dist/agents/requirement/utils/tool.js.map +1 -0
  165. package/dist/agents/requirement/utils/toolCallChecker.cjs +61 -0
  166. package/dist/agents/requirement/utils/toolCallChecker.cjs.map +1 -0
  167. package/dist/agents/requirement/utils/toolCallChecker.d.cts +28 -0
  168. package/dist/agents/requirement/utils/toolCallChecker.d.ts +28 -0
  169. package/dist/agents/requirement/utils/toolCallChecker.js +59 -0
  170. package/dist/agents/requirement/utils/toolCallChecker.js.map +1 -0
  171. package/dist/agents/toolCalling/agent.cjs +4 -1
  172. package/dist/agents/toolCalling/agent.cjs.map +1 -1
  173. package/dist/agents/toolCalling/agent.d.cts +11 -12
  174. package/dist/agents/toolCalling/agent.d.ts +11 -12
  175. package/dist/agents/toolCalling/agent.js +5 -2
  176. package/dist/agents/toolCalling/agent.js.map +1 -1
  177. package/dist/agents/toolCalling/types.d.cts +1 -1
  178. package/dist/agents/toolCalling/types.d.ts +1 -1
  179. package/dist/agents/types.d.cts +2 -2
  180. package/dist/agents/types.d.ts +2 -2
  181. package/dist/backend/backend.d.cts +2 -2
  182. package/dist/backend/backend.d.ts +2 -2
  183. package/dist/backend/chat.cjs +122 -4
  184. package/dist/backend/chat.cjs.map +1 -1
  185. package/dist/backend/chat.d.cts +3 -3
  186. package/dist/backend/chat.d.ts +3 -3
  187. package/dist/backend/chat.js +123 -5
  188. package/dist/backend/chat.js.map +1 -1
  189. package/dist/backend/core.d.cts +3 -3
  190. package/dist/backend/core.d.ts +3 -3
  191. package/dist/backend/embedding.d.cts +2 -2
  192. package/dist/backend/embedding.d.ts +2 -2
  193. package/dist/backend/message.cjs +20 -13
  194. package/dist/backend/message.cjs.map +1 -1
  195. package/dist/backend/message.d.cts +7 -3
  196. package/dist/backend/message.d.ts +7 -3
  197. package/dist/backend/message.js +20 -13
  198. package/dist/backend/message.js.map +1 -1
  199. package/dist/backend/utils.d.cts +2 -2
  200. package/dist/backend/utils.d.ts +2 -2
  201. package/dist/{base-BQgDlcGa.d.ts → base-CyFx7BRL.d.ts} +5 -3
  202. package/dist/{base-CwcxwybB.d.cts → base-XfWeXQ-S.d.cts} +5 -3
  203. package/dist/{chat-CRb3vUVg.d.cts → chat-BOb9n7AJ.d.cts} +7 -8
  204. package/dist/{chat-C0s-o6ll.d.ts → chat-DrqwUgD8.d.ts} +7 -8
  205. package/dist/context.cjs +22 -5
  206. package/dist/context.cjs.map +1 -1
  207. package/dist/context.d.cts +19 -6
  208. package/dist/context.d.ts +19 -6
  209. package/dist/context.js +23 -7
  210. package/dist/context.js.map +1 -1
  211. package/dist/emitter/emitter.cjs +21 -14
  212. package/dist/emitter/emitter.cjs.map +1 -1
  213. package/dist/emitter/emitter.d.cts +1 -1
  214. package/dist/emitter/emitter.d.ts +1 -1
  215. package/dist/emitter/emitter.js +21 -14
  216. package/dist/emitter/emitter.js.map +1 -1
  217. package/dist/emitter/types.d.cts +1 -1
  218. package/dist/emitter/types.d.ts +1 -1
  219. package/dist/{emitter-CZFbzlUi.d.ts → emitter-36-9MnvA.d.ts} +4 -3
  220. package/dist/{emitter-DpqUYjXH.d.cts → emitter-jN55XZZq.d.cts} +4 -3
  221. package/dist/index.d.cts +5 -5
  222. package/dist/index.d.ts +5 -5
  223. package/dist/internals/fetcher.d.cts +1 -1
  224. package/dist/internals/fetcher.d.ts +1 -1
  225. package/dist/internals/helpers/prototype.cjs +5 -0
  226. package/dist/internals/helpers/prototype.cjs.map +1 -1
  227. package/dist/internals/helpers/prototype.d.cts +2 -1
  228. package/dist/internals/helpers/prototype.d.ts +2 -1
  229. package/dist/internals/helpers/prototype.js +5 -1
  230. package/dist/internals/helpers/prototype.js.map +1 -1
  231. package/dist/internals/types.cjs.map +1 -1
  232. package/dist/internals/types.d.cts +1 -1
  233. package/dist/internals/types.d.ts +1 -1
  234. package/dist/internals/types.js.map +1 -1
  235. package/dist/memory/summarizeMemory.d.cts +2 -2
  236. package/dist/memory/summarizeMemory.d.ts +2 -2
  237. package/dist/middleware/streamToolCall.cjs +132 -0
  238. package/dist/middleware/streamToolCall.cjs.map +1 -0
  239. package/dist/middleware/streamToolCall.d.cts +94 -0
  240. package/dist/middleware/streamToolCall.d.ts +94 -0
  241. package/dist/middleware/streamToolCall.js +130 -0
  242. package/dist/middleware/streamToolCall.js.map +1 -0
  243. package/dist/middleware/trajectory.cjs +331 -0
  244. package/dist/middleware/trajectory.cjs.map +1 -0
  245. package/dist/middleware/trajectory.d.cts +115 -0
  246. package/dist/middleware/trajectory.d.ts +115 -0
  247. package/dist/middleware/trajectory.js +329 -0
  248. package/dist/middleware/trajectory.js.map +1 -0
  249. package/dist/parsers/linePrefix.d.cts +1 -1
  250. package/dist/parsers/linePrefix.d.ts +1 -1
  251. package/dist/serializer/serializer.cjs +5 -4
  252. package/dist/serializer/serializer.cjs.map +1 -1
  253. package/dist/serializer/serializer.d.cts +1 -1
  254. package/dist/serializer/serializer.d.ts +1 -1
  255. package/dist/serializer/serializer.js +5 -4
  256. package/dist/serializer/serializer.js.map +1 -1
  257. package/dist/serializer/utils.cjs +3 -0
  258. package/dist/serializer/utils.cjs.map +1 -1
  259. package/dist/serializer/utils.d.cts +1 -1
  260. package/dist/serializer/utils.d.ts +1 -1
  261. package/dist/serializer/utils.js +3 -0
  262. package/dist/serializer/utils.js.map +1 -1
  263. package/dist/{serializer-CQxucveV.d.ts → serializer-53t8gGQa.d.ts} +3 -2
  264. package/dist/{serializer-BKn50Vnx.d.cts → serializer-c51B2z6d.d.cts} +3 -2
  265. package/dist/template.cjs +20 -0
  266. package/dist/template.cjs.map +1 -1
  267. package/dist/template.d.cts +1 -0
  268. package/dist/template.d.ts +1 -0
  269. package/dist/template.js +20 -0
  270. package/dist/template.js.map +1 -1
  271. package/dist/tools/arxiv.d.cts +1 -1
  272. package/dist/tools/arxiv.d.ts +1 -1
  273. package/dist/tools/base.cjs.map +1 -1
  274. package/dist/tools/base.d.cts +3 -2
  275. package/dist/tools/base.d.ts +3 -2
  276. package/dist/tools/base.js.map +1 -1
  277. package/dist/tools/calculator.d.cts +1 -1
  278. package/dist/tools/calculator.d.ts +1 -1
  279. package/dist/tools/custom.d.cts +2 -2
  280. package/dist/tools/custom.d.ts +2 -2
  281. package/dist/tools/database/elasticsearch.d.cts +1 -1
  282. package/dist/tools/database/elasticsearch.d.ts +1 -1
  283. package/dist/tools/database/milvus.d.cts +3 -3
  284. package/dist/tools/database/milvus.d.ts +3 -3
  285. package/dist/tools/database/qdrant.d.cts +1 -1
  286. package/dist/tools/database/qdrant.d.ts +1 -1
  287. package/dist/tools/database/sql.d.cts +1 -1
  288. package/dist/tools/database/sql.d.ts +1 -1
  289. package/dist/tools/handoff.cjs +68 -0
  290. package/dist/tools/handoff.cjs.map +1 -0
  291. package/dist/tools/handoff.d.cts +47 -0
  292. package/dist/tools/handoff.d.ts +47 -0
  293. package/dist/tools/handoff.js +66 -0
  294. package/dist/tools/handoff.js.map +1 -0
  295. package/dist/tools/llm.d.cts +2 -2
  296. package/dist/tools/llm.d.ts +2 -2
  297. package/dist/tools/mcp.d.cts +1 -1
  298. package/dist/tools/mcp.d.ts +1 -1
  299. package/dist/tools/openapi.d.cts +1 -1
  300. package/dist/tools/openapi.d.ts +1 -1
  301. package/dist/tools/python/output.d.cts +1 -1
  302. package/dist/tools/python/output.d.ts +1 -1
  303. package/dist/tools/python/python.d.cts +2 -2
  304. package/dist/tools/python/python.d.ts +2 -2
  305. package/dist/tools/search/base.d.cts +1 -1
  306. package/dist/tools/search/base.d.ts +1 -1
  307. package/dist/tools/search/duckDuckGoSearch.d.cts +1 -1
  308. package/dist/tools/search/duckDuckGoSearch.d.ts +1 -1
  309. package/dist/tools/search/googleSearch.d.cts +1 -1
  310. package/dist/tools/search/googleSearch.d.ts +1 -1
  311. package/dist/tools/search/searXNGSearch.d.cts +1 -1
  312. package/dist/tools/search/searXNGSearch.d.ts +1 -1
  313. package/dist/tools/search/wikipedia.d.cts +1 -1
  314. package/dist/tools/search/wikipedia.d.ts +1 -1
  315. package/dist/tools/similarity.d.cts +1 -1
  316. package/dist/tools/similarity.d.ts +1 -1
  317. package/dist/tools/think.cjs +52 -0
  318. package/dist/tools/think.cjs.map +1 -0
  319. package/dist/tools/think.d.cts +47 -0
  320. package/dist/tools/think.d.ts +47 -0
  321. package/dist/tools/think.js +50 -0
  322. package/dist/tools/think.js.map +1 -0
  323. package/dist/tools/weather/openMeteo.d.cts +1 -1
  324. package/dist/tools/weather/openMeteo.d.ts +1 -1
  325. package/dist/tools/web/webCrawler.d.cts +1 -1
  326. package/dist/tools/web/webCrawler.d.ts +1 -1
  327. package/dist/types-CJwiMH3u.d.ts +213 -0
  328. package/dist/types-W0QttuP_.d.cts +213 -0
  329. package/dist/version.cjs +1 -1
  330. package/dist/version.js +1 -1
  331. package/dist/workflows/agent.d.cts +3 -3
  332. package/dist/workflows/agent.d.ts +3 -3
  333. package/dist/workflows/workflow.d.cts +1 -1
  334. package/dist/workflows/workflow.d.ts +1 -1
  335. package/package.json +11 -11
@@ -50,7 +50,11 @@ class VercelChatModel extends chat_cjs.ChatModel {
50
50
  }, run);
51
51
  return output;
52
52
  }
53
- const { finishReason, usage, response: { messages } } = await ai.generateText(await this.transformInput(input));
53
+ const { finishReason, usage, response: { messages } } = await ai.generateText({
54
+ temperature: 0,
55
+ ...await this.transformInput(input),
56
+ abortSignal: run.signal
57
+ });
54
58
  return new chat_cjs.ChatModelOutput(this.transformMessages(messages), utils_cjs.extractTokenUsage(usage), finishReason);
55
59
  }
56
60
  async _createStructure({ schema, ...input }, run) {
@@ -58,7 +62,6 @@ class VercelChatModel extends chat_cjs.ChatModel {
58
62
  temperature: 0,
59
63
  ...await this.transformInput(input),
60
64
  abortSignal: run.signal,
61
- model: this.model,
62
65
  ...schema instanceof zod.ZodSchema ? {
63
66
  schema,
64
67
  output: (schema._input || schema) instanceof zod.ZodArray ? "array" : (schema._input || schema) instanceof zod.ZodEnum ? "enum" : "object"
@@ -76,6 +79,15 @@ class VercelChatModel extends chat_cjs.ChatModel {
76
79
  };
77
80
  }
78
81
  async *_createStream(input, run) {
82
+ const responseFormat = input.responseFormat;
83
+ if (responseFormat && (responseFormat instanceof zod.ZodSchema || responseFormat.schema)) {
84
+ const { output } = await this._createStructure({
85
+ ...input,
86
+ schema: responseFormat
87
+ }, run);
88
+ yield output;
89
+ return;
90
+ }
79
91
  if (!this.supportsToolStreaming && !remeda.isEmpty(input.tools ?? [])) {
80
92
  const response = await this._create(input, run);
81
93
  yield response;
@@ -85,45 +97,91 @@ class VercelChatModel extends chat_cjs.ChatModel {
85
97
  ...await this.transformInput(input),
86
98
  abortSignal: run.signal
87
99
  });
88
- let lastChunk = null;
100
+ let streamEmpty = true;
101
+ const streamedToolCalls = /* @__PURE__ */ new Map();
89
102
  for await (const event of fullStream) {
90
103
  let message;
91
104
  switch (event.type) {
92
105
  case "text-delta":
93
- message = new message_cjs.AssistantMessage(event.text);
106
+ streamEmpty = false;
107
+ message = new message_cjs.AssistantMessage(event.text, {}, event.id);
108
+ yield new chat_cjs.ChatModelOutput([
109
+ message
110
+ ]);
111
+ break;
112
+ case "text-end":
113
+ streamEmpty = false;
114
+ break;
115
+ case "tool-input-start": {
116
+ if (!input.streamPartialToolCalls) {
117
+ break;
118
+ }
119
+ const chunk = {
120
+ type: "tool-call",
121
+ toolName: event.toolName,
122
+ toolCallId: event.id,
123
+ input: ""
124
+ };
125
+ streamedToolCalls.set(event.id, chunk);
126
+ const message2 = new message_cjs.AssistantMessage(chunk, {}, event.id);
127
+ yield new chat_cjs.ChatModelOutput([
128
+ message2
129
+ ]);
130
+ break;
131
+ }
132
+ case "tool-input-delta": {
133
+ if (!input.streamPartialToolCalls) {
134
+ break;
135
+ }
136
+ if (event.delta) {
137
+ const chunk = streamedToolCalls.get(event.id);
138
+ const message2 = new message_cjs.AssistantMessage({
139
+ ...chunk,
140
+ input: event.delta
141
+ }, {}, event.id);
142
+ yield new chat_cjs.ChatModelOutput([
143
+ message2
144
+ ]);
145
+ }
94
146
  break;
95
- case "tool-call":
147
+ }
148
+ case "tool-call": {
149
+ streamEmpty = false;
150
+ const existingToolCall = streamedToolCalls.get(event.toolCallId);
151
+ if (existingToolCall) {
152
+ streamedToolCalls.delete(event.toolCallId);
153
+ break;
154
+ }
96
155
  message = new message_cjs.AssistantMessage({
97
156
  type: event.type,
98
157
  toolCallId: event.toolCallId,
99
158
  toolName: event.toolName,
100
159
  input: event.input
101
- });
160
+ }, {}, event.toolCallId);
161
+ yield new chat_cjs.ChatModelOutput([
162
+ message
163
+ ]);
102
164
  break;
165
+ }
103
166
  case "error":
104
167
  throw new errors_cjs$1.ChatModelError("Unhandled error", [
105
168
  event.error
106
169
  ]);
107
170
  case "tool-result":
171
+ streamEmpty = false;
108
172
  message = new message_cjs.ToolMessage({
109
173
  type: event.type,
110
174
  toolCallId: event.toolCallId,
111
175
  toolName: event.toolName,
112
176
  output: event.output
113
- });
114
- break;
115
- case "abort":
116
- message = new message_cjs.AssistantMessage([]);
177
+ }, {}, `tool_result_${event.toolCallId}`);
178
+ yield new chat_cjs.ChatModelOutput([
179
+ message
180
+ ]);
117
181
  break;
118
- default:
119
- continue;
120
182
  }
121
- lastChunk = new chat_cjs.ChatModelOutput([
122
- message
123
- ]);
124
- yield lastChunk;
125
183
  }
126
- if (!lastChunk) {
184
+ if (streamEmpty) {
127
185
  throw new errors_cjs$1.ChatModelError("No chunks have been received!");
128
186
  }
129
187
  try {
@@ -132,8 +190,10 @@ class VercelChatModel extends chat_cjs.ChatModel {
132
190
  finishReasonPromise,
133
191
  responsePromise
134
192
  ]);
193
+ const lastChunk = new chat_cjs.ChatModelOutput([]);
135
194
  lastChunk.usage = utils_cjs.extractTokenUsage(usage);
136
195
  lastChunk.finishReason = finishReason;
196
+ yield lastChunk;
137
197
  } catch (e) {
138
198
  if (!run.signal.aborted) {
139
199
  throw e;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/adapters/vercel/backend/chat.ts"],"names":["VercelChatModel","ChatModel","emitter","supportsToolStreaming","model","modelId","ValueError","Emitter","root","child","namespace","providerId","creator","provider","split","toCamelCase","_create","input","run","responseFormat","ZodSchema","schema","output","_createStructure","finishReason","usage","response","messages","generateText","transformInput","ChatModelOutput","transformMessages","extractTokenUsage","generateObject","temperature","abortSignal","signal","_input","ZodArray","ZodEnum","jsonSchema","z","any","schemaName","name","schemaDescription","description","object","AssistantMessage","JSON","stringify","_createStream","isEmpty","tools","fullStream","usagePromise","finishReasonPromise","responsePromise","streamText","lastChunk","event","message","type","text","toolCallId","toolName","ChatModelError","error","ToolMessage","_","Promise","all","e","aborted","map","tool","inputSchema","getInputJsonSchema","msg","CustomMessage","encodeCustomMessage","role","content","UserMessage","SystemMessage","part","join","toolChoice","Tool","toolChoiceSupport","includes","logger","warn","parameters","mapToObj","flatMap","providerOptions","createSnapshot","loadSnapshot","snapshot","instance","fromName","Error","destroy","Object","assign"],"mappings":"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","file":"chat.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n ChatModelInput,\n ChatModel,\n ChatModelOutput,\n ChatModelEvents,\n ChatModelObjectInput,\n ChatModelObjectOutput,\n} from \"@/backend/chat.js\";\nimport {\n CoreAssistantMessage,\n ModelMessage,\n CoreToolMessage,\n generateObject,\n generateText,\n jsonSchema,\n LanguageModel as _LanguageModel,\n streamText,\n TextPart,\n ToolCallPart,\n ToolChoice,\n} from \"ai\";\ntype LanguageModelV2 = Exclude<_LanguageModel, string>;\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport {\n AssistantMessage,\n CustomMessage,\n Message,\n SystemMessage,\n ToolMessage,\n UserMessage,\n} from \"@/backend/message.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { isEmpty, mapToObj, toCamelCase } from \"remeda\";\nimport { FullModelName } from \"@/backend/utils.js\";\nimport { ChatModelError } from \"@/backend/errors.js\";\nimport { z, ZodArray, ZodEnum, ZodSchema } from \"zod\";\nimport { Tool } from \"@/tools/base.js\";\nimport { encodeCustomMessage, extractTokenUsage } from \"@/adapters/vercel/backend/utils.js\";\n\nexport abstract class VercelChatModel<\n M extends LanguageModelV2 = LanguageModelV2,\n> extends ChatModel {\n public readonly emitter: Emitter<ChatModelEvents>;\n public readonly supportsToolStreaming: boolean = true;\n\n constructor(private readonly model: M) {\n super();\n if (!this.modelId) {\n throw new ValueError(\"No modelId has been provided!\");\n }\n this.emitter = Emitter.root.child({\n namespace: [\"backend\", this.providerId, \"chat\"],\n creator: this,\n });\n }\n\n get modelId(): string {\n return this.model.modelId;\n }\n\n get providerId(): string {\n const provider = this.model.provider.split(\".\")[0].split(\"-\")[0];\n return toCamelCase(provider);\n }\n\n protected async _create(input: ChatModelInput, run: GetRunContext<this>) {\n const responseFormat = input.responseFormat;\n if (responseFormat && (responseFormat instanceof ZodSchema || responseFormat.schema)) {\n const { output } = await this._createStructure(\n {\n ...input,\n schema: responseFormat,\n },\n run,\n );\n return output;\n }\n\n const {\n finishReason,\n usage,\n response: { messages },\n } = await generateText(await this.transformInput(input));\n\n return new ChatModelOutput(\n this.transformMessages(messages),\n extractTokenUsage(usage),\n finishReason,\n );\n }\n\n protected async _createStructure<T>(\n { schema, ...input }: ChatModelObjectInput<T>,\n run: GetRunContext<this>,\n ): Promise<ChatModelObjectOutput<T>> {\n const response = await generateObject({\n temperature: 0,\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n model: this.model,\n ...(schema instanceof ZodSchema\n ? {\n schema,\n output: ((schema._input || schema) instanceof ZodArray\n ? \"array\"\n : (schema._input || schema) instanceof ZodEnum\n ? \"enum\"\n : \"object\") as any,\n }\n : {\n schema: schema.schema ? jsonSchema<T>(schema.schema) : z.any(),\n schemaName: schema.name,\n schemaDescription: schema.description,\n }),\n });\n\n return {\n object: response.object as T,\n output: new ChatModelOutput(\n [new AssistantMessage(JSON.stringify(response.object, null, 2))],\n extractTokenUsage(response.usage),\n response.finishReason,\n ),\n };\n }\n\n async *_createStream(input: ChatModelInput, run: GetRunContext<this>) {\n if (!this.supportsToolStreaming && !isEmpty(input.tools ?? [])) {\n const response = await this._create(input, run);\n yield response;\n return;\n }\n\n const {\n fullStream,\n usage: usagePromise,\n finishReason: finishReasonPromise,\n response: responsePromise,\n } = streamText({\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n });\n\n let lastChunk: ChatModelOutput | null = null;\n for await (const event of fullStream) {\n let message: Message;\n switch (event.type) {\n case \"text-delta\":\n message = new AssistantMessage(event.text);\n break;\n case \"tool-call\":\n message = new AssistantMessage({\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n input: event.input,\n });\n break;\n case \"error\":\n throw new ChatModelError(\"Unhandled error\", [event.error as Error]);\n case \"tool-result\":\n message = new ToolMessage({\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n output: event.output as any,\n });\n break;\n case \"abort\":\n message = new AssistantMessage([]);\n break;\n default:\n continue;\n }\n lastChunk = new ChatModelOutput([message]);\n yield lastChunk;\n }\n\n if (!lastChunk) {\n throw new ChatModelError(\"No chunks have been received!\");\n }\n\n try {\n const [usage, finishReason, _] = await Promise.all([\n usagePromise,\n finishReasonPromise,\n responsePromise,\n ]);\n lastChunk.usage = extractTokenUsage(usage);\n lastChunk.finishReason = finishReason;\n } catch (e) {\n if (!run.signal.aborted) {\n throw e;\n }\n }\n }\n\n protected async transformInput(\n input: ChatModelInput,\n ): Promise<Parameters<typeof generateText<Record<string, any>>>[0]> {\n const tools = await Promise.all(\n (input.tools ?? []).map(async (tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: jsonSchema(await tool.getInputJsonSchema()),\n })),\n );\n\n const messages = input.messages.map((msg): ModelMessage => {\n if (msg instanceof CustomMessage) {\n msg = encodeCustomMessage(msg);\n }\n\n if (msg instanceof AssistantMessage) {\n return { role: \"assistant\", content: msg.content };\n } else if (msg instanceof ToolMessage) {\n return { role: \"tool\", content: msg.content };\n } else if (msg instanceof UserMessage) {\n return { role: \"user\", content: msg.content };\n } else if (msg instanceof SystemMessage) {\n return { role: \"system\", content: msg.content.map((part) => part.text).join(\"\\n\") };\n }\n return { role: msg.role, content: msg.content } as ModelMessage;\n });\n\n let toolChoice: ToolChoice<Record<string, any>> | undefined;\n if (input.toolChoice && input.toolChoice instanceof Tool) {\n if (this.toolChoiceSupport.includes(\"single\")) {\n toolChoice = {\n type: \"tool\",\n toolName: input.toolChoice.name,\n };\n } else {\n this.logger.warn(`The single tool choice is not supported.`);\n }\n } else if (input.toolChoice) {\n if (this.toolChoiceSupport.includes(input.toolChoice)) {\n toolChoice = input.toolChoice;\n } else {\n this.logger.warn(`The following tool choice value '${input.toolChoice}' is not supported.`);\n }\n }\n\n return {\n ...this.parameters,\n ...input,\n toolChoice,\n model: this.model,\n tools: mapToObj(tools, ({ name, ...tool }) => [name, tool]),\n messages,\n };\n }\n\n protected transformMessages(messages: (CoreAssistantMessage | CoreToolMessage)[]): Message[] {\n return messages.flatMap((msg) => {\n if (msg.role === \"tool\") {\n return new ToolMessage(msg.content, msg.providerOptions);\n }\n return new AssistantMessage(\n msg.content as TextPart | ToolCallPart | string,\n msg.providerOptions,\n );\n });\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n providerId: this.providerId,\n modelId: this.modelId,\n supportsToolStreaming: this.supportsToolStreaming,\n };\n }\n\n async loadSnapshot({ providerId, modelId, ...snapshot }: ReturnType<typeof this.createSnapshot>) {\n const instance = await ChatModel.fromName(`${providerId}:${modelId}` as FullModelName);\n if (!(instance instanceof VercelChatModel)) {\n throw new Error(\"Incorrect deserialization!\");\n }\n instance.destroy();\n Object.assign(this, {\n ...snapshot,\n model: instance.model,\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/adapters/vercel/backend/chat.ts"],"names":["VercelChatModel","ChatModel","emitter","supportsToolStreaming","model","modelId","ValueError","Emitter","root","child","namespace","providerId","creator","provider","split","toCamelCase","_create","input","run","responseFormat","ZodSchema","schema","output","_createStructure","finishReason","usage","response","messages","generateText","temperature","transformInput","abortSignal","signal","ChatModelOutput","transformMessages","extractTokenUsage","generateObject","_input","ZodArray","ZodEnum","jsonSchema","z","any","schemaName","name","schemaDescription","description","object","AssistantMessage","JSON","stringify","_createStream","isEmpty","tools","fullStream","usagePromise","finishReasonPromise","responsePromise","streamText","streamEmpty","streamedToolCalls","Map","event","message","type","text","id","streamPartialToolCalls","chunk","toolName","toolCallId","set","delta","get","existingToolCall","delete","ChatModelError","error","ToolMessage","_","Promise","all","lastChunk","e","aborted","map","tool","inputSchema","getInputJsonSchema","msg","CustomMessage","encodeCustomMessage","role","content","UserMessage","SystemMessage","part","join","toolChoice","Tool","toolChoiceSupport","includes","logger","warn","parameters","mapToObj","flatMap","providerOptions","createSnapshot","loadSnapshot","snapshot","instance","fromName","Error","destroy","Object","assign"],"mappings":"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","file":"chat.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n ChatModelInput,\n ChatModel,\n ChatModelOutput,\n ChatModelEvents,\n ChatModelObjectInput,\n ChatModelObjectOutput,\n} from \"@/backend/chat.js\";\nimport {\n CoreAssistantMessage,\n ModelMessage,\n CoreToolMessage,\n generateObject,\n generateText,\n jsonSchema,\n LanguageModel as _LanguageModel,\n streamText,\n TextPart,\n ToolCallPart,\n ToolChoice,\n} from \"ai\";\ntype LanguageModelV2 = Exclude<_LanguageModel, string>;\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport {\n AssistantMessage,\n CustomMessage,\n Message,\n SystemMessage,\n ToolMessage,\n UserMessage,\n} from \"@/backend/message.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { isEmpty, mapToObj, toCamelCase } from \"remeda\";\nimport { FullModelName } from \"@/backend/utils.js\";\nimport { ChatModelError } from \"@/backend/errors.js\";\nimport { z, ZodArray, ZodEnum, ZodSchema } from \"zod\";\nimport { Tool } from \"@/tools/base.js\";\nimport { encodeCustomMessage, extractTokenUsage } from \"@/adapters/vercel/backend/utils.js\";\n\nexport abstract class VercelChatModel<\n M extends LanguageModelV2 = LanguageModelV2,\n> extends ChatModel {\n public readonly emitter: Emitter<ChatModelEvents>;\n public readonly supportsToolStreaming: boolean = true;\n\n constructor(private readonly model: M) {\n super();\n if (!this.modelId) {\n throw new ValueError(\"No modelId has been provided!\");\n }\n this.emitter = Emitter.root.child({\n namespace: [\"backend\", this.providerId, \"chat\"],\n creator: this,\n });\n }\n\n get modelId(): string {\n return this.model.modelId;\n }\n\n get providerId(): string {\n const provider = this.model.provider.split(\".\")[0].split(\"-\")[0];\n return toCamelCase(provider);\n }\n\n protected async _create(input: ChatModelInput, run: GetRunContext<this>) {\n const responseFormat = input.responseFormat;\n if (responseFormat && (responseFormat instanceof ZodSchema || responseFormat.schema)) {\n const { output } = await this._createStructure(\n {\n ...input,\n schema: responseFormat,\n },\n run,\n );\n return output;\n }\n\n const {\n finishReason,\n usage,\n response: { messages },\n } = await generateText({\n temperature: 0,\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n });\n\n return new ChatModelOutput(\n this.transformMessages(messages),\n extractTokenUsage(usage),\n finishReason,\n );\n }\n\n protected async _createStructure<T>(\n { schema, ...input }: ChatModelObjectInput<T>,\n run: GetRunContext<this>,\n ): Promise<ChatModelObjectOutput<T>> {\n const response = await generateObject({\n temperature: 0,\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n ...(schema instanceof ZodSchema\n ? {\n schema,\n output: ((schema._input || schema) instanceof ZodArray\n ? \"array\"\n : (schema._input || schema) instanceof ZodEnum\n ? \"enum\"\n : \"object\") as any,\n }\n : {\n schema: schema.schema ? jsonSchema<T>(schema.schema) : z.any(),\n schemaName: schema.name,\n schemaDescription: schema.description,\n }),\n });\n\n return {\n object: response.object as T,\n output: new ChatModelOutput(\n [new AssistantMessage(JSON.stringify(response.object, null, 2))],\n extractTokenUsage(response.usage),\n response.finishReason,\n ),\n };\n }\n\n async *_createStream(input: ChatModelInput, run: GetRunContext<this>) {\n const responseFormat = input.responseFormat;\n if (responseFormat && (responseFormat instanceof ZodSchema || responseFormat.schema)) {\n const { output } = await this._createStructure(\n {\n ...input,\n schema: responseFormat,\n },\n run,\n );\n yield output;\n return;\n }\n\n if (!this.supportsToolStreaming && !isEmpty(input.tools ?? [])) {\n const response = await this._create(input, run);\n yield response;\n return;\n }\n\n const {\n fullStream,\n usage: usagePromise,\n finishReason: finishReasonPromise,\n response: responsePromise,\n } = streamText({\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n });\n\n let streamEmpty = true;\n const streamedToolCalls = new Map<string, ToolCallPart>();\n for await (const event of fullStream) {\n let message: Message;\n switch (event.type) {\n case \"text-delta\":\n streamEmpty = false;\n message = new AssistantMessage(event.text, {}, event.id);\n yield new ChatModelOutput([message]);\n break;\n case \"text-end\":\n streamEmpty = false;\n break;\n case \"tool-input-start\": {\n if (!input.streamPartialToolCalls) {\n break;\n }\n\n const chunk: ToolCallPart = {\n type: \"tool-call\",\n toolName: event.toolName,\n toolCallId: event.id,\n input: \"\",\n };\n streamedToolCalls.set(event.id, chunk);\n const message = new AssistantMessage(chunk, {}, event.id);\n yield new ChatModelOutput([message]);\n break;\n }\n case \"tool-input-delta\": {\n if (!input.streamPartialToolCalls) {\n break;\n }\n\n if (event.delta) {\n const chunk = streamedToolCalls.get(event.id)!;\n const message = new AssistantMessage({ ...chunk, input: event.delta }, {}, event.id);\n yield new ChatModelOutput([message]);\n }\n break;\n }\n case \"tool-call\": {\n streamEmpty = false;\n const existingToolCall = streamedToolCalls.get(event.toolCallId);\n if (existingToolCall) {\n streamedToolCalls.delete(event.toolCallId);\n break;\n }\n message = new AssistantMessage(\n {\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n input: event.input,\n },\n {},\n event.toolCallId,\n );\n yield new ChatModelOutput([message]);\n break;\n }\n case \"error\":\n throw new ChatModelError(\"Unhandled error\", [event.error as Error]);\n case \"tool-result\":\n streamEmpty = false;\n message = new ToolMessage(\n {\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n output: event.output as any,\n },\n {},\n `tool_result_${event.toolCallId}`,\n );\n yield new ChatModelOutput([message]);\n break;\n case \"abort\":\n break;\n default:\n break;\n }\n }\n\n if (streamEmpty) {\n throw new ChatModelError(\"No chunks have been received!\");\n }\n\n try {\n const [usage, finishReason, _] = await Promise.all([\n usagePromise,\n finishReasonPromise,\n responsePromise,\n ]);\n const lastChunk = new ChatModelOutput([]);\n lastChunk.usage = extractTokenUsage(usage);\n lastChunk.finishReason = finishReason;\n yield lastChunk;\n } catch (e) {\n if (!run.signal.aborted) {\n throw e;\n }\n }\n }\n\n protected async transformInput(\n input: ChatModelInput,\n ): Promise<Parameters<typeof generateText<Record<string, any>>>[0]> {\n const tools = await Promise.all(\n (input.tools ?? []).map(async (tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: jsonSchema(await tool.getInputJsonSchema()),\n })),\n );\n\n const messages = input.messages.map((msg): ModelMessage => {\n if (msg instanceof CustomMessage) {\n msg = encodeCustomMessage(msg);\n }\n\n if (msg instanceof AssistantMessage) {\n return { role: \"assistant\", content: msg.content };\n } else if (msg instanceof ToolMessage) {\n return { role: \"tool\", content: msg.content };\n } else if (msg instanceof UserMessage) {\n return { role: \"user\", content: msg.content };\n } else if (msg instanceof SystemMessage) {\n return { role: \"system\", content: msg.content.map((part) => part.text).join(\"\\n\") };\n }\n return { role: msg.role, content: msg.content } as ModelMessage;\n });\n\n let toolChoice: ToolChoice<Record<string, any>> | undefined;\n if (input.toolChoice && input.toolChoice instanceof Tool) {\n if (this.toolChoiceSupport.includes(\"single\")) {\n toolChoice = {\n type: \"tool\",\n toolName: input.toolChoice.name,\n };\n } else {\n this.logger.warn(`The single tool choice is not supported.`);\n }\n } else if (input.toolChoice) {\n if (this.toolChoiceSupport.includes(input.toolChoice)) {\n toolChoice = input.toolChoice;\n } else {\n this.logger.warn(`The following tool choice value '${input.toolChoice}' is not supported.`);\n }\n }\n\n return {\n ...this.parameters,\n ...input,\n toolChoice,\n model: this.model,\n tools: mapToObj(tools, ({ name, ...tool }) => [name, tool]),\n messages,\n };\n }\n\n protected transformMessages(messages: (CoreAssistantMessage | CoreToolMessage)[]): Message[] {\n return messages.flatMap((msg) => {\n if (msg.role === \"tool\") {\n return new ToolMessage(msg.content, msg.providerOptions);\n }\n return new AssistantMessage(\n msg.content as TextPart | ToolCallPart | string,\n msg.providerOptions,\n );\n });\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n providerId: this.providerId,\n modelId: this.modelId,\n supportsToolStreaming: this.supportsToolStreaming,\n };\n }\n\n async loadSnapshot({ providerId, modelId, ...snapshot }: ReturnType<typeof this.createSnapshot>) {\n const instance = await ChatModel.fromName(`${providerId}:${modelId}` as FullModelName);\n if (!(instance instanceof VercelChatModel)) {\n throw new Error(\"Incorrect deserialization!\");\n }\n instance.destroy();\n Object.assign(this, {\n ...snapshot,\n model: instance.model,\n });\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { Logger } from '../../../logger/logger.cjs';
2
- import { m as ChatModel, g as ChatModelEvents, d as ChatModelInput, n as ChatModelOutput, a as ChatModelObjectInput, b as ChatModelObjectOutput, i as ChatModelCache, C as ChatModelParameters, l as ChatModelToolChoiceSupport } from '../../../chat-CRb3vUVg.cjs';
2
+ import { m as ChatModel, g as ChatModelEvents, d as ChatModelInput, n as ChatModelOutput, a as ChatModelObjectInput, b as ChatModelObjectOutput, i as ChatModelCache, C as ChatModelParameters, l as ChatModelToolChoiceSupport } from '../../../chat-BOb9n7AJ.cjs';
3
3
  import { LanguageModel, generateText, CoreAssistantMessage, CoreToolMessage } from 'ai';
4
- import { E as Emitter } from '../../../emitter-DpqUYjXH.cjs';
4
+ import { E as Emitter } from '../../../emitter-jN55XZZq.cjs';
5
5
  import { Message } from '../../../backend/message.cjs';
6
6
  import { GetRunContext } from '../../../context.cjs';
7
7
  import 'pino';
@@ -1,7 +1,7 @@
1
1
  import { Logger } from '../../../logger/logger.js';
2
- import { m as ChatModel, g as ChatModelEvents, d as ChatModelInput, n as ChatModelOutput, a as ChatModelObjectInput, b as ChatModelObjectOutput, i as ChatModelCache, C as ChatModelParameters, l as ChatModelToolChoiceSupport } from '../../../chat-C0s-o6ll.js';
2
+ import { m as ChatModel, g as ChatModelEvents, d as ChatModelInput, n as ChatModelOutput, a as ChatModelObjectInput, b as ChatModelObjectOutput, i as ChatModelCache, C as ChatModelParameters, l as ChatModelToolChoiceSupport } from '../../../chat-DrqwUgD8.js';
3
3
  import { LanguageModel, generateText, CoreAssistantMessage, CoreToolMessage } from 'ai';
4
- import { E as Emitter } from '../../../emitter-CZFbzlUi.js';
4
+ import { E as Emitter } from '../../../emitter-36-9MnvA.js';
5
5
  import { Message } from '../../../backend/message.js';
6
6
  import { GetRunContext } from '../../../context.js';
7
7
  import 'pino';
@@ -48,7 +48,11 @@ class VercelChatModel extends ChatModel {
48
48
  }, run);
49
49
  return output;
50
50
  }
51
- const { finishReason, usage, response: { messages } } = await generateText(await this.transformInput(input));
51
+ const { finishReason, usage, response: { messages } } = await generateText({
52
+ temperature: 0,
53
+ ...await this.transformInput(input),
54
+ abortSignal: run.signal
55
+ });
52
56
  return new ChatModelOutput(this.transformMessages(messages), extractTokenUsage(usage), finishReason);
53
57
  }
54
58
  async _createStructure({ schema, ...input }, run) {
@@ -56,7 +60,6 @@ class VercelChatModel extends ChatModel {
56
60
  temperature: 0,
57
61
  ...await this.transformInput(input),
58
62
  abortSignal: run.signal,
59
- model: this.model,
60
63
  ...schema instanceof ZodSchema ? {
61
64
  schema,
62
65
  output: (schema._input || schema) instanceof ZodArray ? "array" : (schema._input || schema) instanceof ZodEnum ? "enum" : "object"
@@ -74,6 +77,15 @@ class VercelChatModel extends ChatModel {
74
77
  };
75
78
  }
76
79
  async *_createStream(input, run) {
80
+ const responseFormat = input.responseFormat;
81
+ if (responseFormat && (responseFormat instanceof ZodSchema || responseFormat.schema)) {
82
+ const { output } = await this._createStructure({
83
+ ...input,
84
+ schema: responseFormat
85
+ }, run);
86
+ yield output;
87
+ return;
88
+ }
77
89
  if (!this.supportsToolStreaming && !isEmpty(input.tools ?? [])) {
78
90
  const response = await this._create(input, run);
79
91
  yield response;
@@ -83,45 +95,91 @@ class VercelChatModel extends ChatModel {
83
95
  ...await this.transformInput(input),
84
96
  abortSignal: run.signal
85
97
  });
86
- let lastChunk = null;
98
+ let streamEmpty = true;
99
+ const streamedToolCalls = /* @__PURE__ */ new Map();
87
100
  for await (const event of fullStream) {
88
101
  let message;
89
102
  switch (event.type) {
90
103
  case "text-delta":
91
- message = new AssistantMessage(event.text);
104
+ streamEmpty = false;
105
+ message = new AssistantMessage(event.text, {}, event.id);
106
+ yield new ChatModelOutput([
107
+ message
108
+ ]);
109
+ break;
110
+ case "text-end":
111
+ streamEmpty = false;
112
+ break;
113
+ case "tool-input-start": {
114
+ if (!input.streamPartialToolCalls) {
115
+ break;
116
+ }
117
+ const chunk = {
118
+ type: "tool-call",
119
+ toolName: event.toolName,
120
+ toolCallId: event.id,
121
+ input: ""
122
+ };
123
+ streamedToolCalls.set(event.id, chunk);
124
+ const message2 = new AssistantMessage(chunk, {}, event.id);
125
+ yield new ChatModelOutput([
126
+ message2
127
+ ]);
128
+ break;
129
+ }
130
+ case "tool-input-delta": {
131
+ if (!input.streamPartialToolCalls) {
132
+ break;
133
+ }
134
+ if (event.delta) {
135
+ const chunk = streamedToolCalls.get(event.id);
136
+ const message2 = new AssistantMessage({
137
+ ...chunk,
138
+ input: event.delta
139
+ }, {}, event.id);
140
+ yield new ChatModelOutput([
141
+ message2
142
+ ]);
143
+ }
92
144
  break;
93
- case "tool-call":
145
+ }
146
+ case "tool-call": {
147
+ streamEmpty = false;
148
+ const existingToolCall = streamedToolCalls.get(event.toolCallId);
149
+ if (existingToolCall) {
150
+ streamedToolCalls.delete(event.toolCallId);
151
+ break;
152
+ }
94
153
  message = new AssistantMessage({
95
154
  type: event.type,
96
155
  toolCallId: event.toolCallId,
97
156
  toolName: event.toolName,
98
157
  input: event.input
99
- });
158
+ }, {}, event.toolCallId);
159
+ yield new ChatModelOutput([
160
+ message
161
+ ]);
100
162
  break;
163
+ }
101
164
  case "error":
102
165
  throw new ChatModelError("Unhandled error", [
103
166
  event.error
104
167
  ]);
105
168
  case "tool-result":
169
+ streamEmpty = false;
106
170
  message = new ToolMessage({
107
171
  type: event.type,
108
172
  toolCallId: event.toolCallId,
109
173
  toolName: event.toolName,
110
174
  output: event.output
111
- });
112
- break;
113
- case "abort":
114
- message = new AssistantMessage([]);
175
+ }, {}, `tool_result_${event.toolCallId}`);
176
+ yield new ChatModelOutput([
177
+ message
178
+ ]);
115
179
  break;
116
- default:
117
- continue;
118
180
  }
119
- lastChunk = new ChatModelOutput([
120
- message
121
- ]);
122
- yield lastChunk;
123
181
  }
124
- if (!lastChunk) {
182
+ if (streamEmpty) {
125
183
  throw new ChatModelError("No chunks have been received!");
126
184
  }
127
185
  try {
@@ -130,8 +188,10 @@ class VercelChatModel extends ChatModel {
130
188
  finishReasonPromise,
131
189
  responsePromise
132
190
  ]);
191
+ const lastChunk = new ChatModelOutput([]);
133
192
  lastChunk.usage = extractTokenUsage(usage);
134
193
  lastChunk.finishReason = finishReason;
194
+ yield lastChunk;
135
195
  } catch (e) {
136
196
  if (!run.signal.aborted) {
137
197
  throw e;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/adapters/vercel/backend/chat.ts"],"names":["VercelChatModel","ChatModel","emitter","supportsToolStreaming","model","modelId","ValueError","Emitter","root","child","namespace","providerId","creator","provider","split","toCamelCase","_create","input","run","responseFormat","ZodSchema","schema","output","_createStructure","finishReason","usage","response","messages","generateText","transformInput","ChatModelOutput","transformMessages","extractTokenUsage","generateObject","temperature","abortSignal","signal","_input","ZodArray","ZodEnum","jsonSchema","z","any","schemaName","name","schemaDescription","description","object","AssistantMessage","JSON","stringify","_createStream","isEmpty","tools","fullStream","usagePromise","finishReasonPromise","responsePromise","streamText","lastChunk","event","message","type","text","toolCallId","toolName","ChatModelError","error","ToolMessage","_","Promise","all","e","aborted","map","tool","inputSchema","getInputJsonSchema","msg","CustomMessage","encodeCustomMessage","role","content","UserMessage","SystemMessage","part","join","toolChoice","Tool","toolChoiceSupport","includes","logger","warn","parameters","mapToObj","flatMap","providerOptions","createSnapshot","loadSnapshot","snapshot","instance","fromName","Error","destroy","Object","assign"],"mappings":"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","file":"chat.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n ChatModelInput,\n ChatModel,\n ChatModelOutput,\n ChatModelEvents,\n ChatModelObjectInput,\n ChatModelObjectOutput,\n} from \"@/backend/chat.js\";\nimport {\n CoreAssistantMessage,\n ModelMessage,\n CoreToolMessage,\n generateObject,\n generateText,\n jsonSchema,\n LanguageModel as _LanguageModel,\n streamText,\n TextPart,\n ToolCallPart,\n ToolChoice,\n} from \"ai\";\ntype LanguageModelV2 = Exclude<_LanguageModel, string>;\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport {\n AssistantMessage,\n CustomMessage,\n Message,\n SystemMessage,\n ToolMessage,\n UserMessage,\n} from \"@/backend/message.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { isEmpty, mapToObj, toCamelCase } from \"remeda\";\nimport { FullModelName } from \"@/backend/utils.js\";\nimport { ChatModelError } from \"@/backend/errors.js\";\nimport { z, ZodArray, ZodEnum, ZodSchema } from \"zod\";\nimport { Tool } from \"@/tools/base.js\";\nimport { encodeCustomMessage, extractTokenUsage } from \"@/adapters/vercel/backend/utils.js\";\n\nexport abstract class VercelChatModel<\n M extends LanguageModelV2 = LanguageModelV2,\n> extends ChatModel {\n public readonly emitter: Emitter<ChatModelEvents>;\n public readonly supportsToolStreaming: boolean = true;\n\n constructor(private readonly model: M) {\n super();\n if (!this.modelId) {\n throw new ValueError(\"No modelId has been provided!\");\n }\n this.emitter = Emitter.root.child({\n namespace: [\"backend\", this.providerId, \"chat\"],\n creator: this,\n });\n }\n\n get modelId(): string {\n return this.model.modelId;\n }\n\n get providerId(): string {\n const provider = this.model.provider.split(\".\")[0].split(\"-\")[0];\n return toCamelCase(provider);\n }\n\n protected async _create(input: ChatModelInput, run: GetRunContext<this>) {\n const responseFormat = input.responseFormat;\n if (responseFormat && (responseFormat instanceof ZodSchema || responseFormat.schema)) {\n const { output } = await this._createStructure(\n {\n ...input,\n schema: responseFormat,\n },\n run,\n );\n return output;\n }\n\n const {\n finishReason,\n usage,\n response: { messages },\n } = await generateText(await this.transformInput(input));\n\n return new ChatModelOutput(\n this.transformMessages(messages),\n extractTokenUsage(usage),\n finishReason,\n );\n }\n\n protected async _createStructure<T>(\n { schema, ...input }: ChatModelObjectInput<T>,\n run: GetRunContext<this>,\n ): Promise<ChatModelObjectOutput<T>> {\n const response = await generateObject({\n temperature: 0,\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n model: this.model,\n ...(schema instanceof ZodSchema\n ? {\n schema,\n output: ((schema._input || schema) instanceof ZodArray\n ? \"array\"\n : (schema._input || schema) instanceof ZodEnum\n ? \"enum\"\n : \"object\") as any,\n }\n : {\n schema: schema.schema ? jsonSchema<T>(schema.schema) : z.any(),\n schemaName: schema.name,\n schemaDescription: schema.description,\n }),\n });\n\n return {\n object: response.object as T,\n output: new ChatModelOutput(\n [new AssistantMessage(JSON.stringify(response.object, null, 2))],\n extractTokenUsage(response.usage),\n response.finishReason,\n ),\n };\n }\n\n async *_createStream(input: ChatModelInput, run: GetRunContext<this>) {\n if (!this.supportsToolStreaming && !isEmpty(input.tools ?? [])) {\n const response = await this._create(input, run);\n yield response;\n return;\n }\n\n const {\n fullStream,\n usage: usagePromise,\n finishReason: finishReasonPromise,\n response: responsePromise,\n } = streamText({\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n });\n\n let lastChunk: ChatModelOutput | null = null;\n for await (const event of fullStream) {\n let message: Message;\n switch (event.type) {\n case \"text-delta\":\n message = new AssistantMessage(event.text);\n break;\n case \"tool-call\":\n message = new AssistantMessage({\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n input: event.input,\n });\n break;\n case \"error\":\n throw new ChatModelError(\"Unhandled error\", [event.error as Error]);\n case \"tool-result\":\n message = new ToolMessage({\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n output: event.output as any,\n });\n break;\n case \"abort\":\n message = new AssistantMessage([]);\n break;\n default:\n continue;\n }\n lastChunk = new ChatModelOutput([message]);\n yield lastChunk;\n }\n\n if (!lastChunk) {\n throw new ChatModelError(\"No chunks have been received!\");\n }\n\n try {\n const [usage, finishReason, _] = await Promise.all([\n usagePromise,\n finishReasonPromise,\n responsePromise,\n ]);\n lastChunk.usage = extractTokenUsage(usage);\n lastChunk.finishReason = finishReason;\n } catch (e) {\n if (!run.signal.aborted) {\n throw e;\n }\n }\n }\n\n protected async transformInput(\n input: ChatModelInput,\n ): Promise<Parameters<typeof generateText<Record<string, any>>>[0]> {\n const tools = await Promise.all(\n (input.tools ?? []).map(async (tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: jsonSchema(await tool.getInputJsonSchema()),\n })),\n );\n\n const messages = input.messages.map((msg): ModelMessage => {\n if (msg instanceof CustomMessage) {\n msg = encodeCustomMessage(msg);\n }\n\n if (msg instanceof AssistantMessage) {\n return { role: \"assistant\", content: msg.content };\n } else if (msg instanceof ToolMessage) {\n return { role: \"tool\", content: msg.content };\n } else if (msg instanceof UserMessage) {\n return { role: \"user\", content: msg.content };\n } else if (msg instanceof SystemMessage) {\n return { role: \"system\", content: msg.content.map((part) => part.text).join(\"\\n\") };\n }\n return { role: msg.role, content: msg.content } as ModelMessage;\n });\n\n let toolChoice: ToolChoice<Record<string, any>> | undefined;\n if (input.toolChoice && input.toolChoice instanceof Tool) {\n if (this.toolChoiceSupport.includes(\"single\")) {\n toolChoice = {\n type: \"tool\",\n toolName: input.toolChoice.name,\n };\n } else {\n this.logger.warn(`The single tool choice is not supported.`);\n }\n } else if (input.toolChoice) {\n if (this.toolChoiceSupport.includes(input.toolChoice)) {\n toolChoice = input.toolChoice;\n } else {\n this.logger.warn(`The following tool choice value '${input.toolChoice}' is not supported.`);\n }\n }\n\n return {\n ...this.parameters,\n ...input,\n toolChoice,\n model: this.model,\n tools: mapToObj(tools, ({ name, ...tool }) => [name, tool]),\n messages,\n };\n }\n\n protected transformMessages(messages: (CoreAssistantMessage | CoreToolMessage)[]): Message[] {\n return messages.flatMap((msg) => {\n if (msg.role === \"tool\") {\n return new ToolMessage(msg.content, msg.providerOptions);\n }\n return new AssistantMessage(\n msg.content as TextPart | ToolCallPart | string,\n msg.providerOptions,\n );\n });\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n providerId: this.providerId,\n modelId: this.modelId,\n supportsToolStreaming: this.supportsToolStreaming,\n };\n }\n\n async loadSnapshot({ providerId, modelId, ...snapshot }: ReturnType<typeof this.createSnapshot>) {\n const instance = await ChatModel.fromName(`${providerId}:${modelId}` as FullModelName);\n if (!(instance instanceof VercelChatModel)) {\n throw new Error(\"Incorrect deserialization!\");\n }\n instance.destroy();\n Object.assign(this, {\n ...snapshot,\n model: instance.model,\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/adapters/vercel/backend/chat.ts"],"names":["VercelChatModel","ChatModel","emitter","supportsToolStreaming","model","modelId","ValueError","Emitter","root","child","namespace","providerId","creator","provider","split","toCamelCase","_create","input","run","responseFormat","ZodSchema","schema","output","_createStructure","finishReason","usage","response","messages","generateText","temperature","transformInput","abortSignal","signal","ChatModelOutput","transformMessages","extractTokenUsage","generateObject","_input","ZodArray","ZodEnum","jsonSchema","z","any","schemaName","name","schemaDescription","description","object","AssistantMessage","JSON","stringify","_createStream","isEmpty","tools","fullStream","usagePromise","finishReasonPromise","responsePromise","streamText","streamEmpty","streamedToolCalls","Map","event","message","type","text","id","streamPartialToolCalls","chunk","toolName","toolCallId","set","delta","get","existingToolCall","delete","ChatModelError","error","ToolMessage","_","Promise","all","lastChunk","e","aborted","map","tool","inputSchema","getInputJsonSchema","msg","CustomMessage","encodeCustomMessage","role","content","UserMessage","SystemMessage","part","join","toolChoice","Tool","toolChoiceSupport","includes","logger","warn","parameters","mapToObj","flatMap","providerOptions","createSnapshot","loadSnapshot","snapshot","instance","fromName","Error","destroy","Object","assign"],"mappings":"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","file":"chat.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n ChatModelInput,\n ChatModel,\n ChatModelOutput,\n ChatModelEvents,\n ChatModelObjectInput,\n ChatModelObjectOutput,\n} from \"@/backend/chat.js\";\nimport {\n CoreAssistantMessage,\n ModelMessage,\n CoreToolMessage,\n generateObject,\n generateText,\n jsonSchema,\n LanguageModel as _LanguageModel,\n streamText,\n TextPart,\n ToolCallPart,\n ToolChoice,\n} from \"ai\";\ntype LanguageModelV2 = Exclude<_LanguageModel, string>;\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport {\n AssistantMessage,\n CustomMessage,\n Message,\n SystemMessage,\n ToolMessage,\n UserMessage,\n} from \"@/backend/message.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { isEmpty, mapToObj, toCamelCase } from \"remeda\";\nimport { FullModelName } from \"@/backend/utils.js\";\nimport { ChatModelError } from \"@/backend/errors.js\";\nimport { z, ZodArray, ZodEnum, ZodSchema } from \"zod\";\nimport { Tool } from \"@/tools/base.js\";\nimport { encodeCustomMessage, extractTokenUsage } from \"@/adapters/vercel/backend/utils.js\";\n\nexport abstract class VercelChatModel<\n M extends LanguageModelV2 = LanguageModelV2,\n> extends ChatModel {\n public readonly emitter: Emitter<ChatModelEvents>;\n public readonly supportsToolStreaming: boolean = true;\n\n constructor(private readonly model: M) {\n super();\n if (!this.modelId) {\n throw new ValueError(\"No modelId has been provided!\");\n }\n this.emitter = Emitter.root.child({\n namespace: [\"backend\", this.providerId, \"chat\"],\n creator: this,\n });\n }\n\n get modelId(): string {\n return this.model.modelId;\n }\n\n get providerId(): string {\n const provider = this.model.provider.split(\".\")[0].split(\"-\")[0];\n return toCamelCase(provider);\n }\n\n protected async _create(input: ChatModelInput, run: GetRunContext<this>) {\n const responseFormat = input.responseFormat;\n if (responseFormat && (responseFormat instanceof ZodSchema || responseFormat.schema)) {\n const { output } = await this._createStructure(\n {\n ...input,\n schema: responseFormat,\n },\n run,\n );\n return output;\n }\n\n const {\n finishReason,\n usage,\n response: { messages },\n } = await generateText({\n temperature: 0,\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n });\n\n return new ChatModelOutput(\n this.transformMessages(messages),\n extractTokenUsage(usage),\n finishReason,\n );\n }\n\n protected async _createStructure<T>(\n { schema, ...input }: ChatModelObjectInput<T>,\n run: GetRunContext<this>,\n ): Promise<ChatModelObjectOutput<T>> {\n const response = await generateObject({\n temperature: 0,\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n ...(schema instanceof ZodSchema\n ? {\n schema,\n output: ((schema._input || schema) instanceof ZodArray\n ? \"array\"\n : (schema._input || schema) instanceof ZodEnum\n ? \"enum\"\n : \"object\") as any,\n }\n : {\n schema: schema.schema ? jsonSchema<T>(schema.schema) : z.any(),\n schemaName: schema.name,\n schemaDescription: schema.description,\n }),\n });\n\n return {\n object: response.object as T,\n output: new ChatModelOutput(\n [new AssistantMessage(JSON.stringify(response.object, null, 2))],\n extractTokenUsage(response.usage),\n response.finishReason,\n ),\n };\n }\n\n async *_createStream(input: ChatModelInput, run: GetRunContext<this>) {\n const responseFormat = input.responseFormat;\n if (responseFormat && (responseFormat instanceof ZodSchema || responseFormat.schema)) {\n const { output } = await this._createStructure(\n {\n ...input,\n schema: responseFormat,\n },\n run,\n );\n yield output;\n return;\n }\n\n if (!this.supportsToolStreaming && !isEmpty(input.tools ?? [])) {\n const response = await this._create(input, run);\n yield response;\n return;\n }\n\n const {\n fullStream,\n usage: usagePromise,\n finishReason: finishReasonPromise,\n response: responsePromise,\n } = streamText({\n ...(await this.transformInput(input)),\n abortSignal: run.signal,\n });\n\n let streamEmpty = true;\n const streamedToolCalls = new Map<string, ToolCallPart>();\n for await (const event of fullStream) {\n let message: Message;\n switch (event.type) {\n case \"text-delta\":\n streamEmpty = false;\n message = new AssistantMessage(event.text, {}, event.id);\n yield new ChatModelOutput([message]);\n break;\n case \"text-end\":\n streamEmpty = false;\n break;\n case \"tool-input-start\": {\n if (!input.streamPartialToolCalls) {\n break;\n }\n\n const chunk: ToolCallPart = {\n type: \"tool-call\",\n toolName: event.toolName,\n toolCallId: event.id,\n input: \"\",\n };\n streamedToolCalls.set(event.id, chunk);\n const message = new AssistantMessage(chunk, {}, event.id);\n yield new ChatModelOutput([message]);\n break;\n }\n case \"tool-input-delta\": {\n if (!input.streamPartialToolCalls) {\n break;\n }\n\n if (event.delta) {\n const chunk = streamedToolCalls.get(event.id)!;\n const message = new AssistantMessage({ ...chunk, input: event.delta }, {}, event.id);\n yield new ChatModelOutput([message]);\n }\n break;\n }\n case \"tool-call\": {\n streamEmpty = false;\n const existingToolCall = streamedToolCalls.get(event.toolCallId);\n if (existingToolCall) {\n streamedToolCalls.delete(event.toolCallId);\n break;\n }\n message = new AssistantMessage(\n {\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n input: event.input,\n },\n {},\n event.toolCallId,\n );\n yield new ChatModelOutput([message]);\n break;\n }\n case \"error\":\n throw new ChatModelError(\"Unhandled error\", [event.error as Error]);\n case \"tool-result\":\n streamEmpty = false;\n message = new ToolMessage(\n {\n type: event.type,\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n output: event.output as any,\n },\n {},\n `tool_result_${event.toolCallId}`,\n );\n yield new ChatModelOutput([message]);\n break;\n case \"abort\":\n break;\n default:\n break;\n }\n }\n\n if (streamEmpty) {\n throw new ChatModelError(\"No chunks have been received!\");\n }\n\n try {\n const [usage, finishReason, _] = await Promise.all([\n usagePromise,\n finishReasonPromise,\n responsePromise,\n ]);\n const lastChunk = new ChatModelOutput([]);\n lastChunk.usage = extractTokenUsage(usage);\n lastChunk.finishReason = finishReason;\n yield lastChunk;\n } catch (e) {\n if (!run.signal.aborted) {\n throw e;\n }\n }\n }\n\n protected async transformInput(\n input: ChatModelInput,\n ): Promise<Parameters<typeof generateText<Record<string, any>>>[0]> {\n const tools = await Promise.all(\n (input.tools ?? []).map(async (tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: jsonSchema(await tool.getInputJsonSchema()),\n })),\n );\n\n const messages = input.messages.map((msg): ModelMessage => {\n if (msg instanceof CustomMessage) {\n msg = encodeCustomMessage(msg);\n }\n\n if (msg instanceof AssistantMessage) {\n return { role: \"assistant\", content: msg.content };\n } else if (msg instanceof ToolMessage) {\n return { role: \"tool\", content: msg.content };\n } else if (msg instanceof UserMessage) {\n return { role: \"user\", content: msg.content };\n } else if (msg instanceof SystemMessage) {\n return { role: \"system\", content: msg.content.map((part) => part.text).join(\"\\n\") };\n }\n return { role: msg.role, content: msg.content } as ModelMessage;\n });\n\n let toolChoice: ToolChoice<Record<string, any>> | undefined;\n if (input.toolChoice && input.toolChoice instanceof Tool) {\n if (this.toolChoiceSupport.includes(\"single\")) {\n toolChoice = {\n type: \"tool\",\n toolName: input.toolChoice.name,\n };\n } else {\n this.logger.warn(`The single tool choice is not supported.`);\n }\n } else if (input.toolChoice) {\n if (this.toolChoiceSupport.includes(input.toolChoice)) {\n toolChoice = input.toolChoice;\n } else {\n this.logger.warn(`The following tool choice value '${input.toolChoice}' is not supported.`);\n }\n }\n\n return {\n ...this.parameters,\n ...input,\n toolChoice,\n model: this.model,\n tools: mapToObj(tools, ({ name, ...tool }) => [name, tool]),\n messages,\n };\n }\n\n protected transformMessages(messages: (CoreAssistantMessage | CoreToolMessage)[]): Message[] {\n return messages.flatMap((msg) => {\n if (msg.role === \"tool\") {\n return new ToolMessage(msg.content, msg.providerOptions);\n }\n return new AssistantMessage(\n msg.content as TextPart | ToolCallPart | string,\n msg.providerOptions,\n );\n });\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n providerId: this.providerId,\n modelId: this.modelId,\n supportsToolStreaming: this.supportsToolStreaming,\n };\n }\n\n async loadSnapshot({ providerId, modelId, ...snapshot }: ReturnType<typeof this.createSnapshot>) {\n const instance = await ChatModel.fromName(`${providerId}:${modelId}` as FullModelName);\n if (!(instance instanceof VercelChatModel)) {\n throw new Error(\"Incorrect deserialization!\");\n }\n instance.destroy();\n Object.assign(this, {\n ...snapshot,\n model: instance.model,\n });\n }\n}\n"]}
@@ -1,12 +1,12 @@
1
1
  import { EmbeddingModel as EmbeddingModel$1, EmbeddingModelEvents, EmbeddingModelInput, EmbeddingModelOutput } from '../../../backend/embedding.cjs';
2
2
  import { EmbeddingModel } from 'ai';
3
- import { E as Emitter } from '../../../emitter-DpqUYjXH.cjs';
3
+ import { E as Emitter } from '../../../emitter-jN55XZZq.cjs';
4
4
  import { GetRunContext } from '../../../context.cjs';
5
5
  import '../../../internals/serializable.cjs';
6
6
  import '../../../internals/types.cjs';
7
7
  import '../../../internals/helpers/guards.cjs';
8
8
  import '../../../errors.cjs';
9
- import '../../../chat-CRb3vUVg.cjs';
9
+ import '../../../chat-BOb9n7AJ.cjs';
10
10
  import '../../../backend/message.cjs';
11
11
  import 'promise-based-task';
12
12
  import '../../../cache/base.cjs';
@@ -1,12 +1,12 @@
1
1
  import { EmbeddingModel as EmbeddingModel$1, EmbeddingModelEvents, EmbeddingModelInput, EmbeddingModelOutput } from '../../../backend/embedding.js';
2
2
  import { EmbeddingModel } from 'ai';
3
- import { E as Emitter } from '../../../emitter-CZFbzlUi.js';
3
+ import { E as Emitter } from '../../../emitter-36-9MnvA.js';
4
4
  import { GetRunContext } from '../../../context.js';
5
5
  import '../../../internals/serializable.js';
6
6
  import '../../../internals/types.js';
7
7
  import '../../../internals/helpers/guards.js';
8
8
  import '../../../errors.js';
9
- import '../../../chat-C0s-o6ll.js';
9
+ import '../../../chat-DrqwUgD8.js';
10
10
  import '../../../backend/message.js';
11
11
  import 'promise-based-task';
12
12
  import '../../../cache/base.js';
@@ -5,6 +5,7 @@ var remeda = require('remeda');
5
5
  var object_cjs = require('../../../internals/helpers/object.cjs');
6
6
  var zod = require('zod');
7
7
  var env_cjs = require('../../../internals/env.cjs');
8
+ var schema_cjs = require('../../../internals/helpers/schema.cjs');
8
9
 
9
10
  var __defProp = Object.defineProperty;
10
11
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
@@ -92,10 +93,41 @@ function extractTokenUsage(usage) {
92
93
  };
93
94
  }
94
95
  __name(extractTokenUsage, "extractTokenUsage");
96
+ function mergeTokenUsage(target, ...sources) {
97
+ for (const source of sources) {
98
+ target.totalTokens += source.totalTokens ?? 0;
99
+ target.promptTokens += source.promptTokens ?? 0;
100
+ target.completionTokens += source.completionTokens ?? 0;
101
+ if (source.reasoningTokens) {
102
+ target.reasoningTokens = (target.reasoningTokens ?? 0) + source.reasoningTokens;
103
+ }
104
+ if (source.cachedPromptTokens) {
105
+ target.cachedPromptTokens = (target.cachedPromptTokens ?? 0) + source.cachedPromptTokens;
106
+ }
107
+ }
108
+ }
109
+ __name(mergeTokenUsage, "mergeTokenUsage");
110
+ function isToolCallValid(obj) {
111
+ if (!obj.toolName || !obj.toolCallId || !obj.input) {
112
+ return false;
113
+ }
114
+ if (remeda.isString(obj.input)) {
115
+ return Boolean(schema_cjs.parseBrokenJson(obj.input, {
116
+ pair: [
117
+ "{",
118
+ "}"
119
+ ]
120
+ }));
121
+ }
122
+ return Boolean(obj.input);
123
+ }
124
+ __name(isToolCallValid, "isToolCallValid");
95
125
 
96
126
  exports.decodeCustomMessage = decodeCustomMessage;
97
127
  exports.encodeCustomMessage = encodeCustomMessage;
98
128
  exports.extractTokenUsage = extractTokenUsage;
129
+ exports.isToolCallValid = isToolCallValid;
130
+ exports.mergeTokenUsage = mergeTokenUsage;
99
131
  exports.parseHeadersFromEnv = parseHeadersFromEnv;
100
132
  exports.vercelFetcher = vercelFetcher;
101
133
  //# sourceMappingURL=utils.cjs.map