@openrouter/ai-sdk-provider 2.3.3 → 2.4.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.
- package/dist/index.d.mts +18 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +56 -22
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +56 -22
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.js +49 -17
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/index.mjs +49 -17
- package/dist/internal/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/internal/index.js
CHANGED
|
@@ -2416,6 +2416,31 @@ function createFinishReason(unified, raw) {
|
|
|
2416
2416
|
return { unified, raw };
|
|
2417
2417
|
}
|
|
2418
2418
|
|
|
2419
|
+
// src/utils/with-stream-error-handling.ts
|
|
2420
|
+
function withStreamErrorHandling(source, onError) {
|
|
2421
|
+
const reader = source.getReader();
|
|
2422
|
+
return new ReadableStream({
|
|
2423
|
+
async pull(controller) {
|
|
2424
|
+
try {
|
|
2425
|
+
const { done, value } = await reader.read();
|
|
2426
|
+
if (done) {
|
|
2427
|
+
controller.close();
|
|
2428
|
+
} else {
|
|
2429
|
+
controller.enqueue(value);
|
|
2430
|
+
}
|
|
2431
|
+
} catch (err) {
|
|
2432
|
+
onError(err);
|
|
2433
|
+
reader.cancel().catch(() => {
|
|
2434
|
+
});
|
|
2435
|
+
controller.close();
|
|
2436
|
+
}
|
|
2437
|
+
},
|
|
2438
|
+
cancel(reason) {
|
|
2439
|
+
reader.cancel(reason);
|
|
2440
|
+
}
|
|
2441
|
+
});
|
|
2442
|
+
}
|
|
2443
|
+
|
|
2419
2444
|
// src/utils/reasoning-details-duplicate-tracker.ts
|
|
2420
2445
|
var _seenKeys;
|
|
2421
2446
|
var ReasoningDetailsDuplicateTracker = class {
|
|
@@ -2803,6 +2828,7 @@ function convertToOpenRouterChatMessages(prompt) {
|
|
|
2803
2828
|
role: "tool",
|
|
2804
2829
|
tool_call_id: toolResponse.toolCallId,
|
|
2805
2830
|
content: content2,
|
|
2831
|
+
name: toolResponse.toolName,
|
|
2806
2832
|
cache_control: (_h = getCacheControl(providerOptions)) != null ? _h : getCacheControl(toolResponse.providerOptions)
|
|
2807
2833
|
});
|
|
2808
2834
|
}
|
|
@@ -3379,17 +3405,6 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3379
3405
|
break;
|
|
3380
3406
|
}
|
|
3381
3407
|
case "reasoning.encrypted" /* Encrypted */: {
|
|
3382
|
-
if (detail.data) {
|
|
3383
|
-
return {
|
|
3384
|
-
type: "reasoning",
|
|
3385
|
-
text: "[REDACTED]",
|
|
3386
|
-
providerMetadata: {
|
|
3387
|
-
openrouter: {
|
|
3388
|
-
reasoning_details: [detail]
|
|
3389
|
-
}
|
|
3390
|
-
}
|
|
3391
|
-
};
|
|
3392
|
-
}
|
|
3393
3408
|
break;
|
|
3394
3409
|
}
|
|
3395
3410
|
default: {
|
|
@@ -3465,7 +3480,8 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3465
3480
|
(d) => d.type === "reasoning.encrypted" /* Encrypted */ && d.data
|
|
3466
3481
|
);
|
|
3467
3482
|
const shouldOverrideFinishReason = hasToolCalls && hasEncryptedReasoning && choice.finish_reason === "stop";
|
|
3468
|
-
const
|
|
3483
|
+
const mappedFinishReason = shouldOverrideFinishReason ? createFinishReason("tool-calls", (_j = choice.finish_reason) != null ? _j : void 0) : mapOpenRouterFinishReason(choice.finish_reason);
|
|
3484
|
+
const effectiveFinishReason = hasToolCalls && mappedFinishReason.unified === "other" ? createFinishReason("tool-calls", mappedFinishReason.raw) : mappedFinishReason;
|
|
3469
3485
|
return {
|
|
3470
3486
|
content,
|
|
3471
3487
|
finishReason: effectiveFinishReason,
|
|
@@ -3529,6 +3545,10 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3529
3545
|
abortSignal: options.abortSignal,
|
|
3530
3546
|
fetch: this.config.fetch
|
|
3531
3547
|
});
|
|
3548
|
+
let streamError;
|
|
3549
|
+
const safeResponse = withStreamErrorHandling(response, (err) => {
|
|
3550
|
+
streamError = err;
|
|
3551
|
+
});
|
|
3532
3552
|
const toolCalls = [];
|
|
3533
3553
|
let finishReason = createFinishReason("other");
|
|
3534
3554
|
const usage = {
|
|
@@ -3557,7 +3577,7 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3557
3577
|
let openrouterResponseId;
|
|
3558
3578
|
let provider;
|
|
3559
3579
|
return {
|
|
3560
|
-
stream:
|
|
3580
|
+
stream: safeResponse.pipeThrough(
|
|
3561
3581
|
new TransformStream({
|
|
3562
3582
|
transform(chunk, controller) {
|
|
3563
3583
|
var _a17, _b17, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u;
|
|
@@ -3673,9 +3693,6 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3673
3693
|
break;
|
|
3674
3694
|
}
|
|
3675
3695
|
case "reasoning.encrypted" /* Encrypted */: {
|
|
3676
|
-
if (detail.data) {
|
|
3677
|
-
emitReasoningChunk("[REDACTED]", reasoningMetadata);
|
|
3678
|
-
}
|
|
3679
3696
|
break;
|
|
3680
3697
|
}
|
|
3681
3698
|
case "reasoning.summary" /* Summary */: {
|
|
@@ -3879,12 +3896,19 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3879
3896
|
flush(controller) {
|
|
3880
3897
|
var _a17;
|
|
3881
3898
|
const hasToolCalls = toolCalls.length > 0;
|
|
3899
|
+
if (streamError != null) {
|
|
3900
|
+
finishReason = createFinishReason("error");
|
|
3901
|
+
controller.enqueue({ type: "error", error: streamError });
|
|
3902
|
+
}
|
|
3882
3903
|
const hasEncryptedReasoning = accumulatedReasoningDetails.some(
|
|
3883
3904
|
(d) => d.type === "reasoning.encrypted" /* Encrypted */ && d.data
|
|
3884
3905
|
);
|
|
3885
3906
|
if (hasToolCalls && hasEncryptedReasoning && finishReason.unified === "stop") {
|
|
3886
3907
|
finishReason = createFinishReason("tool-calls", finishReason.raw);
|
|
3887
3908
|
}
|
|
3909
|
+
if (hasToolCalls && finishReason.unified === "other") {
|
|
3910
|
+
finishReason = createFinishReason("tool-calls", finishReason.raw);
|
|
3911
|
+
}
|
|
3888
3912
|
if (finishReason.unified === "tool-calls") {
|
|
3889
3913
|
for (const toolCall of toolCalls) {
|
|
3890
3914
|
if (toolCall && !toolCall.sent) {
|
|
@@ -4270,6 +4294,10 @@ var OpenRouterCompletionLanguageModel = class {
|
|
|
4270
4294
|
abortSignal: options.abortSignal,
|
|
4271
4295
|
fetch: this.config.fetch
|
|
4272
4296
|
});
|
|
4297
|
+
let streamError;
|
|
4298
|
+
const safeResponse = withStreamErrorHandling(response, (err) => {
|
|
4299
|
+
streamError = err;
|
|
4300
|
+
});
|
|
4273
4301
|
let finishReason = createFinishReason("other");
|
|
4274
4302
|
const usage = {
|
|
4275
4303
|
inputTokens: {
|
|
@@ -4289,7 +4317,7 @@ var OpenRouterCompletionLanguageModel = class {
|
|
|
4289
4317
|
let provider;
|
|
4290
4318
|
let rawUsage;
|
|
4291
4319
|
return {
|
|
4292
|
-
stream:
|
|
4320
|
+
stream: safeResponse.pipeThrough(
|
|
4293
4321
|
new TransformStream({
|
|
4294
4322
|
transform(chunk, controller) {
|
|
4295
4323
|
var _a16, _b16, _c, _d, _e;
|
|
@@ -4353,6 +4381,10 @@ var OpenRouterCompletionLanguageModel = class {
|
|
|
4353
4381
|
}
|
|
4354
4382
|
},
|
|
4355
4383
|
flush(controller) {
|
|
4384
|
+
if (streamError != null) {
|
|
4385
|
+
finishReason = createFinishReason("error");
|
|
4386
|
+
controller.enqueue({ type: "error", error: streamError });
|
|
4387
|
+
}
|
|
4356
4388
|
usage.raw = rawUsage;
|
|
4357
4389
|
const openrouterMetadata = {
|
|
4358
4390
|
usage: openrouterUsage
|