ai 5.0.284 → 5.0.286

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.
@@ -144,7 +144,7 @@ import {
144
144
  } from "@ai-sdk/provider-utils";
145
145
 
146
146
  // src/version.ts
147
- var VERSION = true ? "5.0.284" : "0.0.0-test";
147
+ var VERSION = true ? "5.0.286" : "0.0.0-test";
148
148
 
149
149
  // src/util/download/download.ts
150
150
  var download = async ({
@@ -152,7 +152,7 @@ var download = async ({
152
152
  maxBytes,
153
153
  abortSignal
154
154
  }) => {
155
- var _a4;
155
+ var _a5;
156
156
  const urlText = url.toString();
157
157
  try {
158
158
  const headers = withUserAgentSuffix(
@@ -180,7 +180,7 @@ var download = async ({
180
180
  });
181
181
  return {
182
182
  data,
183
- mediaType: (_a4 = response.headers.get("content-type")) != null ? _a4 : void 0
183
+ mediaType: (_a5 = response.headers.get("content-type")) != null ? _a5 : void 0
184
184
  };
185
185
  } catch (error) {
186
186
  if (DownloadError.isInstance(error)) {
@@ -198,13 +198,37 @@ var createDefaultDownloadFunction = (download2 = download) => (requestedDownload
198
198
  );
199
199
 
200
200
  // src/prompt/data-content.ts
201
- import { AISDKError } from "@ai-sdk/provider";
201
+ import { AISDKError as AISDKError2 } from "@ai-sdk/provider";
202
202
  import {
203
+ isUint8Array,
204
+ isArrayBuffer,
203
205
  convertBase64ToUint8Array as convertBase64ToUint8Array2,
204
206
  convertUint8ArrayToBase64
205
207
  } from "@ai-sdk/provider-utils";
206
208
  import { z } from "zod/v4";
207
209
 
210
+ // src/prompt/invalid-data-content-error.ts
211
+ import { AISDKError } from "@ai-sdk/provider";
212
+ var name = "AI_InvalidDataContentError";
213
+ var marker = `vercel.ai.error.${name}`;
214
+ var symbol = Symbol.for(marker);
215
+ var _a;
216
+ var InvalidDataContentError = class extends AISDKError {
217
+ constructor({
218
+ content,
219
+ cause,
220
+ message = `Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`
221
+ }) {
222
+ super({ name, message, cause });
223
+ this[_a] = true;
224
+ this.content = content;
225
+ }
226
+ static isInstance(error) {
227
+ return AISDKError.hasMarker(error, marker);
228
+ }
229
+ };
230
+ _a = symbol;
231
+
208
232
  // src/prompt/split-data-url.ts
209
233
  function splitDataUrl(dataUrl) {
210
234
  try {
@@ -224,22 +248,25 @@ function splitDataUrl(dataUrl) {
224
248
  // src/prompt/data-content.ts
225
249
  var dataContentSchema = z.union([
226
250
  z.string(),
227
- z.instanceof(Uint8Array),
228
- z.instanceof(ArrayBuffer),
251
+ z.custom(isUint8Array, { message: "Must be a Uint8Array" }),
252
+ z.custom(isArrayBuffer, { message: "Must be an ArrayBuffer" }),
229
253
  z.custom(
230
254
  // Buffer might not be available in some environments such as CloudFlare:
231
255
  (value) => {
232
- var _a4, _b;
233
- return (_b = (_a4 = globalThis.Buffer) == null ? void 0 : _a4.isBuffer(value)) != null ? _b : false;
256
+ var _a5, _b;
257
+ return (_b = (_a5 = globalThis.Buffer) == null ? void 0 : _a5.isBuffer(value)) != null ? _b : false;
234
258
  },
235
259
  { message: "Must be a Buffer" }
236
260
  )
237
261
  ]);
238
262
  function convertToLanguageModelV2DataContent(content) {
239
- if (content instanceof Uint8Array) {
240
- return { data: content, mediaType: void 0 };
263
+ if (isUint8Array(content)) {
264
+ return {
265
+ data: convertDataContentToUint8Array(content),
266
+ mediaType: void 0
267
+ };
241
268
  }
242
- if (content instanceof ArrayBuffer) {
269
+ if (isArrayBuffer(content)) {
243
270
  return { data: new Uint8Array(content), mediaType: void 0 };
244
271
  }
245
272
  if (typeof content === "string") {
@@ -253,7 +280,7 @@ function convertToLanguageModelV2DataContent(content) {
253
280
  content.toString()
254
281
  );
255
282
  if (dataUrlMediaType == null || base64Content == null) {
256
- throw new AISDKError({
283
+ throw new AISDKError2({
257
284
  name: "InvalidDataContentError",
258
285
  message: `Invalid data URL format in content ${content.toString()}`
259
286
  });
@@ -262,27 +289,51 @@ function convertToLanguageModelV2DataContent(content) {
262
289
  }
263
290
  return { data: content, mediaType: void 0 };
264
291
  }
292
+ function convertDataContentToUint8Array(content) {
293
+ if (isUint8Array(content)) {
294
+ if (content instanceof Uint8Array) {
295
+ return content;
296
+ }
297
+ const { buffer, byteOffset, byteLength } = content;
298
+ return new Uint8Array(buffer, byteOffset, byteLength);
299
+ }
300
+ if (typeof content === "string") {
301
+ try {
302
+ return convertBase64ToUint8Array2(content);
303
+ } catch (error) {
304
+ throw new InvalidDataContentError({
305
+ message: "Invalid data content. Content string is not a base64-encoded media.",
306
+ content,
307
+ cause: error
308
+ });
309
+ }
310
+ }
311
+ if (isArrayBuffer(content)) {
312
+ return new Uint8Array(content);
313
+ }
314
+ throw new InvalidDataContentError({ content });
315
+ }
265
316
 
266
317
  // src/prompt/invalid-message-role-error.ts
267
- import { AISDKError as AISDKError2 } from "@ai-sdk/provider";
268
- var name = "AI_InvalidMessageRoleError";
269
- var marker = `vercel.ai.error.${name}`;
270
- var symbol = Symbol.for(marker);
271
- var _a;
272
- var InvalidMessageRoleError = class extends AISDKError2 {
318
+ import { AISDKError as AISDKError3 } from "@ai-sdk/provider";
319
+ var name2 = "AI_InvalidMessageRoleError";
320
+ var marker2 = `vercel.ai.error.${name2}`;
321
+ var symbol2 = Symbol.for(marker2);
322
+ var _a2;
323
+ var InvalidMessageRoleError = class extends AISDKError3 {
273
324
  constructor({
274
325
  role,
275
326
  message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
276
327
  }) {
277
- super({ name, message });
278
- this[_a] = true;
328
+ super({ name: name2, message });
329
+ this[_a2] = true;
279
330
  this.role = role;
280
331
  }
281
332
  static isInstance(error) {
282
- return AISDKError2.hasMarker(error, marker);
333
+ return AISDKError3.hasMarker(error, marker2);
283
334
  }
284
335
  };
285
- _a = symbol;
336
+ _a2 = symbol2;
286
337
 
287
338
  // src/prompt/convert-to-language-model-prompt.ts
288
339
  async function convertToLanguageModelPrompt({
@@ -422,8 +473,8 @@ async function downloadAssets(messages, download2, supportedUrls) {
422
473
  ).flat().filter(
423
474
  (part) => part.type === "image" || part.type === "file"
424
475
  ).map((part) => {
425
- var _a4;
426
- const mediaType = (_a4 = part.mediaType) != null ? _a4 : part.type === "image" ? "image/*" : void 0;
476
+ var _a5;
477
+ const mediaType = (_a5 = part.mediaType) != null ? _a5 : part.type === "image" ? "image/*" : void 0;
427
478
  let data = part.type === "image" ? part.image : part.data;
428
479
  if (typeof data === "string") {
429
480
  try {
@@ -456,7 +507,7 @@ function getOriginalUrl(originalData, convertedData) {
456
507
  return typeof originalData === "string" && convertedData instanceof URL && convertedData.toString() !== originalData ? originalData : void 0;
457
508
  }
458
509
  function convertPartToLanguageModelPart(part, downloadedAssets) {
459
- var _a4;
510
+ var _a5;
460
511
  if (part.type === "text") {
461
512
  return {
462
513
  type: "text",
@@ -491,7 +542,7 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
491
542
  switch (type) {
492
543
  case "image": {
493
544
  if (data instanceof Uint8Array || typeof data === "string") {
494
- mediaType = (_a4 = detectMediaType({ data, signatures: imageMediaTypeSignatures })) != null ? _a4 : mediaType;
545
+ mediaType = (_a5 = detectMediaType({ data, signatures: imageMediaTypeSignatures })) != null ? _a5 : mediaType;
495
546
  }
496
547
  return {
497
548
  type: "file",
@@ -536,14 +587,15 @@ function prepareToolsAndToolChoice({
536
587
  if (!isNonEmptyObject(tools)) {
537
588
  return {
538
589
  tools: void 0,
539
- toolChoice: void 0
590
+ // Providers can configure native tools without SDK tools.
591
+ toolChoice: toolChoice === "none" ? { type: "none" } : void 0
540
592
  };
541
593
  }
542
594
  const filteredTools = activeTools != null ? Object.entries(tools).filter(
543
- ([name4]) => activeTools.includes(name4)
595
+ ([name5]) => activeTools.includes(name5)
544
596
  ) : Object.entries(tools);
545
597
  return {
546
- tools: filteredTools.map(([name4, tool]) => {
598
+ tools: filteredTools.map(([name5, tool]) => {
547
599
  const toolType = tool.type;
548
600
  switch (toolType) {
549
601
  case void 0:
@@ -551,7 +603,7 @@ function prepareToolsAndToolChoice({
551
603
  case "function":
552
604
  return {
553
605
  type: "function",
554
- name: name4,
606
+ name: name5,
555
607
  description: tool.description,
556
608
  inputSchema: asSchema(tool.inputSchema).jsonSchema,
557
609
  providerOptions: tool.providerOptions
@@ -559,7 +611,7 @@ function prepareToolsAndToolChoice({
559
611
  case "provider-defined":
560
612
  return {
561
613
  type: "provider-defined",
562
- name: name4,
614
+ name: name5,
563
615
  id: tool.id,
564
616
  args: tool.args
565
617
  };
@@ -791,30 +843,30 @@ async function standardizePrompt({
791
843
  }
792
844
 
793
845
  // src/error/invalid-argument-error.ts
794
- import { AISDKError as AISDKError3 } from "@ai-sdk/provider";
795
- var name2 = "AI_InvalidArgumentError";
796
- var marker2 = `vercel.ai.error.${name2}`;
797
- var symbol2 = Symbol.for(marker2);
798
- var _a2;
799
- var InvalidArgumentError = class extends AISDKError3 {
846
+ import { AISDKError as AISDKError4 } from "@ai-sdk/provider";
847
+ var name3 = "AI_InvalidArgumentError";
848
+ var marker3 = `vercel.ai.error.${name3}`;
849
+ var symbol3 = Symbol.for(marker3);
850
+ var _a3;
851
+ var InvalidArgumentError = class extends AISDKError4 {
800
852
  constructor({
801
853
  parameter,
802
854
  value,
803
855
  message
804
856
  }) {
805
857
  super({
806
- name: name2,
858
+ name: name3,
807
859
  message: `Invalid argument for parameter ${parameter}: ${message}`
808
860
  });
809
- this[_a2] = true;
861
+ this[_a3] = true;
810
862
  this.parameter = parameter;
811
863
  this.value = value;
812
864
  }
813
865
  static isInstance(error) {
814
- return AISDKError3.hasMarker(error, marker2);
866
+ return AISDKError4.hasMarker(error, marker3);
815
867
  }
816
868
  };
817
- _a2 = symbol2;
869
+ _a3 = symbol3;
818
870
 
819
871
  // src/prompt/prepare-call-settings.ts
820
872
  function prepareCallSettings({
@@ -915,28 +967,28 @@ import { GatewayError } from "@ai-sdk/gateway";
915
967
  import { delay, getErrorMessage, isAbortError } from "@ai-sdk/provider-utils";
916
968
 
917
969
  // src/util/retry-error.ts
918
- import { AISDKError as AISDKError4 } from "@ai-sdk/provider";
919
- var name3 = "AI_RetryError";
920
- var marker3 = `vercel.ai.error.${name3}`;
921
- var symbol3 = Symbol.for(marker3);
922
- var _a3;
923
- var RetryError = class extends AISDKError4 {
970
+ import { AISDKError as AISDKError5 } from "@ai-sdk/provider";
971
+ var name4 = "AI_RetryError";
972
+ var marker4 = `vercel.ai.error.${name4}`;
973
+ var symbol4 = Symbol.for(marker4);
974
+ var _a4;
975
+ var RetryError = class extends AISDKError5 {
924
976
  constructor({
925
977
  message,
926
978
  reason,
927
979
  errors
928
980
  }) {
929
- super({ name: name3, message });
930
- this[_a3] = true;
981
+ super({ name: name4, message });
982
+ this[_a4] = true;
931
983
  this.reason = reason;
932
984
  this.errors = errors;
933
985
  this.lastError = errors[errors.length - 1];
934
986
  }
935
987
  static isInstance(error) {
936
- return AISDKError4.hasMarker(error, marker3);
988
+ return AISDKError5.hasMarker(error, marker4);
937
989
  }
938
990
  };
939
- _a3 = symbol3;
991
+ _a4 = symbol4;
940
992
 
941
993
  // src/util/retry-with-exponential-backoff.ts
942
994
  function getRetryDelayInMs({