@propio-ai/providers 0.1.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 (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +85 -0
  3. package/dist/config.d.ts +91 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +2 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/configFile.d.ts +22 -0
  8. package/dist/configFile.d.ts.map +1 -0
  9. package/dist/configFile.js +33 -0
  10. package/dist/configFile.js.map +1 -0
  11. package/dist/configValidation.d.ts +34 -0
  12. package/dist/configValidation.d.ts.map +1 -0
  13. package/dist/configValidation.js +185 -0
  14. package/dist/configValidation.js.map +1 -0
  15. package/dist/diagnostics.d.ts +29 -0
  16. package/dist/diagnostics.d.ts.map +1 -0
  17. package/dist/diagnostics.js +9 -0
  18. package/dist/diagnostics.js.map +1 -0
  19. package/dist/factory.d.ts +56 -0
  20. package/dist/factory.d.ts.map +1 -0
  21. package/dist/factory.js +162 -0
  22. package/dist/factory.js.map +1 -0
  23. package/dist/index.d.ts +11 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +9 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/interface.d.ts +36 -0
  28. package/dist/interface.d.ts.map +1 -0
  29. package/dist/interface.js +2 -0
  30. package/dist/interface.js.map +1 -0
  31. package/dist/internal/baseProvider.d.ts +20 -0
  32. package/dist/internal/baseProvider.d.ts.map +1 -0
  33. package/dist/internal/baseProvider.js +13 -0
  34. package/dist/internal/baseProvider.js.map +1 -0
  35. package/dist/internal/capabilities.d.ts +4 -0
  36. package/dist/internal/capabilities.d.ts.map +1 -0
  37. package/dist/internal/capabilities.js +12 -0
  38. package/dist/internal/capabilities.js.map +1 -0
  39. package/dist/internal/jsonFile.d.ts +11 -0
  40. package/dist/internal/jsonFile.d.ts.map +1 -0
  41. package/dist/internal/jsonFile.js +78 -0
  42. package/dist/internal/jsonFile.js.map +1 -0
  43. package/dist/internal/openAiCompatibleProvider.d.ts +44 -0
  44. package/dist/internal/openAiCompatibleProvider.d.ts.map +1 -0
  45. package/dist/internal/openAiCompatibleProvider.js +93 -0
  46. package/dist/internal/openAiCompatibleProvider.js.map +1 -0
  47. package/dist/internal/openAiStream.d.ts +13 -0
  48. package/dist/internal/openAiStream.d.ts.map +1 -0
  49. package/dist/internal/openAiStream.js +85 -0
  50. package/dist/internal/openAiStream.js.map +1 -0
  51. package/dist/internal/shared.d.ts +79 -0
  52. package/dist/internal/shared.d.ts.map +1 -0
  53. package/dist/internal/shared.js +250 -0
  54. package/dist/internal/shared.js.map +1 -0
  55. package/dist/internal/withRetry.d.ts +25 -0
  56. package/dist/internal/withRetry.d.ts.map +1 -0
  57. package/dist/internal/withRetry.js +46 -0
  58. package/dist/internal/withRetry.js.map +1 -0
  59. package/dist/providers/anthropic.d.ts +32 -0
  60. package/dist/providers/anthropic.d.ts.map +1 -0
  61. package/dist/providers/anthropic.js +435 -0
  62. package/dist/providers/anthropic.js.map +1 -0
  63. package/dist/providers/bedrock.d.ts +67 -0
  64. package/dist/providers/bedrock.d.ts.map +1 -0
  65. package/dist/providers/bedrock.js +442 -0
  66. package/dist/providers/bedrock.js.map +1 -0
  67. package/dist/providers/cloudflare.d.ts +40 -0
  68. package/dist/providers/cloudflare.d.ts.map +1 -0
  69. package/dist/providers/cloudflare.js +115 -0
  70. package/dist/providers/cloudflare.js.map +1 -0
  71. package/dist/providers/gemini.d.ts +57 -0
  72. package/dist/providers/gemini.d.ts.map +1 -0
  73. package/dist/providers/gemini.js +359 -0
  74. package/dist/providers/gemini.js.map +1 -0
  75. package/dist/providers/ollama.d.ts +67 -0
  76. package/dist/providers/ollama.d.ts.map +1 -0
  77. package/dist/providers/ollama.js +241 -0
  78. package/dist/providers/ollama.js.map +1 -0
  79. package/dist/providers/openrouter.d.ts +76 -0
  80. package/dist/providers/openrouter.d.ts.map +1 -0
  81. package/dist/providers/openrouter.js +571 -0
  82. package/dist/providers/openrouter.js.map +1 -0
  83. package/dist/providers/xai.d.ts +45 -0
  84. package/dist/providers/xai.d.ts.map +1 -0
  85. package/dist/providers/xai.js +371 -0
  86. package/dist/providers/xai.js.map +1 -0
  87. package/dist/types.d.ts +166 -0
  88. package/dist/types.d.ts.map +1 -0
  89. package/dist/types.js +60 -0
  90. package/dist/types.js.map +1 -0
  91. package/package.json +70 -0
@@ -0,0 +1,571 @@
1
+ import { ProviderError, ProviderAuthenticationError, ProviderRateLimitError, ProviderModelNotFoundError, ProviderContextLengthError, ProviderCapacityError, } from "../types.js";
2
+ import { accumulateOpenAIStreamToolCall, buildOpenAIChatCompletionRequestBody, buildOpenAIStreamToolCalls, createProviderRetryOptions, isContextLengthError, parseJsonMaybe, parseOpenAIStreamToolCallArguments, parseRetryAfterSeconds, readSseDataLines, } from "../internal/shared.js";
3
+ import { withRetry } from "../internal/withRetry.js";
4
+ import { OpenAiCompatibleProvider } from "../internal/openAiCompatibleProvider.js";
5
+ const OPENROUTER_API_URL = "https://openrouter.ai/api/v1/chat/completions";
6
+ const DSML_TOOL_CALL_START_TOKENS = [
7
+ "<|DSML|tool_calls>",
8
+ "<|DSML|function_calls>",
9
+ ];
10
+ const DSML_TOOL_CALL_END_TOKENS = [
11
+ "</|DSML|tool_calls>",
12
+ "</|DSML|function_calls>",
13
+ ];
14
+ const DSML_TOOL_CALL_BLOCK_REGEX = /<|DSML|(?:tool_calls|function_calls)>(.*?)<\/|DSML|(?:tool_calls|function_calls)>/gs;
15
+ const DSML_TOOL_CALL_BLOCK_AT_START_REGEX = /^<|DSML|(?:tool_calls|function_calls)>(.*?)<\/|DSML|(?:tool_calls|function_calls)>/s;
16
+ const DSML_INVOKE_REGEX = /<|DSML|invoke\s+name="([^"]+)"\s*>(.*?)<\/|DSML|invoke>/gs;
17
+ const DSML_PARAMETER_REGEX = /<|DSML|parameter\s+name="([^"]+)"\s+string="(?:true|false)"\s*>(.*?)<\/|DSML|parameter>/gs;
18
+ /**
19
+ * OpenRouter implementation of LLMProvider using native fetch and OpenAI-compatible API.
20
+ */
21
+ export class OpenRouterProvider extends OpenAiCompatibleProvider {
22
+ constructor(options) {
23
+ super();
24
+ this.name = "openrouter";
25
+ const apiKey = options.apiKey ?? process.env.OPENROUTER_API_KEY ?? "";
26
+ if (!apiKey || apiKey.trim() === "") {
27
+ throw new ProviderAuthenticationError("OpenRouter API key is required. Set OPENROUTER_API_KEY or pass apiKey in options.");
28
+ }
29
+ this.model = options.model;
30
+ this.configureCapabilities(options.contextWindowTokens);
31
+ this.apiKey = apiKey;
32
+ this.httpReferer = options.httpReferer;
33
+ this.xTitle = options.xTitle;
34
+ this.providerRouting = options.provider;
35
+ this.fallbackModels = options.fallbackModels;
36
+ this.debugEchoUpstreamBody = options.debugEchoUpstreamBody;
37
+ this.debugLoggingEnabled = options.debugLoggingEnabled ?? false;
38
+ this.onDiagnosticEvent = options.onDiagnosticEvent;
39
+ this.retryConfig = options.retryConfig;
40
+ }
41
+ emitDiagnostic(event) {
42
+ this.onDiagnosticEvent?.(event);
43
+ }
44
+ buildProviderRoutingBody() {
45
+ if (!this.providerRouting) {
46
+ return undefined;
47
+ }
48
+ const provider = {};
49
+ if (this.providerRouting.allowFallbacks !== undefined) {
50
+ provider.allow_fallbacks = this.providerRouting.allowFallbacks;
51
+ }
52
+ if (this.providerRouting.order !== undefined) {
53
+ provider.order = [...this.providerRouting.order];
54
+ }
55
+ if (this.providerRouting.requireParameters !== undefined) {
56
+ provider.require_parameters = this.providerRouting.requireParameters;
57
+ }
58
+ return Object.keys(provider).length > 0 ? provider : undefined;
59
+ }
60
+ applyRequestBodyExtras(body) {
61
+ const provider = this.buildProviderRoutingBody();
62
+ if (provider) {
63
+ body.provider = provider;
64
+ }
65
+ if (this.fallbackModels && this.fallbackModels.length > 0) {
66
+ body.models = [...this.fallbackModels];
67
+ }
68
+ if (this.debugEchoUpstreamBody && this.debugLoggingEnabled) {
69
+ body.debug = { echo_upstream_body: true };
70
+ }
71
+ }
72
+ buildRequestBody(request, includeTools) {
73
+ const body = buildOpenAIChatCompletionRequestBody({
74
+ request,
75
+ model: this.model,
76
+ mapMessage: (msg) => this.chatMessageToOpenAIMessage(msg),
77
+ mapTool: (tool) => this.chatToolToOpenAITool(tool),
78
+ includeTools,
79
+ extra: (body) => {
80
+ this.applyRequestBodyExtras(body);
81
+ },
82
+ });
83
+ if (request.requestReasoning) {
84
+ body.reasoning = { enabled: true, exclude: false };
85
+ }
86
+ return body;
87
+ }
88
+ buildHeaders() {
89
+ const headers = {
90
+ Authorization: `Bearer ${this.apiKey}`,
91
+ "Content-Type": "application/json",
92
+ };
93
+ if (this.httpReferer)
94
+ headers["HTTP-Referer"] = this.httpReferer;
95
+ if (this.xTitle)
96
+ headers["X-OpenRouter-Title"] = this.xTitle;
97
+ return headers;
98
+ }
99
+ async fetchCompletion(body, signal) {
100
+ return await fetch(OPENROUTER_API_URL, {
101
+ method: "POST",
102
+ headers: this.buildHeaders(),
103
+ body: JSON.stringify(body),
104
+ signal,
105
+ });
106
+ }
107
+ async readResponseText(response) {
108
+ try {
109
+ return await response.text();
110
+ }
111
+ catch {
112
+ return "";
113
+ }
114
+ }
115
+ longestSuffixOverlap(text, token) {
116
+ const maxLength = Math.min(text.length, token.length);
117
+ for (let length = maxLength; length > 0; length--) {
118
+ if (token.startsWith(text.slice(text.length - length))) {
119
+ return length;
120
+ }
121
+ }
122
+ return 0;
123
+ }
124
+ findDsmlStartTokenIndex(text) {
125
+ let earliest = -1;
126
+ for (const token of DSML_TOOL_CALL_START_TOKENS) {
127
+ const index = text.indexOf(token);
128
+ if (index !== -1 && (earliest === -1 || index < earliest)) {
129
+ earliest = index;
130
+ }
131
+ }
132
+ return earliest;
133
+ }
134
+ parseDsmlParameters(invokeBody) {
135
+ const args = {};
136
+ for (const parameterMatch of invokeBody.matchAll(DSML_PARAMETER_REGEX)) {
137
+ const paramName = parameterMatch[1] ?? "";
138
+ const rawValue = parameterMatch[2] ?? "";
139
+ const fullTag = parameterMatch[0];
140
+ const stringFlag = /string="(true|false)"/.exec(fullTag)?.[1];
141
+ if (!paramName)
142
+ continue;
143
+ if (stringFlag === "true") {
144
+ args[paramName] = rawValue;
145
+ continue;
146
+ }
147
+ try {
148
+ args[paramName] = JSON.parse(rawValue);
149
+ }
150
+ catch {
151
+ args[paramName] = rawValue;
152
+ }
153
+ }
154
+ return args;
155
+ }
156
+ parseDsmlToolCalls(text) {
157
+ const toolCalls = [];
158
+ for (const blockMatch of text.matchAll(DSML_TOOL_CALL_BLOCK_REGEX)) {
159
+ const block = blockMatch[1] ?? "";
160
+ for (const invokeMatch of block.matchAll(DSML_INVOKE_REGEX)) {
161
+ const invokeName = invokeMatch[1] ?? "";
162
+ const invokeBody = invokeMatch[2] ?? "";
163
+ toolCalls.push({
164
+ id: `call_${invokeName}_${Date.now()}_${toolCalls.length}`,
165
+ function: {
166
+ name: invokeName,
167
+ arguments: this.parseDsmlParameters(invokeBody),
168
+ },
169
+ });
170
+ }
171
+ }
172
+ return toolCalls;
173
+ }
174
+ emitBufferedText(content, events, state) {
175
+ if (content.length === 0) {
176
+ return;
177
+ }
178
+ events.push({ type: "assistant_text", delta: content });
179
+ if (content.trim().length > 0) {
180
+ state.sawUsableOutput = true;
181
+ }
182
+ }
183
+ emitBufferPrefix(buffer, prefixEnd, events, state) {
184
+ this.emitBufferedText(buffer.slice(0, prefixEnd), events, state);
185
+ return buffer.slice(prefixEnd);
186
+ }
187
+ emitNonDsmlTail(buffer, events, state) {
188
+ const overlap = DSML_TOOL_CALL_START_TOKENS.reduce((max, token) => Math.max(max, this.longestSuffixOverlap(buffer, token)), 0);
189
+ const emitLength = buffer.length - overlap;
190
+ if (emitLength <= 0) {
191
+ return buffer;
192
+ }
193
+ this.emitBufferedText(buffer.slice(0, emitLength), events, state);
194
+ return buffer.slice(emitLength);
195
+ }
196
+ consumeDsmlBuffer(buffer) {
197
+ const events = [];
198
+ let remainingBuffer = buffer;
199
+ const state = { sawUsableOutput: false };
200
+ while (remainingBuffer.length > 0) {
201
+ const startIndex = this.findDsmlStartTokenIndex(remainingBuffer);
202
+ if (startIndex === -1) {
203
+ const nextBuffer = this.emitNonDsmlTail(remainingBuffer, events, state);
204
+ if (nextBuffer === remainingBuffer) {
205
+ break;
206
+ }
207
+ remainingBuffer = nextBuffer;
208
+ continue;
209
+ }
210
+ if (startIndex > 0) {
211
+ remainingBuffer = this.emitBufferPrefix(remainingBuffer, startIndex, events, state);
212
+ continue;
213
+ }
214
+ const blockMatch = remainingBuffer.match(DSML_TOOL_CALL_BLOCK_AT_START_REGEX);
215
+ if (!blockMatch || blockMatch.index !== 0) {
216
+ break;
217
+ }
218
+ const blockText = blockMatch[0] ?? "";
219
+ const toolCalls = this.parseDsmlToolCalls(blockText);
220
+ if (toolCalls.length > 0) {
221
+ events.push({ type: "tool_calls", toolCalls });
222
+ state.sawUsableOutput = true;
223
+ }
224
+ remainingBuffer = remainingBuffer.slice(blockText.length);
225
+ }
226
+ return {
227
+ remainingBuffer,
228
+ events,
229
+ sawUsableOutput: state.sawUsableOutput,
230
+ };
231
+ }
232
+ buildStructuredToolCallsEvent(toolCallsByIndex, reasoningContent) {
233
+ const toolCalls = buildOpenAIStreamToolCalls(toolCallsByIndex, (acc) => ({
234
+ id: acc.id,
235
+ function: {
236
+ name: acc.name || "",
237
+ arguments: parseOpenAIStreamToolCallArguments(acc.argsString),
238
+ },
239
+ }));
240
+ if (toolCalls.length === 0)
241
+ return null;
242
+ return {
243
+ type: "tool_calls",
244
+ toolCalls,
245
+ ...(reasoningContent.length > 0 ? { reasoningContent } : {}),
246
+ };
247
+ }
248
+ mapOpenRouterFinishReason(finishReason) {
249
+ if (finishReason === "length")
250
+ return "max_tokens";
251
+ if (finishReason === "stop")
252
+ return "end_turn";
253
+ if (finishReason === "tool_calls")
254
+ return "tool_use";
255
+ if (finishReason === "content_filter")
256
+ return "error";
257
+ return "end_turn";
258
+ }
259
+ flushDsmlBuffer(contentBuffer, reasoningContent) {
260
+ const consumed = this.consumeDsmlBuffer(contentBuffer);
261
+ const events = consumed.events.map((event) => {
262
+ if ("type" in event &&
263
+ event.type === "tool_calls" &&
264
+ reasoningContent.length > 0) {
265
+ return {
266
+ type: "tool_calls",
267
+ toolCalls: event.toolCalls,
268
+ reasoningContent,
269
+ };
270
+ }
271
+ return event;
272
+ });
273
+ return {
274
+ events,
275
+ remainingBuffer: consumed.remainingBuffer,
276
+ sawUsableOutput: consumed.sawUsableOutput,
277
+ };
278
+ }
279
+ processContentDelta(delta, state, parseDsmlToolCalls) {
280
+ if (!delta.content)
281
+ return [];
282
+ if (parseDsmlToolCalls) {
283
+ state.contentBuffer += delta.content;
284
+ const flushed = this.flushDsmlBuffer(state.contentBuffer, state.reasoningContent);
285
+ state.contentBuffer = flushed.remainingBuffer;
286
+ state.sawUsableOutput || (state.sawUsableOutput = flushed.sawUsableOutput);
287
+ return flushed.events;
288
+ }
289
+ if (delta.content.trim())
290
+ state.sawUsableOutput = true;
291
+ return [{ type: "assistant_text", delta: delta.content }];
292
+ }
293
+ processToolCallsDelta(delta, finishReason, state) {
294
+ if (delta.tool_calls) {
295
+ for (const tc of delta.tool_calls) {
296
+ accumulateOpenAIStreamToolCall(tc, state.toolCallsByIndex, () => ({
297
+ name: "",
298
+ argsString: "",
299
+ }));
300
+ }
301
+ }
302
+ if (finishReason !== "tool_calls")
303
+ return [];
304
+ const event = this.buildStructuredToolCallsEvent(state.toolCallsByIndex, state.reasoningContent);
305
+ if (event) {
306
+ state.sawUsableOutput = true;
307
+ return [event];
308
+ }
309
+ return [];
310
+ }
311
+ flushStreamTail(state, parseDsmlToolCalls) {
312
+ const events = [];
313
+ if (parseDsmlToolCalls && state.contentBuffer.length > 0) {
314
+ const flushed = this.flushDsmlBuffer(state.contentBuffer, state.reasoningContent);
315
+ events.push(...flushed.events);
316
+ state.sawUsableOutput || (state.sawUsableOutput = flushed.sawUsableOutput);
317
+ }
318
+ return { events, noOutput: !state.sawUsableOutput };
319
+ }
320
+ processStreamChunk(data, state, parseDsmlToolCalls) {
321
+ if (data === "[DONE]")
322
+ return { events: [], done: true };
323
+ const choice = parseJsonMaybe(data)?.choices?.[0];
324
+ if (!choice?.delta)
325
+ return { events: [], done: false };
326
+ if (choice.finish_reason)
327
+ state.stopReason = this.mapOpenRouterFinishReason(choice.finish_reason);
328
+ const events = [];
329
+ if (choice.delta.reasoning_content) {
330
+ state.reasoningContent += choice.delta.reasoning_content;
331
+ events.push({
332
+ type: "thinking_delta",
333
+ delta: choice.delta.reasoning_content,
334
+ });
335
+ }
336
+ const reasoningDetailsText = this.extractReasoningDetailsText(choice.delta.reasoning_details);
337
+ if (reasoningDetailsText.length > 0) {
338
+ state.reasoningContent += reasoningDetailsText;
339
+ events.push({
340
+ type: "thinking_delta",
341
+ delta: reasoningDetailsText,
342
+ });
343
+ }
344
+ events.push(...this.processContentDelta(choice.delta, state, parseDsmlToolCalls), ...this.processToolCallsDelta(choice.delta, choice.finish_reason, state));
345
+ return { events, done: false };
346
+ }
347
+ extractReasoningDetailsText(reasoningDetails) {
348
+ if (!reasoningDetails || reasoningDetails.length === 0) {
349
+ return "";
350
+ }
351
+ return reasoningDetails
352
+ .map((detail) => {
353
+ if (detail.type === "reasoning.text" && detail.text) {
354
+ return detail.text;
355
+ }
356
+ if (detail.type === "reasoning.summary" && detail.summary) {
357
+ return detail.summary;
358
+ }
359
+ return "";
360
+ })
361
+ .join("");
362
+ }
363
+ async *streamResponse(response, options) {
364
+ const reader = response.body?.getReader();
365
+ if (!reader)
366
+ throw this.translateError(new Error("No response body"));
367
+ const state = {
368
+ contentBuffer: "",
369
+ reasoningContent: "",
370
+ sawUsableOutput: false,
371
+ stopReason: "end_turn",
372
+ toolCallsByIndex: new Map(),
373
+ };
374
+ for await (const data of readSseDataLines(reader)) {
375
+ const { events, done } = this.processStreamChunk(data, state, options.parseDsmlToolCalls);
376
+ yield* events;
377
+ if (done)
378
+ break;
379
+ }
380
+ const { events: tailEvents, noOutput } = this.flushStreamTail(state, options.parseDsmlToolCalls);
381
+ yield* tailEvents;
382
+ if (options.expectUsableOutput && noOutput) {
383
+ yield {
384
+ type: "status",
385
+ status: "OpenRouter returned no usable assistant output; retrying would not help.",
386
+ phase: "provider fallback",
387
+ };
388
+ throw new ProviderError("OpenRouter returned no usable assistant output");
389
+ }
390
+ yield { type: "terminal", stopReason: state.stopReason };
391
+ }
392
+ async fetchAndValidate(request, dropTools) {
393
+ const body = this.buildRequestBody(request, !dropTools);
394
+ const response = await this.fetchCompletion(body, request.signal);
395
+ if (!response.ok) {
396
+ const errorBody = await this.readResponseText(response);
397
+ throw this.translateError(new Error(errorBody || `HTTP ${response.status}`), response, errorBody);
398
+ }
399
+ return response;
400
+ }
401
+ async fetchStreamResponseWithRetry(request) {
402
+ let dropTools = false;
403
+ return await withRetry(() => this.fetchAndValidate(request, dropTools), {
404
+ ...createProviderRetryOptions({
405
+ request,
406
+ model: this.model,
407
+ provider: this.name,
408
+ retryConfig: {
409
+ maxRetries: this.retryConfig?.maxRetries ?? 3,
410
+ consecutive529Limit: this.retryConfig?.consecutive529Limit ?? 3,
411
+ baseDelayMs: this.retryConfig?.baseDelayMs ?? 500,
412
+ },
413
+ isRetryable: (err) => this.isRetryableError(err),
414
+ onDiagnosticEvent: (event) => this.emitDiagnostic(event),
415
+ }),
416
+ onFinalRetry: () => {
417
+ dropTools = true;
418
+ },
419
+ });
420
+ }
421
+ buildStreamResponseOptions(request) {
422
+ return {
423
+ parseDsmlToolCalls: Boolean(request.tools?.length),
424
+ expectUsableOutput: Boolean(request.tools?.length),
425
+ request,
426
+ };
427
+ }
428
+ async *streamChat(request) {
429
+ try {
430
+ const response = await this.fetchStreamResponseWithRetry(request);
431
+ yield* this.streamResponse(response, this.buildStreamResponseOptions(request));
432
+ }
433
+ catch (error) {
434
+ if (error instanceof ProviderError)
435
+ throw error;
436
+ throw this.translateError(error);
437
+ }
438
+ }
439
+ extractEnvelopeFields(parsed) {
440
+ const metadata = parsed.error?.metadata;
441
+ const details = {};
442
+ if (typeof parsed.error?.message === "string") {
443
+ details.message = parsed.error.message;
444
+ }
445
+ if (typeof metadata?.provider_name === "string") {
446
+ details.providerName = metadata.provider_name;
447
+ }
448
+ if (typeof metadata?.retry_after_seconds === "number") {
449
+ details.retryAfterSeconds = metadata.retry_after_seconds;
450
+ }
451
+ return details;
452
+ }
453
+ parseRawMetadataFields(rawJson) {
454
+ try {
455
+ const raw = JSON.parse(rawJson);
456
+ const details = {};
457
+ if (typeof raw.provider_name === "string") {
458
+ details.providerName = raw.provider_name;
459
+ }
460
+ if (typeof raw.error?.message === "string") {
461
+ details.message = raw.error.message;
462
+ }
463
+ if (typeof raw.error?.metadata?.retry_after_seconds === "number") {
464
+ details.retryAfterSeconds = raw.error.metadata.retry_after_seconds;
465
+ }
466
+ return details;
467
+ }
468
+ catch {
469
+ return {};
470
+ }
471
+ }
472
+ parseOpenRouterErrorBody(responseBody) {
473
+ if (!responseBody) {
474
+ return {};
475
+ }
476
+ try {
477
+ const parsed = JSON.parse(responseBody);
478
+ const details = this.extractEnvelopeFields(parsed);
479
+ const rawJson = parsed.error?.metadata?.raw;
480
+ return typeof rawJson === "string"
481
+ ? { ...details, ...this.parseRawMetadataFields(rawJson) }
482
+ : details;
483
+ }
484
+ catch {
485
+ return {};
486
+ }
487
+ }
488
+ buildUpstreamDetail(errorInfo, includeRetryAfter) {
489
+ const details = [];
490
+ const parts = [];
491
+ if (typeof errorInfo.providerName === "string")
492
+ parts.push(errorInfo.providerName);
493
+ if (typeof errorInfo.message === "string")
494
+ parts.push(errorInfo.message);
495
+ if (parts.length > 0)
496
+ details.push(parts.join(": "));
497
+ if (includeRetryAfter && typeof errorInfo.retryAfterSeconds === "number") {
498
+ details.push(`retry after ${errorInfo.retryAfterSeconds}s`);
499
+ }
500
+ return details.length > 0 ? details.join("; ") : undefined;
501
+ }
502
+ buildRateLimitError(response, errorInfo, originalError) {
503
+ const retryAfter = response.headers?.get("retry-after");
504
+ const retryAfterSeconds = errorInfo.retryAfterSeconds ?? parseRetryAfterSeconds(retryAfter);
505
+ const detail = this.buildUpstreamDetail(errorInfo, true);
506
+ return new ProviderRateLimitError(detail
507
+ ? `OpenRouter rate limit exceeded (${detail})`
508
+ : "OpenRouter rate limit exceeded", Number.isNaN(retryAfterSeconds) ? undefined : retryAfterSeconds, originalError);
509
+ }
510
+ buildUpstreamServiceError(type, errorInfo, originalError) {
511
+ const detail = this.buildUpstreamDetail(errorInfo, true);
512
+ if (type === "capacity") {
513
+ return new ProviderCapacityError(detail
514
+ ? `OpenRouter upstream capacity exceeded (${detail})`
515
+ : "OpenRouter upstream capacity exceeded", originalError);
516
+ }
517
+ return new ProviderError(detail
518
+ ? `OpenRouter upstream provider unavailable (${detail})`
519
+ : "OpenRouter service error", originalError);
520
+ }
521
+ translateBasicHttpStatusError(response, originalError) {
522
+ switch (response.status) {
523
+ case 401:
524
+ return new ProviderAuthenticationError("Invalid OpenRouter API key", originalError);
525
+ case 402:
526
+ return new ProviderError("Insufficient OpenRouter credits", originalError);
527
+ case 404:
528
+ return new ProviderModelNotFoundError(this.model, `Model not found: ${this.model}`, originalError);
529
+ default:
530
+ return null;
531
+ }
532
+ }
533
+ translateHttpStatusError(response, errorInfo, originalError) {
534
+ if (response.status === 400 &&
535
+ isContextLengthError(originalError.message)) {
536
+ return new ProviderContextLengthError(`Context length exceeded: ${originalError.message}`, originalError);
537
+ }
538
+ const basicError = this.translateBasicHttpStatusError(response, originalError);
539
+ if (basicError) {
540
+ return basicError;
541
+ }
542
+ switch (response.status) {
543
+ case 429:
544
+ return this.buildRateLimitError(response, errorInfo, originalError);
545
+ case 529:
546
+ return this.buildUpstreamServiceError("capacity", errorInfo, originalError);
547
+ case 503:
548
+ return this.buildUpstreamServiceError("unavailable", errorInfo, originalError);
549
+ default:
550
+ return response.status >= 500
551
+ ? new ProviderError("OpenRouter service error", originalError)
552
+ : null;
553
+ }
554
+ }
555
+ classifyByErrorMessage(msg, originalError) {
556
+ return this.translateCommonMessageError(msg, originalError, "Failed to connect to OpenRouter API");
557
+ }
558
+ translateError(error, response, responseBody) {
559
+ const originalError = this.createOriginalError(error);
560
+ if (response) {
561
+ const errorInfo = this.parseOpenRouterErrorBody(responseBody);
562
+ const statusError = this.translateHttpStatusError(response, errorInfo, originalError);
563
+ if (statusError) {
564
+ return statusError;
565
+ }
566
+ }
567
+ return (this.classifyByErrorMessage(originalError.message, originalError) ??
568
+ new ProviderError(originalError.message || "OpenRouter request failed", originalError));
569
+ }
570
+ }
571
+ //# sourceMappingURL=openrouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../src/providers/openrouter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { ChatRequest, ChatStreamEvent, ProviderError } from "../types.js";
2
+ import { OpenAiCompatibleProvider, type OpenAiCompatibleProviderOptions } from "../internal/openAiCompatibleProvider.js";
3
+ /**
4
+ * xAI (Grok) implementation of LLMProvider using the OpenAI-compatible API at api.x.ai.
5
+ */
6
+ export declare class XaiProvider extends OpenAiCompatibleProvider {
7
+ readonly name = "xai";
8
+ private readonly model;
9
+ private readonly apiKey;
10
+ private readonly retryConfig?;
11
+ private readonly onDiagnosticEvent?;
12
+ constructor(options: OpenAiCompatibleProviderOptions);
13
+ private shouldRetryEndpoint;
14
+ private isAbortError;
15
+ private shouldContinueToNextEndpoint;
16
+ private createEndpointResponseError;
17
+ private getContinuationError;
18
+ private createPostResponse;
19
+ streamChat(request: ChatRequest): AsyncIterable<ChatStreamEvent>;
20
+ private streamResponsesChat;
21
+ private postStreamReader;
22
+ private createResponsesRequestBody;
23
+ private chatToolToResponsesTool;
24
+ private serializeToolArguments;
25
+ private chatMessagesToResponsesInput;
26
+ private appendResponsesInputMessage;
27
+ private appendResponsesUserMessage;
28
+ private appendResponsesAssistantMessage;
29
+ private consumeResponsesStream;
30
+ private createChatCompletionRequestBody;
31
+ private getResponseReader;
32
+ private consumeChatCompletionsStream;
33
+ private mapXaiResponsesStopReason;
34
+ private buildResponsesToolCallsEvent;
35
+ private parseResponsesStreamLine;
36
+ private handleResponsesStreamEvent;
37
+ private handleResponsesReasoningDelta;
38
+ private handleResponsesOutputTextDelta;
39
+ private handleResponsesOutputItemAdded;
40
+ private handleResponsesFunctionCallArgumentsDelta;
41
+ private handleResponsesOutputItemDone;
42
+ private handleResponsesTerminalEvent;
43
+ protected translateError(error: unknown, response?: Response, _responseBody?: string): ProviderError;
44
+ }
45
+ //# sourceMappingURL=xai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xai.d.ts","sourceRoot":"","sources":["../../src/providers/xai.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EACX,eAAe,EAGf,aAAa,EAGd,MAAM,aAAa,CAAC;AAYrB,OAAO,EACL,wBAAwB,EACxB,KAAK,+BAA+B,EACrC,MAAM,yCAAyC,CAAC;AAcjD;;GAEG;AACH,qBAAa,WAAY,SAAQ,wBAAwB;IACvD,QAAQ,CAAC,IAAI,SAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAG3B;IACF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAA6B;gBAEpD,OAAO,EAAE,+BAA+B;IAepD,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,4BAA4B;YAOtB,2BAA2B;IAoBzC,OAAO,CAAC,oBAAoB;YASd,kBAAkB;IAqCzB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,CAAC,eAAe,CAAC;YAwBxD,mBAAmB;YAapB,gBAAgB;IAuB9B,OAAO,CAAC,0BAA0B;IAkBlC,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,4BAA4B;IAYpC,OAAO,CAAC,2BAA2B;IA4BnC,OAAO,CAAC,0BAA0B;IAelC,OAAO,CAAC,+BAA+B;YA0BxB,sBAAsB;IAoBrC,OAAO,CAAC,+BAA+B;IAWvC,OAAO,CAAC,iBAAiB;YAMV,4BAA4B;IAO3C,OAAO,CAAC,yBAAyB;IAmBjC,OAAO,CAAC,4BAA4B;IAsBpC,OAAO,CAAC,wBAAwB;IAiBhC,OAAO,CAAC,0BAA0B;IA8BlC,OAAO,CAAC,6BAA6B;IAUrC,OAAO,CAAC,8BAA8B;IAUtC,OAAO,CAAC,8BAA8B;IAkBtC,OAAO,CAAC,yCAAyC;IAcjD,OAAO,CAAC,6BAA6B;IA0BrC,OAAO,CAAC,4BAA4B;IAcpC,SAAS,CAAC,cAAc,CACtB,KAAK,EAAE,OAAO,EACd,QAAQ,CAAC,EAAE,QAAQ,EACnB,aAAa,CAAC,EAAE,MAAM,GACrB,aAAa;CAUjB"}