@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.
package/dist/index.d.mts CHANGED
@@ -94,6 +94,9 @@ type OpenRouterUsageAccounting = {
94
94
  };
95
95
  totalTokens: number;
96
96
  cost?: number;
97
+ costDetails: {
98
+ upstreamInferenceCost: number;
99
+ };
97
100
  };
98
101
 
99
102
  type OpenRouterCompletionModelId = string;
package/dist/index.d.ts CHANGED
@@ -94,6 +94,9 @@ type OpenRouterUsageAccounting = {
94
94
  };
95
95
  totalTokens: number;
96
96
  cost?: number;
97
+ costDetails: {
98
+ upstreamInferenceCost: number;
99
+ };
97
100
  };
98
101
 
99
102
  type OpenRouterCompletionModelId = string;
package/dist/index.js CHANGED
@@ -447,28 +447,28 @@ var EventSourceParserStream = class extends TransformStream {
447
447
  }
448
448
  };
449
449
 
450
- // 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
450
+ // 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
451
451
  var z4 = __toESM(require("zod/v4"), 1);
452
452
 
453
- // node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.74/node_modules/zod-to-json-schema/dist/esm/Options.js
453
+ // node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@4.0.5/node_modules/zod-to-json-schema/dist/esm/Options.js
454
454
  var ignoreOverride = Symbol("Let zodToJsonSchema decide on which parser to use");
455
455
 
456
- // node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@3.25.74/node_modules/zod-to-json-schema/dist/esm/selectParser.js
456
+ // node_modules/.pnpm/zod-to-json-schema@3.24.5_zod@4.0.5/node_modules/zod-to-json-schema/dist/esm/selectParser.js
457
457
  var import_zod4 = require("zod");
458
458
 
459
- // 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
459
+ // 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
460
460
  var import_zod = require("zod");
461
461
 
462
- // 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
462
+ // 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
463
463
  var import_zod2 = require("zod");
464
464
 
465
- // 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
465
+ // 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
466
466
  var ALPHA_NUMERIC = new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");
467
467
 
468
- // 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
468
+ // 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
469
469
  var import_zod3 = require("zod");
470
470
 
471
- // 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
471
+ // 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
472
472
  function combineHeaders(...headers) {
473
473
  return headers.reduce(
474
474
  (combinedHeaders, currentHeaders) => __spreadValues(__spreadValues({}, combinedHeaders), currentHeaders != null ? currentHeaders : {}),
@@ -505,7 +505,8 @@ var createIdGenerator = ({
505
505
  };
506
506
  var generateId = createIdGenerator();
507
507
  function isAbortError(error) {
508
- return error instanceof Error && (error.name === "AbortError" || error.name === "TimeoutError");
508
+ return error instanceof Error && (error.name === "AbortError" || error.name === "ResponseAborted" || // Next.js
509
+ error.name === "TimeoutError");
509
510
  }
510
511
  var FETCH_FAILED_ERROR_MESSAGES = ["fetch failed", "failed to fetch"];
511
512
  function handleFetchError({
@@ -949,10 +950,10 @@ var ReasoningDetailArraySchema = import_v4.z.array(ReasoningDetailsWithUnknownSc
949
950
  var import_v42 = require("zod/v4");
950
951
  var OpenRouterErrorResponseSchema = import_v42.z.object({
951
952
  error: import_v42.z.object({
952
- code: import_v42.z.union([import_v42.z.string(), import_v42.z.number()]).nullable(),
953
+ code: import_v42.z.union([import_v42.z.string(), import_v42.z.number()]).nullable().optional().default(null),
953
954
  message: import_v42.z.string(),
954
- type: import_v42.z.string().nullable(),
955
- param: import_v42.z.any().nullable()
955
+ type: import_v42.z.string().nullable().optional().default(null),
956
+ param: import_v42.z.any().nullable().optional().default(null)
956
957
  })
957
958
  });
958
959
  var openrouterFailedResponseHandler = createJsonErrorResponseHandler({
@@ -1182,7 +1183,10 @@ var OpenRouterChatCompletionBaseResponseSchema = import_v44.z.object({
1182
1183
  reasoning_tokens: import_v44.z.number()
1183
1184
  }).nullish(),
1184
1185
  total_tokens: import_v44.z.number(),
1185
- cost: import_v44.z.number().optional()
1186
+ cost: import_v44.z.number().optional(),
1187
+ cost_details: import_v44.z.object({
1188
+ upstream_inference_cost: import_v44.z.number().nullish()
1189
+ }).nullish()
1186
1190
  }).nullish()
1187
1191
  });
1188
1192
  var OpenRouterNonStreamChatCompletionResponseSchema = OpenRouterChatCompletionBaseResponseSchema.extend({
@@ -1347,7 +1351,7 @@ var OpenRouterChatLanguageModel = class {
1347
1351
  return baseArgs;
1348
1352
  }
1349
1353
  async doGenerate(options) {
1350
- var _a15, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t;
1354
+ var _a15, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w;
1351
1355
  const providerOptions = options.providerOptions || {};
1352
1356
  const openrouterOptions = providerOptions.openrouter || {};
1353
1357
  const args = __spreadValues(__spreadValues({}, this.getArgs(options)), openrouterOptions);
@@ -1459,6 +1463,9 @@ var OpenRouterChatLanguageModel = class {
1459
1463
  },
1460
1464
  completionTokensDetails: {
1461
1465
  reasoningTokens: (_t = (_s = (_r = response.usage) == null ? void 0 : _r.completion_tokens_details) == null ? void 0 : _s.reasoning_tokens) != null ? _t : 0
1466
+ },
1467
+ costDetails: {
1468
+ upstreamInferenceCost: (_w = (_v = (_u = response.usage) == null ? void 0 : _u.cost_details) == null ? void 0 : _v.upstream_inference_cost) != null ? _w : 0
1462
1469
  }
1463
1470
  }
1464
1471
  }
@@ -1506,6 +1513,8 @@ var OpenRouterChatLanguageModel = class {
1506
1513
  cachedInputTokens: Number.NaN
1507
1514
  };
1508
1515
  const openrouterUsage = {};
1516
+ let textStarted = false;
1517
+ let reasoningStarted = false;
1509
1518
  return {
1510
1519
  stream: response.pipeThrough(
1511
1520
  new TransformStream({
@@ -1566,55 +1575,54 @@ var OpenRouterChatLanguageModel = class {
1566
1575
  }
1567
1576
  const delta = choice.delta;
1568
1577
  if (delta.content != null) {
1578
+ if (!textStarted) {
1579
+ controller.enqueue({
1580
+ type: "text-start",
1581
+ id: generateId()
1582
+ });
1583
+ textStarted = true;
1584
+ }
1569
1585
  controller.enqueue({
1570
1586
  type: "text-delta",
1571
1587
  delta: delta.content,
1572
1588
  id: generateId()
1573
1589
  });
1574
1590
  }
1575
- if (delta.reasoning != null) {
1591
+ const emitReasoningChunk = (chunkText) => {
1592
+ if (!reasoningStarted) {
1593
+ controller.enqueue({
1594
+ type: "reasoning-start",
1595
+ id: generateId()
1596
+ });
1597
+ reasoningStarted = true;
1598
+ }
1576
1599
  controller.enqueue({
1577
1600
  type: "reasoning-delta",
1578
- delta: delta.reasoning,
1601
+ delta: chunkText,
1579
1602
  id: generateId()
1580
1603
  });
1604
+ };
1605
+ if (delta.reasoning != null) {
1606
+ emitReasoningChunk(delta.reasoning);
1581
1607
  }
1582
1608
  if (delta.reasoning_details && delta.reasoning_details.length > 0) {
1583
1609
  for (const detail of delta.reasoning_details) {
1584
1610
  switch (detail.type) {
1585
1611
  case "reasoning.text" /* Text */: {
1586
1612
  if (detail.text) {
1587
- controller.enqueue({
1588
- type: "reasoning-delta",
1589
- delta: detail.text,
1590
- id: generateId()
1591
- });
1592
- }
1593
- if (detail.signature) {
1594
- controller.enqueue({
1595
- type: "reasoning-end",
1596
- id: generateId()
1597
- });
1613
+ emitReasoningChunk(detail.text);
1598
1614
  }
1599
1615
  break;
1600
1616
  }
1601
1617
  case "reasoning.encrypted" /* Encrypted */: {
1602
1618
  if (detail.data) {
1603
- controller.enqueue({
1604
- type: "reasoning-delta",
1605
- delta: "[REDACTED]",
1606
- id: generateId()
1607
- });
1619
+ emitReasoningChunk("[REDACTED]");
1608
1620
  }
1609
1621
  break;
1610
1622
  }
1611
1623
  case "reasoning.summary" /* Summary */: {
1612
1624
  if (detail.summary) {
1613
- controller.enqueue({
1614
- type: "reasoning-delta",
1615
- delta: detail.summary,
1616
- id: generateId()
1617
- });
1625
+ emitReasoningChunk(detail.summary);
1618
1626
  }
1619
1627
  break;
1620
1628
  }
@@ -1732,6 +1740,12 @@ var OpenRouterChatLanguageModel = class {
1732
1740
  }
1733
1741
  }
1734
1742
  }
1743
+ if (textStarted) {
1744
+ controller.enqueue({ type: "text-end", id: generateId() });
1745
+ }
1746
+ if (reasoningStarted) {
1747
+ controller.enqueue({ type: "reasoning-end", id: generateId() });
1748
+ }
1735
1749
  controller.enqueue({
1736
1750
  type: "finish",
1737
1751
  finishReason,