ai 5.0.4 → 5.0.6

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.mjs CHANGED
@@ -38,10 +38,23 @@ var NoOutputSpecifiedError = class extends AISDKError {
38
38
  };
39
39
  _a = symbol;
40
40
 
41
- // src/util/as-array.ts
42
- function asArray(value) {
43
- return value === void 0 ? [] : Array.isArray(value) ? value : [value];
44
- }
41
+ // src/model/resolve-model.ts
42
+ import { gateway } from "@ai-sdk/gateway";
43
+
44
+ // src/error/index.ts
45
+ import {
46
+ AISDKError as AISDKError16,
47
+ APICallError,
48
+ EmptyResponseBodyError,
49
+ InvalidPromptError,
50
+ InvalidResponseDataError,
51
+ JSONParseError,
52
+ LoadAPIKeyError,
53
+ NoContentGeneratedError,
54
+ NoSuchModelError,
55
+ TypeValidationError,
56
+ UnsupportedFunctionalityError
57
+ } from "@ai-sdk/provider";
45
58
 
46
59
  // src/error/invalid-argument-error.ts
47
60
  import { AISDKError as AISDKError2 } from "@ai-sdk/provider";
@@ -69,27 +82,20 @@ var InvalidArgumentError = class extends AISDKError2 {
69
82
  };
70
83
  _a2 = symbol2;
71
84
 
72
- // src/util/retry-with-exponential-backoff.ts
73
- import { APICallError } from "@ai-sdk/provider";
74
- import { delay, getErrorMessage, isAbortError } from "@ai-sdk/provider-utils";
75
-
76
- // src/util/retry-error.ts
85
+ // src/error/invalid-stream-part-error.ts
77
86
  import { AISDKError as AISDKError3 } from "@ai-sdk/provider";
78
- var name3 = "AI_RetryError";
87
+ var name3 = "AI_InvalidStreamPartError";
79
88
  var marker3 = `vercel.ai.error.${name3}`;
80
89
  var symbol3 = Symbol.for(marker3);
81
90
  var _a3;
82
- var RetryError = class extends AISDKError3 {
91
+ var InvalidStreamPartError = class extends AISDKError3 {
83
92
  constructor({
84
- message,
85
- reason,
86
- errors
93
+ chunk,
94
+ message
87
95
  }) {
88
96
  super({ name: name3, message });
89
97
  this[_a3] = true;
90
- this.reason = reason;
91
- this.errors = errors;
92
- this.lastError = errors[errors.length - 1];
98
+ this.chunk = chunk;
93
99
  }
94
100
  static isInstance(error) {
95
101
  return AISDKError3.hasMarker(error, marker3);
@@ -97,168 +103,343 @@ var RetryError = class extends AISDKError3 {
97
103
  };
98
104
  _a3 = symbol3;
99
105
 
100
- // src/util/retry-with-exponential-backoff.ts
101
- function getRetryDelayInMs({
102
- error,
103
- exponentialBackoffDelay
104
- }) {
105
- const headers = error.responseHeaders;
106
- if (!headers)
107
- return exponentialBackoffDelay;
108
- let ms;
109
- const retryAfterMs = headers["retry-after-ms"];
110
- if (retryAfterMs) {
111
- const timeoutMs = parseFloat(retryAfterMs);
112
- if (!Number.isNaN(timeoutMs)) {
113
- ms = timeoutMs;
114
- }
106
+ // src/error/invalid-tool-input-error.ts
107
+ import { AISDKError as AISDKError4, getErrorMessage } from "@ai-sdk/provider";
108
+ var name4 = "AI_InvalidToolInputError";
109
+ var marker4 = `vercel.ai.error.${name4}`;
110
+ var symbol4 = Symbol.for(marker4);
111
+ var _a4;
112
+ var InvalidToolInputError = class extends AISDKError4 {
113
+ constructor({
114
+ toolInput,
115
+ toolName,
116
+ cause,
117
+ message = `Invalid input for tool ${toolName}: ${getErrorMessage(cause)}`
118
+ }) {
119
+ super({ name: name4, message, cause });
120
+ this[_a4] = true;
121
+ this.toolInput = toolInput;
122
+ this.toolName = toolName;
115
123
  }
116
- const retryAfter = headers["retry-after"];
117
- if (retryAfter && ms === void 0) {
118
- const timeoutSeconds = parseFloat(retryAfter);
119
- if (!Number.isNaN(timeoutSeconds)) {
120
- ms = timeoutSeconds * 1e3;
121
- } else {
122
- ms = Date.parse(retryAfter) - Date.now();
123
- }
124
+ static isInstance(error) {
125
+ return AISDKError4.hasMarker(error, marker4);
124
126
  }
125
- if (ms != null && !Number.isNaN(ms) && 0 <= ms && (ms < 60 * 1e3 || ms < exponentialBackoffDelay)) {
126
- return ms;
127
+ };
128
+ _a4 = symbol4;
129
+
130
+ // src/error/mcp-client-error.ts
131
+ import { AISDKError as AISDKError5 } from "@ai-sdk/provider";
132
+ var name5 = "AI_MCPClientError";
133
+ var marker5 = `vercel.ai.error.${name5}`;
134
+ var symbol5 = Symbol.for(marker5);
135
+ var _a5;
136
+ var MCPClientError = class extends AISDKError5 {
137
+ constructor({
138
+ name: name16 = "MCPClientError",
139
+ message,
140
+ cause
141
+ }) {
142
+ super({ name: name16, message, cause });
143
+ this[_a5] = true;
127
144
  }
128
- return exponentialBackoffDelay;
129
- }
130
- var retryWithExponentialBackoffRespectingRetryHeaders = ({
131
- maxRetries = 2,
132
- initialDelayInMs = 2e3,
133
- backoffFactor = 2,
134
- abortSignal
135
- } = {}) => async (f) => _retryWithExponentialBackoff(f, {
136
- maxRetries,
137
- delayInMs: initialDelayInMs,
138
- backoffFactor,
139
- abortSignal
140
- });
141
- async function _retryWithExponentialBackoff(f, {
142
- maxRetries,
143
- delayInMs,
144
- backoffFactor,
145
- abortSignal
146
- }, errors = []) {
147
- try {
148
- return await f();
149
- } catch (error) {
150
- if (isAbortError(error)) {
151
- throw error;
152
- }
153
- if (maxRetries === 0) {
154
- throw error;
155
- }
156
- const errorMessage = getErrorMessage(error);
157
- const newErrors = [...errors, error];
158
- const tryNumber = newErrors.length;
159
- if (tryNumber > maxRetries) {
160
- throw new RetryError({
161
- message: `Failed after ${tryNumber} attempts. Last error: ${errorMessage}`,
162
- reason: "maxRetriesExceeded",
163
- errors: newErrors
164
- });
165
- }
166
- if (error instanceof Error && APICallError.isInstance(error) && error.isRetryable === true && tryNumber <= maxRetries) {
167
- await delay(
168
- getRetryDelayInMs({
169
- error,
170
- exponentialBackoffDelay: delayInMs
171
- }),
172
- { abortSignal }
173
- );
174
- return _retryWithExponentialBackoff(
175
- f,
176
- {
177
- maxRetries,
178
- delayInMs: backoffFactor * delayInMs,
179
- backoffFactor,
180
- abortSignal
181
- },
182
- newErrors
183
- );
184
- }
185
- if (tryNumber === 1) {
186
- throw error;
187
- }
188
- throw new RetryError({
189
- message: `Failed after ${tryNumber} attempts with non-retryable error: '${errorMessage}'`,
190
- reason: "errorNotRetryable",
191
- errors: newErrors
192
- });
145
+ static isInstance(error) {
146
+ return AISDKError5.hasMarker(error, marker5);
193
147
  }
194
- }
148
+ };
149
+ _a5 = symbol5;
195
150
 
196
- // src/util/prepare-retries.ts
197
- function prepareRetries({
198
- maxRetries,
199
- abortSignal
200
- }) {
201
- if (maxRetries != null) {
202
- if (!Number.isInteger(maxRetries)) {
203
- throw new InvalidArgumentError({
204
- parameter: "maxRetries",
205
- value: maxRetries,
206
- message: "maxRetries must be an integer"
207
- });
208
- }
209
- if (maxRetries < 0) {
210
- throw new InvalidArgumentError({
211
- parameter: "maxRetries",
212
- value: maxRetries,
213
- message: "maxRetries must be >= 0"
214
- });
215
- }
151
+ // src/error/no-image-generated-error.ts
152
+ import { AISDKError as AISDKError6 } from "@ai-sdk/provider";
153
+ var name6 = "AI_NoImageGeneratedError";
154
+ var marker6 = `vercel.ai.error.${name6}`;
155
+ var symbol6 = Symbol.for(marker6);
156
+ var _a6;
157
+ var NoImageGeneratedError = class extends AISDKError6 {
158
+ constructor({
159
+ message = "No image generated.",
160
+ cause,
161
+ responses
162
+ }) {
163
+ super({ name: name6, message, cause });
164
+ this[_a6] = true;
165
+ this.responses = responses;
216
166
  }
217
- const maxRetriesResult = maxRetries != null ? maxRetries : 2;
218
- return {
219
- maxRetries: maxRetriesResult,
220
- retry: retryWithExponentialBackoffRespectingRetryHeaders({
221
- maxRetries: maxRetriesResult,
222
- abortSignal
223
- })
224
- };
225
- }
167
+ static isInstance(error) {
168
+ return AISDKError6.hasMarker(error, marker6);
169
+ }
170
+ };
171
+ _a6 = symbol6;
226
172
 
227
- // src/prompt/convert-to-language-model-prompt.ts
228
- import {
229
- isUrlSupported
230
- } from "@ai-sdk/provider-utils";
173
+ // src/error/no-object-generated-error.ts
174
+ import { AISDKError as AISDKError7 } from "@ai-sdk/provider";
175
+ var name7 = "AI_NoObjectGeneratedError";
176
+ var marker7 = `vercel.ai.error.${name7}`;
177
+ var symbol7 = Symbol.for(marker7);
178
+ var _a7;
179
+ var NoObjectGeneratedError = class extends AISDKError7 {
180
+ constructor({
181
+ message = "No object generated.",
182
+ cause,
183
+ text: text2,
184
+ response,
185
+ usage,
186
+ finishReason
187
+ }) {
188
+ super({ name: name7, message, cause });
189
+ this[_a7] = true;
190
+ this.text = text2;
191
+ this.response = response;
192
+ this.usage = usage;
193
+ this.finishReason = finishReason;
194
+ }
195
+ static isInstance(error) {
196
+ return AISDKError7.hasMarker(error, marker7);
197
+ }
198
+ };
199
+ _a7 = symbol7;
231
200
 
232
- // src/util/detect-media-type.ts
233
- import { convertBase64ToUint8Array } from "@ai-sdk/provider-utils";
234
- var imageMediaTypeSignatures = [
235
- {
236
- mediaType: "image/gif",
237
- bytesPrefix: [71, 73, 70],
238
- base64Prefix: "R0lG"
239
- },
240
- {
241
- mediaType: "image/png",
242
- bytesPrefix: [137, 80, 78, 71],
243
- base64Prefix: "iVBORw"
244
- },
245
- {
246
- mediaType: "image/jpeg",
247
- bytesPrefix: [255, 216],
248
- base64Prefix: "/9j/"
249
- },
250
- {
251
- mediaType: "image/webp",
252
- bytesPrefix: [82, 73, 70, 70],
253
- base64Prefix: "UklGRg"
254
- },
255
- {
256
- mediaType: "image/bmp",
257
- bytesPrefix: [66, 77],
258
- base64Prefix: "Qk"
259
- },
260
- {
261
- mediaType: "image/tiff",
201
+ // src/error/no-such-tool-error.ts
202
+ import { AISDKError as AISDKError8 } from "@ai-sdk/provider";
203
+ var name8 = "AI_NoSuchToolError";
204
+ var marker8 = `vercel.ai.error.${name8}`;
205
+ var symbol8 = Symbol.for(marker8);
206
+ var _a8;
207
+ var NoSuchToolError = class extends AISDKError8 {
208
+ constructor({
209
+ toolName,
210
+ availableTools = void 0,
211
+ message = `Model tried to call unavailable tool '${toolName}'. ${availableTools === void 0 ? "No tools are available." : `Available tools: ${availableTools.join(", ")}.`}`
212
+ }) {
213
+ super({ name: name8, message });
214
+ this[_a8] = true;
215
+ this.toolName = toolName;
216
+ this.availableTools = availableTools;
217
+ }
218
+ static isInstance(error) {
219
+ return AISDKError8.hasMarker(error, marker8);
220
+ }
221
+ };
222
+ _a8 = symbol8;
223
+
224
+ // src/error/tool-call-repair-error.ts
225
+ import { AISDKError as AISDKError9, getErrorMessage as getErrorMessage2 } from "@ai-sdk/provider";
226
+ var name9 = "AI_ToolCallRepairError";
227
+ var marker9 = `vercel.ai.error.${name9}`;
228
+ var symbol9 = Symbol.for(marker9);
229
+ var _a9;
230
+ var ToolCallRepairError = class extends AISDKError9 {
231
+ constructor({
232
+ cause,
233
+ originalError,
234
+ message = `Error repairing tool call: ${getErrorMessage2(cause)}`
235
+ }) {
236
+ super({ name: name9, message, cause });
237
+ this[_a9] = true;
238
+ this.originalError = originalError;
239
+ }
240
+ static isInstance(error) {
241
+ return AISDKError9.hasMarker(error, marker9);
242
+ }
243
+ };
244
+ _a9 = symbol9;
245
+
246
+ // src/error/unsupported-model-version-error.ts
247
+ import { AISDKError as AISDKError10 } from "@ai-sdk/provider";
248
+ var UnsupportedModelVersionError = class extends AISDKError10 {
249
+ constructor(options) {
250
+ super({
251
+ name: "AI_UnsupportedModelVersionError",
252
+ message: `Unsupported model version ${options.version} for provider "${options.provider}" and model "${options.modelId}". AI SDK 5 only supports models that implement specification version "v2".`
253
+ });
254
+ this.version = options.version;
255
+ this.provider = options.provider;
256
+ this.modelId = options.modelId;
257
+ }
258
+ };
259
+
260
+ // src/prompt/invalid-data-content-error.ts
261
+ import { AISDKError as AISDKError11 } from "@ai-sdk/provider";
262
+ var name10 = "AI_InvalidDataContentError";
263
+ var marker10 = `vercel.ai.error.${name10}`;
264
+ var symbol10 = Symbol.for(marker10);
265
+ var _a10;
266
+ var InvalidDataContentError = class extends AISDKError11 {
267
+ constructor({
268
+ content,
269
+ cause,
270
+ message = `Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`
271
+ }) {
272
+ super({ name: name10, message, cause });
273
+ this[_a10] = true;
274
+ this.content = content;
275
+ }
276
+ static isInstance(error) {
277
+ return AISDKError11.hasMarker(error, marker10);
278
+ }
279
+ };
280
+ _a10 = symbol10;
281
+
282
+ // src/prompt/invalid-message-role-error.ts
283
+ import { AISDKError as AISDKError12 } from "@ai-sdk/provider";
284
+ var name11 = "AI_InvalidMessageRoleError";
285
+ var marker11 = `vercel.ai.error.${name11}`;
286
+ var symbol11 = Symbol.for(marker11);
287
+ var _a11;
288
+ var InvalidMessageRoleError = class extends AISDKError12 {
289
+ constructor({
290
+ role,
291
+ message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
292
+ }) {
293
+ super({ name: name11, message });
294
+ this[_a11] = true;
295
+ this.role = role;
296
+ }
297
+ static isInstance(error) {
298
+ return AISDKError12.hasMarker(error, marker11);
299
+ }
300
+ };
301
+ _a11 = symbol11;
302
+
303
+ // src/prompt/message-conversion-error.ts
304
+ import { AISDKError as AISDKError13 } from "@ai-sdk/provider";
305
+ var name12 = "AI_MessageConversionError";
306
+ var marker12 = `vercel.ai.error.${name12}`;
307
+ var symbol12 = Symbol.for(marker12);
308
+ var _a12;
309
+ var MessageConversionError = class extends AISDKError13 {
310
+ constructor({
311
+ originalMessage,
312
+ message
313
+ }) {
314
+ super({ name: name12, message });
315
+ this[_a12] = true;
316
+ this.originalMessage = originalMessage;
317
+ }
318
+ static isInstance(error) {
319
+ return AISDKError13.hasMarker(error, marker12);
320
+ }
321
+ };
322
+ _a12 = symbol12;
323
+
324
+ // src/util/download-error.ts
325
+ import { AISDKError as AISDKError14 } from "@ai-sdk/provider";
326
+ var name13 = "AI_DownloadError";
327
+ var marker13 = `vercel.ai.error.${name13}`;
328
+ var symbol13 = Symbol.for(marker13);
329
+ var _a13;
330
+ var DownloadError = class extends AISDKError14 {
331
+ constructor({
332
+ url,
333
+ statusCode,
334
+ statusText,
335
+ cause,
336
+ message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}`
337
+ }) {
338
+ super({ name: name13, message, cause });
339
+ this[_a13] = true;
340
+ this.url = url;
341
+ this.statusCode = statusCode;
342
+ this.statusText = statusText;
343
+ }
344
+ static isInstance(error) {
345
+ return AISDKError14.hasMarker(error, marker13);
346
+ }
347
+ };
348
+ _a13 = symbol13;
349
+
350
+ // src/util/retry-error.ts
351
+ import { AISDKError as AISDKError15 } from "@ai-sdk/provider";
352
+ var name14 = "AI_RetryError";
353
+ var marker14 = `vercel.ai.error.${name14}`;
354
+ var symbol14 = Symbol.for(marker14);
355
+ var _a14;
356
+ var RetryError = class extends AISDKError15 {
357
+ constructor({
358
+ message,
359
+ reason,
360
+ errors
361
+ }) {
362
+ super({ name: name14, message });
363
+ this[_a14] = true;
364
+ this.reason = reason;
365
+ this.errors = errors;
366
+ this.lastError = errors[errors.length - 1];
367
+ }
368
+ static isInstance(error) {
369
+ return AISDKError15.hasMarker(error, marker14);
370
+ }
371
+ };
372
+ _a14 = symbol14;
373
+
374
+ // src/model/resolve-model.ts
375
+ function resolveLanguageModel(model) {
376
+ if (typeof model !== "string") {
377
+ if (model.specificationVersion !== "v2") {
378
+ throw new UnsupportedModelVersionError({
379
+ version: model.specificationVersion,
380
+ provider: model.provider,
381
+ modelId: model.modelId
382
+ });
383
+ }
384
+ return model;
385
+ }
386
+ return getGlobalProvider().languageModel(model);
387
+ }
388
+ function resolveEmbeddingModel(model) {
389
+ if (typeof model !== "string") {
390
+ if (model.specificationVersion !== "v2") {
391
+ throw new UnsupportedModelVersionError({
392
+ version: model.specificationVersion,
393
+ provider: model.provider,
394
+ modelId: model.modelId
395
+ });
396
+ }
397
+ return model;
398
+ }
399
+ return getGlobalProvider().textEmbeddingModel(
400
+ model
401
+ );
402
+ }
403
+ function getGlobalProvider() {
404
+ var _a16;
405
+ return (_a16 = globalThis.AI_SDK_DEFAULT_PROVIDER) != null ? _a16 : gateway;
406
+ }
407
+
408
+ // src/prompt/convert-to-language-model-prompt.ts
409
+ import {
410
+ isUrlSupported
411
+ } from "@ai-sdk/provider-utils";
412
+
413
+ // src/util/detect-media-type.ts
414
+ import { convertBase64ToUint8Array } from "@ai-sdk/provider-utils";
415
+ var imageMediaTypeSignatures = [
416
+ {
417
+ mediaType: "image/gif",
418
+ bytesPrefix: [71, 73, 70],
419
+ base64Prefix: "R0lG"
420
+ },
421
+ {
422
+ mediaType: "image/png",
423
+ bytesPrefix: [137, 80, 78, 71],
424
+ base64Prefix: "iVBORw"
425
+ },
426
+ {
427
+ mediaType: "image/jpeg",
428
+ bytesPrefix: [255, 216],
429
+ base64Prefix: "/9j/"
430
+ },
431
+ {
432
+ mediaType: "image/webp",
433
+ bytesPrefix: [82, 73, 70, 70],
434
+ base64Prefix: "UklGRg"
435
+ },
436
+ {
437
+ mediaType: "image/bmp",
438
+ bytesPrefix: [66, 77],
439
+ base64Prefix: "Qk"
440
+ },
441
+ {
442
+ mediaType: "image/tiff",
262
443
  bytesPrefix: [73, 73, 42, 0],
263
444
  base64Prefix: "SUkqAA"
264
445
  },
@@ -367,32 +548,6 @@ function detectMediaType({
367
548
  return void 0;
368
549
  }
369
550
 
370
- // src/util/download-error.ts
371
- import { AISDKError as AISDKError4 } from "@ai-sdk/provider";
372
- var name4 = "AI_DownloadError";
373
- var marker4 = `vercel.ai.error.${name4}`;
374
- var symbol4 = Symbol.for(marker4);
375
- var _a4;
376
- var DownloadError = class extends AISDKError4 {
377
- constructor({
378
- url,
379
- statusCode,
380
- statusText,
381
- cause,
382
- message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}`
383
- }) {
384
- super({ name: name4, message, cause });
385
- this[_a4] = true;
386
- this.url = url;
387
- this.statusCode = statusCode;
388
- this.statusText = statusText;
389
- }
390
- static isInstance(error) {
391
- return AISDKError4.hasMarker(error, marker4);
392
- }
393
- };
394
- _a4 = symbol4;
395
-
396
551
  // src/util/download.ts
397
552
  async function download({ url }) {
398
553
  var _a16;
@@ -419,35 +574,13 @@ async function download({ url }) {
419
574
  }
420
575
 
421
576
  // src/prompt/data-content.ts
422
- import { AISDKError as AISDKError6 } from "@ai-sdk/provider";
577
+ import { AISDKError as AISDKError17 } from "@ai-sdk/provider";
423
578
  import {
424
579
  convertBase64ToUint8Array as convertBase64ToUint8Array2,
425
580
  convertUint8ArrayToBase64
426
581
  } from "@ai-sdk/provider-utils";
427
582
  import { z } from "zod/v4";
428
583
 
429
- // src/prompt/invalid-data-content-error.ts
430
- import { AISDKError as AISDKError5 } from "@ai-sdk/provider";
431
- var name5 = "AI_InvalidDataContentError";
432
- var marker5 = `vercel.ai.error.${name5}`;
433
- var symbol5 = Symbol.for(marker5);
434
- var _a5;
435
- var InvalidDataContentError = class extends AISDKError5 {
436
- constructor({
437
- content,
438
- cause,
439
- message = `Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`
440
- }) {
441
- super({ name: name5, message, cause });
442
- this[_a5] = true;
443
- this.content = content;
444
- }
445
- static isInstance(error) {
446
- return AISDKError5.hasMarker(error, marker5);
447
- }
448
- };
449
- _a5 = symbol5;
450
-
451
584
  // src/prompt/split-data-url.ts
452
585
  function splitDataUrl(dataUrl) {
453
586
  try {
@@ -496,7 +629,7 @@ function convertToLanguageModelV2DataContent(content) {
496
629
  content.toString()
497
630
  );
498
631
  if (dataUrlMediaType == null || base64Content == null) {
499
- throw new AISDKError6({
632
+ throw new AISDKError17({
500
633
  name: "InvalidDataContentError",
501
634
  message: `Invalid data URL format in content ${content.toString()}`
502
635
  });
@@ -535,27 +668,6 @@ function convertDataContentToUint8Array(content) {
535
668
  throw new InvalidDataContentError({ content });
536
669
  }
537
670
 
538
- // src/prompt/invalid-message-role-error.ts
539
- import { AISDKError as AISDKError7 } from "@ai-sdk/provider";
540
- var name6 = "AI_InvalidMessageRoleError";
541
- var marker6 = `vercel.ai.error.${name6}`;
542
- var symbol6 = Symbol.for(marker6);
543
- var _a6;
544
- var InvalidMessageRoleError = class extends AISDKError7 {
545
- constructor({
546
- role,
547
- message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
548
- }) {
549
- super({ name: name6, message });
550
- this[_a6] = true;
551
- this.role = role;
552
- }
553
- static isInstance(error) {
554
- return AISDKError7.hasMarker(error, marker6);
555
- }
556
- };
557
- _a6 = symbol6;
558
-
559
671
  // src/prompt/convert-to-language-model-prompt.ts
560
672
  async function convertToLanguageModelPrompt({
561
673
  prompt,
@@ -837,323 +949,93 @@ function prepareCallSettings({
837
949
  if (typeof presencePenalty !== "number") {
838
950
  throw new InvalidArgumentError({
839
951
  parameter: "presencePenalty",
840
- value: presencePenalty,
841
- message: "presencePenalty must be a number"
842
- });
843
- }
844
- }
845
- if (frequencyPenalty != null) {
846
- if (typeof frequencyPenalty !== "number") {
847
- throw new InvalidArgumentError({
848
- parameter: "frequencyPenalty",
849
- value: frequencyPenalty,
850
- message: "frequencyPenalty must be a number"
851
- });
852
- }
853
- }
854
- if (seed != null) {
855
- if (!Number.isInteger(seed)) {
856
- throw new InvalidArgumentError({
857
- parameter: "seed",
858
- value: seed,
859
- message: "seed must be an integer"
860
- });
861
- }
862
- }
863
- return {
864
- maxOutputTokens,
865
- temperature,
866
- topP,
867
- topK,
868
- presencePenalty,
869
- frequencyPenalty,
870
- stopSequences,
871
- seed
872
- };
873
- }
874
-
875
- // src/prompt/prepare-tools-and-tool-choice.ts
876
- import { asSchema } from "@ai-sdk/provider-utils";
877
-
878
- // src/util/is-non-empty-object.ts
879
- function isNonEmptyObject(object2) {
880
- return object2 != null && Object.keys(object2).length > 0;
881
- }
882
-
883
- // src/prompt/prepare-tools-and-tool-choice.ts
884
- function prepareToolsAndToolChoice({
885
- tools,
886
- toolChoice,
887
- activeTools
888
- }) {
889
- if (!isNonEmptyObject(tools)) {
890
- return {
891
- tools: void 0,
892
- toolChoice: void 0
893
- };
894
- }
895
- const filteredTools = activeTools != null ? Object.entries(tools).filter(
896
- ([name16]) => activeTools.includes(name16)
897
- ) : Object.entries(tools);
898
- return {
899
- tools: filteredTools.map(([name16, tool3]) => {
900
- const toolType = tool3.type;
901
- switch (toolType) {
902
- case void 0:
903
- case "dynamic":
904
- case "function":
905
- return {
906
- type: "function",
907
- name: name16,
908
- description: tool3.description,
909
- inputSchema: asSchema(tool3.inputSchema).jsonSchema,
910
- providerOptions: tool3.providerOptions
911
- };
912
- case "provider-defined":
913
- return {
914
- type: "provider-defined",
915
- name: name16,
916
- id: tool3.id,
917
- args: tool3.args
918
- };
919
- default: {
920
- const exhaustiveCheck = toolType;
921
- throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);
922
- }
923
- }
924
- }),
925
- toolChoice: toolChoice == null ? { type: "auto" } : typeof toolChoice === "string" ? { type: toolChoice } : { type: "tool", toolName: toolChoice.toolName }
926
- };
927
- }
928
-
929
- // src/prompt/resolve-language-model.ts
930
- import { gateway } from "@ai-sdk/gateway";
931
-
932
- // src/error/index.ts
933
- import {
934
- AISDKError as AISDKError17,
935
- APICallError as APICallError2,
936
- EmptyResponseBodyError,
937
- InvalidPromptError,
938
- InvalidResponseDataError,
939
- JSONParseError,
940
- LoadAPIKeyError,
941
- NoContentGeneratedError,
942
- NoSuchModelError,
943
- TypeValidationError,
944
- UnsupportedFunctionalityError
945
- } from "@ai-sdk/provider";
946
-
947
- // src/error/invalid-stream-part-error.ts
948
- import { AISDKError as AISDKError8 } from "@ai-sdk/provider";
949
- var name7 = "AI_InvalidStreamPartError";
950
- var marker7 = `vercel.ai.error.${name7}`;
951
- var symbol7 = Symbol.for(marker7);
952
- var _a7;
953
- var InvalidStreamPartError = class extends AISDKError8 {
954
- constructor({
955
- chunk,
956
- message
957
- }) {
958
- super({ name: name7, message });
959
- this[_a7] = true;
960
- this.chunk = chunk;
961
- }
962
- static isInstance(error) {
963
- return AISDKError8.hasMarker(error, marker7);
964
- }
965
- };
966
- _a7 = symbol7;
967
-
968
- // src/error/invalid-tool-input-error.ts
969
- import { AISDKError as AISDKError9, getErrorMessage as getErrorMessage2 } from "@ai-sdk/provider";
970
- var name8 = "AI_InvalidToolInputError";
971
- var marker8 = `vercel.ai.error.${name8}`;
972
- var symbol8 = Symbol.for(marker8);
973
- var _a8;
974
- var InvalidToolInputError = class extends AISDKError9 {
975
- constructor({
976
- toolInput,
977
- toolName,
978
- cause,
979
- message = `Invalid input for tool ${toolName}: ${getErrorMessage2(cause)}`
980
- }) {
981
- super({ name: name8, message, cause });
982
- this[_a8] = true;
983
- this.toolInput = toolInput;
984
- this.toolName = toolName;
985
- }
986
- static isInstance(error) {
987
- return AISDKError9.hasMarker(error, marker8);
988
- }
989
- };
990
- _a8 = symbol8;
991
-
992
- // src/error/mcp-client-error.ts
993
- import { AISDKError as AISDKError10 } from "@ai-sdk/provider";
994
- var name9 = "AI_MCPClientError";
995
- var marker9 = `vercel.ai.error.${name9}`;
996
- var symbol9 = Symbol.for(marker9);
997
- var _a9;
998
- var MCPClientError = class extends AISDKError10 {
999
- constructor({
1000
- name: name16 = "MCPClientError",
1001
- message,
1002
- cause
1003
- }) {
1004
- super({ name: name16, message, cause });
1005
- this[_a9] = true;
1006
- }
1007
- static isInstance(error) {
1008
- return AISDKError10.hasMarker(error, marker9);
1009
- }
1010
- };
1011
- _a9 = symbol9;
1012
-
1013
- // src/error/no-image-generated-error.ts
1014
- import { AISDKError as AISDKError11 } from "@ai-sdk/provider";
1015
- var name10 = "AI_NoImageGeneratedError";
1016
- var marker10 = `vercel.ai.error.${name10}`;
1017
- var symbol10 = Symbol.for(marker10);
1018
- var _a10;
1019
- var NoImageGeneratedError = class extends AISDKError11 {
1020
- constructor({
1021
- message = "No image generated.",
1022
- cause,
1023
- responses
1024
- }) {
1025
- super({ name: name10, message, cause });
1026
- this[_a10] = true;
1027
- this.responses = responses;
1028
- }
1029
- static isInstance(error) {
1030
- return AISDKError11.hasMarker(error, marker10);
1031
- }
1032
- };
1033
- _a10 = symbol10;
1034
-
1035
- // src/error/no-object-generated-error.ts
1036
- import { AISDKError as AISDKError12 } from "@ai-sdk/provider";
1037
- var name11 = "AI_NoObjectGeneratedError";
1038
- var marker11 = `vercel.ai.error.${name11}`;
1039
- var symbol11 = Symbol.for(marker11);
1040
- var _a11;
1041
- var NoObjectGeneratedError = class extends AISDKError12 {
1042
- constructor({
1043
- message = "No object generated.",
1044
- cause,
1045
- text: text2,
1046
- response,
1047
- usage,
1048
- finishReason
1049
- }) {
1050
- super({ name: name11, message, cause });
1051
- this[_a11] = true;
1052
- this.text = text2;
1053
- this.response = response;
1054
- this.usage = usage;
1055
- this.finishReason = finishReason;
1056
- }
1057
- static isInstance(error) {
1058
- return AISDKError12.hasMarker(error, marker11);
1059
- }
1060
- };
1061
- _a11 = symbol11;
1062
-
1063
- // src/error/no-such-tool-error.ts
1064
- import { AISDKError as AISDKError13 } from "@ai-sdk/provider";
1065
- var name12 = "AI_NoSuchToolError";
1066
- var marker12 = `vercel.ai.error.${name12}`;
1067
- var symbol12 = Symbol.for(marker12);
1068
- var _a12;
1069
- var NoSuchToolError = class extends AISDKError13 {
1070
- constructor({
1071
- toolName,
1072
- availableTools = void 0,
1073
- message = `Model tried to call unavailable tool '${toolName}'. ${availableTools === void 0 ? "No tools are available." : `Available tools: ${availableTools.join(", ")}.`}`
1074
- }) {
1075
- super({ name: name12, message });
1076
- this[_a12] = true;
1077
- this.toolName = toolName;
1078
- this.availableTools = availableTools;
1079
- }
1080
- static isInstance(error) {
1081
- return AISDKError13.hasMarker(error, marker12);
1082
- }
1083
- };
1084
- _a12 = symbol12;
1085
-
1086
- // src/error/tool-call-repair-error.ts
1087
- import { AISDKError as AISDKError14, getErrorMessage as getErrorMessage3 } from "@ai-sdk/provider";
1088
- var name13 = "AI_ToolCallRepairError";
1089
- var marker13 = `vercel.ai.error.${name13}`;
1090
- var symbol13 = Symbol.for(marker13);
1091
- var _a13;
1092
- var ToolCallRepairError = class extends AISDKError14 {
1093
- constructor({
1094
- cause,
1095
- originalError,
1096
- message = `Error repairing tool call: ${getErrorMessage3(cause)}`
1097
- }) {
1098
- super({ name: name13, message, cause });
1099
- this[_a13] = true;
1100
- this.originalError = originalError;
1101
- }
1102
- static isInstance(error) {
1103
- return AISDKError14.hasMarker(error, marker13);
1104
- }
1105
- };
1106
- _a13 = symbol13;
1107
-
1108
- // src/error/unsupported-model-version-error.ts
1109
- import { AISDKError as AISDKError15 } from "@ai-sdk/provider";
1110
- var UnsupportedModelVersionError = class extends AISDKError15 {
1111
- constructor(options) {
1112
- super({
1113
- name: "AI_UnsupportedModelVersionError",
1114
- message: `Unsupported model version ${options.version} for provider "${options.provider}" and model "${options.modelId}". AI SDK 5 only supports models that implement specification version "v2".`
1115
- });
1116
- this.version = options.version;
1117
- this.provider = options.provider;
1118
- this.modelId = options.modelId;
1119
- }
1120
- };
1121
-
1122
- // src/prompt/message-conversion-error.ts
1123
- import { AISDKError as AISDKError16 } from "@ai-sdk/provider";
1124
- var name14 = "AI_MessageConversionError";
1125
- var marker14 = `vercel.ai.error.${name14}`;
1126
- var symbol14 = Symbol.for(marker14);
1127
- var _a14;
1128
- var MessageConversionError = class extends AISDKError16 {
1129
- constructor({
1130
- originalMessage,
1131
- message
1132
- }) {
1133
- super({ name: name14, message });
1134
- this[_a14] = true;
1135
- this.originalMessage = originalMessage;
952
+ value: presencePenalty,
953
+ message: "presencePenalty must be a number"
954
+ });
955
+ }
1136
956
  }
1137
- static isInstance(error) {
1138
- return AISDKError16.hasMarker(error, marker14);
957
+ if (frequencyPenalty != null) {
958
+ if (typeof frequencyPenalty !== "number") {
959
+ throw new InvalidArgumentError({
960
+ parameter: "frequencyPenalty",
961
+ value: frequencyPenalty,
962
+ message: "frequencyPenalty must be a number"
963
+ });
964
+ }
1139
965
  }
1140
- };
1141
- _a14 = symbol14;
1142
-
1143
- // src/prompt/resolve-language-model.ts
1144
- function resolveLanguageModel(model) {
1145
- if (typeof model !== "string") {
1146
- if (model.specificationVersion !== "v2") {
1147
- throw new UnsupportedModelVersionError({
1148
- version: model.specificationVersion,
1149
- provider: model.provider,
1150
- modelId: model.modelId
966
+ if (seed != null) {
967
+ if (!Number.isInteger(seed)) {
968
+ throw new InvalidArgumentError({
969
+ parameter: "seed",
970
+ value: seed,
971
+ message: "seed must be an integer"
1151
972
  });
1152
973
  }
1153
- return model;
1154
974
  }
1155
- const globalProvider = globalThis.AI_SDK_DEFAULT_PROVIDER;
1156
- return (globalProvider != null ? globalProvider : gateway).languageModel(model);
975
+ return {
976
+ maxOutputTokens,
977
+ temperature,
978
+ topP,
979
+ topK,
980
+ presencePenalty,
981
+ frequencyPenalty,
982
+ stopSequences,
983
+ seed
984
+ };
985
+ }
986
+
987
+ // src/prompt/prepare-tools-and-tool-choice.ts
988
+ import { asSchema } from "@ai-sdk/provider-utils";
989
+
990
+ // src/util/is-non-empty-object.ts
991
+ function isNonEmptyObject(object2) {
992
+ return object2 != null && Object.keys(object2).length > 0;
993
+ }
994
+
995
+ // src/prompt/prepare-tools-and-tool-choice.ts
996
+ function prepareToolsAndToolChoice({
997
+ tools,
998
+ toolChoice,
999
+ activeTools
1000
+ }) {
1001
+ if (!isNonEmptyObject(tools)) {
1002
+ return {
1003
+ tools: void 0,
1004
+ toolChoice: void 0
1005
+ };
1006
+ }
1007
+ const filteredTools = activeTools != null ? Object.entries(tools).filter(
1008
+ ([name16]) => activeTools.includes(name16)
1009
+ ) : Object.entries(tools);
1010
+ return {
1011
+ tools: filteredTools.map(([name16, tool3]) => {
1012
+ const toolType = tool3.type;
1013
+ switch (toolType) {
1014
+ case void 0:
1015
+ case "dynamic":
1016
+ case "function":
1017
+ return {
1018
+ type: "function",
1019
+ name: name16,
1020
+ description: tool3.description,
1021
+ inputSchema: asSchema(tool3.inputSchema).jsonSchema,
1022
+ providerOptions: tool3.providerOptions
1023
+ };
1024
+ case "provider-defined":
1025
+ return {
1026
+ type: "provider-defined",
1027
+ name: name16,
1028
+ id: tool3.id,
1029
+ args: tool3.args
1030
+ };
1031
+ default: {
1032
+ const exhaustiveCheck = toolType;
1033
+ throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);
1034
+ }
1035
+ }
1036
+ }),
1037
+ toolChoice: toolChoice == null ? { type: "auto" } : typeof toolChoice === "string" ? { type: toolChoice } : { type: "tool", toolName: toolChoice.toolName }
1038
+ };
1157
1039
  }
1158
1040
 
1159
1041
  // src/prompt/standardize-prompt.ts
@@ -1531,88 +1413,222 @@ function recordSpan({
1531
1413
  }
1532
1414
  throw error;
1533
1415
  }
1534
- });
1535
- }
1536
- function recordErrorOnSpan(span, error) {
1537
- if (error instanceof Error) {
1538
- span.recordException({
1539
- name: error.name,
1540
- message: error.message,
1541
- stack: error.stack
1542
- });
1543
- span.setStatus({
1544
- code: SpanStatusCode.ERROR,
1545
- message: error.message
1416
+ });
1417
+ }
1418
+ function recordErrorOnSpan(span, error) {
1419
+ if (error instanceof Error) {
1420
+ span.recordException({
1421
+ name: error.name,
1422
+ message: error.message,
1423
+ stack: error.stack
1424
+ });
1425
+ span.setStatus({
1426
+ code: SpanStatusCode.ERROR,
1427
+ message: error.message
1428
+ });
1429
+ } else {
1430
+ span.setStatus({ code: SpanStatusCode.ERROR });
1431
+ }
1432
+ }
1433
+
1434
+ // src/telemetry/select-telemetry-attributes.ts
1435
+ function selectTelemetryAttributes({
1436
+ telemetry,
1437
+ attributes
1438
+ }) {
1439
+ if ((telemetry == null ? void 0 : telemetry.isEnabled) !== true) {
1440
+ return {};
1441
+ }
1442
+ return Object.entries(attributes).reduce((attributes2, [key, value]) => {
1443
+ if (value == null) {
1444
+ return attributes2;
1445
+ }
1446
+ if (typeof value === "object" && "input" in value && typeof value.input === "function") {
1447
+ if ((telemetry == null ? void 0 : telemetry.recordInputs) === false) {
1448
+ return attributes2;
1449
+ }
1450
+ const result = value.input();
1451
+ return result == null ? attributes2 : { ...attributes2, [key]: result };
1452
+ }
1453
+ if (typeof value === "object" && "output" in value && typeof value.output === "function") {
1454
+ if ((telemetry == null ? void 0 : telemetry.recordOutputs) === false) {
1455
+ return attributes2;
1456
+ }
1457
+ const result = value.output();
1458
+ return result == null ? attributes2 : { ...attributes2, [key]: result };
1459
+ }
1460
+ return { ...attributes2, [key]: value };
1461
+ }, {});
1462
+ }
1463
+
1464
+ // src/telemetry/stringify-for-telemetry.ts
1465
+ function stringifyForTelemetry(prompt) {
1466
+ return JSON.stringify(
1467
+ prompt.map((message) => ({
1468
+ ...message,
1469
+ content: typeof message.content === "string" ? message.content : message.content.map(
1470
+ (part) => part.type === "file" ? {
1471
+ ...part,
1472
+ data: part.data instanceof Uint8Array ? convertDataContentToBase64String(part.data) : part.data
1473
+ } : part
1474
+ )
1475
+ }))
1476
+ );
1477
+ }
1478
+
1479
+ // src/types/usage.ts
1480
+ function addLanguageModelUsage(usage1, usage2) {
1481
+ return {
1482
+ inputTokens: addTokenCounts(usage1.inputTokens, usage2.inputTokens),
1483
+ outputTokens: addTokenCounts(usage1.outputTokens, usage2.outputTokens),
1484
+ totalTokens: addTokenCounts(usage1.totalTokens, usage2.totalTokens),
1485
+ reasoningTokens: addTokenCounts(
1486
+ usage1.reasoningTokens,
1487
+ usage2.reasoningTokens
1488
+ ),
1489
+ cachedInputTokens: addTokenCounts(
1490
+ usage1.cachedInputTokens,
1491
+ usage2.cachedInputTokens
1492
+ )
1493
+ };
1494
+ }
1495
+ function addTokenCounts(tokenCount1, tokenCount2) {
1496
+ return tokenCount1 == null && tokenCount2 == null ? void 0 : (tokenCount1 != null ? tokenCount1 : 0) + (tokenCount2 != null ? tokenCount2 : 0);
1497
+ }
1498
+
1499
+ // src/util/as-array.ts
1500
+ function asArray(value) {
1501
+ return value === void 0 ? [] : Array.isArray(value) ? value : [value];
1502
+ }
1503
+
1504
+ // src/util/retry-with-exponential-backoff.ts
1505
+ import { APICallError as APICallError2 } from "@ai-sdk/provider";
1506
+ import { delay, getErrorMessage as getErrorMessage3, isAbortError } from "@ai-sdk/provider-utils";
1507
+ function getRetryDelayInMs({
1508
+ error,
1509
+ exponentialBackoffDelay
1510
+ }) {
1511
+ const headers = error.responseHeaders;
1512
+ if (!headers)
1513
+ return exponentialBackoffDelay;
1514
+ let ms;
1515
+ const retryAfterMs = headers["retry-after-ms"];
1516
+ if (retryAfterMs) {
1517
+ const timeoutMs = parseFloat(retryAfterMs);
1518
+ if (!Number.isNaN(timeoutMs)) {
1519
+ ms = timeoutMs;
1520
+ }
1521
+ }
1522
+ const retryAfter = headers["retry-after"];
1523
+ if (retryAfter && ms === void 0) {
1524
+ const timeoutSeconds = parseFloat(retryAfter);
1525
+ if (!Number.isNaN(timeoutSeconds)) {
1526
+ ms = timeoutSeconds * 1e3;
1527
+ } else {
1528
+ ms = Date.parse(retryAfter) - Date.now();
1529
+ }
1530
+ }
1531
+ if (ms != null && !Number.isNaN(ms) && 0 <= ms && (ms < 60 * 1e3 || ms < exponentialBackoffDelay)) {
1532
+ return ms;
1533
+ }
1534
+ return exponentialBackoffDelay;
1535
+ }
1536
+ var retryWithExponentialBackoffRespectingRetryHeaders = ({
1537
+ maxRetries = 2,
1538
+ initialDelayInMs = 2e3,
1539
+ backoffFactor = 2,
1540
+ abortSignal
1541
+ } = {}) => async (f) => _retryWithExponentialBackoff(f, {
1542
+ maxRetries,
1543
+ delayInMs: initialDelayInMs,
1544
+ backoffFactor,
1545
+ abortSignal
1546
+ });
1547
+ async function _retryWithExponentialBackoff(f, {
1548
+ maxRetries,
1549
+ delayInMs,
1550
+ backoffFactor,
1551
+ abortSignal
1552
+ }, errors = []) {
1553
+ try {
1554
+ return await f();
1555
+ } catch (error) {
1556
+ if (isAbortError(error)) {
1557
+ throw error;
1558
+ }
1559
+ if (maxRetries === 0) {
1560
+ throw error;
1561
+ }
1562
+ const errorMessage = getErrorMessage3(error);
1563
+ const newErrors = [...errors, error];
1564
+ const tryNumber = newErrors.length;
1565
+ if (tryNumber > maxRetries) {
1566
+ throw new RetryError({
1567
+ message: `Failed after ${tryNumber} attempts. Last error: ${errorMessage}`,
1568
+ reason: "maxRetriesExceeded",
1569
+ errors: newErrors
1570
+ });
1571
+ }
1572
+ if (error instanceof Error && APICallError2.isInstance(error) && error.isRetryable === true && tryNumber <= maxRetries) {
1573
+ await delay(
1574
+ getRetryDelayInMs({
1575
+ error,
1576
+ exponentialBackoffDelay: delayInMs
1577
+ }),
1578
+ { abortSignal }
1579
+ );
1580
+ return _retryWithExponentialBackoff(
1581
+ f,
1582
+ {
1583
+ maxRetries,
1584
+ delayInMs: backoffFactor * delayInMs,
1585
+ backoffFactor,
1586
+ abortSignal
1587
+ },
1588
+ newErrors
1589
+ );
1590
+ }
1591
+ if (tryNumber === 1) {
1592
+ throw error;
1593
+ }
1594
+ throw new RetryError({
1595
+ message: `Failed after ${tryNumber} attempts with non-retryable error: '${errorMessage}'`,
1596
+ reason: "errorNotRetryable",
1597
+ errors: newErrors
1546
1598
  });
1547
- } else {
1548
- span.setStatus({ code: SpanStatusCode.ERROR });
1549
1599
  }
1550
1600
  }
1551
1601
 
1552
- // src/telemetry/select-telemetry-attributes.ts
1553
- function selectTelemetryAttributes({
1554
- telemetry,
1555
- attributes
1602
+ // src/util/prepare-retries.ts
1603
+ function prepareRetries({
1604
+ maxRetries,
1605
+ abortSignal
1556
1606
  }) {
1557
- if ((telemetry == null ? void 0 : telemetry.isEnabled) !== true) {
1558
- return {};
1559
- }
1560
- return Object.entries(attributes).reduce((attributes2, [key, value]) => {
1561
- if (value == null) {
1562
- return attributes2;
1563
- }
1564
- if (typeof value === "object" && "input" in value && typeof value.input === "function") {
1565
- if ((telemetry == null ? void 0 : telemetry.recordInputs) === false) {
1566
- return attributes2;
1567
- }
1568
- const result = value.input();
1569
- return result == null ? attributes2 : { ...attributes2, [key]: result };
1607
+ if (maxRetries != null) {
1608
+ if (!Number.isInteger(maxRetries)) {
1609
+ throw new InvalidArgumentError({
1610
+ parameter: "maxRetries",
1611
+ value: maxRetries,
1612
+ message: "maxRetries must be an integer"
1613
+ });
1570
1614
  }
1571
- if (typeof value === "object" && "output" in value && typeof value.output === "function") {
1572
- if ((telemetry == null ? void 0 : telemetry.recordOutputs) === false) {
1573
- return attributes2;
1574
- }
1575
- const result = value.output();
1576
- return result == null ? attributes2 : { ...attributes2, [key]: result };
1615
+ if (maxRetries < 0) {
1616
+ throw new InvalidArgumentError({
1617
+ parameter: "maxRetries",
1618
+ value: maxRetries,
1619
+ message: "maxRetries must be >= 0"
1620
+ });
1577
1621
  }
1578
- return { ...attributes2, [key]: value };
1579
- }, {});
1580
- }
1581
-
1582
- // src/telemetry/stringify-for-telemetry.ts
1583
- function stringifyForTelemetry(prompt) {
1584
- return JSON.stringify(
1585
- prompt.map((message) => ({
1586
- ...message,
1587
- content: typeof message.content === "string" ? message.content : message.content.map(
1588
- (part) => part.type === "file" ? {
1589
- ...part,
1590
- data: part.data instanceof Uint8Array ? convertDataContentToBase64String(part.data) : part.data
1591
- } : part
1592
- )
1593
- }))
1594
- );
1595
- }
1596
-
1597
- // src/types/usage.ts
1598
- function addLanguageModelUsage(usage1, usage2) {
1622
+ }
1623
+ const maxRetriesResult = maxRetries != null ? maxRetries : 2;
1599
1624
  return {
1600
- inputTokens: addTokenCounts(usage1.inputTokens, usage2.inputTokens),
1601
- outputTokens: addTokenCounts(usage1.outputTokens, usage2.outputTokens),
1602
- totalTokens: addTokenCounts(usage1.totalTokens, usage2.totalTokens),
1603
- reasoningTokens: addTokenCounts(
1604
- usage1.reasoningTokens,
1605
- usage2.reasoningTokens
1606
- ),
1607
- cachedInputTokens: addTokenCounts(
1608
- usage1.cachedInputTokens,
1609
- usage2.cachedInputTokens
1610
- )
1625
+ maxRetries: maxRetriesResult,
1626
+ retry: retryWithExponentialBackoffRespectingRetryHeaders({
1627
+ maxRetries: maxRetriesResult,
1628
+ abortSignal
1629
+ })
1611
1630
  };
1612
1631
  }
1613
- function addTokenCounts(tokenCount1, tokenCount2) {
1614
- return tokenCount1 == null && tokenCount2 == null ? void 0 : (tokenCount1 != null ? tokenCount1 : 0) + (tokenCount2 != null ? tokenCount2 : 0);
1615
- }
1616
1632
 
1617
1633
  // src/generate-text/extract-content-text.ts
1618
1634
  function extractContentText(content) {
@@ -3823,12 +3839,6 @@ var DelayedPromise = class {
3823
3839
  }
3824
3840
  };
3825
3841
 
3826
- // src/util/now.ts
3827
- function now() {
3828
- var _a16, _b;
3829
- return (_b = (_a16 = globalThis == null ? void 0 : globalThis.performance) == null ? void 0 : _a16.now()) != null ? _b : Date.now();
3830
- }
3831
-
3832
3842
  // src/util/filter-stream-errors.ts
3833
3843
  function filterStreamErrors(readable, onError) {
3834
3844
  return new ReadableStream({
@@ -3853,6 +3863,12 @@ function filterStreamErrors(readable, onError) {
3853
3863
  });
3854
3864
  }
3855
3865
 
3866
+ // src/util/now.ts
3867
+ function now() {
3868
+ var _a16, _b;
3869
+ return (_b = (_a16 = globalThis == null ? void 0 : globalThis.performance) == null ? void 0 : _a16.now()) != null ? _b : Date.now();
3870
+ }
3871
+
3856
3872
  // src/generate-text/run-tools-transformation.ts
3857
3873
  import { generateId } from "@ai-sdk/provider-utils";
3858
3874
  function runToolsTransformation({
@@ -5345,7 +5361,7 @@ var Agent = class {
5345
5361
 
5346
5362
  // src/embed/embed.ts
5347
5363
  async function embed({
5348
- model,
5364
+ model: modelArg,
5349
5365
  value,
5350
5366
  providerOptions,
5351
5367
  maxRetries: maxRetriesArg,
@@ -5353,13 +5369,7 @@ async function embed({
5353
5369
  headers,
5354
5370
  experimental_telemetry: telemetry
5355
5371
  }) {
5356
- if (model.specificationVersion !== "v2") {
5357
- throw new UnsupportedModelVersionError({
5358
- version: model.specificationVersion,
5359
- provider: model.provider,
5360
- modelId: model.modelId
5361
- });
5362
- }
5372
+ const model = resolveEmbeddingModel(modelArg);
5363
5373
  const { maxRetries, retry } = prepareRetries({
5364
5374
  maxRetries: maxRetriesArg,
5365
5375
  abortSignal
@@ -5477,7 +5487,7 @@ function splitArray(array, chunkSize) {
5477
5487
 
5478
5488
  // src/embed/embed-many.ts
5479
5489
  async function embedMany({
5480
- model,
5490
+ model: modelArg,
5481
5491
  values,
5482
5492
  maxParallelCalls = Infinity,
5483
5493
  maxRetries: maxRetriesArg,
@@ -5486,13 +5496,7 @@ async function embedMany({
5486
5496
  providerOptions,
5487
5497
  experimental_telemetry: telemetry
5488
5498
  }) {
5489
- if (model.specificationVersion !== "v2") {
5490
- throw new UnsupportedModelVersionError({
5491
- version: model.specificationVersion,
5492
- provider: model.provider,
5493
- modelId: model.modelId
5494
- });
5495
- }
5499
+ const model = resolveEmbeddingModel(modelArg);
5496
5500
  const { maxRetries, retry } = prepareRetries({
5497
5501
  maxRetries: maxRetriesArg,
5498
5502
  abortSignal
@@ -6094,6 +6098,63 @@ function getOutputStrategy({
6094
6098
  }
6095
6099
  }
6096
6100
 
6101
+ // src/generate-object/parse-and-validate-object-result.ts
6102
+ import { JSONParseError as JSONParseError2, TypeValidationError as TypeValidationError3 } from "@ai-sdk/provider";
6103
+ import { safeParseJSON as safeParseJSON3 } from "@ai-sdk/provider-utils";
6104
+ async function parseAndValidateObjectResult(result, outputStrategy, context) {
6105
+ const parseResult = await safeParseJSON3({ text: result });
6106
+ if (!parseResult.success) {
6107
+ throw new NoObjectGeneratedError({
6108
+ message: "No object generated: could not parse the response.",
6109
+ cause: parseResult.error,
6110
+ text: result,
6111
+ response: context.response,
6112
+ usage: context.usage,
6113
+ finishReason: context.finishReason
6114
+ });
6115
+ }
6116
+ const validationResult = await outputStrategy.validateFinalResult(
6117
+ parseResult.value,
6118
+ {
6119
+ text: result,
6120
+ response: context.response,
6121
+ usage: context.usage
6122
+ }
6123
+ );
6124
+ if (!validationResult.success) {
6125
+ throw new NoObjectGeneratedError({
6126
+ message: "No object generated: response did not match schema.",
6127
+ cause: validationResult.error,
6128
+ text: result,
6129
+ response: context.response,
6130
+ usage: context.usage,
6131
+ finishReason: context.finishReason
6132
+ });
6133
+ }
6134
+ return validationResult.value;
6135
+ }
6136
+ async function parseAndValidateObjectResultWithRepair(result, outputStrategy, repairText, context) {
6137
+ try {
6138
+ return await parseAndValidateObjectResult(result, outputStrategy, context);
6139
+ } catch (error) {
6140
+ if (repairText != null && NoObjectGeneratedError.isInstance(error) && (JSONParseError2.isInstance(error.cause) || TypeValidationError3.isInstance(error.cause))) {
6141
+ const repairedText = await repairText({
6142
+ text: result,
6143
+ error: error.cause
6144
+ });
6145
+ if (repairedText === null) {
6146
+ throw error;
6147
+ }
6148
+ return await parseAndValidateObjectResult(
6149
+ repairedText,
6150
+ outputStrategy,
6151
+ context
6152
+ );
6153
+ }
6154
+ throw error;
6155
+ }
6156
+ }
6157
+
6097
6158
  // src/generate-object/validate-object-generation-input.ts
6098
6159
  function validateObjectGenerationInput({
6099
6160
  output,
@@ -6212,63 +6273,6 @@ function validateObjectGenerationInput({
6212
6273
  }
6213
6274
  }
6214
6275
 
6215
- // src/generate-object/parse-and-validate-object-result.ts
6216
- import { JSONParseError as JSONParseError2, TypeValidationError as TypeValidationError3 } from "@ai-sdk/provider";
6217
- import { safeParseJSON as safeParseJSON3 } from "@ai-sdk/provider-utils";
6218
- async function parseAndValidateObjectResult(result, outputStrategy, context) {
6219
- const parseResult = await safeParseJSON3({ text: result });
6220
- if (!parseResult.success) {
6221
- throw new NoObjectGeneratedError({
6222
- message: "No object generated: could not parse the response.",
6223
- cause: parseResult.error,
6224
- text: result,
6225
- response: context.response,
6226
- usage: context.usage,
6227
- finishReason: context.finishReason
6228
- });
6229
- }
6230
- const validationResult = await outputStrategy.validateFinalResult(
6231
- parseResult.value,
6232
- {
6233
- text: result,
6234
- response: context.response,
6235
- usage: context.usage
6236
- }
6237
- );
6238
- if (!validationResult.success) {
6239
- throw new NoObjectGeneratedError({
6240
- message: "No object generated: response did not match schema.",
6241
- cause: validationResult.error,
6242
- text: result,
6243
- response: context.response,
6244
- usage: context.usage,
6245
- finishReason: context.finishReason
6246
- });
6247
- }
6248
- return validationResult.value;
6249
- }
6250
- async function parseAndValidateObjectResultWithRepair(result, outputStrategy, repairText, context) {
6251
- try {
6252
- return await parseAndValidateObjectResult(result, outputStrategy, context);
6253
- } catch (error) {
6254
- if (repairText != null && NoObjectGeneratedError.isInstance(error) && (JSONParseError2.isInstance(error.cause) || TypeValidationError3.isInstance(error.cause))) {
6255
- const repairedText = await repairText({
6256
- text: result,
6257
- error: error.cause
6258
- });
6259
- if (repairedText === null) {
6260
- throw error;
6261
- }
6262
- return await parseAndValidateObjectResult(
6263
- repairedText,
6264
- outputStrategy,
6265
- context
6266
- );
6267
- }
6268
- throw error;
6269
- }
6270
- }
6271
-
6272
6276
  // src/generate-object/generate-object.ts
6273
6277
  var originalGenerateId3 = createIdGenerator3({ prefix: "aiobj", size: 24 });
6274
6278
  async function generateObject(options) {
@@ -7275,7 +7279,7 @@ __export(output_exports, {
7275
7279
  });
7276
7280
  import {
7277
7281
  asSchema as asSchema4,
7278
- safeParseJSON as safeParseJSON5,
7282
+ safeParseJSON as safeParseJSON4,
7279
7283
  safeValidateTypes as safeValidateTypes4
7280
7284
  } from "@ai-sdk/provider-utils";
7281
7285
  var text = () => ({
@@ -7317,7 +7321,7 @@ var object = ({
7317
7321
  }
7318
7322
  },
7319
7323
  async parseOutput({ text: text2 }, context) {
7320
- const parseResult = await safeParseJSON5({ text: text2 });
7324
+ const parseResult = await safeParseJSON4({ text: text2 });
7321
7325
  if (!parseResult.success) {
7322
7326
  throw new NoObjectGeneratedError({
7323
7327
  message: "No object generated: could not parse the response.",
@@ -9579,8 +9583,8 @@ function readUIMessageStream({
9579
9583
  return createAsyncIterableStream(outputStream);
9580
9584
  }
9581
9585
  export {
9582
- AISDKError17 as AISDKError,
9583
- APICallError2 as APICallError,
9586
+ AISDKError16 as AISDKError,
9587
+ APICallError,
9584
9588
  AbstractChat,
9585
9589
  DefaultChatTransport,
9586
9590
  DownloadError,