universal-llm-client 4.0.0 → 4.2.0

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 (127) hide show
  1. package/dist/ai-model.d.ts +20 -22
  2. package/dist/ai-model.d.ts.map +1 -1
  3. package/dist/ai-model.js +26 -23
  4. package/dist/ai-model.js.map +1 -1
  5. package/dist/client.d.ts +5 -5
  6. package/dist/client.d.ts.map +1 -1
  7. package/dist/client.js +17 -9
  8. package/dist/client.js.map +1 -1
  9. package/dist/http.d.ts +2 -0
  10. package/dist/http.d.ts.map +1 -1
  11. package/dist/http.js +1 -0
  12. package/dist/http.js.map +1 -1
  13. package/dist/index.d.ts +3 -3
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +4 -4
  16. package/dist/index.js.map +1 -1
  17. package/dist/interfaces.d.ts +49 -11
  18. package/dist/interfaces.d.ts.map +1 -1
  19. package/dist/interfaces.js +14 -0
  20. package/dist/interfaces.js.map +1 -1
  21. package/dist/providers/anthropic.d.ts +56 -0
  22. package/dist/providers/anthropic.d.ts.map +1 -0
  23. package/dist/providers/anthropic.js +524 -0
  24. package/dist/providers/anthropic.js.map +1 -0
  25. package/dist/providers/google.d.ts +5 -0
  26. package/dist/providers/google.d.ts.map +1 -1
  27. package/dist/providers/google.js +64 -8
  28. package/dist/providers/google.js.map +1 -1
  29. package/dist/providers/index.d.ts +1 -0
  30. package/dist/providers/index.d.ts.map +1 -1
  31. package/dist/providers/index.js +1 -0
  32. package/dist/providers/index.js.map +1 -1
  33. package/dist/providers/ollama.d.ts.map +1 -1
  34. package/dist/providers/ollama.js +38 -11
  35. package/dist/providers/ollama.js.map +1 -1
  36. package/dist/providers/openai.d.ts.map +1 -1
  37. package/dist/providers/openai.js +9 -7
  38. package/dist/providers/openai.js.map +1 -1
  39. package/dist/router.d.ts +13 -33
  40. package/dist/router.d.ts.map +1 -1
  41. package/dist/router.js +33 -57
  42. package/dist/router.js.map +1 -1
  43. package/dist/stream-decoder.d.ts +29 -2
  44. package/dist/stream-decoder.d.ts.map +1 -1
  45. package/dist/stream-decoder.js +39 -11
  46. package/dist/stream-decoder.js.map +1 -1
  47. package/dist/structured-output.d.ts +107 -181
  48. package/dist/structured-output.d.ts.map +1 -1
  49. package/dist/structured-output.js +137 -192
  50. package/dist/structured-output.js.map +1 -1
  51. package/dist/zod-adapter.d.ts +44 -0
  52. package/dist/zod-adapter.d.ts.map +1 -0
  53. package/dist/zod-adapter.js +61 -0
  54. package/dist/zod-adapter.js.map +1 -0
  55. package/package.json +9 -1
  56. package/src/ai-model.ts +350 -0
  57. package/src/auditor.ts +213 -0
  58. package/src/client.ts +402 -0
  59. package/src/debug/debug-google-streaming.ts +97 -0
  60. package/src/debug/debug-tool-execution.ts +86 -0
  61. package/src/debug/test-lmstudio-tools.ts +155 -0
  62. package/src/demos/README.md +47 -0
  63. package/src/demos/basic/universal-llm-examples.ts +161 -0
  64. package/src/demos/mcp/astrid-memory-demo.ts +295 -0
  65. package/src/demos/mcp/astrid-persona-memory.ts +357 -0
  66. package/src/demos/mcp/mcp-mongodb-demo.ts +275 -0
  67. package/src/demos/mcp/simple-astrid-memory.ts +148 -0
  68. package/src/demos/mcp/simple-mcp-demo.ts +68 -0
  69. package/src/demos/mcp/working-mcp-demo.ts +62 -0
  70. package/src/demos/model-alias-demo.ts +0 -0
  71. package/src/demos/tools/RAG_MEMORY_INTEGRATION.md +267 -0
  72. package/src/demos/tools/astrid-memory-demo.ts +270 -0
  73. package/src/demos/tools/astrid-production-memory-clean.ts +785 -0
  74. package/src/demos/tools/astrid-production-memory.ts +558 -0
  75. package/src/demos/tools/basic-translation-test.ts +66 -0
  76. package/src/demos/tools/chromadb-similarity-tuning.ts +390 -0
  77. package/src/demos/tools/clean-multilingual-conversation.ts +209 -0
  78. package/src/demos/tools/clean-translation-test.ts +119 -0
  79. package/src/demos/tools/clean-universal-multilingual-test.ts +131 -0
  80. package/src/demos/tools/complete-rag-demo.ts +369 -0
  81. package/src/demos/tools/complete-tool-demo.ts +132 -0
  82. package/src/demos/tools/demo-tool-calling.ts +124 -0
  83. package/src/demos/tools/dynamic-language-switching-test.ts +251 -0
  84. package/src/demos/tools/hybrid-thinking-test.ts +154 -0
  85. package/src/demos/tools/memory-integration-test.ts +420 -0
  86. package/src/demos/tools/multilingual-memory-system.ts +802 -0
  87. package/src/demos/tools/ondemand-translation-demo.ts +655 -0
  88. package/src/demos/tools/production-tool-demo.ts +245 -0
  89. package/src/demos/tools/revolutionary-multilingual-test.ts +151 -0
  90. package/src/demos/tools/rigorous-language-analysis.ts +218 -0
  91. package/src/demos/tools/test-universal-memory-system.ts +126 -0
  92. package/src/demos/tools/translation-integration-guide.ts +346 -0
  93. package/src/demos/tools/universal-memory-system.ts +560 -0
  94. package/src/http.ts +247 -0
  95. package/src/index.ts +161 -0
  96. package/src/interfaces.ts +657 -0
  97. package/src/mcp.ts +345 -0
  98. package/src/providers/anthropic.ts +762 -0
  99. package/src/providers/google.ts +620 -0
  100. package/src/providers/index.ts +8 -0
  101. package/src/providers/ollama.ts +469 -0
  102. package/src/providers/openai.ts +392 -0
  103. package/src/router.ts +780 -0
  104. package/src/stream-decoder.ts +361 -0
  105. package/src/structured-output.ts +759 -0
  106. package/src/test-scripts/test-advanced-tools.ts +310 -0
  107. package/src/test-scripts/test-google-streaming-enhanced.ts +147 -0
  108. package/src/test-scripts/test-google-streaming.ts +63 -0
  109. package/src/test-scripts/test-google-system-prompt-comprehensive.ts +189 -0
  110. package/src/test-scripts/test-mcp-config.ts +28 -0
  111. package/src/test-scripts/test-mcp-connection.ts +29 -0
  112. package/src/test-scripts/test-system-message-positions.ts +163 -0
  113. package/src/test-scripts/test-system-prompt-improvement-demo.ts +83 -0
  114. package/src/test-scripts/test-tool-calling.ts +231 -0
  115. package/src/tests/ai-model.test.ts +1614 -0
  116. package/src/tests/auditor.test.ts +224 -0
  117. package/src/tests/http.test.ts +200 -0
  118. package/src/tests/interfaces.test.ts +117 -0
  119. package/src/tests/providers/google.test.ts +660 -0
  120. package/src/tests/providers/ollama.test.ts +954 -0
  121. package/src/tests/providers/openai.test.ts +1122 -0
  122. package/src/tests/router.test.ts +254 -0
  123. package/src/tests/stream-decoder.test.ts +179 -0
  124. package/src/tests/structured-output.test.ts +1450 -0
  125. package/src/tests/tools.test.ts +175 -0
  126. package/src/tools.ts +246 -0
  127. package/src/zod-adapter.ts +72 -0
@@ -0,0 +1,524 @@
1
+ /**
2
+ * Universal LLM Client v3 — Anthropic Messages API Provider
3
+ *
4
+ * Implements BaseLLMClient for Anthropic's Messages API (Claude).
5
+ * Uses the custom Anthropic protocol — NOT OpenAI-compatible.
6
+ *
7
+ * Key differences from OpenAI:
8
+ * - Endpoint: POST /v1/messages (not /chat/completions)
9
+ * - Auth: x-api-key header (not Authorization: Bearer)
10
+ * - System prompt: top-level `system` field, not a message
11
+ * - Messages: content is always an array of content blocks
12
+ * - Tool calls: `tool_use` content blocks (not tool_calls array)
13
+ * - Tool results: `tool_result` content blocks in user messages
14
+ * - Streaming: content_block_start/delta/stop events with typed deltas
15
+ */
16
+ import { BaseLLMClient } from '../client.js';
17
+ import { httpRequest, httpStream, parseSSE } from '../http.js';
18
+ import { StandardChatDecoder } from '../stream-decoder.js';
19
+ // ============================================================================
20
+ // Anthropic Client
21
+ // ============================================================================
22
+ export class AnthropicClient extends BaseLLMClient {
23
+ baseUrl;
24
+ constructor(options, auditor) {
25
+ const url = (options.url || 'https://api.anthropic.com').replace(/\/+$/, '');
26
+ super({ ...options, url }, auditor);
27
+ this.baseUrl = url;
28
+ }
29
+ // ========================================================================
30
+ // Headers
31
+ // ========================================================================
32
+ buildAnthropicHeaders() {
33
+ const headers = {
34
+ 'Content-Type': 'application/json',
35
+ 'anthropic-version': '2023-06-01',
36
+ };
37
+ if (this.options.apiKey) {
38
+ headers['x-api-key'] = this.options.apiKey;
39
+ }
40
+ return headers;
41
+ }
42
+ // ========================================================================
43
+ // Chat (non-streaming)
44
+ // ========================================================================
45
+ async chat(messages, options) {
46
+ const url = `${this.baseUrl}/v1/messages`;
47
+ const body = this.buildRequestBody(messages, options, false);
48
+ const start = Date.now();
49
+ this.auditor.record({
50
+ timestamp: start,
51
+ type: 'request',
52
+ provider: 'anthropic',
53
+ model: this.options.model,
54
+ });
55
+ const response = await httpRequest(url, {
56
+ method: 'POST',
57
+ headers: this.buildAnthropicHeaders(),
58
+ body,
59
+ timeout: this.options.timeout ?? 60000,
60
+ });
61
+ const data = response.data;
62
+ const result = this.parseAnthropicResponse(data);
63
+ this.auditor.record({
64
+ timestamp: Date.now(),
65
+ type: 'response',
66
+ provider: 'anthropic',
67
+ model: this.options.model,
68
+ duration: Date.now() - start,
69
+ usage: result.usage,
70
+ });
71
+ return result;
72
+ }
73
+ // ========================================================================
74
+ // Streaming
75
+ // ========================================================================
76
+ async *chatStream(messages, options) {
77
+ const url = `${this.baseUrl}/v1/messages`;
78
+ const body = this.buildRequestBody(messages, options, true);
79
+ const start = Date.now();
80
+ this.auditor.record({
81
+ timestamp: start,
82
+ type: 'stream_start',
83
+ provider: 'anthropic',
84
+ model: this.options.model,
85
+ });
86
+ const decoder = new StandardChatDecoder(() => { });
87
+ // Track content blocks as they stream in
88
+ const contentBlocks = new Map();
89
+ let usage;
90
+ let inputTokens = 0;
91
+ const stream = httpStream(url, {
92
+ method: 'POST',
93
+ headers: this.buildAnthropicHeaders(),
94
+ body,
95
+ timeout: this.options.timeout ?? 120000,
96
+ });
97
+ for await (const { data } of parseSSE(stream)) {
98
+ try {
99
+ const event = JSON.parse(data);
100
+ switch (event.type) {
101
+ case 'message_start': {
102
+ inputTokens = event.message.usage?.input_tokens ?? 0;
103
+ break;
104
+ }
105
+ case 'content_block_start': {
106
+ const block = event.content_block;
107
+ if (block.type === 'text') {
108
+ contentBlocks.set(event.index, { type: 'text', text: '' });
109
+ }
110
+ else if (block.type === 'tool_use') {
111
+ contentBlocks.set(event.index, {
112
+ type: 'tool_use',
113
+ text: '',
114
+ toolId: block.id,
115
+ toolName: block.name,
116
+ inputJson: '',
117
+ });
118
+ }
119
+ else if (block.type === 'thinking') {
120
+ contentBlocks.set(event.index, { type: 'thinking', text: '', thinking: '' });
121
+ }
122
+ break;
123
+ }
124
+ case 'content_block_delta': {
125
+ const block = contentBlocks.get(event.index);
126
+ if (!block)
127
+ break;
128
+ if (event.delta.type === 'text_delta') {
129
+ block.text += event.delta.text;
130
+ decoder.push(event.delta.text);
131
+ yield { type: 'text', content: event.delta.text };
132
+ }
133
+ else if (event.delta.type === 'input_json_delta') {
134
+ block.inputJson = (block.inputJson ?? '') + event.delta.partial_json;
135
+ }
136
+ else if (event.delta.type === 'thinking_delta') {
137
+ block.thinking = (block.thinking ?? '') + event.delta.thinking;
138
+ decoder.pushReasoning(event.delta.thinking);
139
+ yield { type: 'thinking', content: event.delta.thinking };
140
+ }
141
+ else if (event.delta.type === 'signature_delta') {
142
+ block.signature = event.delta.signature;
143
+ }
144
+ break;
145
+ }
146
+ case 'content_block_stop': {
147
+ const block = contentBlocks.get(event.index);
148
+ if (block?.type === 'tool_use' && block.toolId && block.toolName) {
149
+ // Parse accumulated JSON and emit tool call
150
+ const toolCall = {
151
+ id: block.toolId,
152
+ type: 'function',
153
+ function: {
154
+ name: block.toolName,
155
+ arguments: block.inputJson ?? '{}',
156
+ },
157
+ };
158
+ yield { type: 'tool_call', calls: [toolCall] };
159
+ }
160
+ break;
161
+ }
162
+ case 'message_delta': {
163
+ const outputTokens = event.usage?.output_tokens ?? 0;
164
+ usage = {
165
+ inputTokens,
166
+ outputTokens,
167
+ totalTokens: inputTokens + outputTokens,
168
+ };
169
+ break;
170
+ }
171
+ case 'error': {
172
+ throw new Error(`Anthropic stream error: ${event.error.type} — ${event.error.message}`);
173
+ }
174
+ }
175
+ }
176
+ catch (e) {
177
+ if (e instanceof Error && e.message.startsWith('Anthropic stream error')) {
178
+ throw e;
179
+ }
180
+ // Skip unparseable SSE data
181
+ }
182
+ }
183
+ decoder.flush();
184
+ this.auditor.record({
185
+ timestamp: Date.now(),
186
+ type: 'stream_end',
187
+ provider: 'anthropic',
188
+ model: this.options.model,
189
+ duration: Date.now() - start,
190
+ usage,
191
+ });
192
+ // Build final tool calls from accumulated content blocks
193
+ const toolCalls = [];
194
+ for (const block of contentBlocks.values()) {
195
+ if (block.type === 'tool_use' && block.toolId && block.toolName) {
196
+ toolCalls.push({
197
+ id: block.toolId,
198
+ type: 'function',
199
+ function: {
200
+ name: block.toolName,
201
+ arguments: block.inputJson ?? '{}',
202
+ },
203
+ });
204
+ }
205
+ }
206
+ return {
207
+ message: {
208
+ role: 'assistant',
209
+ content: decoder.getCleanContent(),
210
+ tool_calls: toolCalls.length > 0 ? toolCalls : undefined,
211
+ },
212
+ reasoning: decoder.getReasoning(),
213
+ usage,
214
+ provider: 'anthropic',
215
+ };
216
+ }
217
+ // ========================================================================
218
+ // Embeddings (not supported by Anthropic)
219
+ // ========================================================================
220
+ async embed(_text) {
221
+ throw new Error('Anthropic does not support embeddings. Use a different provider.');
222
+ }
223
+ // ========================================================================
224
+ // Model Discovery
225
+ // ========================================================================
226
+ async getModels() {
227
+ const url = `${this.baseUrl}/v1/models`;
228
+ try {
229
+ const response = await httpRequest(url, {
230
+ headers: this.buildAnthropicHeaders(),
231
+ timeout: 5000,
232
+ });
233
+ return response.data.data.map(m => m.id);
234
+ }
235
+ catch {
236
+ // Fallback: return well-known Claude models
237
+ return [
238
+ 'claude-sonnet-4-20250514',
239
+ 'claude-haiku-4-20250514',
240
+ 'claude-opus-4-20250514',
241
+ ];
242
+ }
243
+ }
244
+ async getModelInfo(_modelName) {
245
+ // Claude models support large context windows
246
+ const model = _modelName ?? this.options.model;
247
+ // Claude 4 models have 200K context
248
+ if (model.includes('claude-4') || model.includes('claude-opus') ||
249
+ model.includes('claude-sonnet') || model.includes('claude-haiku')) {
250
+ return {
251
+ model,
252
+ contextLength: 200_000,
253
+ capabilities: ['tools', 'vision', 'thinking'],
254
+ };
255
+ }
256
+ return {
257
+ model,
258
+ contextLength: 200_000,
259
+ capabilities: ['tools', 'vision'],
260
+ };
261
+ }
262
+ // ========================================================================
263
+ // Internal: Request Building
264
+ // ========================================================================
265
+ buildRequestBody(messages, options, stream) {
266
+ // Extract system prompt from messages
267
+ const systemMessages = messages.filter(m => m.role === 'system');
268
+ const nonSystemMessages = messages.filter(m => m.role !== 'system');
269
+ const systemPrompt = systemMessages.length > 0
270
+ ? systemMessages
271
+ .map(m => typeof m.content === 'string' ? m.content : this.extractText(m.content))
272
+ .join('\n\n')
273
+ : undefined;
274
+ // Convert tools from OpenAI format to Anthropic format
275
+ const tools = options?.tools ?? (Object.keys(this.toolRegistry).length > 0 ? this.getToolDefinitions() : undefined);
276
+ const anthropicTools = tools?.map(t => this.convertToolDef(t));
277
+ // Map tool_choice
278
+ let toolChoice;
279
+ if (options?.toolChoice === 'required') {
280
+ toolChoice = { type: 'any' };
281
+ }
282
+ else if (options?.toolChoice === 'none') {
283
+ toolChoice = { type: 'auto' }; // Anthropic doesn't have 'none', closest is 'auto'
284
+ }
285
+ else if (options?.toolChoice === 'auto') {
286
+ toolChoice = { type: 'auto' };
287
+ }
288
+ const body = {
289
+ model: this.options.model,
290
+ messages: this.convertMessages(nonSystemMessages),
291
+ max_tokens: options?.maxTokens ?? 4096,
292
+ ...(systemPrompt && { system: systemPrompt }),
293
+ ...(anthropicTools?.length && { tools: anthropicTools }),
294
+ ...(toolChoice && { tool_choice: toolChoice }),
295
+ ...(stream && { stream: true }),
296
+ ...(options?.temperature !== undefined && { temperature: options.temperature }),
297
+ };
298
+ return body;
299
+ }
300
+ // ========================================================================
301
+ // Internal: Message Conversion
302
+ // ========================================================================
303
+ /**
304
+ * Convert our canonical LLMChatMessage[] to Anthropic's message format.
305
+ * Key conversions:
306
+ * - 'tool' role messages → merged into preceding user message as tool_result blocks
307
+ * - assistant messages with tool_calls → assistant message with tool_use blocks
308
+ * - multimodal content → Anthropic image blocks
309
+ */
310
+ convertMessages(messages) {
311
+ const result = [];
312
+ for (let i = 0; i < messages.length; i++) {
313
+ const msg = messages[i];
314
+ if (msg.role === 'assistant') {
315
+ // Build content blocks for assistant
316
+ const blocks = [];
317
+ // Add text content if present
318
+ const text = typeof msg.content === 'string'
319
+ ? msg.content
320
+ : this.extractText(msg.content);
321
+ if (text) {
322
+ blocks.push({ type: 'text', text });
323
+ }
324
+ // Convert tool_calls to tool_use blocks
325
+ if (msg.tool_calls) {
326
+ for (const tc of msg.tool_calls) {
327
+ let input = {};
328
+ try {
329
+ input = JSON.parse(tc.function.arguments);
330
+ }
331
+ catch {
332
+ // Keep empty object if parse fails
333
+ }
334
+ blocks.push({
335
+ type: 'tool_use',
336
+ id: tc.id,
337
+ name: tc.function.name,
338
+ input,
339
+ });
340
+ }
341
+ }
342
+ if (blocks.length > 0) {
343
+ result.push({ role: 'assistant', content: blocks });
344
+ }
345
+ }
346
+ else if (msg.role === 'tool') {
347
+ // Anthropic needs tool results inside user messages
348
+ const toolResultBlock = {
349
+ type: 'tool_result',
350
+ tool_call_id: msg.tool_call_id ?? '',
351
+ content: typeof msg.content === 'string'
352
+ ? msg.content
353
+ : this.extractText(msg.content),
354
+ };
355
+ // Collect consecutive tool results
356
+ const toolResults = [toolResultBlock];
357
+ while (i + 1 < messages.length && messages[i + 1].role === 'tool') {
358
+ i++;
359
+ const nextMsg = messages[i];
360
+ toolResults.push({
361
+ type: 'tool_result',
362
+ tool_call_id: nextMsg.tool_call_id ?? '',
363
+ content: typeof nextMsg.content === 'string'
364
+ ? nextMsg.content
365
+ : this.extractText(nextMsg.content),
366
+ });
367
+ }
368
+ result.push({ role: 'user', content: toolResults });
369
+ }
370
+ else if (msg.role === 'user') {
371
+ const blocks = this.convertUserContent(msg.content);
372
+ result.push({ role: 'user', content: blocks });
373
+ }
374
+ }
375
+ // Anthropic requires alternating user/assistant messages.
376
+ // Merge consecutive same-role messages if needed.
377
+ return this.ensureAlternating(result);
378
+ }
379
+ /**
380
+ * Convert user message content (string or multimodal) to Anthropic blocks.
381
+ */
382
+ convertUserContent(content) {
383
+ if (typeof content === 'string') {
384
+ return [{ type: 'text', text: content }];
385
+ }
386
+ const blocks = [];
387
+ for (const part of content) {
388
+ if (part.type === 'text') {
389
+ blocks.push({ type: 'text', text: part.text });
390
+ }
391
+ else if (part.type === 'audio') {
392
+ // Anthropic does not yet support audio input — skip silently
393
+ this.debugLog('[Anthropic] Audio content dropped — not supported');
394
+ }
395
+ else if (part.type === 'image_url') {
396
+ const url = part.image_url.url;
397
+ if (url.startsWith('data:')) {
398
+ // Extract base64 data from data URI
399
+ const match = url.match(/^data:([^;]+);base64,(.+)$/);
400
+ if (match) {
401
+ blocks.push({
402
+ type: 'image',
403
+ source: {
404
+ type: 'base64',
405
+ media_type: match[1],
406
+ data: match[2],
407
+ },
408
+ });
409
+ }
410
+ }
411
+ else {
412
+ // URL-based image
413
+ blocks.push({
414
+ type: 'image',
415
+ source: {
416
+ type: 'url',
417
+ url,
418
+ },
419
+ });
420
+ }
421
+ }
422
+ }
423
+ return blocks.length > 0 ? blocks : [{ type: 'text', text: '' }];
424
+ }
425
+ /**
426
+ * Ensure messages alternate between user and assistant roles.
427
+ * Anthropic requires strict alternation. Merge consecutive same-role messages.
428
+ */
429
+ ensureAlternating(messages) {
430
+ if (messages.length <= 1)
431
+ return messages;
432
+ const merged = [messages[0]];
433
+ for (let i = 1; i < messages.length; i++) {
434
+ const current = messages[i];
435
+ const last = merged[merged.length - 1];
436
+ if (current.role === last.role) {
437
+ // Merge content arrays
438
+ const lastContent = Array.isArray(last.content)
439
+ ? last.content
440
+ : [{ type: 'text', text: last.content }];
441
+ const currentContent = Array.isArray(current.content)
442
+ ? current.content
443
+ : [{ type: 'text', text: current.content }];
444
+ merged[merged.length - 1] = {
445
+ role: current.role,
446
+ content: [...lastContent, ...currentContent],
447
+ };
448
+ }
449
+ else {
450
+ merged.push(current);
451
+ }
452
+ }
453
+ return merged;
454
+ }
455
+ // ========================================================================
456
+ // Internal: Response Parsing
457
+ // ========================================================================
458
+ /**
459
+ * Parse Anthropic's response format into our canonical LLMChatResponse.
460
+ */
461
+ parseAnthropicResponse(data) {
462
+ let textContent = '';
463
+ let reasoning;
464
+ const toolCalls = [];
465
+ for (const block of data.content) {
466
+ if (block.type === 'text') {
467
+ textContent += block.text;
468
+ }
469
+ else if (block.type === 'tool_use') {
470
+ toolCalls.push({
471
+ id: block.id,
472
+ type: 'function',
473
+ function: {
474
+ name: block.name,
475
+ arguments: JSON.stringify(block.input),
476
+ },
477
+ });
478
+ }
479
+ else if (block.type === 'thinking') {
480
+ reasoning = (reasoning ?? '') + block.thinking;
481
+ }
482
+ }
483
+ const usage = {
484
+ inputTokens: data.usage.input_tokens,
485
+ outputTokens: data.usage.output_tokens,
486
+ totalTokens: data.usage.input_tokens + data.usage.output_tokens,
487
+ };
488
+ return {
489
+ message: {
490
+ role: 'assistant',
491
+ content: textContent,
492
+ tool_calls: toolCalls.length > 0 ? toolCalls : undefined,
493
+ },
494
+ reasoning,
495
+ usage,
496
+ provider: 'anthropic',
497
+ };
498
+ }
499
+ // ========================================================================
500
+ // Internal: Helpers
501
+ // ========================================================================
502
+ /** Convert OpenAI-format tool definition to Anthropic format */
503
+ convertToolDef(tool) {
504
+ return {
505
+ name: tool.function.name,
506
+ description: tool.function.description,
507
+ input_schema: {
508
+ type: 'object',
509
+ properties: tool.function.parameters.properties,
510
+ required: tool.function.parameters.required,
511
+ },
512
+ };
513
+ }
514
+ /** Extract text from multimodal content */
515
+ extractText(content) {
516
+ if (typeof content === 'string')
517
+ return content;
518
+ return content
519
+ .filter((p) => p.type === 'text')
520
+ .map(p => p.text)
521
+ .join('');
522
+ }
523
+ }
524
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAwK3D,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,MAAM,OAAO,eAAgB,SAAQ,aAAa;IAC7B,OAAO,CAAS;IAEjC,YAAY,OAAyB,EAAE,OAAiB;QACpD,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,2BAA2B,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC7E,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IACvB,CAAC;IAED,2EAA2E;IAC3E,UAAU;IACV,2EAA2E;IAEnE,qBAAqB;QACzB,MAAM,OAAO,GAA2B;YACpC,cAAc,EAAE,kBAAkB;YAClC,mBAAmB,EAAE,YAAY;SACpC,CAAC;QACF,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAC/C,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,2EAA2E;IAC3E,uBAAuB;IACvB,2EAA2E;IAElE,KAAK,CAAC,IAAI,CACf,QAA0B,EAC1B,OAAqB;QAErB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,cAAc,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAE7D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAChB,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,WAAW;YACrB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;SAC5B,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAoB,GAAG,EAAE;YACvD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE;YACrC,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK;SACzC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAEjD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,WAAW;YACrB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YACzB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;YAC5B,KAAK,EAAE,MAAM,CAAC,KAAK;SACtB,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,2EAA2E;IAC3E,YAAY;IACZ,2EAA2E;IAElE,KAAK,CAAC,CAAC,UAAU,CACtB,QAA0B,EAC1B,OAAqB;QAErB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,cAAc,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAChB,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,WAAW;YACrB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;SAC5B,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAElD,yCAAyC;QACzC,MAAM,aAAa,GAQd,IAAI,GAAG,EAAE,CAAC;QAEf,IAAI,KAAiC,CAAC;QACtC,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE;YACrC,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM;SAC1C,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAyB,CAAC;gBAEvD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACjB,KAAK,eAAe,CAAC,CAAC,CAAC;wBACnB,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;wBACrD,MAAM;oBACV,CAAC;oBAED,KAAK,qBAAqB,CAAC,CAAC,CAAC;wBACzB,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;wBAClC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;4BACxB,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;wBAC/D,CAAC;6BAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;4BACnC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE;gCAC3B,IAAI,EAAE,UAAU;gCAChB,IAAI,EAAE,EAAE;gCACR,MAAM,EAAE,KAAK,CAAC,EAAE;gCAChB,QAAQ,EAAE,KAAK,CAAC,IAAI;gCACpB,SAAS,EAAE,EAAE;6BAChB,CAAC,CAAC;wBACP,CAAC;6BAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;4BACnC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;wBACjF,CAAC;wBACD,MAAM;oBACV,CAAC;oBAED,KAAK,qBAAqB,CAAC,CAAC,CAAC;wBACzB,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBAC7C,IAAI,CAAC,KAAK;4BAAE,MAAM;wBAElB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;4BACpC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;4BAC/B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;4BAC/B,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;wBACtD,CAAC;6BAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;4BACjD,KAAK,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;wBACzE,CAAC;6BAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;4BAC/C,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;4BAC/D,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;4BAC5C,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;wBAC9D,CAAC;6BAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;4BAChD,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;wBAC5C,CAAC;wBACD,MAAM;oBACV,CAAC;oBAED,KAAK,oBAAoB,CAAC,CAAC,CAAC;wBACxB,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBAC7C,IAAI,KAAK,EAAE,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;4BAC/D,4CAA4C;4BAC5C,MAAM,QAAQ,GAAgB;gCAC1B,EAAE,EAAE,KAAK,CAAC,MAAM;gCAChB,IAAI,EAAE,UAAU;gCAChB,QAAQ,EAAE;oCACN,IAAI,EAAE,KAAK,CAAC,QAAQ;oCACpB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;iCACrC;6BACJ,CAAC;4BACF,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACnD,CAAC;wBACD,MAAM;oBACV,CAAC;oBAED,KAAK,eAAe,CAAC,CAAC,CAAC;wBACnB,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC,CAAC;wBACrD,KAAK,GAAG;4BACJ,WAAW;4BACX,YAAY;4BACZ,WAAW,EAAE,WAAW,GAAG,YAAY;yBAC1C,CAAC;wBACF,MAAM;oBACV,CAAC;oBAED,KAAK,OAAO,CAAC,CAAC,CAAC;wBACX,MAAM,IAAI,KAAK,CAAC,2BAA2B,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC5F,CAAC;gBACL,CAAC;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE,CAAC;oBACvE,MAAM,CAAC,CAAC;gBACZ,CAAC;gBACD,4BAA4B;YAChC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,WAAW;YACrB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YACzB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;YAC5B,KAAK;SACR,CAAC,CAAC;QAEH,yDAAyD;QACzD,MAAM,SAAS,GAAkB,EAAE,CAAC;QACpC,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC9D,SAAS,CAAC,IAAI,CAAC;oBACX,EAAE,EAAE,KAAK,CAAC,MAAM;oBAChB,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE;wBACN,IAAI,EAAE,KAAK,CAAC,QAAQ;wBACpB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;qBACrC;iBACJ,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,OAAO;YACH,OAAO,EAAE;gBACL,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,OAAO,CAAC,eAAe,EAAE;gBAClC,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;aAC3D;YACD,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE;YACjC,KAAK;YACL,QAAQ,EAAE,WAAW;SACxB,CAAC;IACN,CAAC;IAED,2EAA2E;IAC3E,0CAA0C;IAC1C,2EAA2E;IAElE,KAAK,CAAC,KAAK,CAAC,KAAa;QAC9B,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACxF,CAAC;IAED,2EAA2E;IAC3E,kBAAkB;IAClB,2EAA2E;IAElE,KAAK,CAAC,SAAS;QACpB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,YAAY,CAAC;QACxC,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAE/B,GAAG,EAAE;gBACJ,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE;gBACrC,OAAO,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACL,4CAA4C;YAC5C,OAAO;gBACH,0BAA0B;gBAC1B,yBAAyB;gBACzB,wBAAwB;aAC3B,CAAC;QACN,CAAC;IACL,CAAC;IAEQ,KAAK,CAAC,YAAY,CAAC,UAAmB;QAC3C,8CAA8C;QAC9C,MAAM,KAAK,GAAG,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAE/C,oCAAoC;QACpC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC3D,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACpE,OAAO;gBACH,KAAK;gBACL,aAAa,EAAE,OAAO;gBACtB,YAAY,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC;aAChD,CAAC;QACN,CAAC;QAED,OAAO;YACH,KAAK;YACL,aAAa,EAAE,OAAO;YACtB,YAAY,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;SACpC,CAAC;IACN,CAAC;IAED,2EAA2E;IAC3E,6BAA6B;IAC7B,2EAA2E;IAEnE,gBAAgB,CACpB,QAA0B,EAC1B,OAAgC,EAChC,MAAe;QAEf,sCAAsC;QACtC,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QACjE,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAEpE,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC;YAC1C,CAAC,CAAC,cAAc;iBACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;iBACjF,IAAI,CAAC,MAAM,CAAC;YACjB,CAAC,CAAC,SAAS,CAAC;QAEhB,uDAAuD;QACvD,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,SAAS,CACpF,CAAC;QACF,MAAM,cAAc,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/D,kBAAkB;QAClB,IAAI,UAA2C,CAAC;QAChD,IAAI,OAAO,EAAE,UAAU,KAAK,UAAU,EAAE,CAAC;YACrC,UAAU,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACjC,CAAC;aAAM,IAAI,OAAO,EAAE,UAAU,KAAK,MAAM,EAAE,CAAC;YACxC,UAAU,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,mDAAmD;QACtF,CAAC;aAAM,IAAI,OAAO,EAAE,UAAU,KAAK,MAAM,EAAE,CAAC;YACxC,UAAU,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAClC,CAAC;QAED,MAAM,IAAI,GAAqB;YAC3B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;YACzB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC;YACjD,UAAU,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;YACtC,GAAG,CAAC,YAAY,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;YAC7C,GAAG,CAAC,cAAc,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;YACxD,GAAG,CAAC,UAAU,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;YAC9C,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAC/B,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;SAClF,CAAC;QAEF,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,2EAA2E;IAC3E,+BAA+B;IAC/B,2EAA2E;IAE3E;;;;;;OAMG;IACK,eAAe,CAAC,QAA0B;QAC9C,MAAM,MAAM,GAAuB,EAAE,CAAC;QAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;YAEzB,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC3B,qCAAqC;gBACrC,MAAM,MAAM,GAA4B,EAAE,CAAC;gBAE3C,8BAA8B;gBAC9B,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;oBACxC,CAAC,CAAC,GAAG,CAAC,OAAO;oBACb,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACpC,IAAI,IAAI,EAAE,CAAC;oBACP,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxC,CAAC;gBAED,wCAAwC;gBACxC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;oBACjB,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;wBAC9B,IAAI,KAAK,GAA4B,EAAE,CAAC;wBACxC,IAAI,CAAC;4BACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;wBAC9C,CAAC;wBAAC,MAAM,CAAC;4BACL,mCAAmC;wBACvC,CAAC;wBACD,MAAM,CAAC,IAAI,CAAC;4BACR,IAAI,EAAE,UAAU;4BAChB,EAAE,EAAE,EAAE,CAAC,EAAE;4BACT,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;4BACtB,KAAK;yBACR,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;gBAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;gBACxD,CAAC;YACL,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC7B,oDAAoD;gBACpD,MAAM,eAAe,GAA6B;oBAC9C,IAAI,EAAE,aAAa;oBACnB,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;oBACpC,OAAO,EAAE,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;wBACpC,CAAC,CAAC,GAAG,CAAC,OAAO;wBACb,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;iBACtC,CAAC;gBAEF,mCAAmC;gBACnC,MAAM,WAAW,GAA4B,CAAC,eAAe,CAAC,CAAC;gBAC/D,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBACjE,CAAC,EAAE,CAAC;oBACJ,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;oBAC7B,WAAW,CAAC,IAAI,CAAC;wBACb,IAAI,EAAE,aAAa;wBACnB,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;wBACxC,OAAO,EAAE,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;4BACxC,CAAC,CAAC,OAAO,CAAC,OAAO;4BACjB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;qBAC1C,CAAC,CAAC;gBACP,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;YACxD,CAAC;iBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACpD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACnD,CAAC;QACL,CAAC;QAED,0DAA0D;QAC1D,kDAAkD;QAClD,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,OAA0B;QACjD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,OAA2B,EAAE,CAAC;YAC7C,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACnD,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC/B,6DAA6D;gBAC7D,IAAI,CAAC,QAAQ,CAAC,mDAAmD,CAAC,CAAC;YACvE,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACnC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;gBAC/B,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC1B,oCAAoC;oBACpC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;oBACtD,IAAI,KAAK,EAAE,CAAC;wBACR,MAAM,CAAC,IAAI,CAAC;4BACR,IAAI,EAAE,OAAO;4BACb,MAAM,EAAE;gCACJ,IAAI,EAAE,QAAQ;gCACd,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;gCACpB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;6BACjB;yBACJ,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,kBAAkB;oBAClB,MAAM,CAAC,IAAI,CAAC;wBACR,IAAI,EAAE,OAAO;wBACb,MAAM,EAAE;4BACJ,IAAI,EAAE,KAAK;4BACX,GAAG;yBACN;qBACJ,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IAED;;;OAGG;IACK,iBAAiB,CAAC,QAA4B;QAClD,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,QAAQ,CAAC;QAE1C,MAAM,MAAM,GAAuB,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC;QAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;YAExC,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7B,uBAAuB;gBACvB,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;oBAC3C,CAAC,CAAC,IAAI,CAAC,OAAO;oBACd,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gBACtD,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;oBACjD,CAAC,CAAC,OAAO,CAAC,OAAO;oBACjB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;gBAEzD,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;oBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,cAAc,CAAC;iBAC/C,CAAC;YACN,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,2EAA2E;IAC3E,6BAA6B;IAC7B,2EAA2E;IAE3E;;OAEG;IACK,sBAAsB,CAAC,IAAuB;QAClD,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,SAA6B,CAAC;QAClC,MAAM,SAAS,GAAkB,EAAE,CAAC;QAEpC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACxB,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC;YAC9B,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACnC,SAAS,CAAC,IAAI,CAAC;oBACX,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE;wBACN,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;qBACzC;iBACJ,CAAC,CAAC;YACP,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACnC,SAAS,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;YACnD,CAAC;QACL,CAAC;QAED,MAAM,KAAK,GAAmB;YAC1B,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY;YACpC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;YACtC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa;SAClE,CAAC;QAEF,OAAO;YACH,OAAO,EAAE;gBACL,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,WAAW;gBACpB,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;aAC3D;YACD,SAAS;YACT,KAAK;YACL,QAAQ,EAAE,WAAW;SACxB,CAAC;IACN,CAAC;IAED,2EAA2E;IAC3E,oBAAoB;IACpB,2EAA2E;IAE3E,gEAAgE;IACxD,cAAc,CAAC,IAAuB;QAC1C,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;YACxB,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;YACtC,YAAY,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU;gBAC/C,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ;aAC9C;SACJ,CAAC;IACN,CAAC;IAED,2CAA2C;IACnC,WAAW,CAAC,OAA0B;QAC1C,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC;QAChD,OAAQ,OAA4B;aAC/B,MAAM,CAAC,CAAC,CAAC,EAAuC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;aACrE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAChB,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;CACJ"}
@@ -29,5 +29,10 @@ export declare class GoogleClient extends BaseLLMClient {
29
29
  private convertToGoogleTool;
30
30
  private convertFunctionCallToToolCall;
31
31
  private parseGoogleResponse;
32
+ /**
33
+ * Retry HTTP requests for Flex tier when receiving 503/429 errors.
34
+ * Uses exponential backoff (5s → 10s → 20s) as recommended by Google.
35
+ */
36
+ private fetchWithFlexRetry;
32
37
  }
33
38
  //# sourceMappingURL=google.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAS7C,OAAO,KAAK,EACR,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,WAAW,EAYd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,qBAAa,YAAa,SAAQ,aAAa;IAC3C,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,OAAO;IAUxD,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,UAAU;IAcZ,IAAI,CACN,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,CAAC,EAAE,WAAW,GACtB,OAAO,CAAC,eAAe,CAAC;IAuCpB,UAAU,CACb,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,CAAC,EAAE,WAAW,GACtB,cAAc,CAAC,YAAY,EAAE,eAAe,GAAG,IAAI,EAAE,OAAO,CAAC;IAkG1D,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAqBtC,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAwBpC,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,qBAAqB;IAsC7B,OAAO,CAAC,uBAAuB;IA4F/B,OAAO,CAAC,2BAA2B;IA+BnC,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,6BAA6B;IAsBrC,OAAO,CAAC,mBAAmB;CAyC9B"}
1
+ {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAS7C,OAAO,KAAK,EACR,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,WAAW,EAYd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,qBAAa,YAAa,SAAQ,aAAa;IAC3C,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,OAAO;IAUxD,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,UAAU;IAcZ,IAAI,CACN,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,CAAC,EAAE,WAAW,GACtB,OAAO,CAAC,eAAe,CAAC;IAuDpB,UAAU,CACb,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,CAAC,EAAE,WAAW,GACtB,cAAc,CAAC,YAAY,EAAE,eAAe,GAAG,IAAI,EAAE,OAAO,CAAC;IAyG1D,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAqBtC,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAwBpC,OAAO,CAAC,gBAAgB;IAqCxB,OAAO,CAAC,qBAAqB;IAsC7B,OAAO,CAAC,uBAAuB;IA4F/B,OAAO,CAAC,2BAA2B;IAuCnC,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,6BAA6B;IAsBrC,OAAO,CAAC,mBAAmB;IA8C3B;;;OAGG;YACW,kBAAkB;CAoBnC"}