@openrouter/ai-sdk-provider 1.1.1 → 1.2.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.
@@ -927,6 +927,15 @@ function getFileUrl({
927
927
  }
928
928
  return stringUrl.startsWith("data:") ? stringUrl : `data:${(_b = part.mediaType) != null ? _b : defaultMediaType};base64,${stringUrl}`;
929
929
  }
930
+ function getMediaType(dataUrl, defaultMediaType) {
931
+ var _a15;
932
+ const match = dataUrl.match(/^data:([^;]+)/);
933
+ return match ? (_a15 = match[1]) != null ? _a15 : defaultMediaType : defaultMediaType;
934
+ }
935
+ function getBase64FromDataUrl(dataUrl) {
936
+ const match = dataUrl.match(/^data:[^;]*;base64,(.+)$/);
937
+ return match ? match[1] : dataUrl;
938
+ }
930
939
 
931
940
  // src/chat/convert-to-openrouter-chat-messages.ts
932
941
  function getCacheControl(providerMetadata) {
@@ -1139,126 +1148,144 @@ function getChatCompletionToolChoice(toolChoice) {
1139
1148
  }
1140
1149
 
1141
1150
  // src/chat/schemas.ts
1151
+ import { z as z6 } from "zod/v4";
1152
+
1153
+ // src/schemas/image.ts
1142
1154
  import { z as z5 } from "zod/v4";
1143
- var OpenRouterChatCompletionBaseResponseSchema = z5.object({
1144
- id: z5.string().optional(),
1145
- model: z5.string().optional(),
1146
- provider: z5.string().optional(),
1147
- usage: z5.object({
1148
- prompt_tokens: z5.number(),
1149
- prompt_tokens_details: z5.object({
1150
- cached_tokens: z5.number()
1155
+ var ImageResponseSchema = z5.object({
1156
+ type: z5.literal("image_url"),
1157
+ image_url: z5.object({
1158
+ url: z5.string()
1159
+ })
1160
+ });
1161
+ var ImageResponseWithUnknownSchema = z5.union([
1162
+ ImageResponseSchema,
1163
+ z5.unknown().transform(() => null)
1164
+ ]);
1165
+ var ImageResponseArraySchema = z5.array(ImageResponseWithUnknownSchema).transform((d) => d.filter((d2) => !!d2));
1166
+
1167
+ // src/chat/schemas.ts
1168
+ var OpenRouterChatCompletionBaseResponseSchema = z6.object({
1169
+ id: z6.string().optional(),
1170
+ model: z6.string().optional(),
1171
+ provider: z6.string().optional(),
1172
+ usage: z6.object({
1173
+ prompt_tokens: z6.number(),
1174
+ prompt_tokens_details: z6.object({
1175
+ cached_tokens: z6.number()
1151
1176
  }).nullish(),
1152
- completion_tokens: z5.number(),
1153
- completion_tokens_details: z5.object({
1154
- reasoning_tokens: z5.number()
1177
+ completion_tokens: z6.number(),
1178
+ completion_tokens_details: z6.object({
1179
+ reasoning_tokens: z6.number()
1155
1180
  }).nullish(),
1156
- total_tokens: z5.number(),
1157
- cost: z5.number().optional(),
1158
- cost_details: z5.object({
1159
- upstream_inference_cost: z5.number().nullish()
1181
+ total_tokens: z6.number(),
1182
+ cost: z6.number().optional(),
1183
+ cost_details: z6.object({
1184
+ upstream_inference_cost: z6.number().nullish()
1160
1185
  }).nullish()
1161
1186
  }).nullish()
1162
1187
  });
1163
1188
  var OpenRouterNonStreamChatCompletionResponseSchema = OpenRouterChatCompletionBaseResponseSchema.extend({
1164
- choices: z5.array(
1165
- z5.object({
1166
- message: z5.object({
1167
- role: z5.literal("assistant"),
1168
- content: z5.string().nullable().optional(),
1169
- reasoning: z5.string().nullable().optional(),
1189
+ choices: z6.array(
1190
+ z6.object({
1191
+ message: z6.object({
1192
+ role: z6.literal("assistant"),
1193
+ content: z6.string().nullable().optional(),
1194
+ reasoning: z6.string().nullable().optional(),
1170
1195
  reasoning_details: ReasoningDetailArraySchema.nullish(),
1171
- tool_calls: z5.array(
1172
- z5.object({
1173
- id: z5.string().optional().nullable(),
1174
- type: z5.literal("function"),
1175
- function: z5.object({
1176
- name: z5.string(),
1177
- arguments: z5.string()
1196
+ images: ImageResponseArraySchema.nullish(),
1197
+ tool_calls: z6.array(
1198
+ z6.object({
1199
+ id: z6.string().optional().nullable(),
1200
+ type: z6.literal("function"),
1201
+ function: z6.object({
1202
+ name: z6.string(),
1203
+ arguments: z6.string()
1178
1204
  })
1179
1205
  })
1180
1206
  ).optional(),
1181
- annotations: z5.array(
1182
- z5.object({
1183
- type: z5.enum(["url_citation"]),
1184
- url_citation: z5.object({
1185
- end_index: z5.number(),
1186
- start_index: z5.number(),
1187
- title: z5.string(),
1188
- url: z5.string(),
1189
- content: z5.string().optional()
1207
+ annotations: z6.array(
1208
+ z6.object({
1209
+ type: z6.enum(["url_citation"]),
1210
+ url_citation: z6.object({
1211
+ end_index: z6.number(),
1212
+ start_index: z6.number(),
1213
+ title: z6.string(),
1214
+ url: z6.string(),
1215
+ content: z6.string().optional()
1190
1216
  })
1191
1217
  })
1192
1218
  ).nullish()
1193
1219
  }),
1194
- index: z5.number().nullish(),
1195
- logprobs: z5.object({
1196
- content: z5.array(
1197
- z5.object({
1198
- token: z5.string(),
1199
- logprob: z5.number(),
1200
- top_logprobs: z5.array(
1201
- z5.object({
1202
- token: z5.string(),
1203
- logprob: z5.number()
1220
+ index: z6.number().nullish(),
1221
+ logprobs: z6.object({
1222
+ content: z6.array(
1223
+ z6.object({
1224
+ token: z6.string(),
1225
+ logprob: z6.number(),
1226
+ top_logprobs: z6.array(
1227
+ z6.object({
1228
+ token: z6.string(),
1229
+ logprob: z6.number()
1204
1230
  })
1205
1231
  )
1206
1232
  })
1207
1233
  ).nullable()
1208
1234
  }).nullable().optional(),
1209
- finish_reason: z5.string().optional().nullable()
1235
+ finish_reason: z6.string().optional().nullable()
1210
1236
  })
1211
1237
  )
1212
1238
  });
1213
- var OpenRouterStreamChatCompletionChunkSchema = z5.union([
1239
+ var OpenRouterStreamChatCompletionChunkSchema = z6.union([
1214
1240
  OpenRouterChatCompletionBaseResponseSchema.extend({
1215
- choices: z5.array(
1216
- z5.object({
1217
- delta: z5.object({
1218
- role: z5.enum(["assistant"]).optional(),
1219
- content: z5.string().nullish(),
1220
- reasoning: z5.string().nullish().optional(),
1241
+ choices: z6.array(
1242
+ z6.object({
1243
+ delta: z6.object({
1244
+ role: z6.enum(["assistant"]).optional(),
1245
+ content: z6.string().nullish(),
1246
+ reasoning: z6.string().nullish().optional(),
1221
1247
  reasoning_details: ReasoningDetailArraySchema.nullish(),
1222
- tool_calls: z5.array(
1223
- z5.object({
1224
- index: z5.number().nullish(),
1225
- id: z5.string().nullish(),
1226
- type: z5.literal("function").optional(),
1227
- function: z5.object({
1228
- name: z5.string().nullish(),
1229
- arguments: z5.string().nullish()
1248
+ images: ImageResponseArraySchema.nullish(),
1249
+ tool_calls: z6.array(
1250
+ z6.object({
1251
+ index: z6.number().nullish(),
1252
+ id: z6.string().nullish(),
1253
+ type: z6.literal("function").optional(),
1254
+ function: z6.object({
1255
+ name: z6.string().nullish(),
1256
+ arguments: z6.string().nullish()
1230
1257
  })
1231
1258
  })
1232
1259
  ).nullish(),
1233
- annotations: z5.array(
1234
- z5.object({
1235
- type: z5.enum(["url_citation"]),
1236
- url_citation: z5.object({
1237
- end_index: z5.number(),
1238
- start_index: z5.number(),
1239
- title: z5.string(),
1240
- url: z5.string(),
1241
- content: z5.string().optional()
1260
+ annotations: z6.array(
1261
+ z6.object({
1262
+ type: z6.enum(["url_citation"]),
1263
+ url_citation: z6.object({
1264
+ end_index: z6.number(),
1265
+ start_index: z6.number(),
1266
+ title: z6.string(),
1267
+ url: z6.string(),
1268
+ content: z6.string().optional()
1242
1269
  })
1243
1270
  })
1244
1271
  ).nullish()
1245
1272
  }).nullish(),
1246
- logprobs: z5.object({
1247
- content: z5.array(
1248
- z5.object({
1249
- token: z5.string(),
1250
- logprob: z5.number(),
1251
- top_logprobs: z5.array(
1252
- z5.object({
1253
- token: z5.string(),
1254
- logprob: z5.number()
1273
+ logprobs: z6.object({
1274
+ content: z6.array(
1275
+ z6.object({
1276
+ token: z6.string(),
1277
+ logprob: z6.number(),
1278
+ top_logprobs: z6.array(
1279
+ z6.object({
1280
+ token: z6.string(),
1281
+ logprob: z6.number()
1255
1282
  })
1256
1283
  )
1257
1284
  })
1258
1285
  ).nullable()
1259
1286
  }).nullish(),
1260
- finish_reason: z5.string().nullable().optional(),
1261
- index: z5.number().nullish()
1287
+ finish_reason: z6.string().nullable().optional(),
1288
+ index: z6.number().nullish()
1262
1289
  })
1263
1290
  )
1264
1291
  }),
@@ -1455,6 +1482,15 @@ var OpenRouterChatLanguageModel = class {
1455
1482
  });
1456
1483
  }
1457
1484
  }
1485
+ if (choice.message.images) {
1486
+ for (const image of choice.message.images) {
1487
+ content.push({
1488
+ type: "file",
1489
+ mediaType: getMediaType(image.image_url.url, "image/jpeg"),
1490
+ data: getBase64FromDataUrl(image.image_url.url)
1491
+ });
1492
+ }
1493
+ }
1458
1494
  if (choice.message.annotations) {
1459
1495
  for (const annotation of choice.message.annotations) {
1460
1496
  if (annotation.type === "url_citation") {
@@ -1788,6 +1824,15 @@ var OpenRouterChatLanguageModel = class {
1788
1824
  }
1789
1825
  }
1790
1826
  }
1827
+ if (delta.images != null) {
1828
+ for (const image of delta.images) {
1829
+ controller.enqueue({
1830
+ type: "file",
1831
+ mediaType: getMediaType(image.image_url.url, "image/jpeg"),
1832
+ data: getBase64FromDataUrl(image.image_url.url)
1833
+ });
1834
+ }
1835
+ }
1791
1836
  },
1792
1837
  flush(controller) {
1793
1838
  var _a16;
@@ -1945,36 +1990,36 @@ ${assistantMessage}
1945
1990
  }
1946
1991
 
1947
1992
  // src/completion/schemas.ts
1948
- import { z as z6 } from "zod/v4";
1949
- var OpenRouterCompletionChunkSchema = z6.union([
1950
- z6.object({
1951
- id: z6.string().optional(),
1952
- model: z6.string().optional(),
1953
- choices: z6.array(
1954
- z6.object({
1955
- text: z6.string(),
1956
- reasoning: z6.string().nullish().optional(),
1993
+ import { z as z7 } from "zod/v4";
1994
+ var OpenRouterCompletionChunkSchema = z7.union([
1995
+ z7.object({
1996
+ id: z7.string().optional(),
1997
+ model: z7.string().optional(),
1998
+ choices: z7.array(
1999
+ z7.object({
2000
+ text: z7.string(),
2001
+ reasoning: z7.string().nullish().optional(),
1957
2002
  reasoning_details: ReasoningDetailArraySchema.nullish(),
1958
- finish_reason: z6.string().nullish(),
1959
- index: z6.number().nullish(),
1960
- logprobs: z6.object({
1961
- tokens: z6.array(z6.string()),
1962
- token_logprobs: z6.array(z6.number()),
1963
- top_logprobs: z6.array(z6.record(z6.string(), z6.number())).nullable()
2003
+ finish_reason: z7.string().nullish(),
2004
+ index: z7.number().nullish(),
2005
+ logprobs: z7.object({
2006
+ tokens: z7.array(z7.string()),
2007
+ token_logprobs: z7.array(z7.number()),
2008
+ top_logprobs: z7.array(z7.record(z7.string(), z7.number())).nullable()
1964
2009
  }).nullable().optional()
1965
2010
  })
1966
2011
  ),
1967
- usage: z6.object({
1968
- prompt_tokens: z6.number(),
1969
- prompt_tokens_details: z6.object({
1970
- cached_tokens: z6.number()
2012
+ usage: z7.object({
2013
+ prompt_tokens: z7.number(),
2014
+ prompt_tokens_details: z7.object({
2015
+ cached_tokens: z7.number()
1971
2016
  }).nullish(),
1972
- completion_tokens: z6.number(),
1973
- completion_tokens_details: z6.object({
1974
- reasoning_tokens: z6.number()
2017
+ completion_tokens: z7.number(),
2018
+ completion_tokens_details: z7.object({
2019
+ reasoning_tokens: z7.number()
1975
2020
  }).nullish(),
1976
- total_tokens: z6.number(),
1977
- cost: z6.number().optional()
2021
+ total_tokens: z7.number(),
2022
+ cost: z7.number().optional()
1978
2023
  }).nullish()
1979
2024
  }),
1980
2025
  OpenRouterErrorResponseSchema