@openrouter/ai-sdk-provider 2.1.0 → 2.1.2
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/README.md +3 -3
- package/dist/index.js +85 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +85 -4
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.js +84 -3
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/index.mjs +84 -3
- package/dist/internal/index.mjs.map +1 -1
- package/package.json +2 -1
package/dist/index.mjs
CHANGED
|
@@ -4,6 +4,9 @@ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
|
4
4
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
6
|
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __typeError = (msg) => {
|
|
8
|
+
throw TypeError(msg);
|
|
9
|
+
};
|
|
7
10
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
11
|
var __spreadValues = (a, b) => {
|
|
9
12
|
for (var prop in b || (b = {}))
|
|
@@ -29,6 +32,9 @@ var __objRest = (source, exclude) => {
|
|
|
29
32
|
}
|
|
30
33
|
return target;
|
|
31
34
|
};
|
|
35
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
36
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
37
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
32
38
|
|
|
33
39
|
// node_modules/.pnpm/@ai-sdk+provider@3.0.0/node_modules/@ai-sdk/provider/dist/index.mjs
|
|
34
40
|
var marker = "vercel.ai.error";
|
|
@@ -2316,6 +2322,54 @@ function createFinishReason(unified, raw) {
|
|
|
2316
2322
|
return { unified, raw };
|
|
2317
2323
|
}
|
|
2318
2324
|
|
|
2325
|
+
// src/utils/reasoning-details-duplicate-tracker.ts
|
|
2326
|
+
var _seenKeys;
|
|
2327
|
+
var ReasoningDetailsDuplicateTracker = class {
|
|
2328
|
+
constructor() {
|
|
2329
|
+
__privateAdd(this, _seenKeys, /* @__PURE__ */ new Set());
|
|
2330
|
+
}
|
|
2331
|
+
/**
|
|
2332
|
+
* Attempts to track a detail.
|
|
2333
|
+
* Returns true if this is a NEW detail (not seen before and has valid key),
|
|
2334
|
+
* false if it was skipped (no valid key) or already seen (duplicate).
|
|
2335
|
+
*/
|
|
2336
|
+
upsert(detail) {
|
|
2337
|
+
const key = this.getCanonicalKey(detail);
|
|
2338
|
+
if (key === null) {
|
|
2339
|
+
return false;
|
|
2340
|
+
}
|
|
2341
|
+
if (__privateGet(this, _seenKeys).has(key)) {
|
|
2342
|
+
return false;
|
|
2343
|
+
}
|
|
2344
|
+
__privateGet(this, _seenKeys).add(key);
|
|
2345
|
+
return true;
|
|
2346
|
+
}
|
|
2347
|
+
getCanonicalKey(detail) {
|
|
2348
|
+
switch (detail.type) {
|
|
2349
|
+
case "reasoning.summary" /* Summary */:
|
|
2350
|
+
return detail.summary;
|
|
2351
|
+
case "reasoning.encrypted" /* Encrypted */:
|
|
2352
|
+
if (detail.id) {
|
|
2353
|
+
return detail.id;
|
|
2354
|
+
}
|
|
2355
|
+
return detail.data;
|
|
2356
|
+
case "reasoning.text" /* Text */: {
|
|
2357
|
+
if (detail.text) {
|
|
2358
|
+
return detail.text;
|
|
2359
|
+
}
|
|
2360
|
+
if (detail.signature) {
|
|
2361
|
+
return detail.signature;
|
|
2362
|
+
}
|
|
2363
|
+
return null;
|
|
2364
|
+
}
|
|
2365
|
+
default: {
|
|
2366
|
+
return null;
|
|
2367
|
+
}
|
|
2368
|
+
}
|
|
2369
|
+
}
|
|
2370
|
+
};
|
|
2371
|
+
_seenKeys = new WeakMap();
|
|
2372
|
+
|
|
2319
2373
|
// src/types/openrouter-chat-completions-input.ts
|
|
2320
2374
|
var OPENROUTER_AUDIO_FORMATS = [
|
|
2321
2375
|
"wav",
|
|
@@ -2447,6 +2501,7 @@ function getCacheControl(providerMetadata) {
|
|
|
2447
2501
|
function convertToOpenRouterChatMessages(prompt) {
|
|
2448
2502
|
var _a16, _b16, _c, _d, _e, _f, _g, _h;
|
|
2449
2503
|
const messages = [];
|
|
2504
|
+
const reasoningDetailsTracker = new ReasoningDetailsDuplicateTracker();
|
|
2450
2505
|
for (const { role, content, providerOptions } of prompt) {
|
|
2451
2506
|
switch (role) {
|
|
2452
2507
|
case "system": {
|
|
@@ -2589,7 +2644,17 @@ function convertToOpenRouterChatMessages(prompt) {
|
|
|
2589
2644
|
const parsedProviderOptions = OpenRouterProviderOptionsSchema.safeParse(providerOptions);
|
|
2590
2645
|
const messageReasoningDetails = parsedProviderOptions.success ? (_e = (_d = parsedProviderOptions.data) == null ? void 0 : _d.openrouter) == null ? void 0 : _e.reasoning_details : void 0;
|
|
2591
2646
|
const messageAnnotations = parsedProviderOptions.success ? (_g = (_f = parsedProviderOptions.data) == null ? void 0 : _f.openrouter) == null ? void 0 : _g.annotations : void 0;
|
|
2592
|
-
const
|
|
2647
|
+
const candidateReasoningDetails = messageReasoningDetails && Array.isArray(messageReasoningDetails) && messageReasoningDetails.length > 0 ? messageReasoningDetails : findFirstReasoningDetails(content);
|
|
2648
|
+
let finalReasoningDetails;
|
|
2649
|
+
if (candidateReasoningDetails && candidateReasoningDetails.length > 0) {
|
|
2650
|
+
const uniqueDetails = [];
|
|
2651
|
+
for (const detail of candidateReasoningDetails) {
|
|
2652
|
+
if (reasoningDetailsTracker.upsert(detail)) {
|
|
2653
|
+
uniqueDetails.push(detail);
|
|
2654
|
+
}
|
|
2655
|
+
}
|
|
2656
|
+
finalReasoningDetails = uniqueDetails.length > 0 ? uniqueDetails : void 0;
|
|
2657
|
+
}
|
|
2593
2658
|
messages.push({
|
|
2594
2659
|
role: "assistant",
|
|
2595
2660
|
content: text,
|
|
@@ -3414,7 +3479,16 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3414
3479
|
if (reasoningStarted && !textStarted) {
|
|
3415
3480
|
controller.enqueue({
|
|
3416
3481
|
type: "reasoning-end",
|
|
3417
|
-
id: reasoningId || generateId()
|
|
3482
|
+
id: reasoningId || generateId(),
|
|
3483
|
+
// Include accumulated reasoning_details so the AI SDK can update
|
|
3484
|
+
// the reasoning part's providerMetadata with the correct signature.
|
|
3485
|
+
// The signature typically arrives in the last reasoning delta,
|
|
3486
|
+
// but reasoning-start only carries the first delta's metadata.
|
|
3487
|
+
providerMetadata: accumulatedReasoningDetails.length > 0 ? {
|
|
3488
|
+
openrouter: {
|
|
3489
|
+
reasoning_details: accumulatedReasoningDetails
|
|
3490
|
+
}
|
|
3491
|
+
} : void 0
|
|
3418
3492
|
});
|
|
3419
3493
|
reasoningStarted = false;
|
|
3420
3494
|
}
|
|
@@ -3616,7 +3690,14 @@ var OpenRouterChatLanguageModel = class {
|
|
|
3616
3690
|
if (reasoningStarted) {
|
|
3617
3691
|
controller.enqueue({
|
|
3618
3692
|
type: "reasoning-end",
|
|
3619
|
-
id: reasoningId || generateId()
|
|
3693
|
+
id: reasoningId || generateId(),
|
|
3694
|
+
// Include accumulated reasoning_details so the AI SDK can update
|
|
3695
|
+
// the reasoning part's providerMetadata with the correct signature.
|
|
3696
|
+
providerMetadata: accumulatedReasoningDetails.length > 0 ? {
|
|
3697
|
+
openrouter: {
|
|
3698
|
+
reasoning_details: accumulatedReasoningDetails
|
|
3699
|
+
}
|
|
3700
|
+
} : void 0
|
|
3620
3701
|
});
|
|
3621
3702
|
}
|
|
3622
3703
|
if (textStarted) {
|
|
@@ -4407,7 +4488,7 @@ function withUserAgentSuffix2(headers, ...userAgentSuffixParts) {
|
|
|
4407
4488
|
}
|
|
4408
4489
|
|
|
4409
4490
|
// src/version.ts
|
|
4410
|
-
var VERSION2 = false ? "0.0.0-test" : "2.1.
|
|
4491
|
+
var VERSION2 = false ? "0.0.0-test" : "2.1.2";
|
|
4411
4492
|
|
|
4412
4493
|
// src/provider.ts
|
|
4413
4494
|
function createOpenRouter(options = {}) {
|