@openrouter/ai-sdk-provider 2.3.3 → 2.4.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.
- package/dist/index.d.mts +18 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +56 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +56 -8
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.js +49 -3
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/index.mjs +49 -3
- 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
|
}
|
|
@@ -3465,7 +3491,8 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3465
3491
|
(d) => d.type === "reasoning.encrypted" /* Encrypted */ && d.data
|
|
3466
3492
|
);
|
|
3467
3493
|
const shouldOverrideFinishReason = hasToolCalls && hasEncryptedReasoning && choice.finish_reason === "stop";
|
|
3468
|
-
const
|
|
3494
|
+
const mappedFinishReason = shouldOverrideFinishReason ? createFinishReason("tool-calls", (_j = choice.finish_reason) != null ? _j : void 0) : mapOpenRouterFinishReason(choice.finish_reason);
|
|
3495
|
+
const effectiveFinishReason = hasToolCalls && mappedFinishReason.unified === "other" ? createFinishReason("tool-calls", mappedFinishReason.raw) : mappedFinishReason;
|
|
3469
3496
|
return {
|
|
3470
3497
|
content,
|
|
3471
3498
|
finishReason: effectiveFinishReason,
|
|
@@ -3529,6 +3556,10 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3529
3556
|
abortSignal: options.abortSignal,
|
|
3530
3557
|
fetch: this.config.fetch
|
|
3531
3558
|
});
|
|
3559
|
+
let streamError;
|
|
3560
|
+
const safeResponse = withStreamErrorHandling(response, (err) => {
|
|
3561
|
+
streamError = err;
|
|
3562
|
+
});
|
|
3532
3563
|
const toolCalls = [];
|
|
3533
3564
|
let finishReason = createFinishReason("other");
|
|
3534
3565
|
const usage = {
|
|
@@ -3557,7 +3588,7 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3557
3588
|
let openrouterResponseId;
|
|
3558
3589
|
let provider;
|
|
3559
3590
|
return {
|
|
3560
|
-
stream:
|
|
3591
|
+
stream: safeResponse.pipeThrough(
|
|
3561
3592
|
new TransformStream({
|
|
3562
3593
|
transform(chunk, controller) {
|
|
3563
3594
|
var _a17, _b17, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u;
|
|
@@ -3879,12 +3910,19 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3879
3910
|
flush(controller) {
|
|
3880
3911
|
var _a17;
|
|
3881
3912
|
const hasToolCalls = toolCalls.length > 0;
|
|
3913
|
+
if (streamError != null) {
|
|
3914
|
+
finishReason = createFinishReason("error");
|
|
3915
|
+
controller.enqueue({ type: "error", error: streamError });
|
|
3916
|
+
}
|
|
3882
3917
|
const hasEncryptedReasoning = accumulatedReasoningDetails.some(
|
|
3883
3918
|
(d) => d.type === "reasoning.encrypted" /* Encrypted */ && d.data
|
|
3884
3919
|
);
|
|
3885
3920
|
if (hasToolCalls && hasEncryptedReasoning && finishReason.unified === "stop") {
|
|
3886
3921
|
finishReason = createFinishReason("tool-calls", finishReason.raw);
|
|
3887
3922
|
}
|
|
3923
|
+
if (hasToolCalls && finishReason.unified === "other") {
|
|
3924
|
+
finishReason = createFinishReason("tool-calls", finishReason.raw);
|
|
3925
|
+
}
|
|
3888
3926
|
if (finishReason.unified === "tool-calls") {
|
|
3889
3927
|
for (const toolCall of toolCalls) {
|
|
3890
3928
|
if (toolCall && !toolCall.sent) {
|
|
@@ -4270,6 +4308,10 @@ var OpenRouterCompletionLanguageModel = class {
|
|
|
4270
4308
|
abortSignal: options.abortSignal,
|
|
4271
4309
|
fetch: this.config.fetch
|
|
4272
4310
|
});
|
|
4311
|
+
let streamError;
|
|
4312
|
+
const safeResponse = withStreamErrorHandling(response, (err) => {
|
|
4313
|
+
streamError = err;
|
|
4314
|
+
});
|
|
4273
4315
|
let finishReason = createFinishReason("other");
|
|
4274
4316
|
const usage = {
|
|
4275
4317
|
inputTokens: {
|
|
@@ -4289,7 +4331,7 @@ var OpenRouterCompletionLanguageModel = class {
|
|
|
4289
4331
|
let provider;
|
|
4290
4332
|
let rawUsage;
|
|
4291
4333
|
return {
|
|
4292
|
-
stream:
|
|
4334
|
+
stream: safeResponse.pipeThrough(
|
|
4293
4335
|
new TransformStream({
|
|
4294
4336
|
transform(chunk, controller) {
|
|
4295
4337
|
var _a16, _b16, _c, _d, _e;
|
|
@@ -4353,6 +4395,10 @@ var OpenRouterCompletionLanguageModel = class {
|
|
|
4353
4395
|
}
|
|
4354
4396
|
},
|
|
4355
4397
|
flush(controller) {
|
|
4398
|
+
if (streamError != null) {
|
|
4399
|
+
finishReason = createFinishReason("error");
|
|
4400
|
+
controller.enqueue({ type: "error", error: streamError });
|
|
4401
|
+
}
|
|
4356
4402
|
usage.raw = rawUsage;
|
|
4357
4403
|
const openrouterMetadata = {
|
|
4358
4404
|
usage: openrouterUsage
|