beeai-framework 0.1.22 → 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 (267) hide show
  1. package/dist/adapters/a2a/agents/agent.d.cts +2 -2
  2. package/dist/adapters/a2a/agents/agent.d.ts +2 -2
  3. package/dist/adapters/a2a/agents/events.d.cts +1 -1
  4. package/dist/adapters/a2a/agents/events.d.ts +1 -1
  5. package/dist/adapters/a2a/agents/types.d.cts +2 -2
  6. package/dist/adapters/a2a/agents/types.d.ts +2 -2
  7. package/dist/adapters/a2a/serve/agent_executor.d.cts +3 -3
  8. package/dist/adapters/a2a/serve/agent_executor.d.ts +3 -3
  9. package/dist/adapters/a2a/serve/server.d.cts +2 -2
  10. package/dist/adapters/a2a/serve/server.d.ts +2 -2
  11. package/dist/adapters/acp/agents/agent.d.cts +2 -2
  12. package/dist/adapters/acp/agents/agent.d.ts +2 -2
  13. package/dist/adapters/acp/agents/events.d.cts +1 -1
  14. package/dist/adapters/acp/agents/events.d.ts +1 -1
  15. package/dist/adapters/agentstack/agents/agent.d.cts +2 -2
  16. package/dist/adapters/agentstack/agents/agent.d.ts +2 -2
  17. package/dist/adapters/agentstack/agents/events.d.cts +1 -1
  18. package/dist/adapters/agentstack/agents/events.d.ts +1 -1
  19. package/dist/adapters/amazon-bedrock/backend/chat.d.cts +2 -2
  20. package/dist/adapters/amazon-bedrock/backend/chat.d.ts +2 -2
  21. package/dist/adapters/amazon-bedrock/backend/embedding.d.cts +2 -2
  22. package/dist/adapters/amazon-bedrock/backend/embedding.d.ts +2 -2
  23. package/dist/adapters/anthropic/backend/chat.d.cts +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 +17 -0
  70. package/dist/adapters/vercel/backend/utils.cjs.map +1 -1
  71. package/dist/adapters/vercel/backend/utils.d.cts +5 -4
  72. package/dist/adapters/vercel/backend/utils.d.ts +5 -4
  73. package/dist/adapters/vercel/backend/utils.js +17 -1
  74. package/dist/adapters/vercel/backend/utils.js.map +1 -1
  75. package/dist/adapters/watsonx/backend/chat.cjs +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-BMfyig7X.d.cts → agent-BVuc9Nfn.d.cts} +3 -3
  86. package/dist/{agent-Dxw8AGWb.d.ts → agent-Cuy8Q4gw.d.ts} +3 -3
  87. package/dist/agents/base.d.cts +2 -2
  88. package/dist/agents/base.d.ts +2 -2
  89. package/dist/agents/experimental/replan/agent.d.cts +3 -3
  90. package/dist/agents/experimental/replan/agent.d.ts +3 -3
  91. package/dist/agents/experimental/replan/prompts.d.cts +1 -1
  92. package/dist/agents/experimental/replan/prompts.d.ts +1 -1
  93. package/dist/agents/experimental/streamlit/agent.d.cts +3 -3
  94. package/dist/agents/experimental/streamlit/agent.d.ts +3 -3
  95. package/dist/agents/react/agent.d.cts +4 -4
  96. package/dist/agents/react/agent.d.ts +4 -4
  97. package/dist/agents/react/prompts.d.cts +1 -1
  98. package/dist/agents/react/prompts.d.ts +1 -1
  99. package/dist/agents/react/runners/base.d.cts +4 -4
  100. package/dist/agents/react/runners/base.d.ts +4 -4
  101. package/dist/agents/react/runners/deep-think/prompts.d.cts +1 -1
  102. package/dist/agents/react/runners/deep-think/prompts.d.ts +1 -1
  103. package/dist/agents/react/runners/deep-think/runner.d.cts +5 -5
  104. package/dist/agents/react/runners/deep-think/runner.d.ts +5 -5
  105. package/dist/agents/react/runners/default/runner.d.cts +6 -6
  106. package/dist/agents/react/runners/default/runner.d.ts +6 -6
  107. package/dist/agents/react/runners/granite/prompts.d.cts +1 -1
  108. package/dist/agents/react/runners/granite/prompts.d.ts +1 -1
  109. package/dist/agents/react/runners/granite/runner.d.cts +5 -5
  110. package/dist/agents/react/runners/granite/runner.d.ts +5 -5
  111. package/dist/agents/react/types.d.cts +2 -2
  112. package/dist/agents/react/types.d.ts +2 -2
  113. package/dist/agents/requirement/agent.cjs +1 -1
  114. package/dist/agents/requirement/agent.cjs.map +1 -1
  115. package/dist/agents/requirement/agent.d.cts +4 -4
  116. package/dist/agents/requirement/agent.d.ts +4 -4
  117. package/dist/agents/requirement/agent.js +1 -1
  118. package/dist/agents/requirement/agent.js.map +1 -1
  119. package/dist/agents/requirement/prompts.d.cts +2 -2
  120. package/dist/agents/requirement/prompts.d.ts +2 -2
  121. package/dist/agents/requirement/requirements/conditional.d.cts +4 -4
  122. package/dist/agents/requirement/requirements/conditional.d.ts +4 -4
  123. package/dist/agents/requirement/requirements/requirement.d.cts +4 -4
  124. package/dist/agents/requirement/requirements/requirement.d.ts +4 -4
  125. package/dist/agents/requirement/requirements/utils.d.cts +1 -1
  126. package/dist/agents/requirement/requirements/utils.d.ts +1 -1
  127. package/dist/agents/requirement/runner.cjs +31 -15
  128. package/dist/agents/requirement/runner.cjs.map +1 -1
  129. package/dist/agents/requirement/runner.d.cts +13 -15
  130. package/dist/agents/requirement/runner.d.ts +13 -15
  131. package/dist/agents/requirement/runner.js +31 -15
  132. package/dist/agents/requirement/runner.js.map +1 -1
  133. package/dist/agents/requirement/types.d.cts +4 -4
  134. package/dist/agents/requirement/types.d.ts +4 -4
  135. package/dist/agents/requirement/utils/llm.d.cts +4 -4
  136. package/dist/agents/requirement/utils/llm.d.ts +4 -4
  137. package/dist/agents/requirement/utils/tool.cjs +2 -1
  138. package/dist/agents/requirement/utils/tool.cjs.map +1 -1
  139. package/dist/agents/requirement/utils/tool.d.cts +4 -4
  140. package/dist/agents/requirement/utils/tool.d.ts +4 -4
  141. package/dist/agents/requirement/utils/tool.js +2 -1
  142. package/dist/agents/requirement/utils/tool.js.map +1 -1
  143. package/dist/agents/toolCalling/agent.cjs +4 -1
  144. package/dist/agents/toolCalling/agent.cjs.map +1 -1
  145. package/dist/agents/toolCalling/agent.d.cts +6 -3
  146. package/dist/agents/toolCalling/agent.d.ts +6 -3
  147. package/dist/agents/toolCalling/agent.js +5 -2
  148. package/dist/agents/toolCalling/agent.js.map +1 -1
  149. package/dist/agents/toolCalling/types.d.cts +1 -1
  150. package/dist/agents/toolCalling/types.d.ts +1 -1
  151. package/dist/agents/types.d.cts +2 -2
  152. package/dist/agents/types.d.ts +2 -2
  153. package/dist/backend/backend.d.cts +2 -2
  154. package/dist/backend/backend.d.ts +2 -2
  155. package/dist/backend/chat.cjs +122 -4
  156. package/dist/backend/chat.cjs.map +1 -1
  157. package/dist/backend/chat.d.cts +3 -3
  158. package/dist/backend/chat.d.ts +3 -3
  159. package/dist/backend/chat.js +123 -5
  160. package/dist/backend/chat.js.map +1 -1
  161. package/dist/backend/core.d.cts +3 -3
  162. package/dist/backend/core.d.ts +3 -3
  163. package/dist/backend/embedding.d.cts +2 -2
  164. package/dist/backend/embedding.d.ts +2 -2
  165. package/dist/backend/message.cjs +20 -13
  166. package/dist/backend/message.cjs.map +1 -1
  167. package/dist/backend/message.d.cts +7 -3
  168. package/dist/backend/message.d.ts +7 -3
  169. package/dist/backend/message.js +20 -13
  170. package/dist/backend/message.js.map +1 -1
  171. package/dist/backend/utils.d.cts +2 -2
  172. package/dist/backend/utils.d.ts +2 -2
  173. package/dist/{base-BurRTBA7.d.ts → base-CyFx7BRL.d.ts} +2 -2
  174. package/dist/{base-v-PYIq5G.d.cts → base-XfWeXQ-S.d.cts} +2 -2
  175. package/dist/{chat-DB_cf15S.d.cts → chat-BOb9n7AJ.d.cts} +7 -8
  176. package/dist/{chat-BbCYMAdE.d.ts → chat-DrqwUgD8.d.ts} +7 -8
  177. package/dist/context.d.cts +1 -1
  178. package/dist/context.d.ts +1 -1
  179. package/dist/emitter/emitter.cjs +2 -1
  180. package/dist/emitter/emitter.cjs.map +1 -1
  181. package/dist/emitter/emitter.d.cts +1 -1
  182. package/dist/emitter/emitter.d.ts +1 -1
  183. package/dist/emitter/emitter.js +2 -1
  184. package/dist/emitter/emitter.js.map +1 -1
  185. package/dist/emitter/types.d.cts +1 -1
  186. package/dist/emitter/types.d.ts +1 -1
  187. package/dist/{emitter-CN7I4uSV.d.ts → emitter-36-9MnvA.d.ts} +2 -2
  188. package/dist/{emitter-CGKd_-kK.d.cts → emitter-jN55XZZq.d.cts} +2 -2
  189. package/dist/index.d.cts +3 -3
  190. package/dist/index.d.ts +3 -3
  191. package/dist/internals/fetcher.d.cts +1 -1
  192. package/dist/internals/fetcher.d.ts +1 -1
  193. package/dist/memory/summarizeMemory.d.cts +2 -2
  194. package/dist/memory/summarizeMemory.d.ts +2 -2
  195. package/dist/middleware/streamToolCall.cjs +132 -0
  196. package/dist/middleware/streamToolCall.cjs.map +1 -0
  197. package/dist/middleware/streamToolCall.d.cts +94 -0
  198. package/dist/middleware/streamToolCall.d.ts +94 -0
  199. package/dist/middleware/streamToolCall.js +130 -0
  200. package/dist/middleware/streamToolCall.js.map +1 -0
  201. package/dist/middleware/trajectory.cjs +14 -5
  202. package/dist/middleware/trajectory.cjs.map +1 -1
  203. package/dist/middleware/trajectory.d.cts +1 -1
  204. package/dist/middleware/trajectory.d.ts +1 -1
  205. package/dist/middleware/trajectory.js +13 -4
  206. package/dist/middleware/trajectory.js.map +1 -1
  207. package/dist/parsers/linePrefix.d.cts +1 -1
  208. package/dist/parsers/linePrefix.d.ts +1 -1
  209. package/dist/tools/arxiv.d.cts +1 -1
  210. package/dist/tools/arxiv.d.ts +1 -1
  211. package/dist/tools/base.d.cts +1 -1
  212. package/dist/tools/base.d.ts +1 -1
  213. package/dist/tools/calculator.d.cts +1 -1
  214. package/dist/tools/calculator.d.ts +1 -1
  215. package/dist/tools/custom.d.cts +2 -2
  216. package/dist/tools/custom.d.ts +2 -2
  217. package/dist/tools/database/elasticsearch.d.cts +1 -1
  218. package/dist/tools/database/elasticsearch.d.ts +1 -1
  219. package/dist/tools/database/milvus.d.cts +3 -3
  220. package/dist/tools/database/milvus.d.ts +3 -3
  221. package/dist/tools/database/qdrant.d.cts +1 -1
  222. package/dist/tools/database/qdrant.d.ts +1 -1
  223. package/dist/tools/database/sql.d.cts +1 -1
  224. package/dist/tools/database/sql.d.ts +1 -1
  225. package/dist/tools/handoff.cjs +68 -0
  226. package/dist/tools/handoff.cjs.map +1 -0
  227. package/dist/tools/handoff.d.cts +47 -0
  228. package/dist/tools/handoff.d.ts +47 -0
  229. package/dist/tools/handoff.js +66 -0
  230. package/dist/tools/handoff.js.map +1 -0
  231. package/dist/tools/llm.d.cts +2 -2
  232. package/dist/tools/llm.d.ts +2 -2
  233. package/dist/tools/mcp.d.cts +1 -1
  234. package/dist/tools/mcp.d.ts +1 -1
  235. package/dist/tools/openapi.d.cts +1 -1
  236. package/dist/tools/openapi.d.ts +1 -1
  237. package/dist/tools/python/output.d.cts +1 -1
  238. package/dist/tools/python/output.d.ts +1 -1
  239. package/dist/tools/python/python.d.cts +2 -2
  240. package/dist/tools/python/python.d.ts +2 -2
  241. package/dist/tools/search/base.d.cts +1 -1
  242. package/dist/tools/search/base.d.ts +1 -1
  243. package/dist/tools/search/duckDuckGoSearch.d.cts +1 -1
  244. package/dist/tools/search/duckDuckGoSearch.d.ts +1 -1
  245. package/dist/tools/search/googleSearch.d.cts +1 -1
  246. package/dist/tools/search/googleSearch.d.ts +1 -1
  247. package/dist/tools/search/searXNGSearch.d.cts +1 -1
  248. package/dist/tools/search/searXNGSearch.d.ts +1 -1
  249. package/dist/tools/search/wikipedia.d.cts +1 -1
  250. package/dist/tools/search/wikipedia.d.ts +1 -1
  251. package/dist/tools/similarity.d.cts +1 -1
  252. package/dist/tools/similarity.d.ts +1 -1
  253. package/dist/tools/think.d.cts +1 -1
  254. package/dist/tools/think.d.ts +1 -1
  255. package/dist/tools/weather/openMeteo.d.cts +1 -1
  256. package/dist/tools/weather/openMeteo.d.ts +1 -1
  257. package/dist/tools/web/webCrawler.d.cts +1 -1
  258. package/dist/tools/web/webCrawler.d.ts +1 -1
  259. package/dist/{types-BXkkbABd.d.ts → types-CJwiMH3u.d.ts} +11 -11
  260. package/dist/{types-Cx6f43du.d.cts → types-W0QttuP_.d.cts} +11 -11
  261. package/dist/version.cjs +1 -1
  262. package/dist/version.js +1 -1
  263. package/dist/workflows/agent.d.cts +3 -3
  264. package/dist/workflows/agent.d.ts +3 -3
  265. package/dist/workflows/workflow.d.cts +1 -1
  266. package/dist/workflows/workflow.d.ts +1 -1
  267. package/package.json +8 -8
@@ -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":";;;;;;;;;;;;;AA6CO,MAAeA,wBAEZC,SAAAA,CAAAA;EA/CV;;;;AAgDkBC,EAAAA,OAAAA;EACAC,qBAAAA,GAAiC,IAAA;AAEjD,EAAA,WAAA,CAA6BC,KAAAA,EAAU;AACrC,IAAA,KAAA,EAAK,EAAA,KADsBA,KAAAA,GAAAA,KAAAA;AAE3B,IAAA,IAAI,CAAC,KAAKC,OAAAA,EAAS;AACjB,MAAA,MAAM,IAAIC,WAAW,+BAAA,CAAA;AACvB;AACA,IAAA,IAAA,CAAKJ,OAAAA,GAAUK,OAAAA,CAAQC,IAAAA,CAAKC,KAAAA,CAAM;MAChCC,SAAAA,EAAW;AAAC,QAAA,SAAA;QAAW,IAAA,CAAKC,UAAAA;AAAY,QAAA;;MACxCC,OAAAA,EAAS;KACX,CAAA;AACF;AAEA,EAAA,IAAIP,OAAAA,GAAkB;AACpB,IAAA,OAAO,KAAKD,KAAAA,CAAMC,OAAAA;AACpB;AAEA,EAAA,IAAIM,UAAAA,GAAqB;AACvB,IAAA,MAAME,QAAAA,GAAW,IAAA,CAAKT,KAAAA,CAAMS,QAAAA,CAASC,KAAAA,CAAM,GAAA,CAAA,CAAK,CAAA,CAAA,CAAGA,KAAAA,CAAM,GAAA,CAAA,CAAK,CAAA,CAAA;AAC9D,IAAA,OAAOC,YAAYF,QAAAA,CAAAA;AACrB;EAEA,MAAgBG,OAAAA,CAAQC,OAAuBC,GAAAA,EAA0B;AACvE,IAAA,MAAMC,iBAAiBF,KAAAA,CAAME,cAAAA;AAC7B,IAAA,IAAIA,cAAAA,KAAmBA,cAAAA,YAA0BC,SAAAA,IAAaD,cAAAA,CAAeE,MAAAA,CAAAA,EAAS;AACpF,MAAA,MAAM,EAAEC,MAAAA,EAAM,GAAK,MAAM,KAAKC,gBAAAA,CAC5B;QACE,GAAGN,KAAAA;QACHI,MAAAA,EAAQF;AACV,OAAA,EACAD,GAAAA,CAAAA;AAEF,MAAA,OAAOI,MAAAA;AACT;AAEA,IAAA,MAAM,EACJE,YAAAA,EACAC,KAAAA,EACAC,QAAAA,EAAU,EAAEC,QAAAA,EAAQ,EAAE,GACpB,MAAMC,YAAAA,CAAa,MAAM,IAAA,CAAKC,cAAAA,CAAeZ,KAAAA,CAAAA,CAAAA;AAEjD,IAAA,OAAO,IAAIa,gBACT,IAAA,CAAKC,iBAAAA,CAAkBJ,QAAAA,CAAAA,EACvBK,iBAAAA,CAAkBP,KAAAA,CAAAA,EAClBD,YAAAA,CAAAA;AAEJ;AAEA,EAAA,MAAgBD,iBACd,EAAEF,MAAAA,EAAQ,GAAGJ,KAAAA,IACbC,GAAAA,EACmC;AACnC,IAAA,MAAMQ,QAAAA,GAAW,MAAMO,cAAAA,CAAe;MACpCC,WAAAA,EAAa,CAAA;MACb,GAAI,MAAM,IAAA,CAAKL,cAAAA,CAAeZ,KAAAA,CAAAA;AAC9BkB,MAAAA,WAAAA,EAAajB,GAAAA,CAAIkB,MAAAA;AACjBhC,MAAAA,KAAAA,EAAO,IAAA,CAAKA,KAAAA;AACZ,MAAA,GAAIiB,kBAAkBD,SAAAA,GAClB;AACEC,QAAAA,MAAAA;QACAC,MAAAA,EAAAA,CAAUD,MAAAA,CAAOgB,UAAUhB,MAAAA,aAAmBiB,QAAAA,GAC1C,WACCjB,MAAAA,CAAOgB,MAAAA,IAAUhB,MAAAA,aAAmBkB,OAAAA,GACnC,MAAA,GACA;OACR,GACA;AACElB,QAAAA,MAAAA,EAAQA,OAAOA,MAAAA,GAASmB,UAAAA,CAAcnB,OAAOA,MAAM,CAAA,GAAIoB,EAAEC,GAAAA,EAAG;AAC5DC,QAAAA,UAAAA,EAAYtB,MAAAA,CAAOuB,IAAAA;AACnBC,QAAAA,iBAAAA,EAAmBxB,MAAAA,CAAOyB;AAC5B;KACN,CAAA;AAEA,IAAA,OAAO;AACLC,MAAAA,MAAAA,EAAQrB,QAAAA,CAASqB,MAAAA;AACjBzB,MAAAA,MAAAA,EAAQ,IAAIQ,eAAAA,CACV;AAAC,QAAA,IAAIkB,iBAAiBC,IAAAA,CAAKC,SAAAA,CAAUxB,SAASqB,MAAAA,EAAQ,IAAA,EAAM,CAAA,CAAA;AAC5Df,OAAAA,EAAAA,iBAAAA,CAAkBN,QAAAA,CAASD,KAAK,CAAA,EAChCC,QAAAA,CAASF,YAAY;AAEzB,KAAA;AACF;EAEA,OAAO2B,aAAAA,CAAclC,OAAuBC,GAAAA,EAA0B;AACpE,IAAA,IAAI,CAAC,KAAKf,qBAAAA,IAAyB,CAACiD,QAAQnC,KAAAA,CAAMoC,KAAAA,IAAS,EAAE,CAAA,EAAG;AAC9D,MAAA,MAAM3B,QAAAA,GAAW,MAAM,IAAA,CAAKV,OAAAA,CAAQC,OAAOC,GAAAA,CAAAA;AAC3C,MAAA,MAAMQ,QAAAA;AACN,MAAA;AACF;AAEA,IAAA,MAAM,EACJ4B,YACA7B,KAAAA,EAAO8B,YAAAA,EACP/B,cAAcgC,mBAAAA,EACd9B,QAAAA,EAAU+B,eAAAA,EAAe,GACvBC,UAAAA,CAAW;MACb,GAAI,MAAM,IAAA,CAAK7B,cAAAA,CAAeZ,KAAAA,CAAAA;AAC9BkB,MAAAA,WAAAA,EAAajB,GAAAA,CAAIkB;KACnB,CAAA;AAEA,IAAA,IAAIuB,SAAAA,GAAoC,IAAA;AACxC,IAAA,WAAA,MAAiBC,SAASN,UAAAA,EAAY;AACpC,MAAA,IAAIO,OAAAA;AACJ,MAAA,QAAQD,MAAME,IAAAA;QACZ,KAAK,YAAA;AACHD,UAAAA,OAAAA,GAAU,IAAIb,gBAAAA,CAAiBY,KAAAA,CAAMG,IAAI,CAAA;AACzC,UAAA;QACF,KAAK,WAAA;AACHF,UAAAA,OAAAA,GAAU,IAAIb,gBAAAA,CAAiB;AAC7Bc,YAAAA,IAAAA,EAAMF,KAAAA,CAAME,IAAAA;AACZE,YAAAA,UAAAA,EAAYJ,KAAAA,CAAMI,UAAAA;AAClBC,YAAAA,QAAAA,EAAUL,KAAAA,CAAMK,QAAAA;AAChBhD,YAAAA,KAAAA,EAAO2C,KAAAA,CAAM3C;WACf,CAAA;AACA,UAAA;QACF,KAAK,OAAA;AACH,UAAA,MAAM,IAAIiD,eAAe,iBAAA,EAAmB;YAACN,KAAAA,CAAMO;AAAe,WAAA,CAAA;QACpE,KAAK,aAAA;AACHN,UAAAA,OAAAA,GAAU,IAAIO,WAAAA,CAAY;AACxBN,YAAAA,IAAAA,EAAMF,KAAAA,CAAME,IAAAA;AACZE,YAAAA,UAAAA,EAAYJ,KAAAA,CAAMI,UAAAA;AAClBC,YAAAA,QAAAA,EAAUL,KAAAA,CAAMK,QAAAA;AAChB3C,YAAAA,MAAAA,EAAQsC,KAAAA,CAAMtC;WAChB,CAAA;AACA,UAAA;QACF,KAAK,OAAA;AACHuC,UAAAA,OAAAA,GAAU,IAAIb,gBAAAA,CAAiB,EAAE,CAAA;AACjC,UAAA;AACF,QAAA;AACE,UAAA;AACJ;AACAW,MAAAA,SAAAA,GAAY,IAAI7B,eAAAA,CAAgB;AAAC+B,QAAAA;AAAQ,OAAA,CAAA;AACzC,MAAA,MAAMF,SAAAA;AACR;AAEA,IAAA,IAAI,CAACA,SAAAA,EAAW;AACd,MAAA,MAAM,IAAIO,eAAe,+BAAA,CAAA;AAC3B;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,CAACzC,KAAAA,EAAOD,YAAAA,EAAc6C,CAAAA,CAAAA,GAAK,MAAMC,QAAQC,GAAAA,CAAI;AACjDhB,QAAAA,YAAAA;AACAC,QAAAA,mBAAAA;AACAC,QAAAA;AACD,OAAA,CAAA;AACDE,MAAAA,SAAAA,CAAUlC,KAAAA,GAAQO,kBAAkBP,KAAAA,CAAAA;AACpCkC,MAAAA,SAAAA,CAAUnC,YAAAA,GAAeA,YAAAA;AAC3B,KAAA,CAAA,OAASgD,CAAAA,EAAG;AACV,MAAA,IAAI,CAACtD,GAAAA,CAAIkB,MAAAA,CAAOqC,OAAAA,EAAS;AACvB,QAAA,MAAMD,CAAAA;AACR;AACF;AACF;AAEA,EAAA,MAAgB3C,eACdZ,KAAAA,EACkE;AAClE,IAAA,MAAMoC,KAAAA,GAAQ,MAAMiB,OAAAA,CAAQC,GAAAA,CAAAA,CACzBtD,KAAAA,CAAMoC,SAAS,EAAA,EAAIqB,GAAAA,CAAI,OAAOC,IAAAA,MAAU;AACvC/B,MAAAA,IAAAA,EAAM+B,IAAAA,CAAK/B,IAAAA;AACXE,MAAAA,WAAAA,EAAa6B,IAAAA,CAAK7B,WAAAA;AAClB8B,MAAAA,WAAAA,EAAapC,UAAAA,CAAW,MAAMmC,IAAAA,CAAKE,kBAAAA,EAAkB;AACvD,KAAA,CAAA,CAAA,CAAA;AAGF,IAAA,MAAMlD,QAAAA,GAAWV,KAAAA,CAAMU,QAAAA,CAAS+C,GAAAA,CAAI,CAACI,GAAAA,KAAAA;AACnC,MAAA,IAAIA,eAAeC,aAAAA,EAAe;AAChCD,QAAAA,GAAAA,GAAME,oBAAoBF,GAAAA,CAAAA;AAC5B;AAEA,MAAA,IAAIA,eAAe9B,gBAAAA,EAAkB;AACnC,QAAA,OAAO;UAAEiC,IAAAA,EAAM,WAAA;AAAaC,UAAAA,OAAAA,EAASJ,GAAAA,CAAII;AAAQ,SAAA;AACnD,OAAA,MAAA,IAAWJ,eAAeV,WAAAA,EAAa;AACrC,QAAA,OAAO;UAAEa,IAAAA,EAAM,MAAA;AAAQC,UAAAA,OAAAA,EAASJ,GAAAA,CAAII;AAAQ,SAAA;AAC9C,OAAA,MAAA,IAAWJ,eAAeK,WAAAA,EAAa;AACrC,QAAA,OAAO;UAAEF,IAAAA,EAAM,MAAA;AAAQC,UAAAA,OAAAA,EAASJ,GAAAA,CAAII;AAAQ,SAAA;AAC9C,OAAA,MAAA,IAAWJ,eAAeM,aAAAA,EAAe;AACvC,QAAA,OAAO;UAAEH,IAAAA,EAAM,QAAA;UAAUC,OAAAA,EAASJ,GAAAA,CAAII,QAAQR,GAAAA,CAAI,CAACW,SAASA,IAAAA,CAAKtB,IAAI,CAAA,CAAEuB,IAAAA,CAAK,IAAA;AAAM,SAAA;AACpF;AACA,MAAA,OAAO;AAAEL,QAAAA,IAAAA,EAAMH,GAAAA,CAAIG,IAAAA;AAAMC,QAAAA,OAAAA,EAASJ,GAAAA,CAAII;AAAQ,OAAA;KAChD,CAAA;AAEA,IAAA,IAAIK,UAAAA;AACJ,IAAA,IAAItE,KAAAA,CAAMsE,UAAAA,IAActE,KAAAA,CAAMsE,UAAAA,YAAsBC,IAAAA,EAAM;AACxD,MAAA,IAAI,IAAA,CAAKC,iBAAAA,CAAkBC,QAAAA,CAAS,QAAA,CAAA,EAAW;AAC7CH,QAAAA,UAAAA,GAAa;UACXzB,IAAAA,EAAM,MAAA;AACNG,UAAAA,QAAAA,EAAUhD,MAAMsE,UAAAA,CAAW3C;AAC7B,SAAA;OACF,MAAO;AACL,QAAA,IAAA,CAAK+C,MAAAA,CAAOC,KAAK,CAAA,wCAAA,CAA0C,CAAA;AAC7D;AACF,KAAA,MAAA,IAAW3E,MAAMsE,UAAAA,EAAY;AAC3B,MAAA,IAAI,IAAA,CAAKE,iBAAAA,CAAkBC,QAAAA,CAASzE,KAAAA,CAAMsE,UAAU,CAAA,EAAG;AACrDA,QAAAA,UAAAA,GAAatE,KAAAA,CAAMsE,UAAAA;OACrB,MAAO;AACL,QAAA,IAAA,CAAKI,MAAAA,CAAOC,IAAAA,CAAK,CAAA,iCAAA,EAAoC3E,KAAAA,CAAMsE,UAAU,CAAA,mBAAA,CAAqB,CAAA;AAC5F;AACF;AAEA,IAAA,OAAO;AACL,MAAA,GAAG,IAAA,CAAKM,UAAAA;MACR,GAAG5E,KAAAA;AACHsE,MAAAA,UAAAA;AACAnF,MAAAA,KAAAA,EAAO,IAAA,CAAKA,KAAAA;AACZiD,MAAAA,KAAAA,EAAOyC,SAASzC,KAAAA,EAAO,CAAC,EAAET,IAAAA,EAAM,GAAG+B,MAAAA,KAAW;AAAC/B,QAAAA,IAAAA;AAAM+B,QAAAA;AAAK,OAAA,CAAA;AAC1DhD,MAAAA;AACF,KAAA;AACF;AAEUI,EAAAA,iBAAAA,CAAkBJ,QAAAA,EAAiE;AAC3F,IAAA,OAAOA,QAAAA,CAASoE,OAAAA,CAAQ,CAACjB,GAAAA,KAAAA;AACvB,MAAA,IAAIA,GAAAA,CAAIG,SAAS,MAAA,EAAQ;AACvB,QAAA,OAAO,IAAIb,WAAAA,CAAYU,GAAAA,CAAII,OAAAA,EAASJ,IAAIkB,eAAe,CAAA;AACzD;AACA,MAAA,OAAO,IAAIhD,gBAAAA,CACT8B,GAAAA,CAAII,OAAAA,EACJJ,IAAIkB,eAAe,CAAA;KAEvB,CAAA;AACF;EAEAC,cAAAA,GAAiB;AACf,IAAA,OAAO;AACL,MAAA,GAAG,MAAMA,cAAAA,EAAAA;AACTtF,MAAAA,UAAAA,EAAY,IAAA,CAAKA,UAAAA;AACjBN,MAAAA,OAAAA,EAAS,IAAA,CAAKA,OAAAA;AACdF,MAAAA,qBAAAA,EAAuB,IAAA,CAAKA;AAC9B,KAAA;AACF;AAEA,EAAA,MAAM+F,aAAa,EAAEvF,UAAAA,EAAYN,OAAAA,EAAS,GAAG8F,UAAAA,EAAoD;AAC/F,IAAA,MAAMC,QAAAA,GAAW,MAAMnG,SAAAA,CAAUoG,QAAAA,CAAS,GAAG1F,UAAAA,CAAAA,CAAAA,EAAcN,OAAAA,CAAAA,CAAS,CAAA;AACpE,IAAA,IAAI,EAAE+F,oBAAoBpG,eAAAA,CAAAA,EAAkB;AAC1C,MAAA,MAAM,IAAIsG,MAAM,4BAAA,CAAA;AAClB;AACAF,IAAAA,QAAAA,CAASG,OAAAA,EAAO;AAChBC,IAAAA,MAAAA,CAAOC,OAAO,IAAA,EAAM;MAClB,GAAGN,QAAAA;AACH/F,MAAAA,KAAAA,EAAOgG,QAAAA,CAAShG;KAClB,CAAA;AACF;AACF","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-CGKd_-kK.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-DB_cf15S.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-CN7I4uSV.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-BbCYMAdE.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 });
@@ -106,10 +107,26 @@ function mergeTokenUsage(target, ...sources) {
106
107
  }
107
108
  }
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");
109
125
 
110
126
  exports.decodeCustomMessage = decodeCustomMessage;
111
127
  exports.encodeCustomMessage = encodeCustomMessage;
112
128
  exports.extractTokenUsage = extractTokenUsage;
129
+ exports.isToolCallValid = isToolCallValid;
113
130
  exports.mergeTokenUsage = mergeTokenUsage;
114
131
  exports.parseHeadersFromEnv = parseHeadersFromEnv;
115
132
  exports.vercelFetcher = vercelFetcher;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/adapters/vercel/backend/utils.ts"],"names":["encodeCustomMessage","msg","UserMessage","type","text","role","content","slice","decodeCustomMessage","value","_","id","split","join","unmaskCustomMessage","Role","USER","key","Array","isArray","map","val","filter","isTruthy","decoded","vercelFetcher","customFetch","url","options","isString","body","getProp","headers","JSON","parse","isPlainObject","messages","forEach","stringify","fetcher","fetch","parseHeadersFromEnv","env","parseEnv","z","preprocess","Object","fromEntries","String","pair","includes","record","string","extractTokenUsage","usage","promptTokens","inputTokens","completionTokens","outputTokens","totalTokens","reasoningTokens","cachedPromptTokens","cachedInputTokens","mergeTokenUsage","target","sources","source"],"mappings":"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","file":"utils.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CustomMessage, Role, UserMessage } from \"@/backend/message.js\";\nimport { isPlainObject, isString, isTruthy } from \"remeda\";\nimport { getProp } from \"@/internals/helpers/object.js\";\nimport type { TextPart, LanguageModelUsage } from \"ai\";\nimport { z } from \"zod\";\nimport { parseEnv } from \"@/internals/env.js\";\nimport { ChatModelUsage } from \"@/backend/chat.js\";\n\nexport function encodeCustomMessage(msg: CustomMessage): UserMessage {\n return new UserMessage([\n {\n type: \"text\",\n text: `#custom_role#${msg.role}#`,\n },\n ...(msg.content.slice() as TextPart[]),\n ]);\n}\n\nexport function decodeCustomMessage(value: string) {\n const [_, id, role, ...content] = value.split(\"#\");\n if (id !== \"custom_role\") {\n return;\n }\n return { role, content: content.join(\"#\") };\n}\n\nfunction unmaskCustomMessage(msg: Record<string, any>) {\n if (msg.role !== Role.USER) {\n return;\n }\n\n for (const key of [\"content\", \"text\"]) {\n let value = msg[key];\n if (!value) {\n continue;\n }\n\n if (Array.isArray(value)) {\n value = value\n .map((val) => (val.type === \"text\" ? val.text || val.content : null))\n .filter(isTruthy)\n .join(\"\");\n }\n\n const decoded = decodeCustomMessage(value);\n if (decoded) {\n msg.role = decoded.role;\n msg[key] = decoded.content;\n break;\n }\n }\n}\n\nexport function vercelFetcher(customFetch?: typeof fetch): typeof fetch {\n return async (url, options) => {\n if (\n options &&\n isString(options.body) &&\n (getProp(options.headers, [\"content-type\"]) === \"application/json\" ||\n getProp(options.headers, [\"Content-Type\"]) === \"application/json\")\n ) {\n const body = JSON.parse(options.body);\n if (isPlainObject(body) && Array.isArray(body.messages)) {\n body.messages.forEach((msg) => {\n if (!isPlainObject(msg)) {\n return;\n }\n unmaskCustomMessage(msg);\n });\n }\n options.body = JSON.stringify(body);\n }\n\n const fetcher = customFetch ?? fetch;\n return await fetcher(url, options);\n };\n}\n\nexport function parseHeadersFromEnv(env: string): Record<string, any> {\n return parseEnv(\n env,\n z.preprocess((value) => {\n return Object.fromEntries(\n String(value || \"\")\n .split(\",\")\n .filter((pair) => pair.includes(\"=\"))\n .map((pair) => pair.split(\"=\")),\n );\n }, z.record(z.string())),\n );\n}\n\nexport function extractTokenUsage(usage: LanguageModelUsage): ChatModelUsage {\n return {\n promptTokens: usage.inputTokens ?? 0,\n completionTokens: usage.outputTokens ?? 0,\n totalTokens: usage.totalTokens ?? 0,\n reasoningTokens: usage.reasoningTokens,\n cachedPromptTokens: usage.cachedInputTokens,\n };\n}\n\nexport function mergeTokenUsage(target: ChatModelUsage, ...sources: ChatModelUsage[]): void {\n for (const source of sources) {\n target.totalTokens += source.totalTokens ?? 0;\n target.promptTokens += source.promptTokens ?? 0;\n target.completionTokens += source.completionTokens ?? 0;\n if (source.reasoningTokens) {\n target.reasoningTokens = (target.reasoningTokens ?? 0) + source.reasoningTokens;\n }\n if (source.cachedPromptTokens) {\n target.cachedPromptTokens = (target.cachedPromptTokens ?? 0) + source.cachedPromptTokens;\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/adapters/vercel/backend/utils.ts"],"names":["encodeCustomMessage","msg","UserMessage","type","text","role","content","slice","decodeCustomMessage","value","_","id","split","join","unmaskCustomMessage","Role","USER","key","Array","isArray","map","val","filter","isTruthy","decoded","vercelFetcher","customFetch","url","options","isString","body","getProp","headers","JSON","parse","isPlainObject","messages","forEach","stringify","fetcher","fetch","parseHeadersFromEnv","env","parseEnv","z","preprocess","Object","fromEntries","String","pair","includes","record","string","extractTokenUsage","usage","promptTokens","inputTokens","completionTokens","outputTokens","totalTokens","reasoningTokens","cachedPromptTokens","cachedInputTokens","mergeTokenUsage","target","sources","source","isToolCallValid","obj","toolName","toolCallId","input","Boolean","parseBrokenJson"],"mappings":"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","file":"utils.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CustomMessage, Role, UserMessage } from \"@/backend/message.js\";\nimport { isPlainObject, isString, isTruthy } from \"remeda\";\nimport { getProp } from \"@/internals/helpers/object.js\";\nimport { TextPart, LanguageModelUsage, ToolCallPart } from \"ai\";\nimport { z } from \"zod\";\nimport { parseEnv } from \"@/internals/env.js\";\nimport { ChatModelUsage } from \"@/backend/chat.js\";\nimport { parseBrokenJson } from \"@/internals/helpers/schema.js\";\n\nexport function encodeCustomMessage(msg: CustomMessage): UserMessage {\n return new UserMessage([\n {\n type: \"text\",\n text: `#custom_role#${msg.role}#`,\n },\n ...(msg.content.slice() as TextPart[]),\n ]);\n}\n\nexport function decodeCustomMessage(value: string) {\n const [_, id, role, ...content] = value.split(\"#\");\n if (id !== \"custom_role\") {\n return;\n }\n return { role, content: content.join(\"#\") };\n}\n\nfunction unmaskCustomMessage(msg: Record<string, any>) {\n if (msg.role !== Role.USER) {\n return;\n }\n\n for (const key of [\"content\", \"text\"]) {\n let value = msg[key];\n if (!value) {\n continue;\n }\n\n if (Array.isArray(value)) {\n value = value\n .map((val) => (val.type === \"text\" ? val.text || val.content : null))\n .filter(isTruthy)\n .join(\"\");\n }\n\n const decoded = decodeCustomMessage(value);\n if (decoded) {\n msg.role = decoded.role;\n msg[key] = decoded.content;\n break;\n }\n }\n}\n\nexport function vercelFetcher(customFetch?: typeof fetch): typeof fetch {\n return async (url, options) => {\n if (\n options &&\n isString(options.body) &&\n (getProp(options.headers, [\"content-type\"]) === \"application/json\" ||\n getProp(options.headers, [\"Content-Type\"]) === \"application/json\")\n ) {\n const body = JSON.parse(options.body);\n if (isPlainObject(body) && Array.isArray(body.messages)) {\n body.messages.forEach((msg) => {\n if (!isPlainObject(msg)) {\n return;\n }\n unmaskCustomMessage(msg);\n });\n }\n options.body = JSON.stringify(body);\n }\n\n const fetcher = customFetch ?? fetch;\n return await fetcher(url, options);\n };\n}\n\nexport function parseHeadersFromEnv(env: string): Record<string, any> {\n return parseEnv(\n env,\n z.preprocess((value) => {\n return Object.fromEntries(\n String(value || \"\")\n .split(\",\")\n .filter((pair) => pair.includes(\"=\"))\n .map((pair) => pair.split(\"=\")),\n );\n }, z.record(z.string())),\n );\n}\n\nexport function extractTokenUsage(usage: LanguageModelUsage): ChatModelUsage {\n return {\n promptTokens: usage.inputTokens ?? 0,\n completionTokens: usage.outputTokens ?? 0,\n totalTokens: usage.totalTokens ?? 0,\n reasoningTokens: usage.reasoningTokens,\n cachedPromptTokens: usage.cachedInputTokens,\n };\n}\n\nexport function mergeTokenUsage(target: ChatModelUsage, ...sources: ChatModelUsage[]): void {\n for (const source of sources) {\n target.totalTokens += source.totalTokens ?? 0;\n target.promptTokens += source.promptTokens ?? 0;\n target.completionTokens += source.completionTokens ?? 0;\n if (source.reasoningTokens) {\n target.reasoningTokens = (target.reasoningTokens ?? 0) + source.reasoningTokens;\n }\n if (source.cachedPromptTokens) {\n target.cachedPromptTokens = (target.cachedPromptTokens ?? 0) + source.cachedPromptTokens;\n }\n }\n}\n\nexport function isToolCallValid(obj: ToolCallPart) {\n if (!obj.toolName || !obj.toolCallId || !obj.input) {\n return false;\n }\n if (isString(obj.input)) {\n return Boolean(parseBrokenJson(obj.input, { pair: [\"{\", \"}\"] }));\n }\n return Boolean(obj.input);\n}\n"]}
@@ -1,11 +1,11 @@
1
1
  import { CustomMessage, UserMessage } from '../../../backend/message.cjs';
2
- import { LanguageModelUsage } from 'ai';
3
- import { f as ChatModelUsage } from '../../../chat-DB_cf15S.cjs';
2
+ import { LanguageModelUsage, ToolCallPart } from 'ai';
3
+ import { f as ChatModelUsage } from '../../../chat-BOb9n7AJ.cjs';
4
4
  import '../../../internals/serializable.cjs';
5
5
  import '../../../internals/types.cjs';
6
6
  import '../../../internals/helpers/guards.cjs';
7
7
  import '../../../context.cjs';
8
- import '../../../emitter-CGKd_-kK.cjs';
8
+ import '../../../emitter-jN55XZZq.cjs';
9
9
  import '../../../internals/helpers/promise.cjs';
10
10
  import '../../../errors.cjs';
11
11
  import 'promise-based-task';
@@ -34,5 +34,6 @@ declare function vercelFetcher(customFetch?: typeof fetch): typeof fetch;
34
34
  declare function parseHeadersFromEnv(env: string): Record<string, any>;
35
35
  declare function extractTokenUsage(usage: LanguageModelUsage): ChatModelUsage;
36
36
  declare function mergeTokenUsage(target: ChatModelUsage, ...sources: ChatModelUsage[]): void;
37
+ declare function isToolCallValid(obj: ToolCallPart): boolean;
37
38
 
38
- export { decodeCustomMessage, encodeCustomMessage, extractTokenUsage, mergeTokenUsage, parseHeadersFromEnv, vercelFetcher };
39
+ export { decodeCustomMessage, encodeCustomMessage, extractTokenUsage, isToolCallValid, mergeTokenUsage, parseHeadersFromEnv, vercelFetcher };
@@ -1,11 +1,11 @@
1
1
  import { CustomMessage, UserMessage } from '../../../backend/message.js';
2
- import { LanguageModelUsage } from 'ai';
3
- import { f as ChatModelUsage } from '../../../chat-BbCYMAdE.js';
2
+ import { LanguageModelUsage, ToolCallPart } from 'ai';
3
+ import { f as ChatModelUsage } from '../../../chat-DrqwUgD8.js';
4
4
  import '../../../internals/serializable.js';
5
5
  import '../../../internals/types.js';
6
6
  import '../../../internals/helpers/guards.js';
7
7
  import '../../../context.js';
8
- import '../../../emitter-CN7I4uSV.js';
8
+ import '../../../emitter-36-9MnvA.js';
9
9
  import '../../../internals/helpers/promise.js';
10
10
  import '../../../errors.js';
11
11
  import 'promise-based-task';
@@ -34,5 +34,6 @@ declare function vercelFetcher(customFetch?: typeof fetch): typeof fetch;
34
34
  declare function parseHeadersFromEnv(env: string): Record<string, any>;
35
35
  declare function extractTokenUsage(usage: LanguageModelUsage): ChatModelUsage;
36
36
  declare function mergeTokenUsage(target: ChatModelUsage, ...sources: ChatModelUsage[]): void;
37
+ declare function isToolCallValid(obj: ToolCallPart): boolean;
37
38
 
38
- export { decodeCustomMessage, encodeCustomMessage, extractTokenUsage, mergeTokenUsage, parseHeadersFromEnv, vercelFetcher };
39
+ export { decodeCustomMessage, encodeCustomMessage, extractTokenUsage, isToolCallValid, mergeTokenUsage, parseHeadersFromEnv, vercelFetcher };
@@ -3,6 +3,7 @@ import { isString, isPlainObject, isTruthy } from 'remeda';
3
3
  import { getProp } from '../../../internals/helpers/object.js';
4
4
  import { z } from 'zod';
5
5
  import { parseEnv } from '../../../internals/env.js';
6
+ import { parseBrokenJson } from '../../../internals/helpers/schema.js';
6
7
 
7
8
  var __defProp = Object.defineProperty;
8
9
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
@@ -104,7 +105,22 @@ function mergeTokenUsage(target, ...sources) {
104
105
  }
105
106
  }
106
107
  __name(mergeTokenUsage, "mergeTokenUsage");
108
+ function isToolCallValid(obj) {
109
+ if (!obj.toolName || !obj.toolCallId || !obj.input) {
110
+ return false;
111
+ }
112
+ if (isString(obj.input)) {
113
+ return Boolean(parseBrokenJson(obj.input, {
114
+ pair: [
115
+ "{",
116
+ "}"
117
+ ]
118
+ }));
119
+ }
120
+ return Boolean(obj.input);
121
+ }
122
+ __name(isToolCallValid, "isToolCallValid");
107
123
 
108
- export { decodeCustomMessage, encodeCustomMessage, extractTokenUsage, mergeTokenUsage, parseHeadersFromEnv, vercelFetcher };
124
+ export { decodeCustomMessage, encodeCustomMessage, extractTokenUsage, isToolCallValid, mergeTokenUsage, parseHeadersFromEnv, vercelFetcher };
109
125
  //# sourceMappingURL=utils.js.map
110
126
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/adapters/vercel/backend/utils.ts"],"names":["encodeCustomMessage","msg","UserMessage","type","text","role","content","slice","decodeCustomMessage","value","_","id","split","join","unmaskCustomMessage","Role","USER","key","Array","isArray","map","val","filter","isTruthy","decoded","vercelFetcher","customFetch","url","options","isString","body","getProp","headers","JSON","parse","isPlainObject","messages","forEach","stringify","fetcher","fetch","parseHeadersFromEnv","env","parseEnv","z","preprocess","Object","fromEntries","String","pair","includes","record","string","extractTokenUsage","usage","promptTokens","inputTokens","completionTokens","outputTokens","totalTokens","reasoningTokens","cachedPromptTokens","cachedInputTokens","mergeTokenUsage","target","sources","source"],"mappings":"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","file":"utils.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CustomMessage, Role, UserMessage } from \"@/backend/message.js\";\nimport { isPlainObject, isString, isTruthy } from \"remeda\";\nimport { getProp } from \"@/internals/helpers/object.js\";\nimport type { TextPart, LanguageModelUsage } from \"ai\";\nimport { z } from \"zod\";\nimport { parseEnv } from \"@/internals/env.js\";\nimport { ChatModelUsage } from \"@/backend/chat.js\";\n\nexport function encodeCustomMessage(msg: CustomMessage): UserMessage {\n return new UserMessage([\n {\n type: \"text\",\n text: `#custom_role#${msg.role}#`,\n },\n ...(msg.content.slice() as TextPart[]),\n ]);\n}\n\nexport function decodeCustomMessage(value: string) {\n const [_, id, role, ...content] = value.split(\"#\");\n if (id !== \"custom_role\") {\n return;\n }\n return { role, content: content.join(\"#\") };\n}\n\nfunction unmaskCustomMessage(msg: Record<string, any>) {\n if (msg.role !== Role.USER) {\n return;\n }\n\n for (const key of [\"content\", \"text\"]) {\n let value = msg[key];\n if (!value) {\n continue;\n }\n\n if (Array.isArray(value)) {\n value = value\n .map((val) => (val.type === \"text\" ? val.text || val.content : null))\n .filter(isTruthy)\n .join(\"\");\n }\n\n const decoded = decodeCustomMessage(value);\n if (decoded) {\n msg.role = decoded.role;\n msg[key] = decoded.content;\n break;\n }\n }\n}\n\nexport function vercelFetcher(customFetch?: typeof fetch): typeof fetch {\n return async (url, options) => {\n if (\n options &&\n isString(options.body) &&\n (getProp(options.headers, [\"content-type\"]) === \"application/json\" ||\n getProp(options.headers, [\"Content-Type\"]) === \"application/json\")\n ) {\n const body = JSON.parse(options.body);\n if (isPlainObject(body) && Array.isArray(body.messages)) {\n body.messages.forEach((msg) => {\n if (!isPlainObject(msg)) {\n return;\n }\n unmaskCustomMessage(msg);\n });\n }\n options.body = JSON.stringify(body);\n }\n\n const fetcher = customFetch ?? fetch;\n return await fetcher(url, options);\n };\n}\n\nexport function parseHeadersFromEnv(env: string): Record<string, any> {\n return parseEnv(\n env,\n z.preprocess((value) => {\n return Object.fromEntries(\n String(value || \"\")\n .split(\",\")\n .filter((pair) => pair.includes(\"=\"))\n .map((pair) => pair.split(\"=\")),\n );\n }, z.record(z.string())),\n );\n}\n\nexport function extractTokenUsage(usage: LanguageModelUsage): ChatModelUsage {\n return {\n promptTokens: usage.inputTokens ?? 0,\n completionTokens: usage.outputTokens ?? 0,\n totalTokens: usage.totalTokens ?? 0,\n reasoningTokens: usage.reasoningTokens,\n cachedPromptTokens: usage.cachedInputTokens,\n };\n}\n\nexport function mergeTokenUsage(target: ChatModelUsage, ...sources: ChatModelUsage[]): void {\n for (const source of sources) {\n target.totalTokens += source.totalTokens ?? 0;\n target.promptTokens += source.promptTokens ?? 0;\n target.completionTokens += source.completionTokens ?? 0;\n if (source.reasoningTokens) {\n target.reasoningTokens = (target.reasoningTokens ?? 0) + source.reasoningTokens;\n }\n if (source.cachedPromptTokens) {\n target.cachedPromptTokens = (target.cachedPromptTokens ?? 0) + source.cachedPromptTokens;\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/adapters/vercel/backend/utils.ts"],"names":["encodeCustomMessage","msg","UserMessage","type","text","role","content","slice","decodeCustomMessage","value","_","id","split","join","unmaskCustomMessage","Role","USER","key","Array","isArray","map","val","filter","isTruthy","decoded","vercelFetcher","customFetch","url","options","isString","body","getProp","headers","JSON","parse","isPlainObject","messages","forEach","stringify","fetcher","fetch","parseHeadersFromEnv","env","parseEnv","z","preprocess","Object","fromEntries","String","pair","includes","record","string","extractTokenUsage","usage","promptTokens","inputTokens","completionTokens","outputTokens","totalTokens","reasoningTokens","cachedPromptTokens","cachedInputTokens","mergeTokenUsage","target","sources","source","isToolCallValid","obj","toolName","toolCallId","input","Boolean","parseBrokenJson"],"mappings":";;;;;;;;;AAcO,SAASA,oBAAoBC,GAAAA,EAAkB;AACpD,EAAA,OAAO,IAAIC,WAAAA,CAAY;AACrB,IAAA;MACEC,IAAAA,EAAM,MAAA;MACNC,IAAAA,EAAM,CAAA,aAAA,EAAgBH,IAAII,IAAI,CAAA,CAAA;AAChC,KAAA;AACIJ,IAAAA,GAAAA,GAAAA,CAAIK,QAAQC,KAAAA;AACjB,GAAA,CAAA;AACH;AARgBP,MAAAA,CAAAA,mBAAAA,EAAAA,qBAAAA,CAAAA;AAUT,SAASQ,oBAAoBC,KAAAA,EAAa;AAC/C,EAAA,MAAM,CAACC,GAAGC,EAAAA,EAAIN,IAAAA,EAAM,GAAGC,OAAAA,CAAAA,GAAWG,KAAAA,CAAMG,KAAAA,CAAM,GAAA,CAAA;AAC9C,EAAA,IAAID,OAAO,aAAA,EAAe;AACxB,IAAA;AACF;AACA,EAAA,OAAO;AAAEN,IAAAA,IAAAA;IAAMC,OAAAA,EAASA,OAAAA,CAAQO,KAAK,GAAA;AAAK,GAAA;AAC5C;AANgBL,MAAAA,CAAAA,mBAAAA,EAAAA,qBAAAA,CAAAA;AAQhB,SAASM,oBAAoBb,GAAAA,EAAwB;AACnD,EAAA,IAAIA,GAAAA,CAAII,IAAAA,KAASU,IAAAA,CAAKC,IAAAA,EAAM;AAC1B,IAAA;AACF;AAEA,EAAA,KAAA,MAAWC,GAAAA,IAAO;AAAC,IAAA,SAAA;AAAW,IAAA;AAAS,GAAA,EAAA;AACrC,IAAA,IAAIR,KAAAA,GAAQR,IAAIgB,GAAAA,CAAAA;AAChB,IAAA,IAAI,CAACR,KAAAA,EAAO;AACV,MAAA;AACF;AAEA,IAAA,IAAIS,KAAAA,CAAMC,OAAAA,CAAQV,KAAAA,CAAAA,EAAQ;AACxBA,MAAAA,KAAAA,GAAQA,MACLW,GAAAA,CAAI,CAACC,GAAAA,KAASA,GAAAA,CAAIlB,SAAS,MAAA,GAASkB,GAAAA,CAAIjB,IAAAA,IAAQiB,GAAAA,CAAIf,UAAU,IAAA,CAAA,CAC9DgB,OAAOC,QAAAA,CAAAA,CACPV,KAAK,EAAA,CAAA;AACV;AAEA,IAAA,MAAMW,OAAAA,GAAUhB,oBAAoBC,KAAAA,CAAAA;AACpC,IAAA,IAAIe,OAAAA,EAAS;AACXvB,MAAAA,GAAAA,CAAII,OAAOmB,OAAAA,CAAQnB,IAAAA;AACnBJ,MAAAA,GAAAA,CAAIgB,GAAAA,IAAOO,OAAAA,CAAQlB,OAAAA;AACnB,MAAA;AACF;AACF;AACF;AAzBSQ,MAAAA,CAAAA,mBAAAA,EAAAA,qBAAAA,CAAAA;AA2BF,SAASW,cAAcC,WAAAA,EAA0B;AACtD,EAAA,OAAO,OAAOC,KAAKC,OAAAA,KAAAA;AACjB,IAAA,IACEA,WACAC,QAAAA,CAASD,OAAAA,CAAQE,IAAI,CAAA,KACpBC,OAAAA,CAAQH,QAAQI,OAAAA,EAAS;AAAC,MAAA;KAAe,CAAA,KAAM,kBAAA,IAC9CD,OAAAA,CAAQH,OAAAA,CAAQI,OAAAA,EAAS;AAAC,MAAA;AAAe,KAAA,CAAA,KAAM,kBAAA,CAAA,EACjD;AACA,MAAA,MAAMF,IAAAA,GAAOG,IAAAA,CAAKC,KAAAA,CAAMN,OAAAA,CAAQE,IAAI,CAAA;AACpC,MAAA,IAAIK,cAAcL,IAAAA,CAAAA,IAASZ,MAAMC,OAAAA,CAAQW,IAAAA,CAAKM,QAAQ,CAAA,EAAG;AACvDN,QAAAA,IAAAA,CAAKM,QAAAA,CAASC,OAAAA,CAAQ,CAACpC,GAAAA,KAAAA;AACrB,UAAA,IAAI,CAACkC,aAAAA,CAAclC,GAAAA,CAAAA,EAAM;AACvB,YAAA;AACF;AACAa,UAAAA,mBAAAA,CAAoBb,GAAAA,CAAAA;SACtB,CAAA;AACF;AACA2B,MAAAA,OAAAA,CAAQE,IAAAA,GAAOG,IAAAA,CAAKK,SAAAA,CAAUR,IAAAA,CAAAA;AAChC;AAEA,IAAA,MAAMS,UAAUb,WAAAA,IAAec,KAAAA;AAC/B,IAAA,OAAO,MAAMD,OAAAA,CAAQZ,GAAAA,EAAKC,OAAAA,CAAAA;AAC5B,GAAA;AACF;AAvBgBH,MAAAA,CAAAA,aAAAA,EAAAA,eAAAA,CAAAA;AAyBT,SAASgB,oBAAoBC,GAAAA,EAAW;AAC7C,EAAA,OAAOC,QAAAA,CACLD,GAAAA,EACAE,CAAAA,CAAEC,UAAAA,CAAW,CAACpC,KAAAA,KAAAA;AACZ,IAAA,OAAOqC,MAAAA,CAAOC,WAAAA,CACZC,MAAAA,CAAOvC,KAAAA,IAAS,EAAA,EACbG,KAAAA,CAAM,GAAA,CAAA,CACNU,MAAAA,CAAO,CAAC2B,IAAAA,KAASA,KAAKC,QAAAA,CAAS,GAAA,CAAA,CAAA,CAC/B9B,GAAAA,CAAI,CAAC6B,SAASA,IAAAA,CAAKrC,KAAAA,CAAM,GAAA,CAAA,CAAA,CAAA;AAEhC,GAAA,EAAGgC,EAAEO,MAAAA,CAAOP,CAAAA,CAAEQ,MAAAA,EAAM,CAAA,CAAA,CAAA;AAExB;AAZgBX,MAAAA,CAAAA,mBAAAA,EAAAA,qBAAAA,CAAAA;AAcT,SAASY,kBAAkBC,KAAAA,EAAyB;AACzD,EAAA,OAAO;AACLC,IAAAA,YAAAA,EAAcD,MAAME,WAAAA,IAAe,CAAA;AACnCC,IAAAA,gBAAAA,EAAkBH,MAAMI,YAAAA,IAAgB,CAAA;AACxCC,IAAAA,WAAAA,EAAaL,MAAMK,WAAAA,IAAe,CAAA;AAClCC,IAAAA,eAAAA,EAAiBN,KAAAA,CAAMM,eAAAA;AACvBC,IAAAA,kBAAAA,EAAoBP,KAAAA,CAAMQ;AAC5B,GAAA;AACF;AARgBT,MAAAA,CAAAA,iBAAAA,EAAAA,mBAAAA,CAAAA;AAUT,SAASU,eAAAA,CAAgBC,WAA2BC,OAAAA,EAAyB;AAClF,EAAA,KAAA,MAAWC,UAAUD,OAAAA,EAAS;AAC5BD,IAAAA,MAAAA,CAAOL,WAAAA,IAAeO,OAAOP,WAAAA,IAAe,CAAA;AAC5CK,IAAAA,MAAAA,CAAOT,YAAAA,IAAgBW,OAAOX,YAAAA,IAAgB,CAAA;AAC9CS,IAAAA,MAAAA,CAAOP,gBAAAA,IAAoBS,OAAOT,gBAAAA,IAAoB,CAAA;AACtD,IAAA,IAAIS,OAAON,eAAAA,EAAiB;AAC1BI,MAAAA,MAAAA,CAAOJ,eAAAA,GAAAA,CAAmBI,MAAAA,CAAOJ,eAAAA,IAAmB,CAAA,IAAKM,MAAAA,CAAON,eAAAA;AAClE;AACA,IAAA,IAAIM,OAAOL,kBAAAA,EAAoB;AAC7BG,MAAAA,MAAAA,CAAOH,kBAAAA,GAAAA,CAAsBG,MAAAA,CAAOH,kBAAAA,IAAsB,CAAA,IAAKK,MAAAA,CAAOL,kBAAAA;AACxE;AACF;AACF;AAZgBE,MAAAA,CAAAA,eAAAA,EAAAA,iBAAAA,CAAAA;AAcT,SAASI,gBAAgBC,GAAAA,EAAiB;AAC/C,EAAA,IAAI,CAACA,IAAIC,QAAAA,IAAY,CAACD,IAAIE,UAAAA,IAAc,CAACF,IAAIG,KAAAA,EAAO;AAClD,IAAA,OAAO,KAAA;AACT;AACA,EAAA,IAAI1C,QAAAA,CAASuC,GAAAA,CAAIG,KAAK,CAAA,EAAG;AACvB,IAAA,OAAOC,OAAAA,CAAQC,eAAAA,CAAgBL,GAAAA,CAAIG,KAAAA,EAAO;MAAEtB,IAAAA,EAAM;AAAC,QAAA,GAAA;AAAK,QAAA;;AAAK,KAAA,CAAA,CAAA;AAC/D;AACA,EAAA,OAAOuB,OAAAA,CAAQJ,IAAIG,KAAK,CAAA;AAC1B;AARgBJ,MAAAA,CAAAA,eAAAA,EAAAA,iBAAAA,CAAAA","file":"utils.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { CustomMessage, Role, UserMessage } from \"@/backend/message.js\";\nimport { isPlainObject, isString, isTruthy } from \"remeda\";\nimport { getProp } from \"@/internals/helpers/object.js\";\nimport { TextPart, LanguageModelUsage, ToolCallPart } from \"ai\";\nimport { z } from \"zod\";\nimport { parseEnv } from \"@/internals/env.js\";\nimport { ChatModelUsage } from \"@/backend/chat.js\";\nimport { parseBrokenJson } from \"@/internals/helpers/schema.js\";\n\nexport function encodeCustomMessage(msg: CustomMessage): UserMessage {\n return new UserMessage([\n {\n type: \"text\",\n text: `#custom_role#${msg.role}#`,\n },\n ...(msg.content.slice() as TextPart[]),\n ]);\n}\n\nexport function decodeCustomMessage(value: string) {\n const [_, id, role, ...content] = value.split(\"#\");\n if (id !== \"custom_role\") {\n return;\n }\n return { role, content: content.join(\"#\") };\n}\n\nfunction unmaskCustomMessage(msg: Record<string, any>) {\n if (msg.role !== Role.USER) {\n return;\n }\n\n for (const key of [\"content\", \"text\"]) {\n let value = msg[key];\n if (!value) {\n continue;\n }\n\n if (Array.isArray(value)) {\n value = value\n .map((val) => (val.type === \"text\" ? val.text || val.content : null))\n .filter(isTruthy)\n .join(\"\");\n }\n\n const decoded = decodeCustomMessage(value);\n if (decoded) {\n msg.role = decoded.role;\n msg[key] = decoded.content;\n break;\n }\n }\n}\n\nexport function vercelFetcher(customFetch?: typeof fetch): typeof fetch {\n return async (url, options) => {\n if (\n options &&\n isString(options.body) &&\n (getProp(options.headers, [\"content-type\"]) === \"application/json\" ||\n getProp(options.headers, [\"Content-Type\"]) === \"application/json\")\n ) {\n const body = JSON.parse(options.body);\n if (isPlainObject(body) && Array.isArray(body.messages)) {\n body.messages.forEach((msg) => {\n if (!isPlainObject(msg)) {\n return;\n }\n unmaskCustomMessage(msg);\n });\n }\n options.body = JSON.stringify(body);\n }\n\n const fetcher = customFetch ?? fetch;\n return await fetcher(url, options);\n };\n}\n\nexport function parseHeadersFromEnv(env: string): Record<string, any> {\n return parseEnv(\n env,\n z.preprocess((value) => {\n return Object.fromEntries(\n String(value || \"\")\n .split(\",\")\n .filter((pair) => pair.includes(\"=\"))\n .map((pair) => pair.split(\"=\")),\n );\n }, z.record(z.string())),\n );\n}\n\nexport function extractTokenUsage(usage: LanguageModelUsage): ChatModelUsage {\n return {\n promptTokens: usage.inputTokens ?? 0,\n completionTokens: usage.outputTokens ?? 0,\n totalTokens: usage.totalTokens ?? 0,\n reasoningTokens: usage.reasoningTokens,\n cachedPromptTokens: usage.cachedInputTokens,\n };\n}\n\nexport function mergeTokenUsage(target: ChatModelUsage, ...sources: ChatModelUsage[]): void {\n for (const source of sources) {\n target.totalTokens += source.totalTokens ?? 0;\n target.promptTokens += source.promptTokens ?? 0;\n target.completionTokens += source.completionTokens ?? 0;\n if (source.reasoningTokens) {\n target.reasoningTokens = (target.reasoningTokens ?? 0) + source.reasoningTokens;\n }\n if (source.cachedPromptTokens) {\n target.cachedPromptTokens = (target.cachedPromptTokens ?? 0) + source.cachedPromptTokens;\n }\n }\n}\n\nexport function isToolCallValid(obj: ToolCallPart) {\n if (!obj.toolName || !obj.toolCallId || !obj.input) {\n return false;\n }\n if (isString(obj.input)) {\n return Boolean(parseBrokenJson(obj.input, { pair: [\"{\", \"}\"] }));\n }\n return Boolean(obj.input);\n}\n"]}
@@ -7,7 +7,6 @@ var WatsonxAiMlVml_v1 = require('@ibm-cloud/watsonx-ai/dist/watsonx-ai-ml/vml_v1
7
7
  var utils_cjs = require('../../../serializer/utils.cjs');
8
8
  var emitter_cjs = require('../../../emitter/emitter.cjs');
9
9
  var message_cjs = require('../../../backend/message.cjs');
10
- var schema_cjs = require('../../../internals/helpers/schema.cjs');
11
10
  var env_cjs = require('../../../internals/env.cjs');
12
11
  var errors_cjs = require('../../../errors.cjs');
13
12
  var base_cjs = require('../../../tools/base.cjs');
@@ -61,7 +60,7 @@ class WatsonxChatModel extends chat_cjs.ChatModel {
61
60
  ...await this.prepareInput(input),
62
61
  signal: run.signal
63
62
  });
64
- const { messages, finishReason, usage } = this.extractOutput(result.choices, result.usage);
63
+ const { messages, finishReason, usage } = this.extractOutput(result.choices, result.usage, result.id);
65
64
  return new chat_cjs.ChatModelOutput(messages, usage, finishReason);
66
65
  }
67
66
  async *_createStream(input, run) {
@@ -78,11 +77,11 @@ class WatsonxChatModel extends chat_cjs.ChatModel {
78
77
  const { messages, finishReason, usage } = this.extractOutput(raw.data.choices.map(({ delta, ...choice }) => ({
79
78
  ...choice,
80
79
  message: delta
81
- })), raw.data.usage);
80
+ })), raw.data.usage, raw.data.id);
82
81
  yield new chat_cjs.ChatModelOutput(messages, usage, finishReason);
83
82
  }
84
83
  }
85
- extractOutput(choices, usage) {
84
+ extractOutput(choices, usage, id) {
86
85
  return {
87
86
  finishReason: remeda.findLast(choices, (choice) => Boolean(choice?.finish_reason))?.finish_reason,
88
87
  usage: usage ? {
@@ -96,7 +95,7 @@ class WatsonxChatModel extends chat_cjs.ChatModel {
96
95
  const msg = new message_cjs.AssistantMessage({
97
96
  type: "text",
98
97
  text: message.content
99
- });
98
+ }, {}, id);
100
99
  messages.push(msg);
101
100
  }
102
101
  if (message?.tool_calls) {
@@ -104,15 +103,15 @@ class WatsonxChatModel extends chat_cjs.ChatModel {
104
103
  type: "tool-call",
105
104
  toolCallId: call.id,
106
105
  toolName: call.function.name,
107
- input: schema_cjs.parseBrokenJson(call.function.arguments)
108
- })));
106
+ input: call.function.arguments
107
+ })), {}, id);
109
108
  messages.push(msg);
110
109
  }
111
110
  if (message?.refusal) {
112
111
  const msg = new message_cjs.AssistantMessage({
113
112
  type: "text",
114
113
  text: message.refusal
115
- });
114
+ }, {}, id);
116
115
  messages.push(msg);
117
116
  }
118
117
  return messages;