@openrouter/ai-sdk-provider 1.0.0-beta.1 → 1.0.0-beta.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.
@@ -54,6 +54,9 @@ type OpenRouterUsageAccounting = {
54
54
  };
55
55
  totalTokens: number;
56
56
  cost?: number;
57
+ costDetails: {
58
+ upstreamInferenceCost: number;
59
+ };
57
60
  };
58
61
 
59
62
  type OpenRouterCompletionModelId = string;
@@ -54,6 +54,9 @@ type OpenRouterUsageAccounting = {
54
54
  };
55
55
  totalTokens: number;
56
56
  cost?: number;
57
+ costDetails: {
58
+ upstreamInferenceCost: number;
59
+ };
57
60
  };
58
61
 
59
62
  type OpenRouterCompletionModelId = string;
@@ -436,28 +436,28 @@ var EventSourceParserStream = class extends TransformStream {
436
436
  }
437
437
  };
438
438
 
439
- // node_modules/.pnpm/@ai-sdk+provider-utils@3.0.0-beta.2_zod@3.25.74/node_modules/@ai-sdk/provider-utils/dist/index.mjs
439
+ // node_modules/.pnpm/@ai-sdk+provider-utils@3.0.0-beta.5_zod@4.0.5/node_modules/@ai-sdk/provider-utils/dist/index.mjs
440
440
  var z4 = __toESM(require("zod/v4"), 1);
441
441
 
442
- // node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.74/node_modules/zod-to-json-schema/dist/esm/Options.js
442
+ // node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@4.0.5/node_modules/zod-to-json-schema/dist/esm/Options.js
443
443
  var ignoreOverride = Symbol("Let zodToJsonSchema decide on which parser to use");
444
444
 
445
- // node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.74/node_modules/zod-to-json-schema/dist/esm/selectParser.js
445
+ // node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@4.0.5/node_modules/zod-to-json-schema/dist/esm/selectParser.js
446
446
  var import_zod4 = require("zod");
447
447
 
448
- // node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.74/node_modules/zod-to-json-schema/dist/esm/parsers/array.js
448
+ // node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@4.0.5/node_modules/zod-to-json-schema/dist/esm/parsers/array.js
449
449
  var import_zod = require("zod");
450
450
 
451
- // node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.74/node_modules/zod-to-json-schema/dist/esm/parsers/record.js
451
+ // node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@4.0.5/node_modules/zod-to-json-schema/dist/esm/parsers/record.js
452
452
  var import_zod2 = require("zod");
453
453
 
454
- // node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.74/node_modules/zod-to-json-schema/dist/esm/parsers/string.js
454
+ // node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@4.0.5/node_modules/zod-to-json-schema/dist/esm/parsers/string.js
455
455
  var ALPHA_NUMERIC = new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");
456
456
 
457
- // node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.74/node_modules/zod-to-json-schema/dist/esm/parsers/object.js
457
+ // node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@4.0.5/node_modules/zod-to-json-schema/dist/esm/parsers/object.js
458
458
  var import_zod3 = require("zod");
459
459
 
460
- // node_modules/.pnpm/@ai-sdk+provider-utils@3.0.0-beta.2_zod@3.25.74/node_modules/@ai-sdk/provider-utils/dist/index.mjs
460
+ // node_modules/.pnpm/@ai-sdk+provider-utils@3.0.0-beta.5_zod@4.0.5/node_modules/@ai-sdk/provider-utils/dist/index.mjs
461
461
  function combineHeaders(...headers) {
462
462
  return headers.reduce(
463
463
  (combinedHeaders, currentHeaders) => __spreadValues(__spreadValues({}, combinedHeaders), currentHeaders != null ? currentHeaders : {}),
@@ -494,7 +494,8 @@ var createIdGenerator = ({
494
494
  };
495
495
  var generateId = createIdGenerator();
496
496
  function isAbortError(error) {
497
- return error instanceof Error && (error.name === "AbortError" || error.name === "TimeoutError");
497
+ return error instanceof Error && (error.name === "AbortError" || error.name === "ResponseAborted" || // Next.js
498
+ error.name === "TimeoutError");
498
499
  }
499
500
  var FETCH_FAILED_ERROR_MESSAGES = ["fetch failed", "failed to fetch"];
500
501
  function handleFetchError({
@@ -903,10 +904,10 @@ var ReasoningDetailArraySchema = import_v4.z.array(ReasoningDetailsWithUnknownSc
903
904
  var import_v42 = require("zod/v4");
904
905
  var OpenRouterErrorResponseSchema = import_v42.z.object({
905
906
  error: import_v42.z.object({
906
- code: import_v42.z.union([import_v42.z.string(), import_v42.z.number()]).nullable(),
907
+ code: import_v42.z.union([import_v42.z.string(), import_v42.z.number()]).nullable().optional().default(null),
907
908
  message: import_v42.z.string(),
908
- type: import_v42.z.string().nullable(),
909
- param: import_v42.z.any().nullable()
909
+ type: import_v42.z.string().nullable().optional().default(null),
910
+ param: import_v42.z.any().nullable().optional().default(null)
910
911
  })
911
912
  });
912
913
  var openrouterFailedResponseHandler = createJsonErrorResponseHandler({
@@ -1136,7 +1137,10 @@ var OpenRouterChatCompletionBaseResponseSchema = import_v44.z.object({
1136
1137
  reasoning_tokens: import_v44.z.number()
1137
1138
  }).nullish(),
1138
1139
  total_tokens: import_v44.z.number(),
1139
- cost: import_v44.z.number().optional()
1140
+ cost: import_v44.z.number().optional(),
1141
+ cost_details: import_v44.z.object({
1142
+ upstream_inference_cost: import_v44.z.number().nullish()
1143
+ }).nullish()
1140
1144
  }).nullish()
1141
1145
  });
1142
1146
  var OpenRouterNonStreamChatCompletionResponseSchema = OpenRouterChatCompletionBaseResponseSchema.extend({
@@ -1301,7 +1305,7 @@ var OpenRouterChatLanguageModel = class {
1301
1305
  return baseArgs;
1302
1306
  }
1303
1307
  async doGenerate(options) {
1304
- var _a15, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t;
1308
+ var _a15, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w;
1305
1309
  const providerOptions = options.providerOptions || {};
1306
1310
  const openrouterOptions = providerOptions.openrouter || {};
1307
1311
  const args = __spreadValues(__spreadValues({}, this.getArgs(options)), openrouterOptions);
@@ -1413,6 +1417,9 @@ var OpenRouterChatLanguageModel = class {
1413
1417
  },
1414
1418
  completionTokensDetails: {
1415
1419
  reasoningTokens: (_t = (_s = (_r = response.usage) == null ? void 0 : _r.completion_tokens_details) == null ? void 0 : _s.reasoning_tokens) != null ? _t : 0
1420
+ },
1421
+ costDetails: {
1422
+ upstreamInferenceCost: (_w = (_v = (_u = response.usage) == null ? void 0 : _u.cost_details) == null ? void 0 : _v.upstream_inference_cost) != null ? _w : 0
1416
1423
  }
1417
1424
  }
1418
1425
  }
@@ -1460,6 +1467,8 @@ var OpenRouterChatLanguageModel = class {
1460
1467
  cachedInputTokens: Number.NaN
1461
1468
  };
1462
1469
  const openrouterUsage = {};
1470
+ let textStarted = false;
1471
+ let reasoningStarted = false;
1463
1472
  return {
1464
1473
  stream: response.pipeThrough(
1465
1474
  new TransformStream({
@@ -1520,55 +1529,54 @@ var OpenRouterChatLanguageModel = class {
1520
1529
  }
1521
1530
  const delta = choice.delta;
1522
1531
  if (delta.content != null) {
1532
+ if (!textStarted) {
1533
+ controller.enqueue({
1534
+ type: "text-start",
1535
+ id: generateId()
1536
+ });
1537
+ textStarted = true;
1538
+ }
1523
1539
  controller.enqueue({
1524
1540
  type: "text-delta",
1525
1541
  delta: delta.content,
1526
1542
  id: generateId()
1527
1543
  });
1528
1544
  }
1529
- if (delta.reasoning != null) {
1545
+ const emitReasoningChunk = (chunkText) => {
1546
+ if (!reasoningStarted) {
1547
+ controller.enqueue({
1548
+ type: "reasoning-start",
1549
+ id: generateId()
1550
+ });
1551
+ reasoningStarted = true;
1552
+ }
1530
1553
  controller.enqueue({
1531
1554
  type: "reasoning-delta",
1532
- delta: delta.reasoning,
1555
+ delta: chunkText,
1533
1556
  id: generateId()
1534
1557
  });
1558
+ };
1559
+ if (delta.reasoning != null) {
1560
+ emitReasoningChunk(delta.reasoning);
1535
1561
  }
1536
1562
  if (delta.reasoning_details && delta.reasoning_details.length > 0) {
1537
1563
  for (const detail of delta.reasoning_details) {
1538
1564
  switch (detail.type) {
1539
1565
  case "reasoning.text" /* Text */: {
1540
1566
  if (detail.text) {
1541
- controller.enqueue({
1542
- type: "reasoning-delta",
1543
- delta: detail.text,
1544
- id: generateId()
1545
- });
1546
- }
1547
- if (detail.signature) {
1548
- controller.enqueue({
1549
- type: "reasoning-end",
1550
- id: generateId()
1551
- });
1567
+ emitReasoningChunk(detail.text);
1552
1568
  }
1553
1569
  break;
1554
1570
  }
1555
1571
  case "reasoning.encrypted" /* Encrypted */: {
1556
1572
  if (detail.data) {
1557
- controller.enqueue({
1558
- type: "reasoning-delta",
1559
- delta: "[REDACTED]",
1560
- id: generateId()
1561
- });
1573
+ emitReasoningChunk("[REDACTED]");
1562
1574
  }
1563
1575
  break;
1564
1576
  }
1565
1577
  case "reasoning.summary" /* Summary */: {
1566
1578
  if (detail.summary) {
1567
- controller.enqueue({
1568
- type: "reasoning-delta",
1569
- delta: detail.summary,
1570
- id: generateId()
1571
- });
1579
+ emitReasoningChunk(detail.summary);
1572
1580
  }
1573
1581
  break;
1574
1582
  }
@@ -1686,6 +1694,12 @@ var OpenRouterChatLanguageModel = class {
1686
1694
  }
1687
1695
  }
1688
1696
  }
1697
+ if (textStarted) {
1698
+ controller.enqueue({ type: "text-end", id: generateId() });
1699
+ }
1700
+ if (reasoningStarted) {
1701
+ controller.enqueue({ type: "reasoning-end", id: generateId() });
1702
+ }
1689
1703
  controller.enqueue({
1690
1704
  type: "finish",
1691
1705
  finishReason,