@aituber-onair/chat 0.10.0 → 0.11.1

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 (167) hide show
  1. package/README.ja.md +2 -2
  2. package/README.md +2 -2
  3. package/dist/cjs/constants/claude.d.ts +1 -0
  4. package/dist/cjs/constants/claude.d.ts.map +1 -1
  5. package/dist/cjs/constants/claude.js +3 -1
  6. package/dist/cjs/constants/claude.js.map +1 -1
  7. package/dist/cjs/index.d.ts +1 -1
  8. package/dist/cjs/index.d.ts.map +1 -1
  9. package/dist/cjs/index.js.map +1 -1
  10. package/dist/cjs/services/ChatServiceFactory.d.ts +2 -2
  11. package/dist/cjs/services/ChatServiceFactory.d.ts.map +1 -1
  12. package/dist/cjs/services/ChatServiceFactory.js +2 -24
  13. package/dist/cjs/services/ChatServiceFactory.js.map +1 -1
  14. package/dist/cjs/services/providers/ChatServiceProvider.d.ts +35 -5
  15. package/dist/cjs/services/providers/ChatServiceProvider.d.ts.map +1 -1
  16. package/dist/cjs/services/providers/claude/ClaudeChatService.d.ts.map +1 -1
  17. package/dist/cjs/services/providers/claude/ClaudeChatService.js +21 -36
  18. package/dist/cjs/services/providers/claude/ClaudeChatService.js.map +1 -1
  19. package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.d.ts +3 -3
  20. package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.d.ts.map +1 -1
  21. package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.js +10 -4
  22. package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.js.map +1 -1
  23. package/dist/cjs/services/providers/gemini/GeminiChatService.d.ts.map +1 -1
  24. package/dist/cjs/services/providers/gemini/GeminiChatService.js +28 -45
  25. package/dist/cjs/services/providers/gemini/GeminiChatService.js.map +1 -1
  26. package/dist/cjs/services/providers/gemini/GeminiChatServiceProvider.d.ts +3 -3
  27. package/dist/cjs/services/providers/gemini/GeminiChatServiceProvider.d.ts.map +1 -1
  28. package/dist/cjs/services/providers/gemini/GeminiChatServiceProvider.js +9 -4
  29. package/dist/cjs/services/providers/gemini/GeminiChatServiceProvider.js.map +1 -1
  30. package/dist/cjs/services/providers/index.d.ts +8 -0
  31. package/dist/cjs/services/providers/index.d.ts.map +1 -0
  32. package/dist/cjs/services/providers/index.js +18 -0
  33. package/dist/cjs/services/providers/index.js.map +1 -0
  34. package/dist/cjs/services/providers/kimi/KimiChatService.d.ts.map +1 -1
  35. package/dist/cjs/services/providers/kimi/KimiChatService.js +31 -162
  36. package/dist/cjs/services/providers/kimi/KimiChatService.js.map +1 -1
  37. package/dist/cjs/services/providers/kimi/KimiChatServiceProvider.d.ts +3 -3
  38. package/dist/cjs/services/providers/kimi/KimiChatServiceProvider.d.ts.map +1 -1
  39. package/dist/cjs/services/providers/kimi/KimiChatServiceProvider.js +9 -8
  40. package/dist/cjs/services/providers/kimi/KimiChatServiceProvider.js.map +1 -1
  41. package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts.map +1 -1
  42. package/dist/cjs/services/providers/openai/OpenAIChatService.js +50 -199
  43. package/dist/cjs/services/providers/openai/OpenAIChatService.js.map +1 -1
  44. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.d.ts +3 -3
  45. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.d.ts.map +1 -1
  46. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.js +9 -4
  47. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.js.map +1 -1
  48. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.d.ts.map +1 -1
  49. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.js +31 -165
  50. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.js.map +1 -1
  51. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts +3 -3
  52. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts.map +1 -1
  53. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.js +9 -6
  54. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.js.map +1 -1
  55. package/dist/cjs/services/providers/zai/ZAIChatService.d.ts.map +1 -1
  56. package/dist/cjs/services/providers/zai/ZAIChatService.js +31 -162
  57. package/dist/cjs/services/providers/zai/ZAIChatService.js.map +1 -1
  58. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.d.ts +3 -3
  59. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.d.ts.map +1 -1
  60. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.js +9 -8
  61. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.js.map +1 -1
  62. package/dist/cjs/types/mcp.d.ts +1 -0
  63. package/dist/cjs/types/mcp.d.ts.map +1 -1
  64. package/dist/cjs/utils/index.d.ts +4 -0
  65. package/dist/cjs/utils/index.d.ts.map +1 -1
  66. package/dist/cjs/utils/index.js +4 -0
  67. package/dist/cjs/utils/index.js.map +1 -1
  68. package/dist/cjs/utils/openaiCompatibleSse.d.ts +10 -0
  69. package/dist/cjs/utils/openaiCompatibleSse.d.ts.map +1 -0
  70. package/dist/cjs/utils/openaiCompatibleSse.js +124 -0
  71. package/dist/cjs/utils/openaiCompatibleSse.js.map +1 -0
  72. package/dist/cjs/utils/openaiCompatibleTools.d.ts +4 -0
  73. package/dist/cjs/utils/openaiCompatibleTools.d.ts.map +1 -0
  74. package/dist/cjs/utils/openaiCompatibleTools.js +25 -0
  75. package/dist/cjs/utils/openaiCompatibleTools.js.map +1 -0
  76. package/dist/cjs/utils/processChatFlow.d.ts +12 -0
  77. package/dist/cjs/utils/processChatFlow.d.ts.map +1 -0
  78. package/dist/cjs/utils/processChatFlow.js +22 -0
  79. package/dist/cjs/utils/processChatFlow.js.map +1 -0
  80. package/dist/cjs/utils/visionModelResolver.d.ts +12 -0
  81. package/dist/cjs/utils/visionModelResolver.d.ts.map +1 -0
  82. package/dist/cjs/utils/visionModelResolver.js +22 -0
  83. package/dist/cjs/utils/visionModelResolver.js.map +1 -0
  84. package/dist/esm/constants/claude.d.ts +1 -0
  85. package/dist/esm/constants/claude.d.ts.map +1 -1
  86. package/dist/esm/constants/claude.js +2 -0
  87. package/dist/esm/constants/claude.js.map +1 -1
  88. package/dist/esm/index.d.ts +1 -1
  89. package/dist/esm/index.d.ts.map +1 -1
  90. package/dist/esm/index.js.map +1 -1
  91. package/dist/esm/services/ChatServiceFactory.d.ts +2 -2
  92. package/dist/esm/services/ChatServiceFactory.d.ts.map +1 -1
  93. package/dist/esm/services/ChatServiceFactory.js +2 -24
  94. package/dist/esm/services/ChatServiceFactory.js.map +1 -1
  95. package/dist/esm/services/providers/ChatServiceProvider.d.ts +35 -5
  96. package/dist/esm/services/providers/ChatServiceProvider.d.ts.map +1 -1
  97. package/dist/esm/services/providers/claude/ClaudeChatService.d.ts.map +1 -1
  98. package/dist/esm/services/providers/claude/ClaudeChatService.js +21 -36
  99. package/dist/esm/services/providers/claude/ClaudeChatService.js.map +1 -1
  100. package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.d.ts +3 -3
  101. package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.d.ts.map +1 -1
  102. package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.js +11 -5
  103. package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.js.map +1 -1
  104. package/dist/esm/services/providers/gemini/GeminiChatService.d.ts.map +1 -1
  105. package/dist/esm/services/providers/gemini/GeminiChatService.js +28 -45
  106. package/dist/esm/services/providers/gemini/GeminiChatService.js.map +1 -1
  107. package/dist/esm/services/providers/gemini/GeminiChatServiceProvider.d.ts +3 -3
  108. package/dist/esm/services/providers/gemini/GeminiChatServiceProvider.d.ts.map +1 -1
  109. package/dist/esm/services/providers/gemini/GeminiChatServiceProvider.js +9 -4
  110. package/dist/esm/services/providers/gemini/GeminiChatServiceProvider.js.map +1 -1
  111. package/dist/esm/services/providers/index.d.ts +8 -0
  112. package/dist/esm/services/providers/index.d.ts.map +1 -0
  113. package/dist/esm/services/providers/index.js +15 -0
  114. package/dist/esm/services/providers/index.js.map +1 -0
  115. package/dist/esm/services/providers/kimi/KimiChatService.d.ts.map +1 -1
  116. package/dist/esm/services/providers/kimi/KimiChatService.js +31 -162
  117. package/dist/esm/services/providers/kimi/KimiChatService.js.map +1 -1
  118. package/dist/esm/services/providers/kimi/KimiChatServiceProvider.d.ts +3 -3
  119. package/dist/esm/services/providers/kimi/KimiChatServiceProvider.d.ts.map +1 -1
  120. package/dist/esm/services/providers/kimi/KimiChatServiceProvider.js +9 -8
  121. package/dist/esm/services/providers/kimi/KimiChatServiceProvider.js.map +1 -1
  122. package/dist/esm/services/providers/openai/OpenAIChatService.d.ts.map +1 -1
  123. package/dist/esm/services/providers/openai/OpenAIChatService.js +50 -199
  124. package/dist/esm/services/providers/openai/OpenAIChatService.js.map +1 -1
  125. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.d.ts +3 -3
  126. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.d.ts.map +1 -1
  127. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.js +9 -4
  128. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.js.map +1 -1
  129. package/dist/esm/services/providers/openrouter/OpenRouterChatService.d.ts.map +1 -1
  130. package/dist/esm/services/providers/openrouter/OpenRouterChatService.js +31 -165
  131. package/dist/esm/services/providers/openrouter/OpenRouterChatService.js.map +1 -1
  132. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts +3 -3
  133. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts.map +1 -1
  134. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.js +9 -6
  135. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.js.map +1 -1
  136. package/dist/esm/services/providers/zai/ZAIChatService.d.ts.map +1 -1
  137. package/dist/esm/services/providers/zai/ZAIChatService.js +31 -162
  138. package/dist/esm/services/providers/zai/ZAIChatService.js.map +1 -1
  139. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.d.ts +3 -3
  140. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.d.ts.map +1 -1
  141. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.js +9 -8
  142. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.js.map +1 -1
  143. package/dist/esm/types/mcp.d.ts +1 -0
  144. package/dist/esm/types/mcp.d.ts.map +1 -1
  145. package/dist/esm/utils/index.d.ts +4 -0
  146. package/dist/esm/utils/index.d.ts.map +1 -1
  147. package/dist/esm/utils/index.js +4 -0
  148. package/dist/esm/utils/index.js.map +1 -1
  149. package/dist/esm/utils/openaiCompatibleSse.d.ts +10 -0
  150. package/dist/esm/utils/openaiCompatibleSse.d.ts.map +1 -0
  151. package/dist/esm/utils/openaiCompatibleSse.js +119 -0
  152. package/dist/esm/utils/openaiCompatibleSse.js.map +1 -0
  153. package/dist/esm/utils/openaiCompatibleTools.d.ts +4 -0
  154. package/dist/esm/utils/openaiCompatibleTools.d.ts.map +1 -0
  155. package/dist/esm/utils/openaiCompatibleTools.js +21 -0
  156. package/dist/esm/utils/openaiCompatibleTools.js.map +1 -0
  157. package/dist/esm/utils/processChatFlow.d.ts +12 -0
  158. package/dist/esm/utils/processChatFlow.d.ts.map +1 -0
  159. package/dist/esm/utils/processChatFlow.js +19 -0
  160. package/dist/esm/utils/processChatFlow.js.map +1 -0
  161. package/dist/esm/utils/visionModelResolver.d.ts +12 -0
  162. package/dist/esm/utils/visionModelResolver.d.ts.map +1 -0
  163. package/dist/esm/utils/visionModelResolver.js +18 -0
  164. package/dist/esm/utils/visionModelResolver.js.map +1 -0
  165. package/dist/umd/aituber-onair-chat.js +1592 -1875
  166. package/dist/umd/aituber-onair-chat.min.js +6 -15
  167. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import { ENDPOINT_OPENROUTER_API, MODEL_GPT_OSS_20B_FREE, isOpenRouterVisionModel, isOpenRouterFreeModel, OPENROUTER_FREE_RATE_LIMIT_PER_MINUTE, } from '../../../constants/openrouter';
2
2
  import { getMaxTokensForResponseLength, } from '../../../constants/chat';
3
- import { StreamTextAccumulator } from '../../../utils/streamTextAccumulator';
4
3
  import { ChatServiceHttpClient } from '../../../utils/chatServiceHttpClient';
4
+ import { buildOpenAICompatibleTools, parseOpenAICompatibleOneShot, parseOpenAICompatibleTextStream, parseOpenAICompatibleToolStream, processChatWithOptionalTools, } from '../../../utils';
5
5
  /**
6
6
  * OpenRouter implementation of ChatService
7
7
  * OpenRouter provides access to multiple AI models through a unified API
@@ -88,25 +88,17 @@ export class OpenRouterChatService {
88
88
  async processChat(messages, onPartialResponse, onCompleteResponse) {
89
89
  // Apply rate limiting for free tier
90
90
  await this.applyRateLimiting();
91
- // Not using tools
92
- if (this.tools.length === 0) {
93
- const res = await this.callOpenRouter(messages, this.model, true);
94
- const full = await this.handleStream(res, onPartialResponse);
95
- await onCompleteResponse(full);
96
- return;
97
- }
98
- // Using tools
99
- const { blocks, stop_reason } = await this.chatOnce(messages);
100
- if (stop_reason === 'end') {
101
- const full = blocks
102
- .filter((b) => b.type === 'text')
103
- .map((b) => b.text)
104
- .join('');
105
- await onCompleteResponse(full);
106
- return;
107
- }
108
- throw new Error('processChat received tool_calls. ' +
109
- 'ChatProcessor must use chatOnce() loop when tools are enabled.');
91
+ await processChatWithOptionalTools({
92
+ hasTools: this.tools.length > 0,
93
+ runWithoutTools: async () => {
94
+ const res = await this.callOpenRouter(messages, this.model, true);
95
+ return this.handleStream(res, onPartialResponse);
96
+ },
97
+ runWithTools: () => this.chatOnce(messages, true, onPartialResponse),
98
+ onCompleteResponse,
99
+ toolErrorMessage: 'processChat received tool_calls. ' +
100
+ 'ChatProcessor must use chatOnce() loop when tools are enabled.',
101
+ });
110
102
  }
111
103
  /**
112
104
  * Process chat messages with images
@@ -122,25 +114,17 @@ export class OpenRouterChatService {
122
114
  // Apply rate limiting for free tier
123
115
  await this.applyRateLimiting();
124
116
  try {
125
- // Not using tools
126
- if (this.tools.length === 0) {
127
- const res = await this.callOpenRouter(messages, this.visionModel, true);
128
- const full = await this.handleStream(res, onPartialResponse);
129
- await onCompleteResponse(full);
130
- return;
131
- }
132
- // Using tools
133
- const { blocks, stop_reason } = await this.visionChatOnce(messages, true, onPartialResponse);
134
- if (stop_reason === 'end') {
135
- const full = blocks
136
- .filter((b) => b.type === 'text')
137
- .map((b) => b.text)
138
- .join('');
139
- await onCompleteResponse(full);
140
- return;
141
- }
142
- throw new Error('processVisionChat received tool_calls. ' +
143
- 'ChatProcessor must use visionChatOnce() loop when tools are enabled.');
117
+ await processChatWithOptionalTools({
118
+ hasTools: this.tools.length > 0,
119
+ runWithoutTools: async () => {
120
+ const res = await this.callOpenRouter(messages, this.visionModel, true);
121
+ return this.handleStream(res, onPartialResponse);
122
+ },
123
+ runWithTools: () => this.visionChatOnce(messages, true, onPartialResponse),
124
+ onCompleteResponse,
125
+ toolErrorMessage: 'processVisionChat received tool_calls. ' +
126
+ 'ChatProcessor must use visionChatOnce() loop when tools are enabled.',
127
+ });
144
128
  }
145
129
  catch (error) {
146
130
  console.error('Error in processVisionChat:', error);
@@ -243,14 +227,7 @@ export class OpenRouterChatService {
243
227
  }
244
228
  // Add tools if available
245
229
  if (this.tools.length > 0) {
246
- body.tools = this.tools.map((t) => ({
247
- type: 'function',
248
- function: {
249
- name: t.name,
250
- description: t.description,
251
- parameters: t.parameters,
252
- },
253
- }));
230
+ body.tools = buildOpenAICompatibleTools(this.tools, 'chat-completions');
254
231
  body.tool_choice = 'auto';
255
232
  }
256
233
  return body;
@@ -260,134 +237,23 @@ export class OpenRouterChatService {
260
237
  * OpenRouter uses SSE format with potential comment lines
261
238
  */
262
239
  async handleStream(res, onPartial) {
263
- const reader = res.body.getReader();
264
- const dec = new TextDecoder();
265
- let buffer = '';
266
- let full = '';
267
- while (true) {
268
- const { done, value } = await reader.read();
269
- if (done)
270
- break;
271
- buffer += dec.decode(value, { stream: true });
272
- // Process line by line
273
- const lines = buffer.split('\n');
274
- buffer = lines.pop() || ''; // Keep incomplete line
275
- for (const line of lines) {
276
- const trimmedLine = line.trim();
277
- // Skip empty lines and comment lines (OpenRouter specific)
278
- if (!trimmedLine || trimmedLine.startsWith(':'))
279
- continue;
280
- if (!trimmedLine.startsWith('data:'))
281
- continue;
282
- const jsonStr = trimmedLine.slice(5).trim();
283
- if (jsonStr === '[DONE]') {
284
- return full;
285
- }
286
- try {
287
- const json = JSON.parse(jsonStr);
288
- const content = json.choices?.[0]?.delta?.content || '';
289
- if (content) {
290
- onPartial(content);
291
- full += content;
292
- }
293
- }
294
- catch (e) {
295
- // Skip invalid JSON (could be partial or malformed)
296
- console.debug('Failed to parse SSE data:', jsonStr);
297
- }
298
- }
299
- }
300
- return full;
240
+ return parseOpenAICompatibleTextStream(res, onPartial, {
241
+ onJsonError: (payload) => console.debug('Failed to parse SSE data:', payload),
242
+ });
301
243
  }
302
244
  /**
303
245
  * Parse streaming response with tool support
304
246
  */
305
247
  async parseStream(res, onPartial) {
306
- const reader = res.body.getReader();
307
- const dec = new TextDecoder();
308
- const textBlocks = [];
309
- const toolCallsMap = new Map();
310
- let buf = '';
311
- while (true) {
312
- const { done, value } = await reader.read();
313
- if (done)
314
- break;
315
- buf += dec.decode(value, { stream: true });
316
- // Process line by line
317
- const lines = buf.split('\n');
318
- buf = lines.pop() || ''; // Keep incomplete line
319
- for (const line of lines) {
320
- const trimmedLine = line.trim();
321
- // Skip empty lines and OpenRouter comment lines
322
- if (!trimmedLine || trimmedLine.startsWith(':'))
323
- continue;
324
- if (!trimmedLine.startsWith('data:'))
325
- continue;
326
- const payload = trimmedLine.slice(5).trim();
327
- if (payload === '[DONE]') {
328
- break;
329
- }
330
- try {
331
- const json = JSON.parse(payload);
332
- const delta = json.choices?.[0]?.delta;
333
- if (delta?.content) {
334
- onPartial(delta.content);
335
- StreamTextAccumulator.append(textBlocks, delta.content);
336
- }
337
- // Handle tool calls
338
- if (delta?.tool_calls) {
339
- delta.tool_calls.forEach((c) => {
340
- const entry = toolCallsMap.get(c.index) ?? {
341
- id: c.id,
342
- name: c.function?.name,
343
- args: '',
344
- };
345
- entry.args += c.function?.arguments || '';
346
- toolCallsMap.set(c.index, entry);
347
- });
348
- }
349
- }
350
- catch (e) {
351
- console.debug('Failed to parse SSE data:', payload);
352
- }
353
- }
354
- }
355
- // Convert tool_calls to blocks
356
- const toolBlocks = Array.from(toolCallsMap.entries())
357
- .sort((a, b) => a[0] - b[0])
358
- .map(([_, e]) => ({
359
- type: 'tool_use',
360
- id: e.id,
361
- name: e.name,
362
- input: JSON.parse(e.args || '{}'),
363
- }));
364
- const blocks = [...textBlocks, ...toolBlocks];
365
- return {
366
- blocks,
367
- stop_reason: toolBlocks.length ? 'tool_use' : 'end',
368
- };
248
+ return parseOpenAICompatibleToolStream(res, onPartial, {
249
+ onJsonError: (payload) => console.debug('Failed to parse SSE data:', payload),
250
+ });
369
251
  }
370
252
  /**
371
253
  * Parse non-streaming response
372
254
  */
373
255
  parseOneShot(data) {
374
- const choice = data.choices?.[0];
375
- const blocks = [];
376
- if (choice?.finish_reason === 'tool_calls' && choice?.message?.tool_calls) {
377
- choice.message.tool_calls.forEach((c) => blocks.push({
378
- type: 'tool_use',
379
- id: c.id,
380
- name: c.function?.name,
381
- input: JSON.parse(c.function?.arguments || '{}'),
382
- }));
383
- }
384
- else if (choice?.message?.content) {
385
- blocks.push({ type: 'text', text: choice.message.content });
386
- }
387
- return {
388
- blocks,
389
- stop_reason: choice?.finish_reason === 'tool_calls' ? 'tool_use' : 'end',
390
- };
256
+ return parseOpenAICompatibleOneShot(data);
391
257
  }
392
258
  }
393
259
  //# sourceMappingURL=OpenRouterChatService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OpenRouterChatService.js","sourceRoot":"","sources":["../../../../../src/services/providers/openrouter/OpenRouterChatService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenRouterChatService.js","sourceRoot":"","sources":["../../../../../src/services/providers/openrouter/OpenRouterChatService.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,16 @@
1
1
  import { ChatService } from '../../ChatService';
2
- import { ChatServiceOptions, ChatServiceProvider } from '../ChatServiceProvider';
2
+ import { OpenRouterChatServiceOptions, ChatServiceProvider } from '../ChatServiceProvider';
3
3
  /**
4
4
  * OpenRouter API provider implementation
5
5
  * Provides access to multiple AI models through OpenRouter's unified API
6
6
  */
7
- export declare class OpenRouterChatServiceProvider implements ChatServiceProvider {
7
+ export declare class OpenRouterChatServiceProvider implements ChatServiceProvider<OpenRouterChatServiceOptions> {
8
8
  /**
9
9
  * Create a chat service instance
10
10
  * @param options Service options
11
11
  * @returns OpenRouterChatService instance
12
12
  */
13
- createChatService(options: ChatServiceOptions): ChatService;
13
+ createChatService(options: OpenRouterChatServiceOptions): ChatService;
14
14
  /**
15
15
  * Get the provider name
16
16
  * @returns Provider name ('openrouter')
@@ -1 +1 @@
1
- {"version":3,"file":"OpenRouterChatServiceProvider.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/openrouter/OpenRouterChatServiceProvider.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAGhC;;;GAGG;AACH,qBAAa,6BAA8B,YAAW,mBAAmB;IACvE;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW;IAsC3D;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,EAAE;IA+B9B;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;OAGG;IACH,cAAc,IAAI,OAAO;IAMzB;;;;OAIG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI9C;;;OAGG;IACH,aAAa,IAAI,MAAM,EAAE;IAIzB;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGpC"}
1
+ {"version":3,"file":"OpenRouterChatServiceProvider.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/openrouter/OpenRouterChatServiceProvider.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAIhC;;;GAGG;AACH,qBAAa,6BACX,YAAW,mBAAmB,CAAC,4BAA4B,CAAC;IAE5D;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,4BAA4B,GAAG,WAAW;IAmCrE;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,EAAE;IA+B9B;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;OAGG;IACH,cAAc,IAAI,OAAO;IAMzB;;;;OAIG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI9C;;;OAGG;IACH,aAAa,IAAI,MAAM,EAAE;IAIzB;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAGpC"}
@@ -1,5 +1,6 @@
1
1
  import { MODEL_GPT_OSS_20B_FREE, MODEL_MOONSHOTAI_KIMI_K2_5, MODEL_OPENAI_GPT_5_1_CHAT, MODEL_OPENAI_GPT_5_1_CODEX, MODEL_OPENAI_GPT_5_MINI, MODEL_OPENAI_GPT_5_NANO, MODEL_OPENAI_GPT_4O, MODEL_OPENAI_GPT_4_1_MINI, MODEL_OPENAI_GPT_4_1_NANO, MODEL_ANTHROPIC_CLAUDE_OPUS_4, MODEL_ANTHROPIC_CLAUDE_SONNET_4, MODEL_ANTHROPIC_CLAUDE_3_7_SONNET, MODEL_ANTHROPIC_CLAUDE_3_5_SONNET, MODEL_ANTHROPIC_CLAUDE_4_5_HAIKU, MODEL_GOOGLE_GEMINI_2_5_PRO, MODEL_GOOGLE_GEMINI_2_5_FLASH, MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025, MODEL_ZAI_GLM_4_7_FLASH, MODEL_ZAI_GLM_4_5_AIR, MODEL_ZAI_GLM_4_5_AIR_FREE, OPENROUTER_FREE_MODELS, isOpenRouterVisionModel, } from '../../../constants/openrouter';
2
2
  import { OpenRouterChatService } from './OpenRouterChatService';
3
+ import { resolveVisionModel } from '../../../utils';
3
4
  /**
4
5
  * OpenRouter API provider implementation
5
6
  * Provides access to multiple AI models through OpenRouter's unified API
@@ -13,12 +14,14 @@ export class OpenRouterChatServiceProvider {
13
14
  createChatService(options) {
14
15
  // For OpenRouter, use the main model as vision model placeholder
15
16
  // Only validate if visionModel is explicitly provided
16
- const visionModel = options.visionModel || options.model || this.getDefaultModel();
17
- // If visionModel is explicitly provided and different from main model, validate it
18
- if (options.visionModel &&
19
- !this.supportsVisionForModel(options.visionModel)) {
20
- throw new Error(`Model ${options.visionModel} does not support vision capabilities.`);
21
- }
17
+ const visionModel = resolveVisionModel({
18
+ model: options.model,
19
+ visionModel: options.visionModel,
20
+ defaultModel: this.getDefaultModel(),
21
+ defaultVisionModel: options.model || this.getDefaultModel(),
22
+ supportsVisionForModel: (visionModel) => this.supportsVisionForModel(visionModel),
23
+ validate: 'explicit',
24
+ });
22
25
  // Tools definition
23
26
  const tools = options.tools;
24
27
  // Extract OpenRouter-specific options
@@ -1 +1 @@
1
- {"version":3,"file":"OpenRouterChatServiceProvider.js","sourceRoot":"","sources":["../../../../../src/services/providers/openrouter/OpenRouterChatServiceProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenRouterChatServiceProvider.js","sourceRoot":"","sources":["../../../../../src/services/providers/openrouter/OpenRouterChatServiceProvider.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ZAIChatService.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/zai/ZAIChatService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EACL,cAAc,EAEd,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AAQxB,OAAO,EACL,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AAIjC;;GAEG;AACH,qBAAa,cAAe,YAAW,WAAW;IAChD,oBAAoB;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAS;IAElC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAAC,CAAqB;IAC5C,OAAO,CAAC,cAAc,CAAC,CAGrB;IACF,OAAO,CAAC,QAAQ,CAAC,CAGf;IAEF;;;;;OAKG;gBAED,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAsB,EAC7B,WAAW,GAAE,MAA6B,EAC1C,KAAK,CAAC,EAAE,cAAc,EAAE,EACxB,QAAQ,GAAE,MAA0C,EACpD,cAAc,CAAC,EAAE,kBAAkB,EACnC,cAAc,CAAC,EAAE;QACf,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,aAAa,CAAC;QAC7C,WAAW,CAAC,EAAE,GAAG,CAAC;KACnB,EACD,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;QAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B;IAaH;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACG,WAAW,CACf,QAAQ,EAAE,OAAO,EAAE,EACnB,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACzC,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC;IA2BhB;;OAEG;IACG,iBAAiB,CACrB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACzC,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC;IAqChB;;OAEG;IACG,QAAQ,CACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,GAAE,OAAc,EACtB,iBAAiB,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EACpD,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC;IAK9B;;OAEG;IACG,cAAc,CAClB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,MAAM,GAAE,OAAe,EACvB,iBAAiB,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EACpD,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC;YAgBhB,aAAa;YAUb,OAAO;IAerB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwCxB,OAAO,CAAC,oBAAoB;YAYd,YAAY;IAwC1B;;OAEG;YACW,WAAW;IAyEzB;;OAEG;IACH,OAAO,CAAC,YAAY;CAwBrB"}
1
+ {"version":3,"file":"ZAIChatService.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/zai/ZAIChatService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAQpE,OAAO,EACL,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AAUjC;;GAEG;AACH,qBAAa,cAAe,YAAW,WAAW;IAChD,oBAAoB;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAS;IAElC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAAC,CAAqB;IAC5C,OAAO,CAAC,cAAc,CAAC,CAGrB;IACF,OAAO,CAAC,QAAQ,CAAC,CAGf;IAEF;;;;;OAKG;gBAED,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAsB,EAC7B,WAAW,GAAE,MAA6B,EAC1C,KAAK,CAAC,EAAE,cAAc,EAAE,EACxB,QAAQ,GAAE,MAA0C,EACpD,cAAc,CAAC,EAAE,kBAAkB,EACnC,cAAc,CAAC,EAAE;QACf,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,aAAa,CAAC;QAC7C,WAAW,CAAC,EAAE,GAAG,CAAC;KACnB,EACD,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;QAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B;IAaH;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACG,WAAW,CACf,QAAQ,EAAE,OAAO,EAAE,EACnB,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACzC,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC;IAehB;;OAEG;IACG,iBAAiB,CACrB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACzC,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC;IAsBhB;;OAEG;IACG,QAAQ,CACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,GAAE,OAAc,EACtB,iBAAiB,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EACpD,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC;IAK9B;;OAEG;IACG,cAAc,CAClB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,MAAM,GAAE,OAAe,EACvB,iBAAiB,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,EACpD,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC;YAgBhB,aAAa;YAUb,OAAO;IAerB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwCxB,OAAO,CAAC,oBAAoB;YAId,YAAY;IAO1B;;OAEG;YACW,WAAW;IAUzB;;OAEG;IACH,OAAO,CAAC,YAAY;CAGrB"}
@@ -1,7 +1,7 @@
1
1
  import { ENDPOINT_ZAI_CHAT_COMPLETIONS_API, MODEL_GLM_4_7, MODEL_GLM_4_6V_FLASH, isZaiToolStreamModel, isZaiVisionModel, } from '../../../constants/zai';
2
2
  import { getMaxTokensForResponseLength, } from '../../../constants/chat';
3
- import { StreamTextAccumulator } from '../../../utils/streamTextAccumulator';
4
3
  import { ChatServiceHttpClient } from '../../../utils/chatServiceHttpClient';
4
+ import { buildOpenAICompatibleTools, parseOpenAICompatibleOneShot, parseOpenAICompatibleTextStream, parseOpenAICompatibleToolStream, processChatWithOptionalTools, } from '../../../utils';
5
5
  /**
6
6
  * Z.ai implementation of ChatService (OpenAI-compatible Chat Completions)
7
7
  */
@@ -40,25 +40,17 @@ export class ZAIChatService {
40
40
  * Process chat messages
41
41
  */
42
42
  async processChat(messages, onPartialResponse, onCompleteResponse) {
43
- // Not using tools
44
- if (this.tools.length === 0) {
45
- const res = await this.callZAI(messages, this.model, true);
46
- const full = await this.handleStream(res, onPartialResponse);
47
- await onCompleteResponse(full);
48
- return;
49
- }
50
- // Using tools
51
- const { blocks, stop_reason } = await this.chatOnce(messages);
52
- if (stop_reason === 'end') {
53
- const full = blocks
54
- .filter((b) => b.type === 'text')
55
- .map((b) => b.text)
56
- .join('');
57
- await onCompleteResponse(full);
58
- return;
59
- }
60
- throw new Error('processChat received tool_calls. ' +
61
- 'ChatProcessor must use chatOnce() loop when tools are enabled.');
43
+ await processChatWithOptionalTools({
44
+ hasTools: this.tools.length > 0,
45
+ runWithoutTools: async () => {
46
+ const res = await this.callZAI(messages, this.model, true);
47
+ return this.handleStream(res, onPartialResponse);
48
+ },
49
+ runWithTools: () => this.chatOnce(messages, true, onPartialResponse),
50
+ onCompleteResponse,
51
+ toolErrorMessage: 'processChat received tool_calls. ' +
52
+ 'ChatProcessor must use chatOnce() loop when tools are enabled.',
53
+ });
62
54
  }
63
55
  /**
64
56
  * Process chat messages with images
@@ -67,25 +59,17 @@ export class ZAIChatService {
67
59
  if (!isZaiVisionModel(this.visionModel)) {
68
60
  throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);
69
61
  }
70
- // Not using tools
71
- if (this.tools.length === 0) {
72
- const res = await this.callZAI(messages, this.visionModel, true);
73
- const full = await this.handleStream(res, onPartialResponse);
74
- await onCompleteResponse(full);
75
- return;
76
- }
77
- // Using tools
78
- const { blocks, stop_reason } = await this.visionChatOnce(messages, true, onPartialResponse);
79
- if (stop_reason === 'end') {
80
- const full = blocks
81
- .filter((b) => b.type === 'text')
82
- .map((b) => b.text)
83
- .join('');
84
- await onCompleteResponse(full);
85
- return;
86
- }
87
- throw new Error('processVisionChat received tool_calls. ' +
88
- 'ChatProcessor must use visionChatOnce() loop when tools are enabled.');
62
+ await processChatWithOptionalTools({
63
+ hasTools: this.tools.length > 0,
64
+ runWithoutTools: async () => {
65
+ const res = await this.callZAI(messages, this.visionModel, true);
66
+ return this.handleStream(res, onPartialResponse);
67
+ },
68
+ runWithTools: () => this.visionChatOnce(messages, true, onPartialResponse),
69
+ onCompleteResponse,
70
+ toolErrorMessage: 'processVisionChat received tool_calls. ' +
71
+ 'ChatProcessor must use visionChatOnce() loop when tools are enabled.',
72
+ });
89
73
  }
90
74
  /**
91
75
  * Process chat messages with tools (text only)
@@ -148,141 +132,26 @@ export class ZAIChatService {
148
132
  return body;
149
133
  }
150
134
  buildToolsDefinition() {
151
- if (this.tools.length === 0)
152
- return [];
153
- return this.tools.map((t) => ({
154
- type: 'function',
155
- function: {
156
- name: t.name,
157
- description: t.description,
158
- parameters: t.parameters,
159
- },
160
- }));
135
+ return buildOpenAICompatibleTools(this.tools, 'chat-completions');
161
136
  }
162
137
  async handleStream(res, onPartial) {
163
- const reader = res.body.getReader();
164
- const dec = new TextDecoder();
165
- let full = '';
166
- let buf = '';
167
- while (true) {
168
- const { done, value } = await reader.read();
169
- if (done)
170
- break;
171
- buf += dec.decode(value, { stream: true });
172
- const lines = buf.split('\n');
173
- buf = lines.pop() || '';
174
- for (const line of lines) {
175
- const trimmedLine = line.trim();
176
- if (!trimmedLine || trimmedLine.startsWith(':'))
177
- continue;
178
- if (!trimmedLine.startsWith('data:'))
179
- continue;
180
- const payload = trimmedLine.slice(5).trim();
181
- if (payload === '[DONE]') {
182
- break;
183
- }
184
- try {
185
- const json = JSON.parse(payload);
186
- const content = json.choices?.[0]?.delta?.content || '';
187
- if (content) {
188
- onPartial(content);
189
- full += content;
190
- }
191
- }
192
- catch (e) {
193
- console.debug('Failed to parse SSE data:', payload);
194
- }
195
- }
196
- }
197
- return full;
138
+ return parseOpenAICompatibleTextStream(res, onPartial, {
139
+ onJsonError: (payload) => console.debug('Failed to parse SSE data:', payload),
140
+ });
198
141
  }
199
142
  /**
200
143
  * Parse streaming response with tool support
201
144
  */
202
145
  async parseStream(res, onPartial) {
203
- const reader = res.body.getReader();
204
- const dec = new TextDecoder();
205
- const textBlocks = [];
206
- const toolCallsMap = new Map();
207
- let buf = '';
208
- while (true) {
209
- const { done, value } = await reader.read();
210
- if (done)
211
- break;
212
- buf += dec.decode(value, { stream: true });
213
- const lines = buf.split('\n');
214
- buf = lines.pop() || '';
215
- for (const line of lines) {
216
- const trimmedLine = line.trim();
217
- if (!trimmedLine || trimmedLine.startsWith(':'))
218
- continue;
219
- if (!trimmedLine.startsWith('data:'))
220
- continue;
221
- const payload = trimmedLine.slice(5).trim();
222
- if (payload === '[DONE]') {
223
- break;
224
- }
225
- try {
226
- const json = JSON.parse(payload);
227
- const delta = json.choices?.[0]?.delta;
228
- if (delta?.content) {
229
- onPartial(delta.content);
230
- StreamTextAccumulator.append(textBlocks, delta.content);
231
- }
232
- if (delta?.tool_calls) {
233
- delta.tool_calls.forEach((c) => {
234
- const entry = toolCallsMap.get(c.index) ?? {
235
- id: c.id,
236
- name: c.function?.name,
237
- args: '',
238
- };
239
- entry.args += c.function?.arguments || '';
240
- toolCallsMap.set(c.index, entry);
241
- });
242
- }
243
- }
244
- catch (e) {
245
- console.debug('Failed to parse SSE data:', payload);
246
- }
247
- }
248
- }
249
- const toolBlocks = Array.from(toolCallsMap.entries())
250
- .sort((a, b) => a[0] - b[0])
251
- .map(([_, e]) => ({
252
- type: 'tool_use',
253
- id: e.id,
254
- name: e.name,
255
- input: JSON.parse(e.args || '{}'),
256
- }));
257
- const blocks = [...textBlocks, ...toolBlocks];
258
- return {
259
- blocks,
260
- stop_reason: toolBlocks.length ? 'tool_use' : 'end',
261
- };
146
+ return parseOpenAICompatibleToolStream(res, onPartial, {
147
+ onJsonError: (payload) => console.debug('Failed to parse SSE data:', payload),
148
+ });
262
149
  }
263
150
  /**
264
151
  * Parse non-streaming response
265
152
  */
266
153
  parseOneShot(data) {
267
- const choice = data.choices?.[0];
268
- const blocks = [];
269
- if (choice?.message?.tool_calls?.length) {
270
- choice.message.tool_calls.forEach((c) => blocks.push({
271
- type: 'tool_use',
272
- id: c.id,
273
- name: c.function?.name,
274
- input: JSON.parse(c.function?.arguments || '{}'),
275
- }));
276
- }
277
- else if (choice?.message?.content) {
278
- blocks.push({ type: 'text', text: choice.message.content });
279
- }
280
- return {
281
- blocks,
282
- stop_reason: blocks.some((b) => b.type === 'tool_use')
283
- ? 'tool_use'
284
- : 'end',
285
- };
154
+ return parseOpenAICompatibleOneShot(data);
286
155
  }
287
156
  }
288
157
  //# sourceMappingURL=ZAIChatService.js.map