ai 5.0.0-canary.16 → 5.0.0-canary.18

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,8 +4,8 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
6
  var __export = (target, all) => {
7
- for (var name7 in all)
8
- __defProp(target, name7, { get: all[name7], enumerable: true });
7
+ for (var name6 in all)
8
+ __defProp(target, name6, { get: all[name6], enumerable: true });
9
9
  };
10
10
  var __copyProps = (to, from, except, desc) => {
11
11
  if (from && typeof from === "object" || typeof from === "function") {
@@ -22,7 +22,6 @@ var internal_exports = {};
22
22
  __export(internal_exports, {
23
23
  HANGING_STREAM_WARNING_TIME_MS: () => HANGING_STREAM_WARNING_TIME_MS,
24
24
  StreamData: () => StreamData,
25
- calculateLanguageModelUsage: () => calculateLanguageModelUsage,
26
25
  convertToLanguageModelPrompt: () => convertToLanguageModelPrompt,
27
26
  createCallbacksTransformer: () => createCallbacksTransformer,
28
27
  formatDataStreamPart: () => formatDataStreamPart,
@@ -36,229 +35,40 @@ __export(internal_exports, {
36
35
  module.exports = __toCommonJS(internal_exports);
37
36
 
38
37
  // core/prompt/standardize-prompt.ts
39
- var import_provider4 = require("@ai-sdk/provider");
38
+ var import_provider3 = require("@ai-sdk/provider");
40
39
  var import_provider_utils2 = require("@ai-sdk/provider-utils");
41
40
  var import_zod7 = require("zod");
42
41
 
43
- // core/prompt/data-content.ts
44
- var import_provider2 = require("@ai-sdk/provider");
45
- var import_provider_utils = require("@ai-sdk/provider-utils");
46
- var import_zod = require("zod");
47
-
48
- // core/prompt/invalid-data-content-error.ts
42
+ // core/prompt/message-conversion-error.ts
49
43
  var import_provider = require("@ai-sdk/provider");
50
- var name = "AI_InvalidDataContentError";
44
+ var name = "AI_MessageConversionError";
51
45
  var marker = `vercel.ai.error.${name}`;
52
46
  var symbol = Symbol.for(marker);
53
47
  var _a;
54
- var InvalidDataContentError = class extends import_provider.AISDKError {
55
- constructor({
56
- content,
57
- cause,
58
- message = `Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`
59
- }) {
60
- super({ name, message, cause });
61
- this[_a] = true;
62
- this.content = content;
63
- }
64
- static isInstance(error) {
65
- return import_provider.AISDKError.hasMarker(error, marker);
66
- }
67
- };
68
- _a = symbol;
69
-
70
- // core/prompt/split-data-url.ts
71
- function splitDataUrl(dataUrl) {
72
- try {
73
- const [header, base64Content] = dataUrl.split(",");
74
- return {
75
- mediaType: header.split(";")[0].split(":")[1],
76
- base64Content
77
- };
78
- } catch (error) {
79
- return {
80
- mediaType: void 0,
81
- base64Content: void 0
82
- };
83
- }
84
- }
85
-
86
- // core/prompt/data-content.ts
87
- var dataContentSchema = import_zod.z.union([
88
- import_zod.z.string(),
89
- import_zod.z.instanceof(Uint8Array),
90
- import_zod.z.instanceof(ArrayBuffer),
91
- import_zod.z.custom(
92
- // Buffer might not be available in some environments such as CloudFlare:
93
- (value) => {
94
- var _a7, _b;
95
- return (_b = (_a7 = globalThis.Buffer) == null ? void 0 : _a7.isBuffer(value)) != null ? _b : false;
96
- },
97
- { message: "Must be a Buffer" }
98
- )
99
- ]);
100
- function convertToLanguageModelV2DataContent(content) {
101
- if (content instanceof Uint8Array) {
102
- return { data: content, mediaType: void 0 };
103
- }
104
- if (content instanceof ArrayBuffer) {
105
- return { data: new Uint8Array(content), mediaType: void 0 };
106
- }
107
- if (typeof content === "string") {
108
- try {
109
- content = new URL(content);
110
- } catch (error) {
111
- }
112
- }
113
- if (content instanceof URL && content.protocol === "data:") {
114
- const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(
115
- content.toString()
116
- );
117
- if (dataUrlMediaType == null || base64Content == null) {
118
- throw new import_provider2.AISDKError({
119
- name: "InvalidDataContentError",
120
- message: `Invalid data URL format in content ${content.toString()}`
121
- });
122
- }
123
- return { data: base64Content, mediaType: dataUrlMediaType };
124
- }
125
- return { data: content, mediaType: void 0 };
126
- }
127
- function convertDataContentToUint8Array(content) {
128
- if (content instanceof Uint8Array) {
129
- return content;
130
- }
131
- if (typeof content === "string") {
132
- try {
133
- return (0, import_provider_utils.convertBase64ToUint8Array)(content);
134
- } catch (error) {
135
- throw new InvalidDataContentError({
136
- message: "Invalid data content. Content string is not a base64-encoded media.",
137
- content,
138
- cause: error
139
- });
140
- }
141
- }
142
- if (content instanceof ArrayBuffer) {
143
- return new Uint8Array(content);
144
- }
145
- throw new InvalidDataContentError({ content });
146
- }
147
- function convertUint8ArrayToText(uint8Array) {
148
- try {
149
- return new TextDecoder().decode(uint8Array);
150
- } catch (error) {
151
- throw new Error("Error decoding Uint8Array to text");
152
- }
153
- }
154
-
155
- // core/prompt/attachments-to-parts.ts
156
- function attachmentsToParts(attachments) {
157
- var _a7, _b, _c;
158
- const parts = [];
159
- for (const attachment of attachments) {
160
- let url;
161
- try {
162
- url = new URL(attachment.url);
163
- } catch (error) {
164
- throw new Error(`Invalid URL: ${attachment.url}`);
165
- }
166
- switch (url.protocol) {
167
- case "http:":
168
- case "https:": {
169
- if ((_a7 = attachment.contentType) == null ? void 0 : _a7.startsWith("image/")) {
170
- parts.push({ type: "image", image: url });
171
- } else {
172
- if (!attachment.contentType) {
173
- throw new Error(
174
- "If the attachment is not an image, it must specify a content type"
175
- );
176
- }
177
- parts.push({
178
- type: "file",
179
- data: url,
180
- mediaType: attachment.contentType
181
- });
182
- }
183
- break;
184
- }
185
- case "data:": {
186
- let header;
187
- let base64Content;
188
- let mediaType;
189
- try {
190
- [header, base64Content] = attachment.url.split(",");
191
- mediaType = header.split(";")[0].split(":")[1];
192
- } catch (error) {
193
- throw new Error(`Error processing data URL: ${attachment.url}`);
194
- }
195
- if (mediaType == null || base64Content == null) {
196
- throw new Error(`Invalid data URL format: ${attachment.url}`);
197
- }
198
- if ((_b = attachment.contentType) == null ? void 0 : _b.startsWith("image/")) {
199
- parts.push({
200
- type: "image",
201
- image: convertDataContentToUint8Array(base64Content)
202
- });
203
- } else if ((_c = attachment.contentType) == null ? void 0 : _c.startsWith("text/")) {
204
- parts.push({
205
- type: "text",
206
- text: convertUint8ArrayToText(
207
- convertDataContentToUint8Array(base64Content)
208
- )
209
- });
210
- } else {
211
- if (!attachment.contentType) {
212
- throw new Error(
213
- "If the attachment is not an image or text, it must specify a content type"
214
- );
215
- }
216
- parts.push({
217
- type: "file",
218
- data: base64Content,
219
- mediaType: attachment.contentType
220
- });
221
- }
222
- break;
223
- }
224
- default: {
225
- throw new Error(`Unsupported URL protocol: ${url.protocol}`);
226
- }
227
- }
228
- }
229
- return parts;
230
- }
231
-
232
- // core/prompt/message-conversion-error.ts
233
- var import_provider3 = require("@ai-sdk/provider");
234
- var name2 = "AI_MessageConversionError";
235
- var marker2 = `vercel.ai.error.${name2}`;
236
- var symbol2 = Symbol.for(marker2);
237
- var _a2;
238
- var MessageConversionError = class extends import_provider3.AISDKError {
48
+ var MessageConversionError = class extends import_provider.AISDKError {
239
49
  constructor({
240
50
  originalMessage,
241
51
  message
242
52
  }) {
243
- super({ name: name2, message });
244
- this[_a2] = true;
53
+ super({ name, message });
54
+ this[_a] = true;
245
55
  this.originalMessage = originalMessage;
246
56
  }
247
57
  static isInstance(error) {
248
- return import_provider3.AISDKError.hasMarker(error, marker2);
58
+ return import_provider.AISDKError.hasMarker(error, marker);
249
59
  }
250
60
  };
251
- _a2 = symbol2;
61
+ _a = symbol;
252
62
 
253
- // core/prompt/convert-to-core-messages.ts
254
- function convertToCoreMessages(messages, options) {
255
- var _a7, _b;
256
- const tools = (_a7 = options == null ? void 0 : options.tools) != null ? _a7 : {};
63
+ // core/prompt/convert-to-model-messages.ts
64
+ function convertToModelMessages(messages, options) {
65
+ var _a6, _b;
66
+ const tools = (_a6 = options == null ? void 0 : options.tools) != null ? _a6 : {};
257
67
  const coreMessages = [];
258
68
  for (let i = 0; i < messages.length; i++) {
259
69
  const message = messages[i];
260
70
  const isLastMessage = i === messages.length - 1;
261
- const { role, content, experimental_attachments } = message;
71
+ const { role, content } = message;
262
72
  switch (role) {
263
73
  case "system": {
264
74
  coreMessages.push({
@@ -268,30 +78,24 @@ function convertToCoreMessages(messages, options) {
268
78
  break;
269
79
  }
270
80
  case "user": {
271
- if (message.parts == null) {
272
- coreMessages.push({
273
- role: "user",
274
- content: experimental_attachments ? [
275
- { type: "text", text: content },
276
- ...attachmentsToParts(experimental_attachments)
277
- ] : content
278
- });
279
- } else {
280
- const textParts = message.parts.filter((part) => part.type === "text").map((part) => ({
281
- type: "text",
282
- text: part.text
283
- }));
284
- coreMessages.push({
285
- role: "user",
286
- content: experimental_attachments ? [...textParts, ...attachmentsToParts(experimental_attachments)] : textParts
287
- });
288
- }
81
+ coreMessages.push({
82
+ role: "user",
83
+ content: message.parts.filter(
84
+ (part) => part.type === "text" || part.type === "file"
85
+ ).map(
86
+ (part) => part.type === "file" ? {
87
+ type: "file",
88
+ mediaType: part.mediaType,
89
+ filename: part.filename,
90
+ data: part.url
91
+ } : part
92
+ )
93
+ });
289
94
  break;
290
95
  }
291
96
  case "assistant": {
292
97
  if (message.parts != null) {
293
98
  let processBlock2 = function() {
294
- var _a8;
295
99
  const content2 = [];
296
100
  for (const part of block) {
297
101
  switch (part.type) {
@@ -302,9 +106,8 @@ function convertToCoreMessages(messages, options) {
302
106
  case "file": {
303
107
  content2.push({
304
108
  type: "file",
305
- data: part.data,
306
- mediaType: (_a8 = part.mediaType) != null ? _a8 : part.mimeType
307
- // TODO migration, remove
109
+ mediaType: part.mediaType,
110
+ data: part.url
308
111
  });
309
112
  break;
310
113
  }
@@ -458,30 +261,93 @@ function detectSingleMessageCharacteristics(message) {
458
261
  var import_zod6 = require("zod");
459
262
 
460
263
  // core/types/provider-metadata.ts
461
- var import_zod3 = require("zod");
264
+ var import_zod2 = require("zod");
462
265
 
463
266
  // core/types/json-value.ts
464
- var import_zod2 = require("zod");
465
- var jsonValueSchema = import_zod2.z.lazy(
466
- () => import_zod2.z.union([
467
- import_zod2.z.null(),
468
- import_zod2.z.string(),
469
- import_zod2.z.number(),
470
- import_zod2.z.boolean(),
471
- import_zod2.z.record(import_zod2.z.string(), jsonValueSchema),
472
- import_zod2.z.array(jsonValueSchema)
267
+ var import_zod = require("zod");
268
+ var jsonValueSchema = import_zod.z.lazy(
269
+ () => import_zod.z.union([
270
+ import_zod.z.null(),
271
+ import_zod.z.string(),
272
+ import_zod.z.number(),
273
+ import_zod.z.boolean(),
274
+ import_zod.z.record(import_zod.z.string(), jsonValueSchema),
275
+ import_zod.z.array(jsonValueSchema)
473
276
  ])
474
277
  );
475
278
 
476
279
  // core/types/provider-metadata.ts
477
- var providerMetadataSchema = import_zod3.z.record(
478
- import_zod3.z.string(),
479
- import_zod3.z.record(import_zod3.z.string(), jsonValueSchema)
280
+ var providerMetadataSchema = import_zod2.z.record(
281
+ import_zod2.z.string(),
282
+ import_zod2.z.record(import_zod2.z.string(), jsonValueSchema)
480
283
  );
481
284
 
482
285
  // core/prompt/content-part.ts
483
286
  var import_zod5 = require("zod");
484
287
 
288
+ // core/prompt/data-content.ts
289
+ var import_provider2 = require("@ai-sdk/provider");
290
+ var import_provider_utils = require("@ai-sdk/provider-utils");
291
+ var import_zod3 = require("zod");
292
+
293
+ // core/prompt/split-data-url.ts
294
+ function splitDataUrl(dataUrl) {
295
+ try {
296
+ const [header, base64Content] = dataUrl.split(",");
297
+ return {
298
+ mediaType: header.split(";")[0].split(":")[1],
299
+ base64Content
300
+ };
301
+ } catch (error) {
302
+ return {
303
+ mediaType: void 0,
304
+ base64Content: void 0
305
+ };
306
+ }
307
+ }
308
+
309
+ // core/prompt/data-content.ts
310
+ var dataContentSchema = import_zod3.z.union([
311
+ import_zod3.z.string(),
312
+ import_zod3.z.instanceof(Uint8Array),
313
+ import_zod3.z.instanceof(ArrayBuffer),
314
+ import_zod3.z.custom(
315
+ // Buffer might not be available in some environments such as CloudFlare:
316
+ (value) => {
317
+ var _a6, _b;
318
+ return (_b = (_a6 = globalThis.Buffer) == null ? void 0 : _a6.isBuffer(value)) != null ? _b : false;
319
+ },
320
+ { message: "Must be a Buffer" }
321
+ )
322
+ ]);
323
+ function convertToLanguageModelV2DataContent(content) {
324
+ if (content instanceof Uint8Array) {
325
+ return { data: content, mediaType: void 0 };
326
+ }
327
+ if (content instanceof ArrayBuffer) {
328
+ return { data: new Uint8Array(content), mediaType: void 0 };
329
+ }
330
+ if (typeof content === "string") {
331
+ try {
332
+ content = new URL(content);
333
+ } catch (error) {
334
+ }
335
+ }
336
+ if (content instanceof URL && content.protocol === "data:") {
337
+ const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(
338
+ content.toString()
339
+ );
340
+ if (dataUrlMediaType == null || base64Content == null) {
341
+ throw new import_provider2.AISDKError({
342
+ name: "InvalidDataContentError",
343
+ message: `Invalid data URL format in content ${content.toString()}`
344
+ });
345
+ }
346
+ return { data: base64Content, mediaType: dataUrlMediaType };
347
+ }
348
+ return { data: content, mediaType: void 0 };
349
+ }
350
+
485
351
  // core/prompt/tool-result-content.ts
486
352
  var import_zod4 = require("zod");
487
353
  var toolResultContentSchema = import_zod4.z.array(
@@ -505,7 +371,6 @@ var imagePartSchema = import_zod5.z.object({
505
371
  type: import_zod5.z.literal("image"),
506
372
  image: import_zod5.z.union([dataContentSchema, import_zod5.z.instanceof(URL)]),
507
373
  mediaType: import_zod5.z.string().optional(),
508
- mimeType: import_zod5.z.string().optional(),
509
374
  providerOptions: providerMetadataSchema.optional()
510
375
  });
511
376
  var filePartSchema = import_zod5.z.object({
@@ -513,7 +378,6 @@ var filePartSchema = import_zod5.z.object({
513
378
  data: import_zod5.z.union([dataContentSchema, import_zod5.z.instanceof(URL)]),
514
379
  filename: import_zod5.z.string().optional(),
515
380
  mediaType: import_zod5.z.string(),
516
- mimeType: import_zod5.z.string().optional(),
517
381
  providerOptions: providerMetadataSchema.optional()
518
382
  });
519
383
  var reasoningPartSchema = import_zod5.z.object({
@@ -539,12 +403,14 @@ var toolResultPartSchema = import_zod5.z.object({
539
403
  });
540
404
 
541
405
  // core/prompt/message.ts
542
- var coreSystemMessageSchema = import_zod6.z.object({
543
- role: import_zod6.z.literal("system"),
544
- content: import_zod6.z.string(),
545
- providerOptions: providerMetadataSchema.optional()
546
- });
547
- var coreUserMessageSchema = import_zod6.z.object({
406
+ var systemModelMessageSchema = import_zod6.z.object(
407
+ {
408
+ role: import_zod6.z.literal("system"),
409
+ content: import_zod6.z.string(),
410
+ providerOptions: providerMetadataSchema.optional()
411
+ }
412
+ );
413
+ var userModelMessageSchema = import_zod6.z.object({
548
414
  role: import_zod6.z.literal("user"),
549
415
  content: import_zod6.z.union([
550
416
  import_zod6.z.string(),
@@ -552,7 +418,7 @@ var coreUserMessageSchema = import_zod6.z.object({
552
418
  ]),
553
419
  providerOptions: providerMetadataSchema.optional()
554
420
  });
555
- var coreAssistantMessageSchema = import_zod6.z.object({
421
+ var assistantModelMessageSchema = import_zod6.z.object({
556
422
  role: import_zod6.z.literal("assistant"),
557
423
  content: import_zod6.z.union([
558
424
  import_zod6.z.string(),
@@ -567,16 +433,16 @@ var coreAssistantMessageSchema = import_zod6.z.object({
567
433
  ]),
568
434
  providerOptions: providerMetadataSchema.optional()
569
435
  });
570
- var coreToolMessageSchema = import_zod6.z.object({
436
+ var toolModelMessageSchema = import_zod6.z.object({
571
437
  role: import_zod6.z.literal("tool"),
572
438
  content: import_zod6.z.array(toolResultPartSchema),
573
439
  providerOptions: providerMetadataSchema.optional()
574
440
  });
575
- var coreMessageSchema = import_zod6.z.union([
576
- coreSystemMessageSchema,
577
- coreUserMessageSchema,
578
- coreAssistantMessageSchema,
579
- coreToolMessageSchema
441
+ var modelMessageSchema = import_zod6.z.union([
442
+ systemModelMessageSchema,
443
+ userModelMessageSchema,
444
+ assistantModelMessageSchema,
445
+ toolModelMessageSchema
580
446
  ]);
581
447
 
582
448
  // core/prompt/standardize-prompt.ts
@@ -585,26 +451,26 @@ async function standardizePrompt({
585
451
  tools
586
452
  }) {
587
453
  if (prompt.prompt == null && prompt.messages == null) {
588
- throw new import_provider4.InvalidPromptError({
454
+ throw new import_provider3.InvalidPromptError({
589
455
  prompt,
590
456
  message: "prompt or messages must be defined"
591
457
  });
592
458
  }
593
459
  if (prompt.prompt != null && prompt.messages != null) {
594
- throw new import_provider4.InvalidPromptError({
460
+ throw new import_provider3.InvalidPromptError({
595
461
  prompt,
596
462
  message: "prompt and messages cannot be defined at the same time"
597
463
  });
598
464
  }
599
465
  if (prompt.system != null && typeof prompt.system !== "string") {
600
- throw new import_provider4.InvalidPromptError({
466
+ throw new import_provider3.InvalidPromptError({
601
467
  prompt,
602
468
  message: "system must be a string"
603
469
  });
604
470
  }
605
471
  if (prompt.prompt != null) {
606
472
  if (typeof prompt.prompt !== "string") {
607
- throw new import_provider4.InvalidPromptError({
473
+ throw new import_provider3.InvalidPromptError({
608
474
  prompt,
609
475
  message: "prompt must be a string"
610
476
  });
@@ -622,28 +488,28 @@ async function standardizePrompt({
622
488
  if (prompt.messages != null) {
623
489
  const promptType = detectPromptType(prompt.messages);
624
490
  if (promptType === "other") {
625
- throw new import_provider4.InvalidPromptError({
491
+ throw new import_provider3.InvalidPromptError({
626
492
  prompt,
627
- message: "messages must be an array of CoreMessage or UIMessage"
493
+ message: "messages must be an array of ModelMessage or UIMessage"
628
494
  });
629
495
  }
630
- const messages = promptType === "ui-messages" ? convertToCoreMessages(prompt.messages, {
496
+ const messages = promptType === "ui-messages" ? convertToModelMessages(prompt.messages, {
631
497
  tools
632
498
  }) : prompt.messages;
633
499
  if (messages.length === 0) {
634
- throw new import_provider4.InvalidPromptError({
500
+ throw new import_provider3.InvalidPromptError({
635
501
  prompt,
636
502
  message: "messages must not be empty"
637
503
  });
638
504
  }
639
505
  const validationResult = await (0, import_provider_utils2.safeValidateTypes)({
640
506
  value: messages,
641
- schema: import_zod7.z.array(coreMessageSchema)
507
+ schema: import_zod7.z.array(modelMessageSchema)
642
508
  });
643
509
  if (!validationResult.success) {
644
- throw new import_provider4.InvalidPromptError({
510
+ throw new import_provider3.InvalidPromptError({
645
511
  prompt,
646
- message: "messages must be an array of CoreMessage or UIMessage",
512
+ message: "messages must be an array of ModelMessage or UIMessage",
647
513
  cause: validationResult.error
648
514
  });
649
515
  }
@@ -771,10 +637,13 @@ var finishMessageStreamPart = {
771
637
  const result = {
772
638
  finishReason: value.finishReason
773
639
  };
774
- if ("usage" in value && value.usage != null && typeof value.usage === "object" && "promptTokens" in value.usage && "completionTokens" in value.usage) {
640
+ if ("usage" in value && value.usage != null && typeof value.usage === "object") {
775
641
  result.usage = {
776
- promptTokens: typeof value.usage.promptTokens === "number" ? value.usage.promptTokens : Number.NaN,
777
- completionTokens: typeof value.usage.completionTokens === "number" ? value.usage.completionTokens : Number.NaN
642
+ inputTokens: "inputTokens" in value.usage && typeof value.usage.inputTokens === "number" ? value.usage.inputTokens : void 0,
643
+ outputTokens: "outputTokens" in value.usage && typeof value.usage.outputTokens === "number" ? value.usage.outputTokens : void 0,
644
+ totalTokens: "totalTokens" in value.usage && typeof value.usage.totalTokens === "number" ? value.usage.totalTokens : void 0,
645
+ reasoningTokens: "reasoningTokens" in value.usage && typeof value.usage.reasoningTokens === "number" ? value.usage.reasoningTokens : void 0,
646
+ cachedInputTokens: "cachedInputTokens" in value.usage && typeof value.usage.cachedInputTokens === "number" ? value.usage.cachedInputTokens : void 0
778
647
  };
779
648
  }
780
649
  return {
@@ -796,10 +665,13 @@ var finishStepStreamPart = {
796
665
  finishReason: value.finishReason,
797
666
  isContinued: false
798
667
  };
799
- if ("usage" in value && value.usage != null && typeof value.usage === "object" && "promptTokens" in value.usage && "completionTokens" in value.usage) {
668
+ if ("usage" in value && value.usage != null && typeof value.usage === "object") {
800
669
  result.usage = {
801
- promptTokens: typeof value.usage.promptTokens === "number" ? value.usage.promptTokens : Number.NaN,
802
- completionTokens: typeof value.usage.completionTokens === "number" ? value.usage.completionTokens : Number.NaN
670
+ inputTokens: "inputTokens" in value.usage && typeof value.usage.inputTokens === "number" ? value.usage.inputTokens : void 0,
671
+ outputTokens: "outputTokens" in value.usage && typeof value.usage.outputTokens === "number" ? value.usage.outputTokens : void 0,
672
+ totalTokens: "totalTokens" in value.usage && typeof value.usage.totalTokens === "number" ? value.usage.totalTokens : void 0,
673
+ reasoningTokens: "reasoningTokens" in value.usage && typeof value.usage.reasoningTokens === "number" ? value.usage.reasoningTokens : void 0,
674
+ cachedInputTokens: "cachedInputTokens" in value.usage && typeof value.usage.cachedInputTokens === "number" ? value.usage.cachedInputTokens : void 0
803
675
  };
804
676
  }
805
677
  if ("isContinued" in value && typeof value.isContinued === "boolean") {
@@ -863,9 +735,9 @@ var fileStreamPart = {
863
735
  code: "k",
864
736
  name: "file",
865
737
  parse: (value) => {
866
- if (value == null || typeof value !== "object" || !("data" in value) || typeof value.data !== "string" || !("mimeType" in value) || typeof value.mimeType !== "string") {
738
+ if (value == null || typeof value !== "object" || !("url" in value) || typeof value.url !== "string" || !("mediaType" in value) || typeof value.mediaType !== "string") {
867
739
  throw new Error(
868
- '"file" parts expect an object with a "data" and "mimeType" property.'
740
+ '"file" parts expect an object with a "url" and "mediaType" property.'
869
741
  );
870
742
  }
871
743
  return { type: "file", value };
@@ -932,24 +804,24 @@ function prepareToolsAndToolChoice({
932
804
  };
933
805
  }
934
806
  const filteredTools = activeTools != null ? Object.entries(tools).filter(
935
- ([name7]) => activeTools.includes(name7)
807
+ ([name6]) => activeTools.includes(name6)
936
808
  ) : Object.entries(tools);
937
809
  return {
938
- tools: filteredTools.map(([name7, tool]) => {
810
+ tools: filteredTools.map(([name6, tool]) => {
939
811
  const toolType = tool.type;
940
812
  switch (toolType) {
941
813
  case void 0:
942
814
  case "function":
943
815
  return {
944
816
  type: "function",
945
- name: name7,
817
+ name: name6,
946
818
  description: tool.description,
947
819
  parameters: (0, import_provider_utils3.asSchema)(tool.parameters).jsonSchema
948
820
  };
949
821
  case "provider-defined":
950
822
  return {
951
823
  type: "provider-defined",
952
- name: name7,
824
+ name: name6,
953
825
  id: tool.id,
954
826
  args: tool.args
955
827
  };
@@ -964,58 +836,58 @@ function prepareToolsAndToolChoice({
964
836
  }
965
837
 
966
838
  // errors/invalid-argument-error.ts
967
- var import_provider5 = require("@ai-sdk/provider");
968
- var name3 = "AI_InvalidArgumentError";
969
- var marker3 = `vercel.ai.error.${name3}`;
970
- var symbol3 = Symbol.for(marker3);
971
- var _a3;
972
- var InvalidArgumentError = class extends import_provider5.AISDKError {
839
+ var import_provider4 = require("@ai-sdk/provider");
840
+ var name2 = "AI_InvalidArgumentError";
841
+ var marker2 = `vercel.ai.error.${name2}`;
842
+ var symbol2 = Symbol.for(marker2);
843
+ var _a2;
844
+ var InvalidArgumentError = class extends import_provider4.AISDKError {
973
845
  constructor({
974
846
  parameter,
975
847
  value,
976
848
  message
977
849
  }) {
978
850
  super({
979
- name: name3,
851
+ name: name2,
980
852
  message: `Invalid argument for parameter ${parameter}: ${message}`
981
853
  });
982
- this[_a3] = true;
854
+ this[_a2] = true;
983
855
  this.parameter = parameter;
984
856
  this.value = value;
985
857
  }
986
858
  static isInstance(error) {
987
- return import_provider5.AISDKError.hasMarker(error, marker3);
859
+ return import_provider4.AISDKError.hasMarker(error, marker2);
988
860
  }
989
861
  };
990
- _a3 = symbol3;
862
+ _a2 = symbol2;
991
863
 
992
864
  // util/retry-with-exponential-backoff.ts
993
- var import_provider7 = require("@ai-sdk/provider");
865
+ var import_provider6 = require("@ai-sdk/provider");
994
866
  var import_provider_utils4 = require("@ai-sdk/provider-utils");
995
867
 
996
868
  // util/retry-error.ts
997
- var import_provider6 = require("@ai-sdk/provider");
998
- var name4 = "AI_RetryError";
999
- var marker4 = `vercel.ai.error.${name4}`;
1000
- var symbol4 = Symbol.for(marker4);
1001
- var _a4;
1002
- var RetryError = class extends import_provider6.AISDKError {
869
+ var import_provider5 = require("@ai-sdk/provider");
870
+ var name3 = "AI_RetryError";
871
+ var marker3 = `vercel.ai.error.${name3}`;
872
+ var symbol3 = Symbol.for(marker3);
873
+ var _a3;
874
+ var RetryError = class extends import_provider5.AISDKError {
1003
875
  constructor({
1004
876
  message,
1005
877
  reason,
1006
878
  errors
1007
879
  }) {
1008
- super({ name: name4, message });
1009
- this[_a4] = true;
880
+ super({ name: name3, message });
881
+ this[_a3] = true;
1010
882
  this.reason = reason;
1011
883
  this.errors = errors;
1012
884
  this.lastError = errors[errors.length - 1];
1013
885
  }
1014
886
  static isInstance(error) {
1015
- return import_provider6.AISDKError.hasMarker(error, marker4);
887
+ return import_provider5.AISDKError.hasMarker(error, marker3);
1016
888
  }
1017
889
  };
1018
- _a4 = symbol4;
890
+ _a3 = symbol3;
1019
891
 
1020
892
  // util/retry-with-exponential-backoff.ts
1021
893
  var retryWithExponentialBackoff = ({
@@ -1051,7 +923,7 @@ async function _retryWithExponentialBackoff(f, {
1051
923
  errors: newErrors
1052
924
  });
1053
925
  }
1054
- if (error instanceof Error && import_provider7.APICallError.isInstance(error) && error.isRetryable === true && tryNumber <= maxRetries) {
926
+ if (error instanceof Error && import_provider6.APICallError.isInstance(error) && error.isRetryable === true && tryNumber <= maxRetries) {
1055
927
  await (0, import_provider_utils4.delay)(delayInMs);
1056
928
  return _retryWithExponentialBackoff(
1057
929
  f,
@@ -1190,13 +1062,16 @@ function prepareCallSettings({
1190
1062
  };
1191
1063
  }
1192
1064
 
1065
+ // core/prompt/convert-to-language-model-prompt.ts
1066
+ var import_provider_utils6 = require("@ai-sdk/provider-utils");
1067
+
1193
1068
  // util/download-error.ts
1194
- var import_provider8 = require("@ai-sdk/provider");
1195
- var name5 = "AI_DownloadError";
1196
- var marker5 = `vercel.ai.error.${name5}`;
1197
- var symbol5 = Symbol.for(marker5);
1198
- var _a5;
1199
- var DownloadError = class extends import_provider8.AISDKError {
1069
+ var import_provider7 = require("@ai-sdk/provider");
1070
+ var name4 = "AI_DownloadError";
1071
+ var marker4 = `vercel.ai.error.${name4}`;
1072
+ var symbol4 = Symbol.for(marker4);
1073
+ var _a4;
1074
+ var DownloadError = class extends import_provider7.AISDKError {
1200
1075
  constructor({
1201
1076
  url,
1202
1077
  statusCode,
@@ -1204,21 +1079,21 @@ var DownloadError = class extends import_provider8.AISDKError {
1204
1079
  cause,
1205
1080
  message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}`
1206
1081
  }) {
1207
- super({ name: name5, message, cause });
1208
- this[_a5] = true;
1082
+ super({ name: name4, message, cause });
1083
+ this[_a4] = true;
1209
1084
  this.url = url;
1210
1085
  this.statusCode = statusCode;
1211
1086
  this.statusText = statusText;
1212
1087
  }
1213
1088
  static isInstance(error) {
1214
- return import_provider8.AISDKError.hasMarker(error, marker5);
1089
+ return import_provider7.AISDKError.hasMarker(error, marker4);
1215
1090
  }
1216
1091
  };
1217
- _a5 = symbol5;
1092
+ _a4 = symbol4;
1218
1093
 
1219
1094
  // util/download.ts
1220
1095
  async function download({ url }) {
1221
- var _a7;
1096
+ var _a6;
1222
1097
  const urlText = url.toString();
1223
1098
  try {
1224
1099
  const response = await fetch(urlText);
@@ -1231,7 +1106,7 @@ async function download({ url }) {
1231
1106
  }
1232
1107
  return {
1233
1108
  data: new Uint8Array(await response.arrayBuffer()),
1234
- mediaType: (_a7 = response.headers.get("content-type")) != null ? _a7 : void 0
1109
+ mediaType: (_a6 = response.headers.get("content-type")) != null ? _a6 : void 0
1235
1110
  };
1236
1111
  } catch (error) {
1237
1112
  if (DownloadError.isInstance(error)) {
@@ -1343,28 +1218,27 @@ function detectMediaType({
1343
1218
  }
1344
1219
 
1345
1220
  // core/prompt/invalid-message-role-error.ts
1346
- var import_provider9 = require("@ai-sdk/provider");
1347
- var name6 = "AI_InvalidMessageRoleError";
1348
- var marker6 = `vercel.ai.error.${name6}`;
1349
- var symbol6 = Symbol.for(marker6);
1350
- var _a6;
1351
- var InvalidMessageRoleError = class extends import_provider9.AISDKError {
1221
+ var import_provider8 = require("@ai-sdk/provider");
1222
+ var name5 = "AI_InvalidMessageRoleError";
1223
+ var marker5 = `vercel.ai.error.${name5}`;
1224
+ var symbol5 = Symbol.for(marker5);
1225
+ var _a5;
1226
+ var InvalidMessageRoleError = class extends import_provider8.AISDKError {
1352
1227
  constructor({
1353
1228
  role,
1354
1229
  message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
1355
1230
  }) {
1356
- super({ name: name6, message });
1357
- this[_a6] = true;
1231
+ super({ name: name5, message });
1232
+ this[_a5] = true;
1358
1233
  this.role = role;
1359
1234
  }
1360
1235
  static isInstance(error) {
1361
- return import_provider9.AISDKError.hasMarker(error, marker6);
1236
+ return import_provider8.AISDKError.hasMarker(error, marker5);
1362
1237
  }
1363
1238
  };
1364
- _a6 = symbol6;
1239
+ _a5 = symbol5;
1365
1240
 
1366
1241
  // core/prompt/convert-to-language-model-prompt.ts
1367
- var import_provider_utils6 = require("@ai-sdk/provider-utils");
1368
1242
  async function convertToLanguageModelPrompt({
1369
1243
  prompt,
1370
1244
  supportedUrls,
@@ -1420,7 +1294,6 @@ function convertToLanguageModelMessage(message, downloadedAssets) {
1420
1294
  // remove empty text parts:
1421
1295
  (part) => part.type !== "text" || part.text !== ""
1422
1296
  ).map((part) => {
1423
- var _a7;
1424
1297
  const providerOptions = part.providerOptions;
1425
1298
  switch (part.type) {
1426
1299
  case "file": {
@@ -1431,7 +1304,7 @@ function convertToLanguageModelMessage(message, downloadedAssets) {
1431
1304
  type: "file",
1432
1305
  data,
1433
1306
  filename: part.filename,
1434
- mediaType: (_a7 = mediaType != null ? mediaType : part.mediaType) != null ? _a7 : part.mimeType,
1307
+ mediaType: mediaType != null ? mediaType : part.mediaType,
1435
1308
  providerOptions
1436
1309
  };
1437
1310
  }
@@ -1490,8 +1363,8 @@ async function downloadAssets(messages, downloadImplementation, supportedUrls) {
1490
1363
  ).flat().filter(
1491
1364
  (part) => part.type === "image" || part.type === "file"
1492
1365
  ).map((part) => {
1493
- var _a7, _b;
1494
- const mediaType = (_b = (_a7 = part.mediaType) != null ? _a7 : part.mimeType) != null ? _b : part.type === "image" ? "image/*" : void 0;
1366
+ var _a6;
1367
+ const mediaType = (_a6 = part.mediaType) != null ? _a6 : part.type === "image" ? "image/*" : void 0;
1495
1368
  let data = part.type === "image" ? part.image : part.data;
1496
1369
  if (typeof data === "string") {
1497
1370
  try {
@@ -1518,7 +1391,7 @@ async function downloadAssets(messages, downloadImplementation, supportedUrls) {
1518
1391
  );
1519
1392
  }
1520
1393
  function convertPartToLanguageModelPart(part, downloadedAssets) {
1521
- var _a7, _b, _c;
1394
+ var _a6, _b;
1522
1395
  if (part.type === "text") {
1523
1396
  return {
1524
1397
  type: "text",
@@ -1539,19 +1412,19 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
1539
1412
  throw new Error(`Unsupported part type: ${type}`);
1540
1413
  }
1541
1414
  const { data: convertedData, mediaType: convertedMediaType } = convertToLanguageModelV2DataContent(originalData);
1542
- let mediaType = (_a7 = convertedMediaType != null ? convertedMediaType : part.mediaType) != null ? _a7 : part.mimeType;
1415
+ let mediaType = convertedMediaType != null ? convertedMediaType : part.mediaType;
1543
1416
  let data = convertedData;
1544
1417
  if (data instanceof URL) {
1545
1418
  const downloadedFile = downloadedAssets[data.toString()];
1546
1419
  if (downloadedFile) {
1547
1420
  data = downloadedFile.data;
1548
- mediaType = (_b = downloadedFile.mediaType) != null ? _b : mediaType;
1421
+ mediaType = (_a6 = downloadedFile.mediaType) != null ? _a6 : mediaType;
1549
1422
  }
1550
1423
  }
1551
1424
  switch (type) {
1552
1425
  case "image": {
1553
1426
  if (data instanceof Uint8Array || typeof data === "string") {
1554
- mediaType = (_c = detectMediaType({ data, signatures: imageMediaTypeSignatures })) != null ? _c : mediaType;
1427
+ mediaType = (_b = detectMediaType({ data, signatures: imageMediaTypeSignatures })) != null ? _b : mediaType;
1555
1428
  }
1556
1429
  return {
1557
1430
  type: "file",
@@ -1577,18 +1450,6 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
1577
1450
  }
1578
1451
  }
1579
1452
 
1580
- // core/types/usage.ts
1581
- function calculateLanguageModelUsage({
1582
- inputTokens,
1583
- outputTokens
1584
- }) {
1585
- return {
1586
- promptTokens: inputTokens != null ? inputTokens : NaN,
1587
- completionTokens: outputTokens != null ? outputTokens : NaN,
1588
- totalTokens: (inputTokens != null ? inputTokens : 0) + (outputTokens != null ? outputTokens : 0)
1589
- };
1590
- }
1591
-
1592
1453
  // core/util/prepare-response-headers.ts
1593
1454
  function prepareResponseHeaders(headers, {
1594
1455
  contentType,
@@ -1790,7 +1651,6 @@ var StreamData = class {
1790
1651
  0 && (module.exports = {
1791
1652
  HANGING_STREAM_WARNING_TIME_MS,
1792
1653
  StreamData,
1793
- calculateLanguageModelUsage,
1794
1654
  convertToLanguageModelPrompt,
1795
1655
  createCallbacksTransformer,
1796
1656
  formatDataStreamPart,