ai 5.0.0-canary.6 → 5.0.0-canary.7

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.
@@ -4,10 +4,12 @@ import { safeValidateTypes } from "@ai-sdk/provider-utils";
4
4
  import { z as z7 } from "zod";
5
5
 
6
6
  // core/prompt/data-content.ts
7
+ import { AISDKError as AISDKError2 } from "@ai-sdk/provider";
7
8
  import {
8
9
  convertBase64ToUint8Array,
9
10
  convertUint8ArrayToBase64
10
11
  } from "@ai-sdk/provider-utils";
12
+ import { z } from "zod";
11
13
 
12
14
  // core/prompt/invalid-data-content-error.ts
13
15
  import { AISDKError } from "@ai-sdk/provider";
@@ -31,8 +33,23 @@ var InvalidDataContentError = class extends AISDKError {
31
33
  };
32
34
  _a = symbol;
33
35
 
36
+ // core/prompt/split-data-url.ts
37
+ function splitDataUrl(dataUrl) {
38
+ try {
39
+ const [header, base64Content] = dataUrl.split(",");
40
+ return {
41
+ mediaType: header.split(";")[0].split(":")[1],
42
+ base64Content
43
+ };
44
+ } catch (error) {
45
+ return {
46
+ mediaType: void 0,
47
+ base64Content: void 0
48
+ };
49
+ }
50
+ }
51
+
34
52
  // core/prompt/data-content.ts
35
- import { z } from "zod";
36
53
  var dataContentSchema = z.union([
37
54
  z.string(),
38
55
  z.instanceof(Uint8Array),
@@ -46,14 +63,32 @@ var dataContentSchema = z.union([
46
63
  { message: "Must be a Buffer" }
47
64
  )
48
65
  ]);
49
- function convertDataContentToBase64String(content) {
50
- if (typeof content === "string") {
51
- return content;
66
+ function convertToLanguageModelV2DataContent(content) {
67
+ if (content instanceof Uint8Array) {
68
+ return { data: content, mediaType: void 0 };
52
69
  }
53
70
  if (content instanceof ArrayBuffer) {
54
- return convertUint8ArrayToBase64(new Uint8Array(content));
71
+ return { data: new Uint8Array(content), mediaType: void 0 };
72
+ }
73
+ if (typeof content === "string") {
74
+ try {
75
+ content = new URL(content);
76
+ } catch (error) {
77
+ }
55
78
  }
56
- return convertUint8ArrayToBase64(content);
79
+ if (content instanceof URL && content.protocol === "data:") {
80
+ const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(
81
+ content.toString()
82
+ );
83
+ if (dataUrlMediaType == null || base64Content == null) {
84
+ throw new AISDKError2({
85
+ name: "InvalidDataContentError",
86
+ message: `Invalid data URL format in content ${content.toString()}`
87
+ });
88
+ }
89
+ return { data: base64Content, mediaType: dataUrlMediaType };
90
+ }
91
+ return { data: content, mediaType: void 0 };
57
92
  }
58
93
  function convertDataContentToUint8Array(content) {
59
94
  if (content instanceof Uint8Array) {
@@ -161,12 +196,12 @@ function attachmentsToParts(attachments) {
161
196
  }
162
197
 
163
198
  // core/prompt/message-conversion-error.ts
164
- import { AISDKError as AISDKError2 } from "@ai-sdk/provider";
199
+ import { AISDKError as AISDKError3 } from "@ai-sdk/provider";
165
200
  var name2 = "AI_MessageConversionError";
166
201
  var marker2 = `vercel.ai.error.${name2}`;
167
202
  var symbol2 = Symbol.for(marker2);
168
203
  var _a2;
169
- var MessageConversionError = class extends AISDKError2 {
204
+ var MessageConversionError = class extends AISDKError3 {
170
205
  constructor({
171
206
  originalMessage,
172
207
  message
@@ -176,7 +211,7 @@ var MessageConversionError = class extends AISDKError2 {
176
211
  this.originalMessage = originalMessage;
177
212
  }
178
213
  static isInstance(error) {
179
- return AISDKError2.hasMarker(error, marker2);
214
+ return AISDKError3.hasMarker(error, marker2);
180
215
  }
181
216
  };
182
217
  _a2 = symbol2;
@@ -450,7 +485,7 @@ function detectSingleMessageCharacteristics(message) {
450
485
  "experimental_attachments" in message)) {
451
486
  return "has-ui-specific-parts";
452
487
  } else if (typeof message === "object" && message !== null && "content" in message && (Array.isArray(message.content) || // Core messages can have array content
453
- "experimental_providerMetadata" in message || "providerOptions" in message)) {
488
+ "providerOptions" in message)) {
454
489
  return "has-core-specific-parts";
455
490
  } else if (typeof message === "object" && message !== null && "role" in message && "content" in message && typeof message.content === "string" && ["system", "user", "assistant", "tool"].includes(message.role)) {
456
491
  return "message";
@@ -504,16 +539,14 @@ var toolResultContentSchema = z4.array(
504
539
  var textPartSchema = z5.object({
505
540
  type: z5.literal("text"),
506
541
  text: z5.string(),
507
- providerOptions: providerMetadataSchema.optional(),
508
- experimental_providerMetadata: providerMetadataSchema.optional()
542
+ providerOptions: providerMetadataSchema.optional()
509
543
  });
510
544
  var imagePartSchema = z5.object({
511
545
  type: z5.literal("image"),
512
546
  image: z5.union([dataContentSchema, z5.instanceof(URL)]),
513
547
  mediaType: z5.string().optional(),
514
548
  mimeType: z5.string().optional(),
515
- providerOptions: providerMetadataSchema.optional(),
516
- experimental_providerMetadata: providerMetadataSchema.optional()
549
+ providerOptions: providerMetadataSchema.optional()
517
550
  });
518
551
  var filePartSchema = z5.object({
519
552
  type: z5.literal("file"),
@@ -521,28 +554,24 @@ var filePartSchema = z5.object({
521
554
  filename: z5.string().optional(),
522
555
  mediaType: z5.string(),
523
556
  mimeType: z5.string().optional(),
524
- providerOptions: providerMetadataSchema.optional(),
525
- experimental_providerMetadata: providerMetadataSchema.optional()
557
+ providerOptions: providerMetadataSchema.optional()
526
558
  });
527
559
  var reasoningPartSchema = z5.object({
528
560
  type: z5.literal("reasoning"),
529
561
  text: z5.string(),
530
- providerOptions: providerMetadataSchema.optional(),
531
- experimental_providerMetadata: providerMetadataSchema.optional()
562
+ providerOptions: providerMetadataSchema.optional()
532
563
  });
533
564
  var redactedReasoningPartSchema = z5.object({
534
565
  type: z5.literal("redacted-reasoning"),
535
566
  data: z5.string(),
536
- providerOptions: providerMetadataSchema.optional(),
537
- experimental_providerMetadata: providerMetadataSchema.optional()
567
+ providerOptions: providerMetadataSchema.optional()
538
568
  });
539
569
  var toolCallPartSchema = z5.object({
540
570
  type: z5.literal("tool-call"),
541
571
  toolCallId: z5.string(),
542
572
  toolName: z5.string(),
543
573
  args: z5.unknown(),
544
- providerOptions: providerMetadataSchema.optional(),
545
- experimental_providerMetadata: providerMetadataSchema.optional()
574
+ providerOptions: providerMetadataSchema.optional()
546
575
  });
547
576
  var toolResultPartSchema = z5.object({
548
577
  type: z5.literal("tool-result"),
@@ -551,16 +580,14 @@ var toolResultPartSchema = z5.object({
551
580
  result: z5.unknown(),
552
581
  content: toolResultContentSchema.optional(),
553
582
  isError: z5.boolean().optional(),
554
- providerOptions: providerMetadataSchema.optional(),
555
- experimental_providerMetadata: providerMetadataSchema.optional()
583
+ providerOptions: providerMetadataSchema.optional()
556
584
  });
557
585
 
558
586
  // core/prompt/message.ts
559
587
  var coreSystemMessageSchema = z6.object({
560
588
  role: z6.literal("system"),
561
589
  content: z6.string(),
562
- providerOptions: providerMetadataSchema.optional(),
563
- experimental_providerMetadata: providerMetadataSchema.optional()
590
+ providerOptions: providerMetadataSchema.optional()
564
591
  });
565
592
  var coreUserMessageSchema = z6.object({
566
593
  role: z6.literal("user"),
@@ -568,8 +595,7 @@ var coreUserMessageSchema = z6.object({
568
595
  z6.string(),
569
596
  z6.array(z6.union([textPartSchema, imagePartSchema, filePartSchema]))
570
597
  ]),
571
- providerOptions: providerMetadataSchema.optional(),
572
- experimental_providerMetadata: providerMetadataSchema.optional()
598
+ providerOptions: providerMetadataSchema.optional()
573
599
  });
574
600
  var coreAssistantMessageSchema = z6.object({
575
601
  role: z6.literal("assistant"),
@@ -585,14 +611,12 @@ var coreAssistantMessageSchema = z6.object({
585
611
  ])
586
612
  )
587
613
  ]),
588
- providerOptions: providerMetadataSchema.optional(),
589
- experimental_providerMetadata: providerMetadataSchema.optional()
614
+ providerOptions: providerMetadataSchema.optional()
590
615
  });
591
616
  var coreToolMessageSchema = z6.object({
592
617
  role: z6.literal("tool"),
593
618
  content: z6.array(toolResultPartSchema),
594
- providerOptions: providerMetadataSchema.optional(),
595
- experimental_providerMetadata: providerMetadataSchema.optional()
619
+ providerOptions: providerMetadataSchema.optional()
596
620
  });
597
621
  var coreMessageSchema = z6.union([
598
622
  coreSystemMessageSchema,
@@ -723,7 +747,10 @@ function isSchema(value) {
723
747
  return typeof value === "object" && value !== null && schemaSymbol in value && value[schemaSymbol] === true && "jsonSchema" in value && "validate" in value;
724
748
  }
725
749
  function asSchema(schema) {
726
- return isSchema(schema) ? schema : zodSchema(schema);
750
+ return schema == null ? jsonSchema({
751
+ properties: {},
752
+ additionalProperties: false
753
+ }) : isSchema(schema) ? schema : zodSchema(schema);
727
754
  }
728
755
 
729
756
  // core/util/is-non-empty-object.ts
@@ -776,12 +803,12 @@ function prepareToolsAndToolChoice({
776
803
  }
777
804
 
778
805
  // errors/invalid-argument-error.ts
779
- import { AISDKError as AISDKError3 } from "@ai-sdk/provider";
806
+ import { AISDKError as AISDKError4 } from "@ai-sdk/provider";
780
807
  var name3 = "AI_InvalidArgumentError";
781
808
  var marker3 = `vercel.ai.error.${name3}`;
782
809
  var symbol3 = Symbol.for(marker3);
783
810
  var _a3;
784
- var InvalidArgumentError = class extends AISDKError3 {
811
+ var InvalidArgumentError = class extends AISDKError4 {
785
812
  constructor({
786
813
  parameter,
787
814
  value,
@@ -796,7 +823,7 @@ var InvalidArgumentError = class extends AISDKError3 {
796
823
  this.value = value;
797
824
  }
798
825
  static isInstance(error) {
799
- return AISDKError3.hasMarker(error, marker3);
826
+ return AISDKError4.hasMarker(error, marker3);
800
827
  }
801
828
  };
802
829
  _a3 = symbol3;
@@ -806,12 +833,12 @@ import { APICallError } from "@ai-sdk/provider";
806
833
  import { delay, getErrorMessage, isAbortError } from "@ai-sdk/provider-utils";
807
834
 
808
835
  // util/retry-error.ts
809
- import { AISDKError as AISDKError4 } from "@ai-sdk/provider";
836
+ import { AISDKError as AISDKError5 } from "@ai-sdk/provider";
810
837
  var name4 = "AI_RetryError";
811
838
  var marker4 = `vercel.ai.error.${name4}`;
812
839
  var symbol4 = Symbol.for(marker4);
813
840
  var _a4;
814
- var RetryError = class extends AISDKError4 {
841
+ var RetryError = class extends AISDKError5 {
815
842
  constructor({
816
843
  message,
817
844
  reason,
@@ -824,7 +851,7 @@ var RetryError = class extends AISDKError4 {
824
851
  this.lastError = errors[errors.length - 1];
825
852
  }
826
853
  static isInstance(error) {
827
- return AISDKError4.hasMarker(error, marker4);
854
+ return AISDKError5.hasMarker(error, marker4);
828
855
  }
829
856
  };
830
857
  _a4 = symbol4;
@@ -911,7 +938,7 @@ function prepareRetries({
911
938
 
912
939
  // core/prompt/prepare-call-settings.ts
913
940
  function prepareCallSettings({
914
- maxTokens,
941
+ maxOutputTokens,
915
942
  temperature,
916
943
  topP,
917
944
  topK,
@@ -920,19 +947,19 @@ function prepareCallSettings({
920
947
  stopSequences,
921
948
  seed
922
949
  }) {
923
- if (maxTokens != null) {
924
- if (!Number.isInteger(maxTokens)) {
950
+ if (maxOutputTokens != null) {
951
+ if (!Number.isInteger(maxOutputTokens)) {
925
952
  throw new InvalidArgumentError({
926
- parameter: "maxTokens",
927
- value: maxTokens,
928
- message: "maxTokens must be an integer"
953
+ parameter: "maxOutputTokens",
954
+ value: maxOutputTokens,
955
+ message: "maxOutputTokens must be an integer"
929
956
  });
930
957
  }
931
- if (maxTokens < 1) {
958
+ if (maxOutputTokens < 1) {
932
959
  throw new InvalidArgumentError({
933
- parameter: "maxTokens",
934
- value: maxTokens,
935
- message: "maxTokens must be >= 1"
960
+ parameter: "maxOutputTokens",
961
+ value: maxOutputTokens,
962
+ message: "maxOutputTokens must be >= 1"
936
963
  });
937
964
  }
938
965
  }
@@ -991,7 +1018,7 @@ function prepareCallSettings({
991
1018
  }
992
1019
  }
993
1020
  return {
994
- maxTokens,
1021
+ maxOutputTokens,
995
1022
  // TODO v5 remove default 0 for temperature
996
1023
  temperature: temperature != null ? temperature : 0,
997
1024
  topP,
@@ -1003,16 +1030,13 @@ function prepareCallSettings({
1003
1030
  };
1004
1031
  }
1005
1032
 
1006
- // core/prompt/convert-to-language-model-prompt.ts
1007
- import { convertUint8ArrayToBase64 as convertUint8ArrayToBase642 } from "@ai-sdk/provider-utils";
1008
-
1009
1033
  // util/download-error.ts
1010
- import { AISDKError as AISDKError5 } from "@ai-sdk/provider";
1034
+ import { AISDKError as AISDKError6 } from "@ai-sdk/provider";
1011
1035
  var name5 = "AI_DownloadError";
1012
1036
  var marker5 = `vercel.ai.error.${name5}`;
1013
1037
  var symbol5 = Symbol.for(marker5);
1014
1038
  var _a5;
1015
- var DownloadError = class extends AISDKError5 {
1039
+ var DownloadError = class extends AISDKError6 {
1016
1040
  constructor({
1017
1041
  url,
1018
1042
  statusCode,
@@ -1027,7 +1051,7 @@ var DownloadError = class extends AISDKError5 {
1027
1051
  this.statusText = statusText;
1028
1052
  }
1029
1053
  static isInstance(error) {
1030
- return AISDKError5.hasMarker(error, marker5);
1054
+ return AISDKError6.hasMarker(error, marker5);
1031
1055
  }
1032
1056
  };
1033
1057
  _a5 = symbol5;
@@ -1144,12 +1168,12 @@ function detectMediaType({
1144
1168
  }
1145
1169
 
1146
1170
  // core/prompt/invalid-message-role-error.ts
1147
- import { AISDKError as AISDKError6 } from "@ai-sdk/provider";
1171
+ import { AISDKError as AISDKError7 } from "@ai-sdk/provider";
1148
1172
  var name6 = "AI_InvalidMessageRoleError";
1149
1173
  var marker6 = `vercel.ai.error.${name6}`;
1150
1174
  var symbol6 = Symbol.for(marker6);
1151
1175
  var _a6;
1152
- var InvalidMessageRoleError = class extends AISDKError6 {
1176
+ var InvalidMessageRoleError = class extends AISDKError7 {
1153
1177
  constructor({
1154
1178
  role,
1155
1179
  message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
@@ -1159,27 +1183,11 @@ var InvalidMessageRoleError = class extends AISDKError6 {
1159
1183
  this.role = role;
1160
1184
  }
1161
1185
  static isInstance(error) {
1162
- return AISDKError6.hasMarker(error, marker6);
1186
+ return AISDKError7.hasMarker(error, marker6);
1163
1187
  }
1164
1188
  };
1165
1189
  _a6 = symbol6;
1166
1190
 
1167
- // core/prompt/split-data-url.ts
1168
- function splitDataUrl(dataUrl) {
1169
- try {
1170
- const [header, base64Content] = dataUrl.split(",");
1171
- return {
1172
- mediaType: header.split(";")[0].split(":")[1],
1173
- base64Content
1174
- };
1175
- } catch (error) {
1176
- return {
1177
- mediaType: void 0,
1178
- base64Content: void 0
1179
- };
1180
- }
1181
- }
1182
-
1183
1191
  // core/prompt/convert-to-language-model-prompt.ts
1184
1192
  async function convertToLanguageModelPrompt({
1185
1193
  prompt,
@@ -1201,14 +1209,13 @@ async function convertToLanguageModelPrompt({
1201
1209
  ];
1202
1210
  }
1203
1211
  function convertToLanguageModelMessage(message, downloadedAssets) {
1204
- var _a7, _b, _c, _d, _e, _f;
1205
1212
  const role = message.role;
1206
1213
  switch (role) {
1207
1214
  case "system": {
1208
1215
  return {
1209
1216
  role: "system",
1210
1217
  content: message.content,
1211
- providerOptions: (_a7 = message.providerOptions) != null ? _a7 : message.experimental_providerMetadata
1218
+ providerOptions: message.providerOptions
1212
1219
  };
1213
1220
  }
1214
1221
  case "user": {
@@ -1216,13 +1223,13 @@ function convertToLanguageModelMessage(message, downloadedAssets) {
1216
1223
  return {
1217
1224
  role: "user",
1218
1225
  content: [{ type: "text", text: message.content }],
1219
- providerOptions: (_b = message.providerOptions) != null ? _b : message.experimental_providerMetadata
1226
+ providerOptions: message.providerOptions
1220
1227
  };
1221
1228
  }
1222
1229
  return {
1223
1230
  role: "user",
1224
1231
  content: message.content.map((part) => convertPartToLanguageModelPart(part, downloadedAssets)).filter((part) => part.type !== "text" || part.text !== ""),
1225
- providerOptions: (_c = message.providerOptions) != null ? _c : message.experimental_providerMetadata
1232
+ providerOptions: message.providerOptions
1226
1233
  };
1227
1234
  }
1228
1235
  case "assistant": {
@@ -1230,7 +1237,7 @@ function convertToLanguageModelMessage(message, downloadedAssets) {
1230
1237
  return {
1231
1238
  role: "assistant",
1232
1239
  content: [{ type: "text", text: message.content }],
1233
- providerOptions: (_d = message.providerOptions) != null ? _d : message.experimental_providerMetadata
1240
+ providerOptions: message.providerOptions
1234
1241
  };
1235
1242
  }
1236
1243
  return {
@@ -1239,15 +1246,18 @@ function convertToLanguageModelMessage(message, downloadedAssets) {
1239
1246
  // remove empty text parts:
1240
1247
  (part) => part.type !== "text" || part.text !== ""
1241
1248
  ).map((part) => {
1242
- var _a8, _b2;
1243
- const providerOptions = (_a8 = part.providerOptions) != null ? _a8 : part.experimental_providerMetadata;
1249
+ var _a7;
1250
+ const providerOptions = part.providerOptions;
1244
1251
  switch (part.type) {
1245
1252
  case "file": {
1253
+ const { data, mediaType } = convertToLanguageModelV2DataContent(
1254
+ part.data
1255
+ );
1246
1256
  return {
1247
1257
  type: "file",
1248
- data: part.data instanceof URL ? part.data : convertDataContentToBase64String(part.data),
1258
+ data,
1249
1259
  filename: part.filename,
1250
- mediaType: (_b2 = part.mediaType) != null ? _b2 : part.mimeType,
1260
+ mediaType: (_a7 = mediaType != null ? mediaType : part.mediaType) != null ? _a7 : part.mimeType,
1251
1261
  providerOptions
1252
1262
  };
1253
1263
  }
@@ -1284,25 +1294,22 @@ function convertToLanguageModelMessage(message, downloadedAssets) {
1284
1294
  }
1285
1295
  }
1286
1296
  }),
1287
- providerOptions: (_e = message.providerOptions) != null ? _e : message.experimental_providerMetadata
1297
+ providerOptions: message.providerOptions
1288
1298
  };
1289
1299
  }
1290
1300
  case "tool": {
1291
1301
  return {
1292
1302
  role: "tool",
1293
- content: message.content.map((part) => {
1294
- var _a8;
1295
- return {
1296
- type: "tool-result",
1297
- toolCallId: part.toolCallId,
1298
- toolName: part.toolName,
1299
- result: part.result,
1300
- content: part.experimental_content,
1301
- isError: part.isError,
1302
- providerOptions: (_a8 = part.providerOptions) != null ? _a8 : part.experimental_providerMetadata
1303
- };
1304
- }),
1305
- providerOptions: (_f = message.providerOptions) != null ? _f : message.experimental_providerMetadata
1303
+ content: message.content.map((part) => ({
1304
+ type: "tool-result",
1305
+ toolCallId: part.toolCallId,
1306
+ toolName: part.toolName,
1307
+ result: part.result,
1308
+ content: part.experimental_content,
1309
+ isError: part.isError,
1310
+ providerOptions: part.providerOptions
1311
+ })),
1312
+ providerOptions: message.providerOptions
1306
1313
  };
1307
1314
  }
1308
1315
  default: {
@@ -1335,71 +1342,48 @@ async function downloadAssets(messages, downloadImplementation, modelSupportsIma
1335
1342
  );
1336
1343
  }
1337
1344
  function convertPartToLanguageModelPart(part, downloadedAssets) {
1338
- var _a7, _b, _c, _d, _e;
1345
+ var _a7, _b, _c;
1339
1346
  if (part.type === "text") {
1340
1347
  return {
1341
1348
  type: "text",
1342
1349
  text: part.text,
1343
- providerOptions: (_a7 = part.providerOptions) != null ? _a7 : part.experimental_providerMetadata
1350
+ providerOptions: part.providerOptions
1344
1351
  };
1345
1352
  }
1346
- let mediaType = (_b = part.mediaType) != null ? _b : part.mimeType;
1347
- let data;
1348
- let content;
1349
- let normalizedData;
1353
+ let originalData;
1350
1354
  const type = part.type;
1351
1355
  switch (type) {
1352
1356
  case "image":
1353
- data = part.image;
1357
+ originalData = part.image;
1354
1358
  break;
1355
1359
  case "file":
1356
- data = part.data;
1360
+ originalData = part.data;
1357
1361
  break;
1358
1362
  default:
1359
1363
  throw new Error(`Unsupported part type: ${type}`);
1360
1364
  }
1361
- try {
1362
- content = typeof data === "string" ? new URL(data) : data;
1363
- } catch (error) {
1364
- content = data;
1365
- }
1366
- if (content instanceof URL) {
1367
- if (content.protocol === "data:") {
1368
- const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(
1369
- content.toString()
1370
- );
1371
- if (dataUrlMediaType == null || base64Content == null) {
1372
- throw new Error(`Invalid data URL format in part ${type}`);
1373
- }
1374
- mediaType = dataUrlMediaType;
1375
- normalizedData = convertDataContentToUint8Array(base64Content);
1376
- } else {
1377
- const downloadedFile = downloadedAssets[content.toString()];
1378
- if (downloadedFile) {
1379
- normalizedData = downloadedFile.data;
1380
- mediaType != null ? mediaType : mediaType = downloadedFile.mediaType;
1381
- } else {
1382
- normalizedData = content;
1383
- }
1365
+ const { data: convertedData, mediaType: convertedMediaType } = convertToLanguageModelV2DataContent(originalData);
1366
+ let mediaType = (_a7 = convertedMediaType != null ? convertedMediaType : part.mediaType) != null ? _a7 : part.mimeType;
1367
+ let data = convertedData;
1368
+ if (data instanceof URL) {
1369
+ const downloadedFile = downloadedAssets[data.toString()];
1370
+ if (downloadedFile) {
1371
+ data = downloadedFile.data;
1372
+ mediaType = (_b = downloadedFile.mediaType) != null ? _b : mediaType;
1384
1373
  }
1385
- } else {
1386
- normalizedData = convertDataContentToUint8Array(content);
1387
1374
  }
1388
1375
  switch (type) {
1389
1376
  case "image": {
1390
- if (normalizedData instanceof Uint8Array) {
1391
- mediaType = (_c = detectMediaType({
1392
- data: normalizedData,
1393
- signatures: imageMediaTypeSignatures
1394
- })) != null ? _c : mediaType;
1377
+ if (data instanceof Uint8Array || typeof data === "string") {
1378
+ mediaType = (_c = detectMediaType({ data, signatures: imageMediaTypeSignatures })) != null ? _c : mediaType;
1395
1379
  }
1396
1380
  return {
1397
1381
  type: "file",
1398
1382
  mediaType: mediaType != null ? mediaType : "image/*",
1399
1383
  // any image
1400
1384
  filename: void 0,
1401
- data: normalizedData instanceof Uint8Array ? convertUint8ArrayToBase642(normalizedData) : normalizedData,
1402
- providerOptions: (_d = part.providerOptions) != null ? _d : part.experimental_providerMetadata
1385
+ data,
1386
+ providerOptions: part.providerOptions
1403
1387
  };
1404
1388
  }
1405
1389
  case "file": {
@@ -1410,8 +1394,8 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
1410
1394
  type: "file",
1411
1395
  mediaType,
1412
1396
  filename: part.filename,
1413
- data: normalizedData instanceof Uint8Array ? convertDataContentToBase64String(normalizedData) : normalizedData,
1414
- providerOptions: (_e = part.providerOptions) != null ? _e : part.experimental_providerMetadata
1397
+ data,
1398
+ providerOptions: part.providerOptions
1415
1399
  };
1416
1400
  }
1417
1401
  }
@@ -1419,13 +1403,13 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
1419
1403
 
1420
1404
  // core/types/usage.ts
1421
1405
  function calculateLanguageModelUsage({
1422
- promptTokens,
1423
- completionTokens
1406
+ inputTokens,
1407
+ outputTokens
1424
1408
  }) {
1425
1409
  return {
1426
- promptTokens,
1427
- completionTokens,
1428
- totalTokens: promptTokens + completionTokens
1410
+ promptTokens: inputTokens != null ? inputTokens : NaN,
1411
+ completionTokens: outputTokens != null ? outputTokens : NaN,
1412
+ totalTokens: (inputTokens != null ? inputTokens : 0) + (outputTokens != null ? outputTokens : 0)
1429
1413
  };
1430
1414
  }
1431
1415