@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.mjs
CHANGED
|
@@ -2382,6 +2382,31 @@ function createFinishReason(unified, raw) {
|
|
|
2382
2382
|
return { unified, raw };
|
|
2383
2383
|
}
|
|
2384
2384
|
|
|
2385
|
+
// src/utils/with-stream-error-handling.ts
|
|
2386
|
+
function withStreamErrorHandling(source, onError) {
|
|
2387
|
+
const reader = source.getReader();
|
|
2388
|
+
return new ReadableStream({
|
|
2389
|
+
async pull(controller) {
|
|
2390
|
+
try {
|
|
2391
|
+
const { done, value } = await reader.read();
|
|
2392
|
+
if (done) {
|
|
2393
|
+
controller.close();
|
|
2394
|
+
} else {
|
|
2395
|
+
controller.enqueue(value);
|
|
2396
|
+
}
|
|
2397
|
+
} catch (err) {
|
|
2398
|
+
onError(err);
|
|
2399
|
+
reader.cancel().catch(() => {
|
|
2400
|
+
});
|
|
2401
|
+
controller.close();
|
|
2402
|
+
}
|
|
2403
|
+
},
|
|
2404
|
+
cancel(reason) {
|
|
2405
|
+
reader.cancel(reason);
|
|
2406
|
+
}
|
|
2407
|
+
});
|
|
2408
|
+
}
|
|
2409
|
+
|
|
2385
2410
|
// src/utils/reasoning-details-duplicate-tracker.ts
|
|
2386
2411
|
var _seenKeys;
|
|
2387
2412
|
var ReasoningDetailsDuplicateTracker = class {
|
|
@@ -2769,6 +2794,7 @@ function convertToOpenRouterChatMessages(prompt) {
|
|
|
2769
2794
|
role: "tool",
|
|
2770
2795
|
tool_call_id: toolResponse.toolCallId,
|
|
2771
2796
|
content: content2,
|
|
2797
|
+
name: toolResponse.toolName,
|
|
2772
2798
|
cache_control: (_h = getCacheControl(providerOptions)) != null ? _h : getCacheControl(toolResponse.providerOptions)
|
|
2773
2799
|
});
|
|
2774
2800
|
}
|
|
@@ -3345,17 +3371,6 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3345
3371
|
break;
|
|
3346
3372
|
}
|
|
3347
3373
|
case "reasoning.encrypted" /* Encrypted */: {
|
|
3348
|
-
if (detail.data) {
|
|
3349
|
-
return {
|
|
3350
|
-
type: "reasoning",
|
|
3351
|
-
text: "[REDACTED]",
|
|
3352
|
-
providerMetadata: {
|
|
3353
|
-
openrouter: {
|
|
3354
|
-
reasoning_details: [detail]
|
|
3355
|
-
}
|
|
3356
|
-
}
|
|
3357
|
-
};
|
|
3358
|
-
}
|
|
3359
3374
|
break;
|
|
3360
3375
|
}
|
|
3361
3376
|
default: {
|
|
@@ -3431,7 +3446,8 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3431
3446
|
(d) => d.type === "reasoning.encrypted" /* Encrypted */ && d.data
|
|
3432
3447
|
);
|
|
3433
3448
|
const shouldOverrideFinishReason = hasToolCalls && hasEncryptedReasoning && choice.finish_reason === "stop";
|
|
3434
|
-
const
|
|
3449
|
+
const mappedFinishReason = shouldOverrideFinishReason ? createFinishReason("tool-calls", (_j = choice.finish_reason) != null ? _j : void 0) : mapOpenRouterFinishReason(choice.finish_reason);
|
|
3450
|
+
const effectiveFinishReason = hasToolCalls && mappedFinishReason.unified === "other" ? createFinishReason("tool-calls", mappedFinishReason.raw) : mappedFinishReason;
|
|
3435
3451
|
return {
|
|
3436
3452
|
content,
|
|
3437
3453
|
finishReason: effectiveFinishReason,
|
|
@@ -3495,6 +3511,10 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3495
3511
|
abortSignal: options.abortSignal,
|
|
3496
3512
|
fetch: this.config.fetch
|
|
3497
3513
|
});
|
|
3514
|
+
let streamError;
|
|
3515
|
+
const safeResponse = withStreamErrorHandling(response, (err) => {
|
|
3516
|
+
streamError = err;
|
|
3517
|
+
});
|
|
3498
3518
|
const toolCalls = [];
|
|
3499
3519
|
let finishReason = createFinishReason("other");
|
|
3500
3520
|
const usage = {
|
|
@@ -3523,7 +3543,7 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3523
3543
|
let openrouterResponseId;
|
|
3524
3544
|
let provider;
|
|
3525
3545
|
return {
|
|
3526
|
-
stream:
|
|
3546
|
+
stream: safeResponse.pipeThrough(
|
|
3527
3547
|
new TransformStream({
|
|
3528
3548
|
transform(chunk, controller) {
|
|
3529
3549
|
var _a17, _b17, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u;
|
|
@@ -3639,9 +3659,6 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3639
3659
|
break;
|
|
3640
3660
|
}
|
|
3641
3661
|
case "reasoning.encrypted" /* Encrypted */: {
|
|
3642
|
-
if (detail.data) {
|
|
3643
|
-
emitReasoningChunk("[REDACTED]", reasoningMetadata);
|
|
3644
|
-
}
|
|
3645
3662
|
break;
|
|
3646
3663
|
}
|
|
3647
3664
|
case "reasoning.summary" /* Summary */: {
|
|
@@ -3845,12 +3862,19 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3845
3862
|
flush(controller) {
|
|
3846
3863
|
var _a17;
|
|
3847
3864
|
const hasToolCalls = toolCalls.length > 0;
|
|
3865
|
+
if (streamError != null) {
|
|
3866
|
+
finishReason = createFinishReason("error");
|
|
3867
|
+
controller.enqueue({ type: "error", error: streamError });
|
|
3868
|
+
}
|
|
3848
3869
|
const hasEncryptedReasoning = accumulatedReasoningDetails.some(
|
|
3849
3870
|
(d) => d.type === "reasoning.encrypted" /* Encrypted */ && d.data
|
|
3850
3871
|
);
|
|
3851
3872
|
if (hasToolCalls && hasEncryptedReasoning && finishReason.unified === "stop") {
|
|
3852
3873
|
finishReason = createFinishReason("tool-calls", finishReason.raw);
|
|
3853
3874
|
}
|
|
3875
|
+
if (hasToolCalls && finishReason.unified === "other") {
|
|
3876
|
+
finishReason = createFinishReason("tool-calls", finishReason.raw);
|
|
3877
|
+
}
|
|
3854
3878
|
if (finishReason.unified === "tool-calls") {
|
|
3855
3879
|
for (const toolCall of toolCalls) {
|
|
3856
3880
|
if (toolCall && !toolCall.sent) {
|
|
@@ -4236,6 +4260,10 @@ var OpenRouterCompletionLanguageModel = class {
|
|
|
4236
4260
|
abortSignal: options.abortSignal,
|
|
4237
4261
|
fetch: this.config.fetch
|
|
4238
4262
|
});
|
|
4263
|
+
let streamError;
|
|
4264
|
+
const safeResponse = withStreamErrorHandling(response, (err) => {
|
|
4265
|
+
streamError = err;
|
|
4266
|
+
});
|
|
4239
4267
|
let finishReason = createFinishReason("other");
|
|
4240
4268
|
const usage = {
|
|
4241
4269
|
inputTokens: {
|
|
@@ -4255,7 +4283,7 @@ var OpenRouterCompletionLanguageModel = class {
|
|
|
4255
4283
|
let provider;
|
|
4256
4284
|
let rawUsage;
|
|
4257
4285
|
return {
|
|
4258
|
-
stream:
|
|
4286
|
+
stream: safeResponse.pipeThrough(
|
|
4259
4287
|
new TransformStream({
|
|
4260
4288
|
transform(chunk, controller) {
|
|
4261
4289
|
var _a16, _b16, _c, _d, _e;
|
|
@@ -4319,6 +4347,10 @@ var OpenRouterCompletionLanguageModel = class {
|
|
|
4319
4347
|
}
|
|
4320
4348
|
},
|
|
4321
4349
|
flush(controller) {
|
|
4350
|
+
if (streamError != null) {
|
|
4351
|
+
finishReason = createFinishReason("error");
|
|
4352
|
+
controller.enqueue({ type: "error", error: streamError });
|
|
4353
|
+
}
|
|
4322
4354
|
usage.raw = rawUsage;
|
|
4323
4355
|
const openrouterMetadata = {
|
|
4324
4356
|
usage: openrouterUsage
|