ai 6.0.201 → 6.0.203

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.
Files changed (34) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/dist/index.d.mts +61 -15
  3. package/dist/index.d.ts +61 -15
  4. package/dist/index.js +853 -592
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +695 -430
  7. package/dist/index.mjs.map +1 -1
  8. package/dist/internal/index.js +10 -12
  9. package/dist/internal/index.js.map +1 -1
  10. package/dist/internal/index.mjs +11 -13
  11. package/dist/internal/index.mjs.map +1 -1
  12. package/docs/03-ai-sdk-core/16-mcp-tools.mdx +32 -0
  13. package/docs/04-ai-sdk-ui/03-chatbot-message-persistence.mdx +20 -2
  14. package/docs/07-reference/01-ai-sdk-core/23-create-mcp-client.mdx +1 -1
  15. package/docs/07-reference/05-ai-sdk-errors/ai-invalid-tool-approval-signature-error.mdx +31 -0
  16. package/package.json +3 -3
  17. package/src/error/index.ts +1 -0
  18. package/src/error/invalid-tool-approval-signature-error.ts +35 -0
  19. package/src/generate-text/generate-text.ts +48 -6
  20. package/src/generate-text/run-tools-transformation.ts +14 -1
  21. package/src/generate-text/stream-text.ts +47 -11
  22. package/src/generate-text/to-response-messages.ts +1 -0
  23. package/src/generate-text/tool-approval-request-output.ts +5 -0
  24. package/src/generate-text/tool-approval-signature.ts +125 -0
  25. package/src/generate-text/validate-tool-approvals.ts +124 -0
  26. package/src/middleware/extract-json-middleware.ts +2 -1
  27. package/src/middleware/extract-reasoning-middleware.ts +2 -1
  28. package/src/ui/convert-to-model-messages.ts +3 -0
  29. package/src/ui/process-ui-message-stream.ts +6 -1
  30. package/src/ui/ui-messages.ts +10 -0
  31. package/src/ui/validate-ui-messages.ts +10 -0
  32. package/src/ui-message-stream/create-ui-message-stream.ts +2 -3
  33. package/src/ui-message-stream/ui-message-chunks.ts +2 -0
  34. package/src/util/download/download.ts +11 -14
package/dist/index.mjs CHANGED
@@ -1,13 +1,13 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __export = (target, all) => {
3
- for (var name21 in all)
4
- __defProp(target, name21, { get: all[name21], enumerable: true });
3
+ for (var name22 in all)
4
+ __defProp(target, name22, { get: all[name22], enumerable: true });
5
5
  };
6
6
 
7
7
  // src/index.ts
8
8
  import { createGateway, gateway as gateway2 } from "@ai-sdk/gateway";
9
9
  import {
10
- asSchema as asSchema5,
10
+ asSchema as asSchema6,
11
11
  createIdGenerator as createIdGenerator5,
12
12
  dynamicTool,
13
13
  generateId,
@@ -29,7 +29,7 @@ import {
29
29
 
30
30
  // src/error/index.ts
31
31
  import {
32
- AISDKError as AISDKError21,
32
+ AISDKError as AISDKError22,
33
33
  APICallError,
34
34
  EmptyResponseBodyError,
35
35
  InvalidPromptError,
@@ -112,23 +112,25 @@ var InvalidToolApprovalError = class extends AISDKError3 {
112
112
  };
113
113
  _a3 = symbol3;
114
114
 
115
- // src/error/invalid-tool-input-error.ts
116
- import { AISDKError as AISDKError4, getErrorMessage } from "@ai-sdk/provider";
117
- var name4 = "AI_InvalidToolInputError";
115
+ // src/error/invalid-tool-approval-signature-error.ts
116
+ import { AISDKError as AISDKError4 } from "@ai-sdk/provider";
117
+ var name4 = "AI_InvalidToolApprovalSignatureError";
118
118
  var marker4 = `vercel.ai.error.${name4}`;
119
119
  var symbol4 = Symbol.for(marker4);
120
120
  var _a4;
121
- var InvalidToolInputError = class extends AISDKError4 {
121
+ var InvalidToolApprovalSignatureError = class extends AISDKError4 {
122
122
  constructor({
123
- toolInput,
124
- toolName,
125
- cause,
126
- message = `Invalid input for tool ${toolName}: ${getErrorMessage(cause)}`
123
+ approvalId,
124
+ toolCallId,
125
+ reason
127
126
  }) {
128
- super({ name: name4, message, cause });
127
+ super({
128
+ name: name4,
129
+ message: `Tool approval signature verification failed for approval "${approvalId}" (tool call "${toolCallId}"): ${reason}`
130
+ });
129
131
  this[_a4] = true;
130
- this.toolInput = toolInput;
131
- this.toolName = toolName;
132
+ this.approvalId = approvalId;
133
+ this.toolCallId = toolCallId;
132
134
  }
133
135
  static isInstance(error) {
134
136
  return AISDKError4.hasMarker(error, marker4);
@@ -136,24 +138,23 @@ var InvalidToolInputError = class extends AISDKError4 {
136
138
  };
137
139
  _a4 = symbol4;
138
140
 
139
- // src/error/tool-call-not-found-for-approval-error.ts
140
- import { AISDKError as AISDKError5 } from "@ai-sdk/provider";
141
- var name5 = "AI_ToolCallNotFoundForApprovalError";
141
+ // src/error/invalid-tool-input-error.ts
142
+ import { AISDKError as AISDKError5, getErrorMessage } from "@ai-sdk/provider";
143
+ var name5 = "AI_InvalidToolInputError";
142
144
  var marker5 = `vercel.ai.error.${name5}`;
143
145
  var symbol5 = Symbol.for(marker5);
144
146
  var _a5;
145
- var ToolCallNotFoundForApprovalError = class extends AISDKError5 {
147
+ var InvalidToolInputError = class extends AISDKError5 {
146
148
  constructor({
147
- toolCallId,
148
- approvalId
149
+ toolInput,
150
+ toolName,
151
+ cause,
152
+ message = `Invalid input for tool ${toolName}: ${getErrorMessage(cause)}`
149
153
  }) {
150
- super({
151
- name: name5,
152
- message: `Tool call "${toolCallId}" not found for approval request "${approvalId}".`
153
- });
154
+ super({ name: name5, message, cause });
154
155
  this[_a5] = true;
155
- this.toolCallId = toolCallId;
156
- this.approvalId = approvalId;
156
+ this.toolInput = toolInput;
157
+ this.toolName = toolName;
157
158
  }
158
159
  static isInstance(error) {
159
160
  return AISDKError5.hasMarker(error, marker5);
@@ -161,22 +162,24 @@ var ToolCallNotFoundForApprovalError = class extends AISDKError5 {
161
162
  };
162
163
  _a5 = symbol5;
163
164
 
164
- // src/error/missing-tool-result-error.ts
165
+ // src/error/tool-call-not-found-for-approval-error.ts
165
166
  import { AISDKError as AISDKError6 } from "@ai-sdk/provider";
166
- var name6 = "AI_MissingToolResultsError";
167
+ var name6 = "AI_ToolCallNotFoundForApprovalError";
167
168
  var marker6 = `vercel.ai.error.${name6}`;
168
169
  var symbol6 = Symbol.for(marker6);
169
170
  var _a6;
170
- var MissingToolResultsError = class extends AISDKError6 {
171
- constructor({ toolCallIds }) {
171
+ var ToolCallNotFoundForApprovalError = class extends AISDKError6 {
172
+ constructor({
173
+ toolCallId,
174
+ approvalId
175
+ }) {
172
176
  super({
173
177
  name: name6,
174
- message: `Tool result${toolCallIds.length > 1 ? "s are" : " is"} missing for tool call${toolCallIds.length > 1 ? "s" : ""} ${toolCallIds.join(
175
- ", "
176
- )}.`
178
+ message: `Tool call "${toolCallId}" not found for approval request "${approvalId}".`
177
179
  });
178
180
  this[_a6] = true;
179
- this.toolCallIds = toolCallIds;
181
+ this.toolCallId = toolCallId;
182
+ this.approvalId = approvalId;
180
183
  }
181
184
  static isInstance(error) {
182
185
  return AISDKError6.hasMarker(error, marker6);
@@ -184,21 +187,22 @@ var MissingToolResultsError = class extends AISDKError6 {
184
187
  };
185
188
  _a6 = symbol6;
186
189
 
187
- // src/error/no-image-generated-error.ts
190
+ // src/error/missing-tool-result-error.ts
188
191
  import { AISDKError as AISDKError7 } from "@ai-sdk/provider";
189
- var name7 = "AI_NoImageGeneratedError";
192
+ var name7 = "AI_MissingToolResultsError";
190
193
  var marker7 = `vercel.ai.error.${name7}`;
191
194
  var symbol7 = Symbol.for(marker7);
192
195
  var _a7;
193
- var NoImageGeneratedError = class extends AISDKError7 {
194
- constructor({
195
- message = "No image generated.",
196
- cause,
197
- responses
198
- }) {
199
- super({ name: name7, message, cause });
196
+ var MissingToolResultsError = class extends AISDKError7 {
197
+ constructor({ toolCallIds }) {
198
+ super({
199
+ name: name7,
200
+ message: `Tool result${toolCallIds.length > 1 ? "s are" : " is"} missing for tool call${toolCallIds.length > 1 ? "s" : ""} ${toolCallIds.join(
201
+ ", "
202
+ )}.`
203
+ });
200
204
  this[_a7] = true;
201
- this.responses = responses;
205
+ this.toolCallIds = toolCallIds;
202
206
  }
203
207
  static isInstance(error) {
204
208
  return AISDKError7.hasMarker(error, marker7);
@@ -206,27 +210,21 @@ var NoImageGeneratedError = class extends AISDKError7 {
206
210
  };
207
211
  _a7 = symbol7;
208
212
 
209
- // src/error/no-object-generated-error.ts
213
+ // src/error/no-image-generated-error.ts
210
214
  import { AISDKError as AISDKError8 } from "@ai-sdk/provider";
211
- var name8 = "AI_NoObjectGeneratedError";
215
+ var name8 = "AI_NoImageGeneratedError";
212
216
  var marker8 = `vercel.ai.error.${name8}`;
213
217
  var symbol8 = Symbol.for(marker8);
214
218
  var _a8;
215
- var NoObjectGeneratedError = class extends AISDKError8 {
219
+ var NoImageGeneratedError = class extends AISDKError8 {
216
220
  constructor({
217
- message = "No object generated.",
221
+ message = "No image generated.",
218
222
  cause,
219
- text: text2,
220
- response,
221
- usage,
222
- finishReason
223
+ responses
223
224
  }) {
224
225
  super({ name: name8, message, cause });
225
226
  this[_a8] = true;
226
- this.text = text2;
227
- this.response = response;
228
- this.usage = usage;
229
- this.finishReason = finishReason;
227
+ this.responses = responses;
230
228
  }
231
229
  static isInstance(error) {
232
230
  return AISDKError8.hasMarker(error, marker8);
@@ -234,20 +232,27 @@ var NoObjectGeneratedError = class extends AISDKError8 {
234
232
  };
235
233
  _a8 = symbol8;
236
234
 
237
- // src/error/no-output-generated-error.ts
235
+ // src/error/no-object-generated-error.ts
238
236
  import { AISDKError as AISDKError9 } from "@ai-sdk/provider";
239
- var name9 = "AI_NoOutputGeneratedError";
237
+ var name9 = "AI_NoObjectGeneratedError";
240
238
  var marker9 = `vercel.ai.error.${name9}`;
241
239
  var symbol9 = Symbol.for(marker9);
242
240
  var _a9;
243
- var NoOutputGeneratedError = class extends AISDKError9 {
244
- // used in isInstance
241
+ var NoObjectGeneratedError = class extends AISDKError9 {
245
242
  constructor({
246
- message = "No output generated.",
247
- cause
248
- } = {}) {
243
+ message = "No object generated.",
244
+ cause,
245
+ text: text2,
246
+ response,
247
+ usage,
248
+ finishReason
249
+ }) {
249
250
  super({ name: name9, message, cause });
250
251
  this[_a9] = true;
252
+ this.text = text2;
253
+ this.response = response;
254
+ this.usage = usage;
255
+ this.finishReason = finishReason;
251
256
  }
252
257
  static isInstance(error) {
253
258
  return AISDKError9.hasMarker(error, marker9);
@@ -255,20 +260,20 @@ var NoOutputGeneratedError = class extends AISDKError9 {
255
260
  };
256
261
  _a9 = symbol9;
257
262
 
258
- // src/error/no-speech-generated-error.ts
263
+ // src/error/no-output-generated-error.ts
259
264
  import { AISDKError as AISDKError10 } from "@ai-sdk/provider";
260
- var name10 = "AI_NoSpeechGeneratedError";
265
+ var name10 = "AI_NoOutputGeneratedError";
261
266
  var marker10 = `vercel.ai.error.${name10}`;
262
267
  var symbol10 = Symbol.for(marker10);
263
268
  var _a10;
264
- var NoSpeechGeneratedError = class extends AISDKError10 {
265
- constructor(options) {
266
- super({
267
- name: name10,
268
- message: "No speech audio generated."
269
- });
269
+ var NoOutputGeneratedError = class extends AISDKError10 {
270
+ // used in isInstance
271
+ constructor({
272
+ message = "No output generated.",
273
+ cause
274
+ } = {}) {
275
+ super({ name: name10, message, cause });
270
276
  this[_a10] = true;
271
- this.responses = options.responses;
272
277
  }
273
278
  static isInstance(error) {
274
279
  return AISDKError10.hasMarker(error, marker10);
@@ -276,17 +281,17 @@ var NoSpeechGeneratedError = class extends AISDKError10 {
276
281
  };
277
282
  _a10 = symbol10;
278
283
 
279
- // src/error/no-transcript-generated-error.ts
284
+ // src/error/no-speech-generated-error.ts
280
285
  import { AISDKError as AISDKError11 } from "@ai-sdk/provider";
281
- var name11 = "AI_NoTranscriptGeneratedError";
286
+ var name11 = "AI_NoSpeechGeneratedError";
282
287
  var marker11 = `vercel.ai.error.${name11}`;
283
288
  var symbol11 = Symbol.for(marker11);
284
289
  var _a11;
285
- var NoTranscriptGeneratedError = class extends AISDKError11 {
290
+ var NoSpeechGeneratedError = class extends AISDKError11 {
286
291
  constructor(options) {
287
292
  super({
288
293
  name: name11,
289
- message: "No transcript generated."
294
+ message: "No speech audio generated."
290
295
  });
291
296
  this[_a11] = true;
292
297
  this.responses = options.responses;
@@ -297,30 +302,51 @@ var NoTranscriptGeneratedError = class extends AISDKError11 {
297
302
  };
298
303
  _a11 = symbol11;
299
304
 
300
- // src/error/no-video-generated-error.ts
305
+ // src/error/no-transcript-generated-error.ts
301
306
  import { AISDKError as AISDKError12 } from "@ai-sdk/provider";
302
- var name12 = "AI_NoVideoGeneratedError";
307
+ var name12 = "AI_NoTranscriptGeneratedError";
303
308
  var marker12 = `vercel.ai.error.${name12}`;
304
309
  var symbol12 = Symbol.for(marker12);
305
310
  var _a12;
306
- var NoVideoGeneratedError = class extends AISDKError12 {
311
+ var NoTranscriptGeneratedError = class extends AISDKError12 {
312
+ constructor(options) {
313
+ super({
314
+ name: name12,
315
+ message: "No transcript generated."
316
+ });
317
+ this[_a12] = true;
318
+ this.responses = options.responses;
319
+ }
320
+ static isInstance(error) {
321
+ return AISDKError12.hasMarker(error, marker12);
322
+ }
323
+ };
324
+ _a12 = symbol12;
325
+
326
+ // src/error/no-video-generated-error.ts
327
+ import { AISDKError as AISDKError13 } from "@ai-sdk/provider";
328
+ var name13 = "AI_NoVideoGeneratedError";
329
+ var marker13 = `vercel.ai.error.${name13}`;
330
+ var symbol13 = Symbol.for(marker13);
331
+ var _a13;
332
+ var NoVideoGeneratedError = class extends AISDKError13 {
307
333
  constructor({
308
334
  message = "No video generated.",
309
335
  cause,
310
336
  responses
311
337
  }) {
312
- super({ name: name12, message, cause });
313
- this[_a12] = true;
338
+ super({ name: name13, message, cause });
339
+ this[_a13] = true;
314
340
  this.responses = responses;
315
341
  }
316
342
  static isInstance(error) {
317
- return AISDKError12.hasMarker(error, marker12);
343
+ return AISDKError13.hasMarker(error, marker13);
318
344
  }
319
345
  /**
320
346
  * @deprecated use `isInstance` instead
321
347
  */
322
348
  static isNoVideoGeneratedError(error) {
323
- return error instanceof Error && error.name === name12 && typeof error.responses !== "undefined" ? true : false;
349
+ return error instanceof Error && error.name === name13 && typeof error.responses !== "undefined" ? true : false;
324
350
  }
325
351
  /**
326
352
  * @deprecated Do not use this method. It will be removed in the next major version.
@@ -335,56 +361,56 @@ var NoVideoGeneratedError = class extends AISDKError12 {
335
361
  };
336
362
  }
337
363
  };
338
- _a12 = symbol12;
364
+ _a13 = symbol13;
339
365
 
340
366
  // src/error/no-such-tool-error.ts
341
- import { AISDKError as AISDKError13 } from "@ai-sdk/provider";
342
- var name13 = "AI_NoSuchToolError";
343
- var marker13 = `vercel.ai.error.${name13}`;
344
- var symbol13 = Symbol.for(marker13);
345
- var _a13;
346
- var NoSuchToolError = class extends AISDKError13 {
367
+ import { AISDKError as AISDKError14 } from "@ai-sdk/provider";
368
+ var name14 = "AI_NoSuchToolError";
369
+ var marker14 = `vercel.ai.error.${name14}`;
370
+ var symbol14 = Symbol.for(marker14);
371
+ var _a14;
372
+ var NoSuchToolError = class extends AISDKError14 {
347
373
  constructor({
348
374
  toolName,
349
375
  availableTools = void 0,
350
376
  message = `Model tried to call unavailable tool '${toolName}'. ${availableTools === void 0 ? "No tools are available." : `Available tools: ${availableTools.join(", ")}.`}`
351
377
  }) {
352
- super({ name: name13, message });
353
- this[_a13] = true;
378
+ super({ name: name14, message });
379
+ this[_a14] = true;
354
380
  this.toolName = toolName;
355
381
  this.availableTools = availableTools;
356
382
  }
357
383
  static isInstance(error) {
358
- return AISDKError13.hasMarker(error, marker13);
384
+ return AISDKError14.hasMarker(error, marker14);
359
385
  }
360
386
  };
361
- _a13 = symbol13;
387
+ _a14 = symbol14;
362
388
 
363
389
  // src/error/tool-call-repair-error.ts
364
- import { AISDKError as AISDKError14, getErrorMessage as getErrorMessage2 } from "@ai-sdk/provider";
365
- var name14 = "AI_ToolCallRepairError";
366
- var marker14 = `vercel.ai.error.${name14}`;
367
- var symbol14 = Symbol.for(marker14);
368
- var _a14;
369
- var ToolCallRepairError = class extends AISDKError14 {
390
+ import { AISDKError as AISDKError15, getErrorMessage as getErrorMessage2 } from "@ai-sdk/provider";
391
+ var name15 = "AI_ToolCallRepairError";
392
+ var marker15 = `vercel.ai.error.${name15}`;
393
+ var symbol15 = Symbol.for(marker15);
394
+ var _a15;
395
+ var ToolCallRepairError = class extends AISDKError15 {
370
396
  constructor({
371
397
  cause,
372
398
  originalError,
373
399
  message = `Error repairing tool call: ${getErrorMessage2(cause)}`
374
400
  }) {
375
- super({ name: name14, message, cause });
376
- this[_a14] = true;
401
+ super({ name: name15, message, cause });
402
+ this[_a15] = true;
377
403
  this.originalError = originalError;
378
404
  }
379
405
  static isInstance(error) {
380
- return AISDKError14.hasMarker(error, marker14);
406
+ return AISDKError15.hasMarker(error, marker15);
381
407
  }
382
408
  };
383
- _a14 = symbol14;
409
+ _a15 = symbol15;
384
410
 
385
411
  // src/error/unsupported-model-version-error.ts
386
- import { AISDKError as AISDKError15 } from "@ai-sdk/provider";
387
- var UnsupportedModelVersionError = class extends AISDKError15 {
412
+ import { AISDKError as AISDKError16 } from "@ai-sdk/provider";
413
+ var UnsupportedModelVersionError = class extends AISDKError16 {
388
414
  constructor(options) {
389
415
  super({
390
416
  name: "AI_UnsupportedModelVersionError",
@@ -397,118 +423,118 @@ var UnsupportedModelVersionError = class extends AISDKError15 {
397
423
  };
398
424
 
399
425
  // src/error/ui-message-stream-error.ts
400
- import { AISDKError as AISDKError16 } from "@ai-sdk/provider";
401
- var name15 = "AI_UIMessageStreamError";
402
- var marker15 = `vercel.ai.error.${name15}`;
403
- var symbol15 = Symbol.for(marker15);
404
- var _a15;
405
- var UIMessageStreamError = class extends AISDKError16 {
426
+ import { AISDKError as AISDKError17 } from "@ai-sdk/provider";
427
+ var name16 = "AI_UIMessageStreamError";
428
+ var marker16 = `vercel.ai.error.${name16}`;
429
+ var symbol16 = Symbol.for(marker16);
430
+ var _a16;
431
+ var UIMessageStreamError = class extends AISDKError17 {
406
432
  constructor({
407
433
  chunkType,
408
434
  chunkId,
409
435
  message
410
436
  }) {
411
- super({ name: name15, message });
412
- this[_a15] = true;
437
+ super({ name: name16, message });
438
+ this[_a16] = true;
413
439
  this.chunkType = chunkType;
414
440
  this.chunkId = chunkId;
415
441
  }
416
442
  static isInstance(error) {
417
- return AISDKError16.hasMarker(error, marker15);
443
+ return AISDKError17.hasMarker(error, marker16);
418
444
  }
419
445
  };
420
- _a15 = symbol15;
446
+ _a16 = symbol16;
421
447
 
422
448
  // src/prompt/invalid-data-content-error.ts
423
- import { AISDKError as AISDKError17 } from "@ai-sdk/provider";
424
- var name16 = "AI_InvalidDataContentError";
425
- var marker16 = `vercel.ai.error.${name16}`;
426
- var symbol16 = Symbol.for(marker16);
427
- var _a16;
428
- var InvalidDataContentError = class extends AISDKError17 {
449
+ import { AISDKError as AISDKError18 } from "@ai-sdk/provider";
450
+ var name17 = "AI_InvalidDataContentError";
451
+ var marker17 = `vercel.ai.error.${name17}`;
452
+ var symbol17 = Symbol.for(marker17);
453
+ var _a17;
454
+ var InvalidDataContentError = class extends AISDKError18 {
429
455
  constructor({
430
456
  content,
431
457
  cause,
432
458
  message = `Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`
433
459
  }) {
434
- super({ name: name16, message, cause });
435
- this[_a16] = true;
460
+ super({ name: name17, message, cause });
461
+ this[_a17] = true;
436
462
  this.content = content;
437
463
  }
438
464
  static isInstance(error) {
439
- return AISDKError17.hasMarker(error, marker16);
465
+ return AISDKError18.hasMarker(error, marker17);
440
466
  }
441
467
  };
442
- _a16 = symbol16;
468
+ _a17 = symbol17;
443
469
 
444
470
  // src/prompt/invalid-message-role-error.ts
445
- import { AISDKError as AISDKError18 } from "@ai-sdk/provider";
446
- var name17 = "AI_InvalidMessageRoleError";
447
- var marker17 = `vercel.ai.error.${name17}`;
448
- var symbol17 = Symbol.for(marker17);
449
- var _a17;
450
- var InvalidMessageRoleError = class extends AISDKError18 {
471
+ import { AISDKError as AISDKError19 } from "@ai-sdk/provider";
472
+ var name18 = "AI_InvalidMessageRoleError";
473
+ var marker18 = `vercel.ai.error.${name18}`;
474
+ var symbol18 = Symbol.for(marker18);
475
+ var _a18;
476
+ var InvalidMessageRoleError = class extends AISDKError19 {
451
477
  constructor({
452
478
  role,
453
479
  message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
454
480
  }) {
455
- super({ name: name17, message });
456
- this[_a17] = true;
481
+ super({ name: name18, message });
482
+ this[_a18] = true;
457
483
  this.role = role;
458
484
  }
459
485
  static isInstance(error) {
460
- return AISDKError18.hasMarker(error, marker17);
486
+ return AISDKError19.hasMarker(error, marker18);
461
487
  }
462
488
  };
463
- _a17 = symbol17;
489
+ _a18 = symbol18;
464
490
 
465
491
  // src/prompt/message-conversion-error.ts
466
- import { AISDKError as AISDKError19 } from "@ai-sdk/provider";
467
- var name18 = "AI_MessageConversionError";
468
- var marker18 = `vercel.ai.error.${name18}`;
469
- var symbol18 = Symbol.for(marker18);
470
- var _a18;
471
- var MessageConversionError = class extends AISDKError19 {
492
+ import { AISDKError as AISDKError20 } from "@ai-sdk/provider";
493
+ var name19 = "AI_MessageConversionError";
494
+ var marker19 = `vercel.ai.error.${name19}`;
495
+ var symbol19 = Symbol.for(marker19);
496
+ var _a19;
497
+ var MessageConversionError = class extends AISDKError20 {
472
498
  constructor({
473
499
  originalMessage,
474
500
  message
475
501
  }) {
476
- super({ name: name18, message });
477
- this[_a18] = true;
502
+ super({ name: name19, message });
503
+ this[_a19] = true;
478
504
  this.originalMessage = originalMessage;
479
505
  }
480
506
  static isInstance(error) {
481
- return AISDKError19.hasMarker(error, marker18);
507
+ return AISDKError20.hasMarker(error, marker19);
482
508
  }
483
509
  };
484
- _a18 = symbol18;
510
+ _a19 = symbol19;
485
511
 
486
512
  // src/error/index.ts
487
513
  import { DownloadError } from "@ai-sdk/provider-utils";
488
514
 
489
515
  // src/util/retry-error.ts
490
- import { AISDKError as AISDKError20 } from "@ai-sdk/provider";
491
- var name19 = "AI_RetryError";
492
- var marker19 = `vercel.ai.error.${name19}`;
493
- var symbol19 = Symbol.for(marker19);
494
- var _a19;
495
- var RetryError = class extends AISDKError20 {
516
+ import { AISDKError as AISDKError21 } from "@ai-sdk/provider";
517
+ var name20 = "AI_RetryError";
518
+ var marker20 = `vercel.ai.error.${name20}`;
519
+ var symbol20 = Symbol.for(marker20);
520
+ var _a20;
521
+ var RetryError = class extends AISDKError21 {
496
522
  constructor({
497
523
  message,
498
524
  reason,
499
525
  errors
500
526
  }) {
501
- super({ name: name19, message });
502
- this[_a19] = true;
527
+ super({ name: name20, message });
528
+ this[_a20] = true;
503
529
  this.reason = reason;
504
530
  this.errors = errors;
505
531
  this.lastError = errors[errors.length - 1];
506
532
  }
507
533
  static isInstance(error) {
508
- return AISDKError20.hasMarker(error, marker19);
534
+ return AISDKError21.hasMarker(error, marker20);
509
535
  }
510
536
  };
511
- _a19 = symbol19;
537
+ _a20 = symbol20;
512
538
 
513
539
  // src/util/as-array.ts
514
540
  function asArray(value) {
@@ -788,7 +814,7 @@ function resolveEmbeddingModel(model) {
788
814
  return getGlobalProvider().embeddingModel(model);
789
815
  }
790
816
  function resolveTranscriptionModel(model) {
791
- var _a21, _b;
817
+ var _a22, _b;
792
818
  if (typeof model !== "string") {
793
819
  if (model.specificationVersion !== "v3" && model.specificationVersion !== "v2") {
794
820
  const unsupportedModel = model;
@@ -800,10 +826,10 @@ function resolveTranscriptionModel(model) {
800
826
  }
801
827
  return asTranscriptionModelV3(model);
802
828
  }
803
- return (_b = (_a21 = getGlobalProvider()).transcriptionModel) == null ? void 0 : _b.call(_a21, model);
829
+ return (_b = (_a22 = getGlobalProvider()).transcriptionModel) == null ? void 0 : _b.call(_a22, model);
804
830
  }
805
831
  function resolveSpeechModel(model) {
806
- var _a21, _b;
832
+ var _a22, _b;
807
833
  if (typeof model !== "string") {
808
834
  if (model.specificationVersion !== "v3" && model.specificationVersion !== "v2") {
809
835
  const unsupportedModel = model;
@@ -815,7 +841,7 @@ function resolveSpeechModel(model) {
815
841
  }
816
842
  return asSpeechModelV3(model);
817
843
  }
818
- return (_b = (_a21 = getGlobalProvider()).speechModel) == null ? void 0 : _b.call(_a21, model);
844
+ return (_b = (_a22 = getGlobalProvider()).speechModel) == null ? void 0 : _b.call(_a22, model);
819
845
  }
820
846
  function resolveImageModel(model) {
821
847
  if (typeof model !== "string") {
@@ -874,8 +900,8 @@ function resolveRerankingModel(model) {
874
900
  return model;
875
901
  }
876
902
  function getGlobalProvider() {
877
- var _a21;
878
- return (_a21 = globalThis.AI_SDK_DEFAULT_PROVIDER) != null ? _a21 : gateway;
903
+ var _a22;
904
+ return (_a22 = globalThis.AI_SDK_DEFAULT_PROVIDER) != null ? _a22 : gateway;
879
905
  }
880
906
 
881
907
  // src/prompt/call-settings.ts
@@ -1138,13 +1164,13 @@ import {
1138
1164
  DownloadError as DownloadError2,
1139
1165
  readResponseWithSizeLimit,
1140
1166
  DEFAULT_MAX_DOWNLOAD_SIZE,
1141
- validateDownloadUrl,
1167
+ fetchWithValidatedRedirects,
1142
1168
  withUserAgentSuffix,
1143
1169
  getRuntimeEnvironmentUserAgent
1144
1170
  } from "@ai-sdk/provider-utils";
1145
1171
 
1146
1172
  // src/version.ts
1147
- var VERSION = true ? "6.0.201" : "0.0.0-test";
1173
+ var VERSION = true ? "6.0.203" : "0.0.0-test";
1148
1174
 
1149
1175
  // src/util/download/download.ts
1150
1176
  var download = async ({
@@ -1152,21 +1178,19 @@ var download = async ({
1152
1178
  maxBytes,
1153
1179
  abortSignal
1154
1180
  }) => {
1155
- var _a21;
1181
+ var _a22;
1156
1182
  const urlText = url.toString();
1157
- validateDownloadUrl(urlText);
1158
1183
  try {
1159
- const response = await fetch(urlText, {
1160
- headers: withUserAgentSuffix(
1161
- {},
1162
- `ai-sdk/${VERSION}`,
1163
- getRuntimeEnvironmentUserAgent()
1164
- ),
1165
- signal: abortSignal
1184
+ const headers = withUserAgentSuffix(
1185
+ {},
1186
+ `ai-sdk/${VERSION}`,
1187
+ getRuntimeEnvironmentUserAgent()
1188
+ );
1189
+ const response = await fetchWithValidatedRedirects({
1190
+ url: urlText,
1191
+ headers,
1192
+ abortSignal
1166
1193
  });
1167
- if (response.redirected) {
1168
- validateDownloadUrl(response.url);
1169
- }
1170
1194
  if (!response.ok) {
1171
1195
  throw new DownloadError2({
1172
1196
  url: urlText,
@@ -1181,7 +1205,7 @@ var download = async ({
1181
1205
  });
1182
1206
  return {
1183
1207
  data,
1184
- mediaType: (_a21 = response.headers.get("content-type")) != null ? _a21 : void 0
1208
+ mediaType: (_a22 = response.headers.get("content-type")) != null ? _a22 : void 0
1185
1209
  };
1186
1210
  } catch (error) {
1187
1211
  if (DownloadError2.isInstance(error)) {
@@ -1199,7 +1223,7 @@ var createDefaultDownloadFunction = (download2 = download) => (requestedDownload
1199
1223
  );
1200
1224
 
1201
1225
  // src/prompt/data-content.ts
1202
- import { AISDKError as AISDKError22 } from "@ai-sdk/provider";
1226
+ import { AISDKError as AISDKError23 } from "@ai-sdk/provider";
1203
1227
  import {
1204
1228
  convertBase64ToUint8Array as convertBase64ToUint8Array2,
1205
1229
  convertUint8ArrayToBase64
@@ -1230,8 +1254,8 @@ var dataContentSchema = z.union([
1230
1254
  z.custom(
1231
1255
  // Buffer might not be available in some environments such as CloudFlare:
1232
1256
  (value) => {
1233
- var _a21, _b;
1234
- return (_b = (_a21 = globalThis.Buffer) == null ? void 0 : _a21.isBuffer(value)) != null ? _b : false;
1257
+ var _a22, _b;
1258
+ return (_b = (_a22 = globalThis.Buffer) == null ? void 0 : _a22.isBuffer(value)) != null ? _b : false;
1235
1259
  },
1236
1260
  { message: "Must be a Buffer" }
1237
1261
  )
@@ -1254,7 +1278,7 @@ function convertToLanguageModelV3DataContent(content) {
1254
1278
  content.toString()
1255
1279
  );
1256
1280
  if (dataUrlMediaType == null || base64Content == null) {
1257
- throw new AISDKError22({
1281
+ throw new AISDKError23({
1258
1282
  name: "InvalidDataContentError",
1259
1283
  message: `Invalid data URL format in content ${content.toString()}`
1260
1284
  });
@@ -1537,7 +1561,7 @@ function convertToLanguageModelMessage({
1537
1561
  }
1538
1562
  }
1539
1563
  async function downloadAssets(messages, download2, supportedUrls) {
1540
- var _a21;
1564
+ var _a22;
1541
1565
  const downloadableFiles = [];
1542
1566
  for (const message of messages) {
1543
1567
  if (message.role === "user" && Array.isArray(message.content)) {
@@ -1545,7 +1569,7 @@ async function downloadAssets(messages, download2, supportedUrls) {
1545
1569
  if (part.type === "image" || part.type === "file") {
1546
1570
  downloadableFiles.push({
1547
1571
  data: part.type === "image" ? part.image : part.data,
1548
- mediaType: (_a21 = part.mediaType) != null ? _a21 : part.type === "image" ? "image/*" : void 0
1572
+ mediaType: (_a22 = part.mediaType) != null ? _a22 : part.type === "image" ? "image/*" : void 0
1549
1573
  });
1550
1574
  }
1551
1575
  }
@@ -1597,7 +1621,7 @@ async function downloadAssets(messages, download2, supportedUrls) {
1597
1621
  );
1598
1622
  }
1599
1623
  function convertPartToLanguageModelPart(part, downloadedAssets) {
1600
- var _a21;
1624
+ var _a22;
1601
1625
  if (part.type === "text") {
1602
1626
  return {
1603
1627
  type: "text",
@@ -1630,7 +1654,7 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
1630
1654
  switch (type) {
1631
1655
  case "image": {
1632
1656
  if (data instanceof Uint8Array || typeof data === "string") {
1633
- mediaType = (_a21 = detectMediaType({ data, signatures: imageMediaTypeSignatures })) != null ? _a21 : mediaType;
1657
+ mediaType = (_a22 = detectMediaType({ data, signatures: imageMediaTypeSignatures })) != null ? _a22 : mediaType;
1634
1658
  }
1635
1659
  return {
1636
1660
  type: "file",
@@ -1665,14 +1689,14 @@ function mapToolResultOutput({
1665
1689
  return {
1666
1690
  type: "content",
1667
1691
  value: output.value.map((item) => {
1668
- var _a21, _b;
1692
+ var _a22, _b;
1669
1693
  if (item.type === "image-url") {
1670
1694
  const downloadedFile = downloadedAssets[new URL(item.url).toString()];
1671
1695
  if (downloadedFile) {
1672
1696
  return {
1673
1697
  type: "image-data",
1674
1698
  data: convertDataContentToBase64String(downloadedFile.data),
1675
- mediaType: (_a21 = downloadedFile.mediaType) != null ? _a21 : "image/*",
1699
+ mediaType: (_a22 = downloadedFile.mediaType) != null ? _a22 : "image/*",
1676
1700
  providerOptions: item.providerOptions
1677
1701
  };
1678
1702
  }
@@ -1846,10 +1870,10 @@ async function prepareToolsAndToolChoice({
1846
1870
  };
1847
1871
  }
1848
1872
  const filteredTools = activeTools != null ? Object.entries(tools).filter(
1849
- ([name21]) => activeTools.includes(name21)
1873
+ ([name22]) => activeTools.includes(name22)
1850
1874
  ) : Object.entries(tools);
1851
1875
  const languageModelTools = [];
1852
- for (const [name21, tool2] of filteredTools) {
1876
+ for (const [name22, tool2] of filteredTools) {
1853
1877
  const toolType = tool2.type;
1854
1878
  switch (toolType) {
1855
1879
  case void 0:
@@ -1857,7 +1881,7 @@ async function prepareToolsAndToolChoice({
1857
1881
  case "function":
1858
1882
  languageModelTools.push({
1859
1883
  type: "function",
1860
- name: name21,
1884
+ name: name22,
1861
1885
  description: tool2.description,
1862
1886
  inputSchema: await asSchema(tool2.inputSchema).jsonSchema,
1863
1887
  ...tool2.inputExamples != null ? { inputExamples: tool2.inputExamples } : {},
@@ -1868,7 +1892,7 @@ async function prepareToolsAndToolChoice({
1868
1892
  case "provider":
1869
1893
  languageModelTools.push({
1870
1894
  type: "provider",
1871
- name: name21,
1895
+ name: name22,
1872
1896
  id: tool2.id,
1873
1897
  args: tool2.args
1874
1898
  });
@@ -2168,14 +2192,14 @@ async function standardizePrompt({
2168
2192
 
2169
2193
  // src/prompt/wrap-gateway-error.ts
2170
2194
  import { GatewayAuthenticationError } from "@ai-sdk/gateway";
2171
- import { AISDKError as AISDKError23 } from "@ai-sdk/provider";
2195
+ import { AISDKError as AISDKError24 } from "@ai-sdk/provider";
2172
2196
  function wrapGatewayError(error) {
2173
2197
  if (!GatewayAuthenticationError.isInstance(error))
2174
2198
  return error;
2175
2199
  const isProductionEnv = (process == null ? void 0 : process.env.NODE_ENV) === "production";
2176
2200
  const moreInfoURL = "https://ai-sdk.dev/unauthenticated-ai-gateway";
2177
2201
  if (isProductionEnv) {
2178
- return new AISDKError23({
2202
+ return new AISDKError24({
2179
2203
  name: "GatewayError",
2180
2204
  message: `Unauthenticated. Configure AI_GATEWAY_API_KEY or use a provider module. Learn more: ${moreInfoURL}`
2181
2205
  });
@@ -2216,7 +2240,7 @@ function getBaseTelemetryAttributes({
2216
2240
  telemetry,
2217
2241
  headers
2218
2242
  }) {
2219
- var _a21;
2243
+ var _a22;
2220
2244
  return {
2221
2245
  "ai.model.provider": model.provider,
2222
2246
  "ai.model.id": model.modelId,
@@ -2235,7 +2259,7 @@ function getBaseTelemetryAttributes({
2235
2259
  return attributes;
2236
2260
  }, {}),
2237
2261
  // add metadata as attributes:
2238
- ...Object.entries((_a21 = telemetry == null ? void 0 : telemetry.metadata) != null ? _a21 : {}).reduce(
2262
+ ...Object.entries((_a22 = telemetry == null ? void 0 : telemetry.metadata) != null ? _a22 : {}).reduce(
2239
2263
  (attributes, [key, value]) => {
2240
2264
  attributes[`ai.telemetry.metadata.${key}`] = value;
2241
2265
  return attributes;
@@ -2260,7 +2284,7 @@ var noopTracer = {
2260
2284
  startSpan() {
2261
2285
  return noopSpan;
2262
2286
  },
2263
- startActiveSpan(name21, arg1, arg2, arg3) {
2287
+ startActiveSpan(name22, arg1, arg2, arg3) {
2264
2288
  if (typeof arg1 === "function") {
2265
2289
  return arg1(noopSpan);
2266
2290
  }
@@ -2333,14 +2357,14 @@ import {
2333
2357
  context
2334
2358
  } from "@opentelemetry/api";
2335
2359
  async function recordSpan({
2336
- name: name21,
2360
+ name: name22,
2337
2361
  tracer,
2338
2362
  attributes,
2339
2363
  fn,
2340
2364
  endWhenDone = true
2341
2365
  }) {
2342
2366
  return tracer.startActiveSpan(
2343
- name21,
2367
+ name22,
2344
2368
  { attributes: await attributes },
2345
2369
  async (span) => {
2346
2370
  const ctx = context.active();
@@ -2438,15 +2462,15 @@ function registerTelemetryIntegration(integration) {
2438
2462
  globalThis.AI_SDK_TELEMETRY_INTEGRATIONS.push(integration);
2439
2463
  }
2440
2464
  function getGlobalTelemetryIntegrations() {
2441
- var _a21;
2442
- return (_a21 = globalThis.AI_SDK_TELEMETRY_INTEGRATIONS) != null ? _a21 : [];
2465
+ var _a22;
2466
+ return (_a22 = globalThis.AI_SDK_TELEMETRY_INTEGRATIONS) != null ? _a22 : [];
2443
2467
  }
2444
2468
 
2445
2469
  // src/telemetry/get-global-telemetry-integration.ts
2446
2470
  function bindTelemetryIntegration(integration) {
2447
- var _a21, _b, _c, _d, _e, _f;
2471
+ var _a22, _b, _c, _d, _e, _f;
2448
2472
  return {
2449
- onStart: (_a21 = integration.onStart) == null ? void 0 : _a21.bind(integration),
2473
+ onStart: (_a22 = integration.onStart) == null ? void 0 : _a22.bind(integration),
2450
2474
  onStepStart: (_b = integration.onStepStart) == null ? void 0 : _b.bind(integration),
2451
2475
  onToolCallStart: (_c = integration.onToolCallStart) == null ? void 0 : _c.bind(integration),
2452
2476
  onToolCallFinish: (_d = integration.onToolCallFinish) == null ? void 0 : _d.bind(integration),
@@ -2530,12 +2554,12 @@ function createNullLanguageModelUsage() {
2530
2554
  };
2531
2555
  }
2532
2556
  function addLanguageModelUsage(usage1, usage2) {
2533
- var _a21, _b, _c, _d, _e, _f, _g, _h, _i, _j;
2557
+ var _a22, _b, _c, _d, _e, _f, _g, _h, _i, _j;
2534
2558
  return {
2535
2559
  inputTokens: addTokenCounts(usage1.inputTokens, usage2.inputTokens),
2536
2560
  inputTokenDetails: {
2537
2561
  noCacheTokens: addTokenCounts(
2538
- (_a21 = usage1.inputTokenDetails) == null ? void 0 : _a21.noCacheTokens,
2562
+ (_a22 = usage1.inputTokenDetails) == null ? void 0 : _a22.noCacheTokens,
2539
2563
  (_b = usage2.inputTokenDetails) == null ? void 0 : _b.noCacheTokens
2540
2564
  ),
2541
2565
  cacheReadTokens: addTokenCounts(
@@ -2826,8 +2850,8 @@ import { executeTool } from "@ai-sdk/provider-utils";
2826
2850
 
2827
2851
  // src/util/now.ts
2828
2852
  function now() {
2829
- var _a21, _b;
2830
- return (_b = (_a21 = globalThis == null ? void 0 : globalThis.performance) == null ? void 0 : _a21.now()) != null ? _b : Date.now();
2853
+ var _a22, _b;
2854
+ return (_b = (_a22 = globalThis == null ? void 0 : globalThis.performance) == null ? void 0 : _a22.now()) != null ? _b : Date.now();
2831
2855
  }
2832
2856
 
2833
2857
  // src/generate-text/execute-tool-call.ts
@@ -3040,6 +3064,176 @@ async function isApprovalNeeded({
3040
3064
  });
3041
3065
  }
3042
3066
 
3067
+ // src/generate-text/tool-approval-signature.ts
3068
+ import {
3069
+ convertBase64ToUint8Array as convertBase64ToUint8Array4,
3070
+ convertUint8ArrayToBase64 as convertUint8ArrayToBase643
3071
+ } from "@ai-sdk/provider-utils";
3072
+ var encoder = new TextEncoder();
3073
+ function canonicalJSON(value) {
3074
+ if (value === null || value === void 0) {
3075
+ return JSON.stringify(value);
3076
+ }
3077
+ if (typeof value !== "object") {
3078
+ return JSON.stringify(value);
3079
+ }
3080
+ if (Array.isArray(value)) {
3081
+ return `[${value.map(canonicalJSON).join(",")}]`;
3082
+ }
3083
+ const keys = Object.keys(value).sort();
3084
+ const entries = keys.map(
3085
+ (k) => `${JSON.stringify(k)}:${canonicalJSON(value[k])}`
3086
+ );
3087
+ return `{${entries.join(",")}}`;
3088
+ }
3089
+ function toBase64url(bytes) {
3090
+ return convertUint8ArrayToBase643(bytes).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
3091
+ }
3092
+ function fromBase64url(str) {
3093
+ return convertBase64ToUint8Array4(str);
3094
+ }
3095
+ async function importKey(secret) {
3096
+ const keyData = typeof secret === "string" ? encoder.encode(secret) : secret;
3097
+ return crypto.subtle.importKey(
3098
+ "raw",
3099
+ keyData,
3100
+ { name: "HMAC", hash: "SHA-256" },
3101
+ false,
3102
+ ["sign", "verify"]
3103
+ );
3104
+ }
3105
+ async function hashInput(input) {
3106
+ const canonical = canonicalJSON(input);
3107
+ const digest = await crypto.subtle.digest(
3108
+ "SHA-256",
3109
+ encoder.encode(canonical)
3110
+ );
3111
+ return toBase64url(new Uint8Array(digest));
3112
+ }
3113
+ function buildPayload(approvalId, toolCallId, toolName, inputDigest) {
3114
+ return encoder.encode(
3115
+ `${approvalId}
3116
+ ${toolCallId}
3117
+ ${toolName}
3118
+ ${inputDigest}`
3119
+ );
3120
+ }
3121
+ async function signToolApproval({
3122
+ secret,
3123
+ approvalId,
3124
+ toolCallId,
3125
+ toolName,
3126
+ input
3127
+ }) {
3128
+ const key = await importKey(secret);
3129
+ const inputDigest = await hashInput(input);
3130
+ const payload = buildPayload(approvalId, toolCallId, toolName, inputDigest);
3131
+ const sig = await crypto.subtle.sign("HMAC", key, payload);
3132
+ return toBase64url(new Uint8Array(sig));
3133
+ }
3134
+ async function verifyToolApprovalSignature({
3135
+ secret,
3136
+ signature,
3137
+ approvalId,
3138
+ toolCallId,
3139
+ toolName,
3140
+ input
3141
+ }) {
3142
+ const key = await importKey(secret);
3143
+ const inputDigest = await hashInput(input);
3144
+ const payload = buildPayload(approvalId, toolCallId, toolName, inputDigest);
3145
+ const sigBytes = fromBase64url(signature);
3146
+ return crypto.subtle.verify("HMAC", key, sigBytes, payload);
3147
+ }
3148
+ async function maybeSignApproval({
3149
+ secret,
3150
+ approvalId,
3151
+ toolCallId,
3152
+ toolName,
3153
+ input
3154
+ }) {
3155
+ if (secret == null)
3156
+ return void 0;
3157
+ return signToolApproval({ secret, approvalId, toolCallId, toolName, input });
3158
+ }
3159
+
3160
+ // src/generate-text/validate-tool-approvals.ts
3161
+ import {
3162
+ asSchema as asSchema2,
3163
+ safeValidateTypes as safeValidateTypes2
3164
+ } from "@ai-sdk/provider-utils";
3165
+ async function validateApprovedToolApprovals({
3166
+ approvedToolApprovals,
3167
+ tools,
3168
+ messages,
3169
+ experimental_context,
3170
+ toolApprovalSecret
3171
+ }) {
3172
+ var _a22;
3173
+ const approved = [];
3174
+ const denied = [];
3175
+ for (const approval of approvedToolApprovals) {
3176
+ const { toolCall, approvalRequest } = approval;
3177
+ const tool2 = tools == null ? void 0 : tools[toolCall.toolName];
3178
+ if (toolApprovalSecret != null) {
3179
+ if (approvalRequest.signature == null) {
3180
+ throw new InvalidToolApprovalSignatureError({
3181
+ approvalId: approvalRequest.approvalId,
3182
+ toolCallId: toolCall.toolCallId,
3183
+ reason: "missing signature"
3184
+ });
3185
+ }
3186
+ const valid = await verifyToolApprovalSignature({
3187
+ secret: toolApprovalSecret,
3188
+ signature: approvalRequest.signature,
3189
+ approvalId: approvalRequest.approvalId,
3190
+ toolCallId: toolCall.toolCallId,
3191
+ toolName: toolCall.toolName,
3192
+ input: toolCall.input
3193
+ });
3194
+ if (!valid) {
3195
+ throw new InvalidToolApprovalSignatureError({
3196
+ approvalId: approvalRequest.approvalId,
3197
+ toolCallId: toolCall.toolCallId,
3198
+ reason: "invalid signature"
3199
+ });
3200
+ }
3201
+ }
3202
+ if (tool2 != null && typeof tool2.execute === "function" && tool2.inputSchema != null) {
3203
+ const validation = await safeValidateTypes2({
3204
+ value: toolCall.input,
3205
+ schema: asSchema2(tool2.inputSchema)
3206
+ });
3207
+ if (!validation.success) {
3208
+ throw new InvalidToolInputError({
3209
+ toolName: toolCall.toolName,
3210
+ toolInput: JSON.stringify(toolCall.input),
3211
+ cause: validation.error
3212
+ });
3213
+ }
3214
+ }
3215
+ const approvalNeeded = tool2 != null && await isApprovalNeeded({
3216
+ tool: tool2,
3217
+ toolCall,
3218
+ messages,
3219
+ experimental_context
3220
+ });
3221
+ if (approvalNeeded) {
3222
+ approved.push(approval);
3223
+ } else {
3224
+ denied.push({
3225
+ ...approval,
3226
+ approvalResponse: {
3227
+ ...approval.approvalResponse,
3228
+ approved: false,
3229
+ reason: (_a22 = approval.approvalResponse.reason) != null ? _a22 : `Tool "${toolCall.toolName}" does not require approval`
3230
+ }
3231
+ });
3232
+ }
3233
+ }
3234
+ return { approvedToolApprovals: approved, deniedToolApprovals: denied };
3235
+ }
3236
+
3043
3237
  // src/generate-text/output.ts
3044
3238
  var output_exports = {};
3045
3239
  __export(output_exports, {
@@ -3053,10 +3247,10 @@ import {
3053
3247
  TypeValidationError as TypeValidationError2
3054
3248
  } from "@ai-sdk/provider";
3055
3249
  import {
3056
- asSchema as asSchema2,
3250
+ asSchema as asSchema3,
3057
3251
  resolve,
3058
3252
  safeParseJSON as safeParseJSON2,
3059
- safeValidateTypes as safeValidateTypes2
3253
+ safeValidateTypes as safeValidateTypes3
3060
3254
  } from "@ai-sdk/provider-utils";
3061
3255
 
3062
3256
  // src/util/parse-partial-json.ts
@@ -3412,16 +3606,16 @@ var text = () => ({
3412
3606
  });
3413
3607
  var object = ({
3414
3608
  schema: inputSchema,
3415
- name: name21,
3609
+ name: name22,
3416
3610
  description
3417
3611
  }) => {
3418
- const schema = asSchema2(inputSchema);
3612
+ const schema = asSchema3(inputSchema);
3419
3613
  return {
3420
3614
  name: "object",
3421
3615
  responseFormat: resolve(schema.jsonSchema).then((jsonSchema2) => ({
3422
3616
  type: "json",
3423
3617
  schema: jsonSchema2,
3424
- ...name21 != null && { name: name21 },
3618
+ ...name22 != null && { name: name22 },
3425
3619
  ...description != null && { description }
3426
3620
  })),
3427
3621
  async parseCompleteOutput({ text: text2 }, context2) {
@@ -3436,7 +3630,7 @@ var object = ({
3436
3630
  finishReason: context2.finishReason
3437
3631
  });
3438
3632
  }
3439
- const validationResult = await safeValidateTypes2({
3633
+ const validationResult = await safeValidateTypes3({
3440
3634
  value: parseResult.value,
3441
3635
  schema
3442
3636
  });
@@ -3475,10 +3669,10 @@ var object = ({
3475
3669
  };
3476
3670
  var array = ({
3477
3671
  element: inputElementSchema,
3478
- name: name21,
3672
+ name: name22,
3479
3673
  description
3480
3674
  }) => {
3481
- const elementSchema = asSchema2(inputElementSchema);
3675
+ const elementSchema = asSchema3(inputElementSchema);
3482
3676
  return {
3483
3677
  name: "array",
3484
3678
  // JSON schema that describes an array of elements:
@@ -3495,7 +3689,7 @@ var array = ({
3495
3689
  required: ["elements"],
3496
3690
  additionalProperties: false
3497
3691
  },
3498
- ...name21 != null && { name: name21 },
3692
+ ...name22 != null && { name: name22 },
3499
3693
  ...description != null && { description }
3500
3694
  };
3501
3695
  }),
@@ -3526,7 +3720,7 @@ var array = ({
3526
3720
  });
3527
3721
  }
3528
3722
  for (const element of outerValue.elements) {
3529
- const validationResult = await safeValidateTypes2({
3723
+ const validationResult = await safeValidateTypes3({
3530
3724
  value: element,
3531
3725
  schema: elementSchema
3532
3726
  });
@@ -3559,7 +3753,7 @@ var array = ({
3559
3753
  const rawElements = result.state === "repaired-parse" && outerValue.elements.length > 0 ? outerValue.elements.slice(0, -1) : outerValue.elements;
3560
3754
  const parsedElements = [];
3561
3755
  for (const rawElement of rawElements) {
3562
- const validationResult = await safeValidateTypes2({
3756
+ const validationResult = await safeValidateTypes3({
3563
3757
  value: rawElement,
3564
3758
  schema: elementSchema
3565
3759
  });
@@ -3587,7 +3781,7 @@ var array = ({
3587
3781
  };
3588
3782
  var choice = ({
3589
3783
  options: choiceOptions,
3590
- name: name21,
3784
+ name: name22,
3591
3785
  description
3592
3786
  }) => {
3593
3787
  return {
@@ -3604,7 +3798,7 @@ var choice = ({
3604
3798
  required: ["result"],
3605
3799
  additionalProperties: false
3606
3800
  },
3607
- ...name21 != null && { name: name21 },
3801
+ ...name22 != null && { name: name22 },
3608
3802
  ...description != null && { description }
3609
3803
  }),
3610
3804
  async parseCompleteOutput({ text: text2 }, context2) {
@@ -3665,14 +3859,14 @@ var choice = ({
3665
3859
  };
3666
3860
  };
3667
3861
  var json = ({
3668
- name: name21,
3862
+ name: name22,
3669
3863
  description
3670
3864
  } = {}) => {
3671
3865
  return {
3672
3866
  name: "json",
3673
3867
  responseFormat: Promise.resolve({
3674
3868
  type: "json",
3675
- ...name21 != null && { name: name21 },
3869
+ ...name22 != null && { name: name22 },
3676
3870
  ...description != null && { description }
3677
3871
  }),
3678
3872
  async parseCompleteOutput({ text: text2 }, context2) {
@@ -3710,9 +3904,9 @@ var json = ({
3710
3904
 
3711
3905
  // src/generate-text/parse-tool-call.ts
3712
3906
  import {
3713
- asSchema as asSchema3,
3907
+ asSchema as asSchema4,
3714
3908
  safeParseJSON as safeParseJSON3,
3715
- safeValidateTypes as safeValidateTypes3
3909
+ safeValidateTypes as safeValidateTypes4
3716
3910
  } from "@ai-sdk/provider-utils";
3717
3911
  async function parseToolCall({
3718
3912
  toolCall,
@@ -3741,7 +3935,7 @@ async function parseToolCall({
3741
3935
  tools,
3742
3936
  inputSchema: async ({ toolName }) => {
3743
3937
  const { inputSchema } = tools[toolName];
3744
- return await asSchema3(inputSchema).jsonSchema;
3938
+ return await asSchema4(inputSchema).jsonSchema;
3745
3939
  },
3746
3940
  system,
3747
3941
  messages,
@@ -3811,8 +4005,8 @@ async function doParseToolCall({
3811
4005
  availableTools: Object.keys(tools)
3812
4006
  });
3813
4007
  }
3814
- const schema = asSchema3(tool2.inputSchema);
3815
- const parseResult = toolCall.input.trim() === "" ? await safeValidateTypes3({ value: {}, schema }) : await safeParseJSON3({ text: toolCall.input, schema });
4008
+ const schema = asSchema4(tool2.inputSchema);
4009
+ const parseResult = toolCall.input.trim() === "" ? await safeValidateTypes4({ value: {}, schema }) : await safeParseJSON3({ text: toolCall.input, schema });
3816
4010
  if (parseResult.success === false) {
3817
4011
  throw new InvalidToolInputError({
3818
4012
  toolName,
@@ -3925,8 +4119,8 @@ function isLoopFinished() {
3925
4119
  }
3926
4120
  function hasToolCall(toolName) {
3927
4121
  return ({ steps }) => {
3928
- var _a21, _b, _c;
3929
- return (_c = (_b = (_a21 = steps[steps.length - 1]) == null ? void 0 : _a21.toolCalls) == null ? void 0 : _b.some(
4122
+ var _a22, _b, _c;
4123
+ return (_c = (_b = (_a22 = steps[steps.length - 1]) == null ? void 0 : _a22.toolCalls) == null ? void 0 : _b.some(
3930
4124
  (toolCall) => toolCall.toolName === toolName
3931
4125
  )) != null ? _c : false;
3932
4126
  };
@@ -4026,7 +4220,8 @@ async function toResponseMessages({
4026
4220
  content.push({
4027
4221
  type: "tool-approval-request",
4028
4222
  approvalId: part.approvalId,
4029
- toolCallId: part.toolCall.toolCallId
4223
+ toolCallId: part.toolCall.toolCallId,
4224
+ ...part.signature != null ? { signature: part.signature } : {}
4030
4225
  });
4031
4226
  break;
4032
4227
  }
@@ -4123,6 +4318,7 @@ async function generateText({
4123
4318
  experimental_repairToolCall: repairToolCall,
4124
4319
  experimental_download: download2,
4125
4320
  experimental_context,
4321
+ experimental_toolApprovalSecret,
4126
4322
  experimental_include: include,
4127
4323
  _internal: { generateId: generateId2 = originalGenerateId } = {},
4128
4324
  experimental_onStart: onStart,
@@ -4224,13 +4420,29 @@ async function generateText({
4224
4420
  }),
4225
4421
  tracer,
4226
4422
  fn: async (span) => {
4227
- var _a21, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t;
4423
+ var _a22, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t;
4228
4424
  const initialMessages = initialPrompt.messages;
4229
4425
  const responseMessages = [];
4230
- const { approvedToolApprovals, deniedToolApprovals } = collectToolApprovals({ messages: initialMessages });
4231
- const localApprovedToolApprovals = approvedToolApprovals.filter(
4232
- (toolApproval) => !toolApproval.toolCall.providerExecuted
4233
- );
4426
+ const {
4427
+ approvedToolApprovals,
4428
+ deniedToolApprovals: collectedDeniedToolApprovals
4429
+ } = collectToolApprovals({ messages: initialMessages });
4430
+ const {
4431
+ approvedToolApprovals: localApprovedToolApprovals,
4432
+ deniedToolApprovals: revalidationDeniedToolApprovals
4433
+ } = await validateApprovedToolApprovals({
4434
+ approvedToolApprovals: approvedToolApprovals.filter(
4435
+ (toolApproval) => !toolApproval.toolCall.providerExecuted
4436
+ ),
4437
+ tools,
4438
+ messages: initialMessages,
4439
+ experimental_context,
4440
+ toolApprovalSecret: experimental_toolApprovalSecret
4441
+ });
4442
+ const deniedToolApprovals = [
4443
+ ...collectedDeniedToolApprovals,
4444
+ ...revalidationDeniedToolApprovals
4445
+ ];
4234
4446
  if (deniedToolApprovals.length > 0 || localApprovedToolApprovals.length > 0) {
4235
4447
  const toolOutputs = await executeTools({
4236
4448
  toolCalls: localApprovedToolApprovals.map(
@@ -4311,7 +4523,7 @@ async function generateText({
4311
4523
  experimental_context
4312
4524
  }));
4313
4525
  const stepModel = resolveLanguageModel(
4314
- (_a21 = prepareStepResult == null ? void 0 : prepareStepResult.model) != null ? _a21 : model
4526
+ (_a22 = prepareStepResult == null ? void 0 : prepareStepResult.model) != null ? _a22 : model
4315
4527
  );
4316
4528
  const stepModelInfo = {
4317
4529
  provider: stepModel.provider,
@@ -4366,7 +4578,7 @@ async function generateText({
4366
4578
  });
4367
4579
  currentModelResponse = await retry(
4368
4580
  () => {
4369
- var _a22;
4581
+ var _a23;
4370
4582
  return recordSpan({
4371
4583
  name: "ai.generateText.doGenerate",
4372
4584
  attributes: selectTelemetryAttributes({
@@ -4398,14 +4610,14 @@ async function generateText({
4398
4610
  "gen_ai.request.max_tokens": settings.maxOutputTokens,
4399
4611
  "gen_ai.request.presence_penalty": settings.presencePenalty,
4400
4612
  "gen_ai.request.stop_sequences": settings.stopSequences,
4401
- "gen_ai.request.temperature": (_a22 = settings.temperature) != null ? _a22 : void 0,
4613
+ "gen_ai.request.temperature": (_a23 = settings.temperature) != null ? _a23 : void 0,
4402
4614
  "gen_ai.request.top_k": settings.topK,
4403
4615
  "gen_ai.request.top_p": settings.topP
4404
4616
  }
4405
4617
  }),
4406
4618
  tracer,
4407
4619
  fn: async (span2) => {
4408
- var _a23, _b2, _c2, _d2, _e2, _f2, _g2, _h2;
4620
+ var _a24, _b2, _c2, _d2, _e2, _f2, _g2, _h2;
4409
4621
  const result = await stepModel.doGenerate({
4410
4622
  ...callSettings2,
4411
4623
  tools: stepTools,
@@ -4417,7 +4629,7 @@ async function generateText({
4417
4629
  headers: headersWithUserAgent
4418
4630
  });
4419
4631
  const responseData = {
4420
- id: (_b2 = (_a23 = result.response) == null ? void 0 : _a23.id) != null ? _b2 : generateId2(),
4632
+ id: (_b2 = (_a24 = result.response) == null ? void 0 : _a24.id) != null ? _b2 : generateId2(),
4421
4633
  timestamp: (_d2 = (_c2 = result.response) == null ? void 0 : _c2.timestamp) != null ? _d2 : /* @__PURE__ */ new Date(),
4422
4634
  modelId: (_f2 = (_e2 = result.response) == null ? void 0 : _e2.modelId) != null ? _f2 : stepModel.modelId,
4423
4635
  headers: (_g2 = result.response) == null ? void 0 : _g2.headers,
@@ -4510,10 +4722,19 @@ async function generateText({
4510
4722
  messages: stepInputMessages,
4511
4723
  experimental_context
4512
4724
  })) {
4725
+ const approvalId = generateId2();
4726
+ const signature = await maybeSignApproval({
4727
+ secret: experimental_toolApprovalSecret,
4728
+ approvalId,
4729
+ toolCallId: toolCall.toolCallId,
4730
+ toolName: toolCall.toolName,
4731
+ input: toolCall.input
4732
+ });
4513
4733
  toolApprovalRequests[toolCall.toolCallId] = {
4514
4734
  type: "tool-approval-request",
4515
- approvalId: generateId2(),
4516
- toolCall
4735
+ approvalId,
4736
+ toolCall,
4737
+ ...signature != null ? { signature } : {}
4517
4738
  };
4518
4739
  }
4519
4740
  }
@@ -5215,7 +5436,8 @@ var uiMessageChunkSchema = lazySchema(
5215
5436
  z7.strictObject({
5216
5437
  type: z7.literal("tool-approval-request"),
5217
5438
  approvalId: z7.string(),
5218
- toolCallId: z7.string()
5439
+ toolCallId: z7.string(),
5440
+ signature: z7.string().optional()
5219
5441
  }),
5220
5442
  z7.strictObject({
5221
5443
  type: z7.literal("tool-output-available"),
@@ -5390,7 +5612,7 @@ function processUIMessageStream({
5390
5612
  new TransformStream({
5391
5613
  async transform(chunk, controller) {
5392
5614
  await runUpdateMessageJob(async ({ state, write }) => {
5393
- var _a21, _b, _c, _d;
5615
+ var _a22, _b, _c, _d;
5394
5616
  function getToolInvocation(toolCallId) {
5395
5617
  const toolInvocations = state.message.parts.filter(isToolUIPart);
5396
5618
  const toolInvocation = toolInvocations.find(
@@ -5406,7 +5628,7 @@ function processUIMessageStream({
5406
5628
  return toolInvocation;
5407
5629
  }
5408
5630
  function updateToolPart(options) {
5409
- var _a22;
5631
+ var _a23;
5410
5632
  const part = state.message.parts.find(
5411
5633
  (part2) => isStaticToolUIPart(part2) && part2.toolCallId === options.toolCallId
5412
5634
  );
@@ -5425,7 +5647,7 @@ function processUIMessageStream({
5425
5647
  if (options.toolMetadata !== void 0) {
5426
5648
  anyPart.toolMetadata = options.toolMetadata;
5427
5649
  }
5428
- anyPart.providerExecuted = (_a22 = anyOptions.providerExecuted) != null ? _a22 : part.providerExecuted;
5650
+ anyPart.providerExecuted = (_a23 = anyOptions.providerExecuted) != null ? _a23 : part.providerExecuted;
5429
5651
  const providerMetadata = anyOptions.providerMetadata;
5430
5652
  if (providerMetadata != null) {
5431
5653
  if (options.state === "output-available" || options.state === "output-error") {
@@ -5454,7 +5676,7 @@ function processUIMessageStream({
5454
5676
  }
5455
5677
  }
5456
5678
  function updateDynamicToolPart(options) {
5457
- var _a22, _b2;
5679
+ var _a23, _b2;
5458
5680
  const part = state.message.parts.find(
5459
5681
  (part2) => part2.type === "dynamic-tool" && part2.toolCallId === options.toolCallId
5460
5682
  );
@@ -5466,7 +5688,7 @@ function processUIMessageStream({
5466
5688
  anyPart.input = anyOptions.input;
5467
5689
  anyPart.output = anyOptions.output;
5468
5690
  anyPart.errorText = anyOptions.errorText;
5469
- anyPart.rawInput = (_a22 = anyOptions.rawInput) != null ? _a22 : anyPart.rawInput;
5691
+ anyPart.rawInput = (_a23 = anyOptions.rawInput) != null ? _a23 : anyPart.rawInput;
5470
5692
  anyPart.preliminary = anyOptions.preliminary;
5471
5693
  if (options.title !== void 0) {
5472
5694
  anyPart.title = options.title;
@@ -5541,7 +5763,7 @@ function processUIMessageStream({
5541
5763
  });
5542
5764
  }
5543
5765
  textPart.text += chunk.delta;
5544
- textPart.providerMetadata = (_a21 = chunk.providerMetadata) != null ? _a21 : textPart.providerMetadata;
5766
+ textPart.providerMetadata = (_a22 = chunk.providerMetadata) != null ? _a22 : textPart.providerMetadata;
5545
5767
  write();
5546
5768
  break;
5547
5769
  }
@@ -5770,7 +5992,10 @@ function processUIMessageStream({
5770
5992
  case "tool-approval-request": {
5771
5993
  const toolInvocation = getToolInvocation(chunk.toolCallId);
5772
5994
  toolInvocation.state = "approval-requested";
5773
- toolInvocation.approval = { id: chunk.approvalId };
5995
+ toolInvocation.approval = {
5996
+ id: chunk.approvalId,
5997
+ ...chunk.signature != null ? { signature: chunk.signature } : {}
5998
+ };
5774
5999
  write();
5775
6000
  break;
5776
6001
  }
@@ -6061,13 +6286,13 @@ function createAsyncIterableStream(source) {
6061
6286
  const reader = this.getReader();
6062
6287
  let finished = false;
6063
6288
  async function cleanup(cancelStream) {
6064
- var _a21;
6289
+ var _a22;
6065
6290
  if (finished)
6066
6291
  return;
6067
6292
  finished = true;
6068
6293
  try {
6069
6294
  if (cancelStream) {
6070
- await ((_a21 = reader.cancel) == null ? void 0 : _a21.call(reader));
6295
+ await ((_a22 = reader.cancel) == null ? void 0 : _a22.call(reader));
6071
6296
  }
6072
6297
  } finally {
6073
6298
  try {
@@ -6245,6 +6470,7 @@ function runToolsTransformation({
6245
6470
  abortSignal,
6246
6471
  repairToolCall,
6247
6472
  experimental_context,
6473
+ toolApprovalSecret,
6248
6474
  generateId: generateId2,
6249
6475
  stepNumber,
6250
6476
  model,
@@ -6374,10 +6600,19 @@ function runToolsTransformation({
6374
6600
  messages,
6375
6601
  experimental_context
6376
6602
  })) {
6603
+ const approvalId = generateId2();
6604
+ const signature = await maybeSignApproval({
6605
+ secret: toolApprovalSecret,
6606
+ approvalId,
6607
+ toolCallId: toolCall.toolCallId,
6608
+ toolName: toolCall.toolName,
6609
+ input: toolCall.input
6610
+ });
6377
6611
  toolResultsStreamController.enqueue({
6378
6612
  type: "tool-approval-request",
6379
- approvalId: generateId2(),
6380
- toolCall
6613
+ approvalId,
6614
+ toolCall,
6615
+ ...signature != null ? { signature } : {}
6381
6616
  });
6382
6617
  break;
6383
6618
  }
@@ -6548,6 +6783,7 @@ function streamText({
6548
6783
  experimental_onToolCallStart: onToolCallStart,
6549
6784
  experimental_onToolCallFinish: onToolCallFinish,
6550
6785
  experimental_context,
6786
+ experimental_toolApprovalSecret,
6551
6787
  experimental_include: include,
6552
6788
  _internal: { now: now2 = now, generateId: generateId2 = originalGenerateId2 } = {},
6553
6789
  ...settings
@@ -6602,6 +6838,7 @@ function streamText({
6602
6838
  now: now2,
6603
6839
  generateId: generateId2,
6604
6840
  experimental_context,
6841
+ experimental_toolApprovalSecret,
6605
6842
  download: download2,
6606
6843
  include
6607
6844
  });
@@ -6629,7 +6866,7 @@ function createOutputTransformStream(output) {
6629
6866
  }
6630
6867
  return new TransformStream({
6631
6868
  async transform(chunk, controller) {
6632
- var _a21;
6869
+ var _a22;
6633
6870
  if (chunk.type === "finish-step" && textChunk.length > 0) {
6634
6871
  publishTextChunk({ controller });
6635
6872
  }
@@ -6656,7 +6893,7 @@ function createOutputTransformStream(output) {
6656
6893
  }
6657
6894
  text2 += chunk.text;
6658
6895
  textChunk += chunk.text;
6659
- textProviderMetadata = (_a21 = chunk.providerMetadata) != null ? _a21 : textProviderMetadata;
6896
+ textProviderMetadata = (_a22 = chunk.providerMetadata) != null ? _a22 : textProviderMetadata;
6660
6897
  const result = await output.parsePartialOutput({ text: text2 });
6661
6898
  if (result !== void 0) {
6662
6899
  const currentValue = typeof result.partial === "string" ? result.partial : JSON.stringify(result.partial);
@@ -6709,6 +6946,7 @@ var DefaultStreamTextResult = class {
6709
6946
  onToolCallStart,
6710
6947
  onToolCallFinish,
6711
6948
  experimental_context,
6949
+ experimental_toolApprovalSecret,
6712
6950
  download: download2,
6713
6951
  include
6714
6952
  }) {
@@ -6733,11 +6971,11 @@ var DefaultStreamTextResult = class {
6733
6971
  let recordedNoOutputError;
6734
6972
  const pendingDeferredToolCalls = /* @__PURE__ */ new Map();
6735
6973
  let rootSpan;
6736
- let activeTextContent = {};
6737
- let activeReasoningContent = {};
6974
+ let activeTextContent = createIdMap();
6975
+ let activeReasoningContent = createIdMap();
6738
6976
  const eventProcessor = new TransformStream({
6739
6977
  async transform(chunk, controller) {
6740
- var _a21, _b, _c, _d;
6978
+ var _a22, _b, _c, _d;
6741
6979
  controller.enqueue(chunk);
6742
6980
  const { part } = chunk;
6743
6981
  if (part.type === "text-delta" || part.type === "reasoning-delta" || part.type === "source" || part.type === "tool-call" || part.type === "tool-result" || part.type === "tool-input-start" || part.type === "tool-input-delta" || part.type === "raw") {
@@ -6771,7 +7009,7 @@ var DefaultStreamTextResult = class {
6771
7009
  return;
6772
7010
  }
6773
7011
  activeText.text += part.text;
6774
- activeText.providerMetadata = (_a21 = part.providerMetadata) != null ? _a21 : activeText.providerMetadata;
7012
+ activeText.providerMetadata = (_a22 = part.providerMetadata) != null ? _a22 : activeText.providerMetadata;
6775
7013
  }
6776
7014
  if (part.type === "text-end") {
6777
7015
  const activeText = activeTextContent[part.id];
@@ -6850,8 +7088,8 @@ var DefaultStreamTextResult = class {
6850
7088
  }
6851
7089
  if (part.type === "start-step") {
6852
7090
  recordedContent = [];
6853
- activeReasoningContent = {};
6854
- activeTextContent = {};
7091
+ activeReasoningContent = createIdMap();
7092
+ activeTextContent = createIdMap();
6855
7093
  recordedRequest = part.request;
6856
7094
  recordedWarnings = part.warnings;
6857
7095
  }
@@ -6897,7 +7135,7 @@ var DefaultStreamTextResult = class {
6897
7135
  }
6898
7136
  },
6899
7137
  async flush(controller) {
6900
- var _a21, _b, _c, _d, _e, _f, _g;
7138
+ var _a22, _b, _c, _d, _e, _f, _g;
6901
7139
  try {
6902
7140
  if (recordedSteps.length === 0 || recordedNoOutputError != null) {
6903
7141
  const error = (abortSignal == null ? void 0 : abortSignal.aborted) ? abortSignal.reason : recordedNoOutputError != null ? recordedNoOutputError : new NoOutputGeneratedError({
@@ -6961,15 +7199,15 @@ var DefaultStreamTextResult = class {
6961
7199
  },
6962
7200
  "ai.response.toolCalls": {
6963
7201
  output: () => {
6964
- var _a22;
6965
- return ((_a22 = finalStep.toolCalls) == null ? void 0 : _a22.length) ? JSON.stringify(finalStep.toolCalls) : void 0;
7202
+ var _a23;
7203
+ return ((_a23 = finalStep.toolCalls) == null ? void 0 : _a23.length) ? JSON.stringify(finalStep.toolCalls) : void 0;
6966
7204
  }
6967
7205
  },
6968
7206
  "ai.response.providerMetadata": JSON.stringify(
6969
7207
  finalStep.providerMetadata
6970
7208
  ),
6971
7209
  "ai.usage.inputTokens": totalUsage.inputTokens,
6972
- "ai.usage.inputTokenDetails.noCacheTokens": (_a21 = totalUsage.inputTokenDetails) == null ? void 0 : _a21.noCacheTokens,
7210
+ "ai.usage.inputTokenDetails.noCacheTokens": (_a22 = totalUsage.inputTokenDetails) == null ? void 0 : _a22.noCacheTokens,
6973
7211
  "ai.usage.inputTokenDetails.cacheReadTokens": (_b = totalUsage.inputTokenDetails) == null ? void 0 : _b.cacheReadTokens,
6974
7212
  "ai.usage.inputTokenDetails.cacheWriteTokens": (_c = totalUsage.inputTokenDetails) == null ? void 0 : _c.cacheWriteTokens,
6975
7213
  "ai.usage.outputTokens": totalUsage.outputTokens,
@@ -7120,12 +7358,24 @@ var DefaultStreamTextResult = class {
7120
7358
  const initialResponseMessages = [];
7121
7359
  const { approvedToolApprovals, deniedToolApprovals } = collectToolApprovals({ messages: initialMessages });
7122
7360
  if (deniedToolApprovals.length > 0 || approvedToolApprovals.length > 0) {
7123
- const localApprovedToolApprovals = approvedToolApprovals.filter(
7124
- (toolApproval) => !toolApproval.toolCall.providerExecuted
7125
- );
7126
- const localDeniedToolApprovals = deniedToolApprovals.filter(
7127
- (toolApproval) => !toolApproval.toolCall.providerExecuted
7128
- );
7361
+ const {
7362
+ approvedToolApprovals: localApprovedToolApprovals,
7363
+ deniedToolApprovals: revalidationDeniedToolApprovals
7364
+ } = await validateApprovedToolApprovals({
7365
+ approvedToolApprovals: approvedToolApprovals.filter(
7366
+ (toolApproval) => !toolApproval.toolCall.providerExecuted
7367
+ ),
7368
+ tools,
7369
+ messages: initialMessages,
7370
+ experimental_context,
7371
+ toolApprovalSecret: experimental_toolApprovalSecret
7372
+ });
7373
+ const localDeniedToolApprovals = [
7374
+ ...deniedToolApprovals.filter(
7375
+ (toolApproval) => !toolApproval.toolCall.providerExecuted
7376
+ ),
7377
+ ...revalidationDeniedToolApprovals
7378
+ ];
7129
7379
  const deniedProviderExecutedToolApprovals = deniedToolApprovals.filter(
7130
7380
  (toolApproval) => toolApproval.toolCall.providerExecuted
7131
7381
  );
@@ -7220,7 +7470,7 @@ var DefaultStreamTextResult = class {
7220
7470
  responseMessages,
7221
7471
  usage
7222
7472
  }) {
7223
- var _a21, _b, _c, _d, _e, _f, _g, _h, _i;
7473
+ var _a22, _b, _c, _d, _e, _f, _g, _h, _i;
7224
7474
  const includeRawChunks2 = self.includeRawChunks;
7225
7475
  const stepTimeoutId = stepTimeoutMs != null ? setTimeout(() => stepAbortController.abort(), stepTimeoutMs) : void 0;
7226
7476
  let chunkTimeoutId = void 0;
@@ -7257,7 +7507,7 @@ var DefaultStreamTextResult = class {
7257
7507
  experimental_context
7258
7508
  }));
7259
7509
  const stepModel = resolveLanguageModel(
7260
- (_a21 = prepareStepResult == null ? void 0 : prepareStepResult.model) != null ? _a21 : model
7510
+ (_a22 = prepareStepResult == null ? void 0 : prepareStepResult.model) != null ? _a22 : model
7261
7511
  );
7262
7512
  const stepModelInfo = {
7263
7513
  provider: stepModel.provider,
@@ -7380,6 +7630,7 @@ var DefaultStreamTextResult = class {
7380
7630
  repairToolCall,
7381
7631
  abortSignal,
7382
7632
  experimental_context,
7633
+ toolApprovalSecret: experimental_toolApprovalSecret,
7383
7634
  generateId: generateId2,
7384
7635
  stepNumber: recordedSteps.length,
7385
7636
  model: stepModelInfo,
@@ -7414,7 +7665,7 @@ var DefaultStreamTextResult = class {
7414
7665
  streamWithToolResults.pipeThrough(
7415
7666
  new TransformStream({
7416
7667
  async transform(chunk, controller) {
7417
- var _a22, _b2, _c2, _d2, _e2;
7668
+ var _a23, _b2, _c2, _d2, _e2;
7418
7669
  resetChunkTimeout();
7419
7670
  if (chunk.type === "stream-start") {
7420
7671
  warnings = chunk.warnings;
@@ -7491,7 +7742,7 @@ var DefaultStreamTextResult = class {
7491
7742
  }
7492
7743
  case "response-metadata": {
7493
7744
  stepResponse = {
7494
- id: (_a22 = chunk.id) != null ? _a22 : stepResponse.id,
7745
+ id: (_a23 = chunk.id) != null ? _a23 : stepResponse.id,
7495
7746
  timestamp: (_b2 = chunk.timestamp) != null ? _b2 : stepResponse.timestamp,
7496
7747
  modelId: (_c2 = chunk.modelId) != null ? _c2 : stepResponse.modelId
7497
7748
  };
@@ -7579,7 +7830,7 @@ var DefaultStreamTextResult = class {
7579
7830
  },
7580
7831
  // invoke onFinish callback and resolve toolResults promise when the stream is about to close:
7581
7832
  async flush(controller) {
7582
- var _a22, _b2, _c2, _d2, _e2, _f2, _g2;
7833
+ var _a23, _b2, _c2, _d2, _e2, _f2, _g2;
7583
7834
  if (!hasReceivedTerminalChunk && !hasReceivedOutputChunk) {
7584
7835
  controller.enqueue({
7585
7836
  type: "error",
@@ -7607,7 +7858,7 @@ var DefaultStreamTextResult = class {
7607
7858
  "ai.response.model": stepResponse.modelId,
7608
7859
  "ai.response.timestamp": stepResponse.timestamp.toISOString(),
7609
7860
  "ai.usage.inputTokens": stepUsage.inputTokens,
7610
- "ai.usage.inputTokenDetails.noCacheTokens": (_a22 = stepUsage.inputTokenDetails) == null ? void 0 : _a22.noCacheTokens,
7861
+ "ai.usage.inputTokenDetails.noCacheTokens": (_a23 = stepUsage.inputTokenDetails) == null ? void 0 : _a23.noCacheTokens,
7611
7862
  "ai.usage.inputTokenDetails.cacheReadTokens": (_b2 = stepUsage.inputTokenDetails) == null ? void 0 : _b2.cacheReadTokens,
7612
7863
  "ai.usage.inputTokenDetails.cacheWriteTokens": (_c2 = stepUsage.inputTokenDetails) == null ? void 0 : _c2.cacheWriteTokens,
7613
7864
  "ai.usage.outputTokens": stepUsage.outputTokens,
@@ -7881,19 +8132,19 @@ var DefaultStreamTextResult = class {
7881
8132
  this._steps.reject(error);
7882
8133
  }
7883
8134
  async consumeStream(options) {
7884
- var _a21;
8135
+ var _a22;
7885
8136
  try {
7886
8137
  await consumeStream({
7887
8138
  stream: this.fullStream,
7888
8139
  onError: (error) => {
7889
- var _a22;
8140
+ var _a23;
7890
8141
  this.rejectResultPromises(error);
7891
- (_a22 = options == null ? void 0 : options.onError) == null ? void 0 : _a22.call(options, error);
8142
+ (_a23 = options == null ? void 0 : options.onError) == null ? void 0 : _a23.call(options, error);
7892
8143
  }
7893
8144
  });
7894
8145
  } catch (error) {
7895
8146
  this.rejectResultPromises(error);
7896
- (_a21 = options == null ? void 0 : options.onError) == null ? void 0 : _a21.call(options, error);
8147
+ (_a22 = options == null ? void 0 : options.onError) == null ? void 0 : _a22.call(options, error);
7897
8148
  }
7898
8149
  }
7899
8150
  get experimental_partialOutputStream() {
@@ -7913,8 +8164,8 @@ var DefaultStreamTextResult = class {
7913
8164
  );
7914
8165
  }
7915
8166
  get elementStream() {
7916
- var _a21, _b, _c;
7917
- const transform = (_a21 = this.outputSpecification) == null ? void 0 : _a21.createElementStreamTransform();
8167
+ var _a22, _b, _c;
8168
+ const transform = (_a22 = this.outputSpecification) == null ? void 0 : _a22.createElementStreamTransform();
7918
8169
  if (transform == null) {
7919
8170
  throw new UnsupportedFunctionalityError2({
7920
8171
  functionality: `element streams in ${(_c = (_b = this.outputSpecification) == null ? void 0 : _b.name) != null ? _c : "text"} mode`
@@ -7924,8 +8175,8 @@ var DefaultStreamTextResult = class {
7924
8175
  }
7925
8176
  get output() {
7926
8177
  return this.finalStep.then((step) => {
7927
- var _a21;
7928
- const output = (_a21 = this.outputSpecification) != null ? _a21 : text();
8178
+ var _a22;
8179
+ const output = (_a22 = this.outputSpecification) != null ? _a22 : text();
7929
8180
  return output.parseCompleteOutput(
7930
8181
  { text: step.text },
7931
8182
  {
@@ -7945,15 +8196,16 @@ var DefaultStreamTextResult = class {
7945
8196
  sendSources = false,
7946
8197
  sendStart = true,
7947
8198
  sendFinish = true,
7948
- onError = getErrorMessage7
8199
+ onError = () => "An error occurred."
8200
+ // prevent leaking server error details to the client by default
7949
8201
  } = {}) {
7950
8202
  const responseMessageId = generateMessageId != null ? getResponseUIMessageId({
7951
8203
  originalMessages,
7952
8204
  responseMessageId: generateMessageId
7953
8205
  }) : void 0;
7954
8206
  const isDynamic = (part) => {
7955
- var _a21;
7956
- const tool2 = (_a21 = this.tools) == null ? void 0 : _a21[part.toolName];
8207
+ var _a22;
8208
+ const tool2 = (_a22 = this.tools) == null ? void 0 : _a22[part.toolName];
7957
8209
  if (tool2 == null) {
7958
8210
  return part.dynamic;
7959
8211
  }
@@ -8099,7 +8351,8 @@ var DefaultStreamTextResult = class {
8099
8351
  controller.enqueue({
8100
8352
  type: "tool-approval-request",
8101
8353
  approvalId: part.approvalId,
8102
- toolCallId: part.toolCall.toolCallId
8354
+ toolCallId: part.toolCall.toolCallId,
8355
+ ...part.signature != null ? { signature: part.signature } : {}
8103
8356
  });
8104
8357
  break;
8105
8358
  }
@@ -8295,7 +8548,7 @@ var ToolLoopAgent = class {
8295
8548
  return this.settings.tools;
8296
8549
  }
8297
8550
  async prepareCall(options) {
8298
- var _a21, _b, _c, _d;
8551
+ var _a22, _b, _c, _d;
8299
8552
  if (this.settings.callOptionsSchema != null && options.options !== void 0) {
8300
8553
  const validatedOptions = await validateTypes2({
8301
8554
  value: options.options,
@@ -8307,7 +8560,7 @@ var ToolLoopAgent = class {
8307
8560
  const { onStepFinish: _settingsOnStepFinish, ...settingsWithoutCallback } = this.settings;
8308
8561
  const baseCallArgs = {
8309
8562
  ...settingsWithoutCallback,
8310
- stopWhen: (_a21 = this.settings.stopWhen) != null ? _a21 : stepCountIs(20),
8563
+ stopWhen: (_a22 = this.settings.stopWhen) != null ? _a22 : stepCountIs(20),
8311
8564
  ...options
8312
8565
  };
8313
8566
  const preparedCallArgs = (_d = await ((_c = (_b = this.settings).prepareCall) == null ? void 0 : _c.call(
@@ -8380,12 +8633,12 @@ var ToolLoopAgent = class {
8380
8633
 
8381
8634
  // src/ui-message-stream/create-ui-message-stream.ts
8382
8635
  import {
8383
- generateId as generateIdFunc,
8384
- getErrorMessage as getErrorMessage8
8636
+ generateId as generateIdFunc
8385
8637
  } from "@ai-sdk/provider-utils";
8386
8638
  function createUIMessageStream({
8387
8639
  execute,
8388
- onError = getErrorMessage8,
8640
+ onError = () => "An error occurred.",
8641
+ // prevent leaking server error details to the client by default
8389
8642
  originalMessages,
8390
8643
  onStepFinish,
8391
8644
  onFinish,
@@ -8476,7 +8729,7 @@ function readUIMessageStream({
8476
8729
  onError,
8477
8730
  terminateOnError = false
8478
8731
  }) {
8479
- var _a21;
8732
+ var _a22;
8480
8733
  let controller;
8481
8734
  let hasErrored = false;
8482
8735
  const outputStream = new ReadableStream({
@@ -8485,7 +8738,7 @@ function readUIMessageStream({
8485
8738
  }
8486
8739
  });
8487
8740
  const state = createStreamingUIMessageState({
8488
- messageId: (_a21 = message == null ? void 0 : message.id) != null ? _a21 : "",
8741
+ messageId: (_a22 = message == null ? void 0 : message.id) != null ? _a22 : "",
8489
8742
  lastMessage: message
8490
8743
  });
8491
8744
  const handleError = (error) => {
@@ -8554,7 +8807,7 @@ async function convertToModelMessages(messages, options) {
8554
8807
  modelMessages.push({
8555
8808
  role: "user",
8556
8809
  content: message.parts.map((part) => {
8557
- var _a21;
8810
+ var _a22;
8558
8811
  if (isTextUIPart(part)) {
8559
8812
  return {
8560
8813
  type: "text",
@@ -8572,7 +8825,7 @@ async function convertToModelMessages(messages, options) {
8572
8825
  };
8573
8826
  }
8574
8827
  if (isDataUIPart(part)) {
8575
- return (_a21 = options == null ? void 0 : options.convertDataPart) == null ? void 0 : _a21.call(
8828
+ return (_a22 = options == null ? void 0 : options.convertDataPart) == null ? void 0 : _a22.call(
8576
8829
  options,
8577
8830
  part
8578
8831
  );
@@ -8585,7 +8838,7 @@ async function convertToModelMessages(messages, options) {
8585
8838
  if (message.parts != null) {
8586
8839
  let block = [];
8587
8840
  async function processBlock() {
8588
- var _a21, _b, _c, _d, _e, _f, _g, _h;
8841
+ var _a22, _b, _c, _d, _e, _f, _g, _h;
8589
8842
  if (block.length === 0) {
8590
8843
  return;
8591
8844
  }
@@ -8618,7 +8871,7 @@ async function convertToModelMessages(messages, options) {
8618
8871
  type: "tool-call",
8619
8872
  toolCallId: part.toolCallId,
8620
8873
  toolName,
8621
- input: part.state === "output-error" ? (_a21 = part.input) != null ? _a21 : "rawInput" in part ? part.rawInput : void 0 : part.input,
8874
+ input: part.state === "output-error" ? (_a22 = part.input) != null ? _a22 : "rawInput" in part ? part.rawInput : void 0 : part.input,
8622
8875
  providerExecuted: part.providerExecuted,
8623
8876
  ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
8624
8877
  });
@@ -8626,7 +8879,8 @@ async function convertToModelMessages(messages, options) {
8626
8879
  content.push({
8627
8880
  type: "tool-approval-request",
8628
8881
  approvalId: part.approval.id,
8629
- toolCallId: part.toolCallId
8882
+ toolCallId: part.toolCallId,
8883
+ ...part.approval.signature != null ? { signature: part.approval.signature } : {}
8630
8884
  });
8631
8885
  }
8632
8886
  if (part.providerExecuted === true && part.state !== "approval-responded" && (part.state === "output-available" || part.state === "output-error")) {
@@ -8665,8 +8919,8 @@ async function convertToModelMessages(messages, options) {
8665
8919
  });
8666
8920
  const toolParts = block.filter(
8667
8921
  (part) => {
8668
- var _a22;
8669
- return isToolUIPart(part) && (part.providerExecuted !== true || ((_a22 = part.approval) == null ? void 0 : _a22.approved) != null);
8922
+ var _a23;
8923
+ return isToolUIPart(part) && (part.providerExecuted !== true || ((_a23 = part.approval) == null ? void 0 : _a23.approved) != null);
8670
8924
  }
8671
8925
  );
8672
8926
  if (toolParts.length > 0) {
@@ -8858,7 +9112,8 @@ var uiMessagesSchema = lazySchema2(
8858
9112
  approval: z8.object({
8859
9113
  id: z8.string(),
8860
9114
  approved: z8.never().optional(),
8861
- reason: z8.never().optional()
9115
+ reason: z8.never().optional(),
9116
+ signature: z8.string().optional()
8862
9117
  })
8863
9118
  }),
8864
9119
  z8.object({
@@ -8875,7 +9130,8 @@ var uiMessagesSchema = lazySchema2(
8875
9130
  approval: z8.object({
8876
9131
  id: z8.string(),
8877
9132
  approved: z8.boolean(),
8878
- reason: z8.string().optional()
9133
+ reason: z8.string().optional(),
9134
+ signature: z8.string().optional()
8879
9135
  })
8880
9136
  }),
8881
9137
  z8.object({
@@ -8894,7 +9150,8 @@ var uiMessagesSchema = lazySchema2(
8894
9150
  approval: z8.object({
8895
9151
  id: z8.string(),
8896
9152
  approved: z8.literal(true),
8897
- reason: z8.string().optional()
9153
+ reason: z8.string().optional(),
9154
+ signature: z8.string().optional()
8898
9155
  }).optional()
8899
9156
  }),
8900
9157
  z8.object({
@@ -8913,7 +9170,8 @@ var uiMessagesSchema = lazySchema2(
8913
9170
  approval: z8.object({
8914
9171
  id: z8.string(),
8915
9172
  approved: z8.literal(true),
8916
- reason: z8.string().optional()
9173
+ reason: z8.string().optional(),
9174
+ signature: z8.string().optional()
8917
9175
  }).optional()
8918
9176
  }),
8919
9177
  z8.object({
@@ -8930,7 +9188,8 @@ var uiMessagesSchema = lazySchema2(
8930
9188
  approval: z8.object({
8931
9189
  id: z8.string(),
8932
9190
  approved: z8.literal(false),
8933
- reason: z8.string().optional()
9191
+ reason: z8.string().optional(),
9192
+ signature: z8.string().optional()
8934
9193
  })
8935
9194
  }),
8936
9195
  z8.object({
@@ -8970,7 +9229,8 @@ var uiMessagesSchema = lazySchema2(
8970
9229
  approval: z8.object({
8971
9230
  id: z8.string(),
8972
9231
  approved: z8.never().optional(),
8973
- reason: z8.never().optional()
9232
+ reason: z8.never().optional(),
9233
+ signature: z8.string().optional()
8974
9234
  })
8975
9235
  }),
8976
9236
  z8.object({
@@ -8986,7 +9246,8 @@ var uiMessagesSchema = lazySchema2(
8986
9246
  approval: z8.object({
8987
9247
  id: z8.string(),
8988
9248
  approved: z8.boolean(),
8989
- reason: z8.string().optional()
9249
+ reason: z8.string().optional(),
9250
+ signature: z8.string().optional()
8990
9251
  })
8991
9252
  }),
8992
9253
  z8.object({
@@ -9004,7 +9265,8 @@ var uiMessagesSchema = lazySchema2(
9004
9265
  approval: z8.object({
9005
9266
  id: z8.string(),
9006
9267
  approved: z8.literal(true),
9007
- reason: z8.string().optional()
9268
+ reason: z8.string().optional(),
9269
+ signature: z8.string().optional()
9008
9270
  }).optional()
9009
9271
  }),
9010
9272
  z8.object({
@@ -9022,7 +9284,8 @@ var uiMessagesSchema = lazySchema2(
9022
9284
  approval: z8.object({
9023
9285
  id: z8.string(),
9024
9286
  approved: z8.literal(true),
9025
- reason: z8.string().optional()
9287
+ reason: z8.string().optional(),
9288
+ signature: z8.string().optional()
9026
9289
  }).optional()
9027
9290
  }),
9028
9291
  z8.object({
@@ -9038,7 +9301,8 @@ var uiMessagesSchema = lazySchema2(
9038
9301
  approval: z8.object({
9039
9302
  id: z8.string(),
9040
9303
  approved: z8.literal(false),
9041
- reason: z8.string().optional()
9304
+ reason: z8.string().optional(),
9305
+ signature: z8.string().optional()
9042
9306
  })
9043
9307
  })
9044
9308
  ])
@@ -9198,7 +9462,7 @@ async function createAgentUIStream({
9198
9462
  onStepFinish,
9199
9463
  ...uiMessageStreamOptions
9200
9464
  }) {
9201
- var _a21;
9465
+ var _a22;
9202
9466
  const validatedMessages = await validateUIMessages({
9203
9467
  messages: uiMessages,
9204
9468
  tools: agent.tools
@@ -9217,7 +9481,7 @@ async function createAgentUIStream({
9217
9481
  return result.toUIMessageStream({
9218
9482
  ...uiMessageStreamOptions,
9219
9483
  // TODO reading `originalMessages` is here for bc, always use `validatedMessages` in v7
9220
- originalMessages: (_a21 = uiMessageStreamOptions.originalMessages) != null ? _a21 : validatedMessages
9484
+ originalMessages: (_a22 = uiMessageStreamOptions.originalMessages) != null ? _a22 : validatedMessages
9221
9485
  });
9222
9486
  }
9223
9487
 
@@ -9317,7 +9581,7 @@ async function embed({
9317
9581
  }),
9318
9582
  tracer,
9319
9583
  fn: async (doEmbedSpan) => {
9320
- var _a21, _b;
9584
+ var _a22, _b;
9321
9585
  const modelResponse = await model.doEmbed({
9322
9586
  values: [value],
9323
9587
  abortSignal,
@@ -9325,7 +9589,7 @@ async function embed({
9325
9589
  providerOptions
9326
9590
  });
9327
9591
  const embedding2 = modelResponse.embeddings[0];
9328
- const usage2 = (_a21 = modelResponse.usage) != null ? _a21 : { tokens: NaN };
9592
+ const usage2 = (_a22 = modelResponse.usage) != null ? _a22 : { tokens: NaN };
9329
9593
  doEmbedSpan.setAttributes(
9330
9594
  await selectTelemetryAttributes({
9331
9595
  telemetry,
@@ -9441,7 +9705,7 @@ async function embedMany({
9441
9705
  }),
9442
9706
  tracer,
9443
9707
  fn: async (span) => {
9444
- var _a21;
9708
+ var _a22;
9445
9709
  const [maxEmbeddingsPerCall, supportsParallelCalls] = await Promise.all([
9446
9710
  model.maxEmbeddingsPerCall,
9447
9711
  model.supportsParallelCalls
@@ -9466,7 +9730,7 @@ async function embedMany({
9466
9730
  }),
9467
9731
  tracer,
9468
9732
  fn: async (doEmbedSpan) => {
9469
- var _a22, _b;
9733
+ var _a23, _b;
9470
9734
  const modelResponse = await model.doEmbed({
9471
9735
  values,
9472
9736
  abortSignal,
@@ -9474,7 +9738,7 @@ async function embedMany({
9474
9738
  providerOptions
9475
9739
  });
9476
9740
  const embeddings3 = modelResponse.embeddings;
9477
- const usage2 = (_a22 = modelResponse.usage) != null ? _a22 : { tokens: NaN };
9741
+ const usage2 = (_a23 = modelResponse.usage) != null ? _a23 : { tokens: NaN };
9478
9742
  doEmbedSpan.setAttributes(
9479
9743
  await selectTelemetryAttributes({
9480
9744
  telemetry,
@@ -9555,7 +9819,7 @@ async function embedMany({
9555
9819
  }),
9556
9820
  tracer,
9557
9821
  fn: async (doEmbedSpan) => {
9558
- var _a22, _b;
9822
+ var _a23, _b;
9559
9823
  const modelResponse = await model.doEmbed({
9560
9824
  values: chunk,
9561
9825
  abortSignal,
@@ -9563,7 +9827,7 @@ async function embedMany({
9563
9827
  providerOptions
9564
9828
  });
9565
9829
  const embeddings2 = modelResponse.embeddings;
9566
- const usage = (_a22 = modelResponse.usage) != null ? _a22 : { tokens: NaN };
9830
+ const usage = (_a23 = modelResponse.usage) != null ? _a23 : { tokens: NaN };
9567
9831
  doEmbedSpan.setAttributes(
9568
9832
  await selectTelemetryAttributes({
9569
9833
  telemetry,
@@ -9602,7 +9866,7 @@ async function embedMany({
9602
9866
  result.providerMetadata
9603
9867
  )) {
9604
9868
  providerMetadata[providerName] = {
9605
- ...(_a21 = providerMetadata[providerName]) != null ? _a21 : {},
9869
+ ...(_a22 = providerMetadata[providerName]) != null ? _a22 : {},
9606
9870
  ...metadata
9607
9871
  };
9608
9872
  }
@@ -9650,7 +9914,7 @@ var DefaultEmbedManyResult = class {
9650
9914
 
9651
9915
  // src/generate-image/generate-image.ts
9652
9916
  import {
9653
- convertBase64ToUint8Array as convertBase64ToUint8Array4,
9917
+ convertBase64ToUint8Array as convertBase64ToUint8Array5,
9654
9918
  withUserAgentSuffix as withUserAgentSuffix5
9655
9919
  } from "@ai-sdk/provider-utils";
9656
9920
  async function generateImage({
@@ -9666,7 +9930,7 @@ async function generateImage({
9666
9930
  abortSignal,
9667
9931
  headers
9668
9932
  }) {
9669
- var _a21, _b;
9933
+ var _a22, _b;
9670
9934
  const model = resolveImageModel(modelArg);
9671
9935
  const headersWithUserAgent = withUserAgentSuffix5(
9672
9936
  headers != null ? headers : {},
@@ -9676,7 +9940,7 @@ async function generateImage({
9676
9940
  maxRetries: maxRetriesArg,
9677
9941
  abortSignal
9678
9942
  });
9679
- const maxImagesPerCallWithDefault = (_a21 = maxImagesPerCall != null ? maxImagesPerCall : await invokeModelMaxImagesPerCall(model)) != null ? _a21 : 1;
9943
+ const maxImagesPerCallWithDefault = (_a22 = maxImagesPerCall != null ? maxImagesPerCall : await invokeModelMaxImagesPerCall(model)) != null ? _a22 : 1;
9680
9944
  const callCount = Math.ceil(n / maxImagesPerCallWithDefault);
9681
9945
  const callImageCounts = Array.from({ length: callCount }, (_, i) => {
9682
9946
  if (i < callCount - 1) {
@@ -9717,13 +9981,13 @@ async function generateImage({
9717
9981
  images.push(
9718
9982
  ...result.images.map(
9719
9983
  (image) => {
9720
- var _a22;
9984
+ var _a23;
9721
9985
  return new DefaultGeneratedFile({
9722
9986
  data: image,
9723
- mediaType: (_a22 = detectMediaType({
9987
+ mediaType: (_a23 = detectMediaType({
9724
9988
  data: image,
9725
9989
  signatures: imageMediaTypeSignatures
9726
- })) != null ? _a22 : "image/png"
9990
+ })) != null ? _a23 : "image/png"
9727
9991
  });
9728
9992
  }
9729
9993
  )
@@ -9811,7 +10075,7 @@ function toImageModelV3File(dataContent) {
9811
10075
  if (typeof dataContent === "string" && dataContent.startsWith("data:")) {
9812
10076
  const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(dataContent);
9813
10077
  if (base64Content != null) {
9814
- const uint8Data2 = convertBase64ToUint8Array4(base64Content);
10078
+ const uint8Data2 = convertBase64ToUint8Array5(base64Content);
9815
10079
  return {
9816
10080
  type: "file",
9817
10081
  data: uint8Data2,
@@ -9850,8 +10114,8 @@ import {
9850
10114
  UnsupportedFunctionalityError as UnsupportedFunctionalityError3
9851
10115
  } from "@ai-sdk/provider";
9852
10116
  import {
9853
- asSchema as asSchema4,
9854
- safeValidateTypes as safeValidateTypes4
10117
+ asSchema as asSchema5,
10118
+ safeValidateTypes as safeValidateTypes5
9855
10119
  } from "@ai-sdk/provider-utils";
9856
10120
  var noSchemaOutputStrategy = {
9857
10121
  type: "no-schema",
@@ -9891,7 +10155,7 @@ var objectOutputStrategy = (schema) => ({
9891
10155
  };
9892
10156
  },
9893
10157
  async validateFinalResult(value) {
9894
- return safeValidateTypes4({ value, schema });
10158
+ return safeValidateTypes5({ value, schema });
9895
10159
  },
9896
10160
  createElementStream() {
9897
10161
  throw new UnsupportedFunctionalityError3({
@@ -9923,7 +10187,7 @@ var arrayOutputStrategy = (schema) => {
9923
10187
  isFirstDelta,
9924
10188
  isFinalDelta
9925
10189
  }) {
9926
- var _a21;
10190
+ var _a22;
9927
10191
  if (!isJSONObject(value) || !isJSONArray(value.elements)) {
9928
10192
  return {
9929
10193
  success: false,
@@ -9937,7 +10201,7 @@ var arrayOutputStrategy = (schema) => {
9937
10201
  const resultArray = [];
9938
10202
  for (let i = 0; i < inputArray.length; i++) {
9939
10203
  const element = inputArray[i];
9940
- const result = await safeValidateTypes4({ value: element, schema });
10204
+ const result = await safeValidateTypes5({ value: element, schema });
9941
10205
  if (i === inputArray.length - 1 && !isFinalDelta) {
9942
10206
  continue;
9943
10207
  }
@@ -9946,7 +10210,7 @@ var arrayOutputStrategy = (schema) => {
9946
10210
  }
9947
10211
  resultArray.push(result.value);
9948
10212
  }
9949
- const publishedElementCount = (_a21 = latestObject == null ? void 0 : latestObject.length) != null ? _a21 : 0;
10213
+ const publishedElementCount = (_a22 = latestObject == null ? void 0 : latestObject.length) != null ? _a22 : 0;
9950
10214
  let textDelta = "";
9951
10215
  if (isFirstDelta) {
9952
10216
  textDelta += "[";
@@ -9979,7 +10243,7 @@ var arrayOutputStrategy = (schema) => {
9979
10243
  const inputArray = value.elements;
9980
10244
  const resultArray = [];
9981
10245
  for (const element of inputArray) {
9982
- const result = await safeValidateTypes4({ value: element, schema });
10246
+ const result = await safeValidateTypes5({ value: element, schema });
9983
10247
  if (!result.success) {
9984
10248
  return result;
9985
10249
  }
@@ -10098,9 +10362,9 @@ function getOutputStrategy({
10098
10362
  }) {
10099
10363
  switch (output) {
10100
10364
  case "object":
10101
- return objectOutputStrategy(asSchema4(schema));
10365
+ return objectOutputStrategy(asSchema5(schema));
10102
10366
  case "array":
10103
- return arrayOutputStrategy(asSchema4(schema));
10367
+ return arrayOutputStrategy(asSchema5(schema));
10104
10368
  case "enum":
10105
10369
  return enumOutputStrategy(enumValues);
10106
10370
  case "no-schema":
@@ -10369,7 +10633,7 @@ async function generateObject(options) {
10369
10633
  }),
10370
10634
  tracer,
10371
10635
  fn: async (span) => {
10372
- var _a21;
10636
+ var _a22;
10373
10637
  let result;
10374
10638
  let finishReason;
10375
10639
  let usage;
@@ -10416,7 +10680,7 @@ async function generateObject(options) {
10416
10680
  }),
10417
10681
  tracer,
10418
10682
  fn: async (span2) => {
10419
- var _a22, _b, _c, _d, _e, _f, _g, _h;
10683
+ var _a23, _b, _c, _d, _e, _f, _g, _h;
10420
10684
  const result2 = await model.doGenerate({
10421
10685
  responseFormat: {
10422
10686
  type: "json",
@@ -10431,7 +10695,7 @@ async function generateObject(options) {
10431
10695
  headers: headersWithUserAgent
10432
10696
  });
10433
10697
  const responseData = {
10434
- id: (_b = (_a22 = result2.response) == null ? void 0 : _a22.id) != null ? _b : generateId2(),
10698
+ id: (_b = (_a23 = result2.response) == null ? void 0 : _a23.id) != null ? _b : generateId2(),
10435
10699
  timestamp: (_d = (_c = result2.response) == null ? void 0 : _c.timestamp) != null ? _d : currentDate(),
10436
10700
  modelId: (_f = (_e = result2.response) == null ? void 0 : _e.modelId) != null ? _f : model.modelId,
10437
10701
  headers: (_g = result2.response) == null ? void 0 : _g.headers,
@@ -10487,7 +10751,7 @@ async function generateObject(options) {
10487
10751
  usage = asLanguageModelUsage(generateResult.usage);
10488
10752
  warnings = generateResult.warnings;
10489
10753
  resultProviderMetadata = generateResult.providerMetadata;
10490
- request = (_a21 = generateResult.request) != null ? _a21 : {};
10754
+ request = (_a22 = generateResult.request) != null ? _a22 : {};
10491
10755
  response = generateResult.responseData;
10492
10756
  reasoning = generateResult.reasoning;
10493
10757
  logWarnings({
@@ -10550,9 +10814,9 @@ var DefaultGenerateObjectResult = class {
10550
10814
  this.reasoning = options.reasoning;
10551
10815
  }
10552
10816
  toJsonResponse(init) {
10553
- var _a21;
10817
+ var _a22;
10554
10818
  return new Response(JSON.stringify(this.object), {
10555
- status: (_a21 = init == null ? void 0 : init.status) != null ? _a21 : 200,
10819
+ status: (_a22 = init == null ? void 0 : init.status) != null ? _a22 : 200,
10556
10820
  headers: prepareHeaders(init == null ? void 0 : init.headers, {
10557
10821
  "content-type": "application/json; charset=utf-8"
10558
10822
  })
@@ -10686,8 +10950,8 @@ function simulateReadableStream({
10686
10950
  chunkDelayInMs = 0,
10687
10951
  _internal
10688
10952
  }) {
10689
- var _a21;
10690
- const delay2 = (_a21 = _internal == null ? void 0 : _internal.delay) != null ? _a21 : delayFunction;
10953
+ var _a22;
10954
+ const delay2 = (_a22 = _internal == null ? void 0 : _internal.delay) != null ? _a22 : delayFunction;
10691
10955
  let index = 0;
10692
10956
  return new ReadableStream({
10693
10957
  async pull(controller) {
@@ -10949,7 +11213,7 @@ var DefaultStreamObjectResult = class {
10949
11213
  const transformedStream = stream.pipeThrough(new TransformStream(transformer)).pipeThrough(
10950
11214
  new TransformStream({
10951
11215
  async transform(chunk, controller) {
10952
- var _a21, _b, _c;
11216
+ var _a22, _b, _c;
10953
11217
  if (typeof chunk === "object" && chunk.type === "stream-start") {
10954
11218
  warnings = chunk.warnings;
10955
11219
  return;
@@ -10999,7 +11263,7 @@ var DefaultStreamObjectResult = class {
10999
11263
  switch (chunk.type) {
11000
11264
  case "response-metadata": {
11001
11265
  fullResponse = {
11002
- id: (_a21 = chunk.id) != null ? _a21 : fullResponse.id,
11266
+ id: (_a22 = chunk.id) != null ? _a22 : fullResponse.id,
11003
11267
  timestamp: (_b = chunk.timestamp) != null ? _b : fullResponse.timestamp,
11004
11268
  modelId: (_c = chunk.modelId) != null ? _c : fullResponse.modelId
11005
11269
  };
@@ -11273,7 +11537,7 @@ async function generateSpeech({
11273
11537
  abortSignal,
11274
11538
  headers
11275
11539
  }) {
11276
- var _a21;
11540
+ var _a22;
11277
11541
  const resolvedModel = resolveSpeechModel(model);
11278
11542
  if (!resolvedModel) {
11279
11543
  throw new Error("Model could not be resolved");
@@ -11310,10 +11574,10 @@ async function generateSpeech({
11310
11574
  return new DefaultSpeechResult({
11311
11575
  audio: new DefaultGeneratedAudioFile({
11312
11576
  data: result.audio,
11313
- mediaType: (_a21 = detectMediaType({
11577
+ mediaType: (_a22 = detectMediaType({
11314
11578
  data: result.audio,
11315
11579
  signatures: audioMediaTypeSignatures
11316
- })) != null ? _a21 : "audio/mp3"
11580
+ })) != null ? _a22 : "audio/mp3"
11317
11581
  }),
11318
11582
  warnings: result.warnings,
11319
11583
  responses: [result.response],
@@ -11322,11 +11586,11 @@ async function generateSpeech({
11322
11586
  }
11323
11587
  var DefaultSpeechResult = class {
11324
11588
  constructor(options) {
11325
- var _a21;
11589
+ var _a22;
11326
11590
  this.audio = options.audio;
11327
11591
  this.warnings = options.warnings;
11328
11592
  this.responses = options.responses;
11329
- this.providerMetadata = (_a21 = options.providerMetadata) != null ? _a21 : {};
11593
+ this.providerMetadata = (_a22 = options.providerMetadata) != null ? _a22 : {};
11330
11594
  }
11331
11595
  };
11332
11596
 
@@ -11511,7 +11775,7 @@ function smoothStream({
11511
11775
 
11512
11776
  // src/generate-video/generate-video.ts
11513
11777
  import {
11514
- convertBase64ToUint8Array as convertBase64ToUint8Array5,
11778
+ convertBase64ToUint8Array as convertBase64ToUint8Array6,
11515
11779
  withUserAgentSuffix as withUserAgentSuffix8
11516
11780
  } from "@ai-sdk/provider-utils";
11517
11781
  var defaultDownload = createDownload();
@@ -11531,7 +11795,7 @@ async function experimental_generateVideo({
11531
11795
  headers,
11532
11796
  download: downloadFn = defaultDownload
11533
11797
  }) {
11534
- var _a21;
11798
+ var _a22;
11535
11799
  const model = resolveVideoModel(modelArg);
11536
11800
  const headersWithUserAgent = withUserAgentSuffix8(
11537
11801
  headers != null ? headers : {},
@@ -11542,7 +11806,7 @@ async function experimental_generateVideo({
11542
11806
  abortSignal
11543
11807
  });
11544
11808
  const { prompt, image } = normalizePrompt2(promptArg);
11545
- const maxVideosPerCallWithDefault = (_a21 = maxVideosPerCall != null ? maxVideosPerCall : await invokeModelMaxVideosPerCall(model)) != null ? _a21 : 1;
11809
+ const maxVideosPerCallWithDefault = (_a22 = maxVideosPerCall != null ? maxVideosPerCall : await invokeModelMaxVideosPerCall(model)) != null ? _a22 : 1;
11546
11810
  const callCount = Math.ceil(n / maxVideosPerCallWithDefault);
11547
11811
  const callVideoCounts = Array.from({ length: callCount }, (_, index) => {
11548
11812
  const remaining = n - index * maxVideosPerCallWithDefault;
@@ -11664,7 +11928,7 @@ async function experimental_generateVideo({
11664
11928
  };
11665
11929
  }
11666
11930
  function normalizePrompt2(promptArg) {
11667
- var _a21, _b;
11931
+ var _a22, _b;
11668
11932
  if (typeof promptArg === "string") {
11669
11933
  return {
11670
11934
  prompt: promptArg,
@@ -11685,14 +11949,14 @@ function normalizePrompt2(promptArg) {
11685
11949
  image = {
11686
11950
  type: "file",
11687
11951
  mediaType: mediaType != null ? mediaType : "image/png",
11688
- data: convertBase64ToUint8Array5(base64Content != null ? base64Content : "")
11952
+ data: convertBase64ToUint8Array6(base64Content != null ? base64Content : "")
11689
11953
  };
11690
11954
  } else {
11691
- const bytes = convertBase64ToUint8Array5(dataContent);
11692
- const mediaType = (_a21 = detectMediaType({
11955
+ const bytes = convertBase64ToUint8Array6(dataContent);
11956
+ const mediaType = (_a22 = detectMediaType({
11693
11957
  data: bytes,
11694
11958
  signatures: imageMediaTypeSignatures
11695
- })) != null ? _a21 : "image/png";
11959
+ })) != null ? _a22 : "image/png";
11696
11960
  image = {
11697
11961
  type: "file",
11698
11962
  mediaType,
@@ -11752,8 +12016,8 @@ function defaultTransform(text2) {
11752
12016
  return text2.replace(/^```(?:json)?\s*\n?/, "").replace(/\n?```\s*$/, "").trim();
11753
12017
  }
11754
12018
  function extractJsonMiddleware(options) {
11755
- var _a21;
11756
- const transform = (_a21 = options == null ? void 0 : options.transform) != null ? _a21 : defaultTransform;
12019
+ var _a22;
12020
+ const transform = (_a22 = options == null ? void 0 : options.transform) != null ? _a22 : defaultTransform;
11757
12021
  const hasCustomTransform = (options == null ? void 0 : options.transform) !== void 0;
11758
12022
  return {
11759
12023
  specificationVersion: "v3",
@@ -11774,7 +12038,7 @@ function extractJsonMiddleware(options) {
11774
12038
  },
11775
12039
  wrapStream: async ({ doStream }) => {
11776
12040
  const { stream, ...rest } = await doStream();
11777
- const textBlocks = {};
12041
+ const textBlocks = createIdMap();
11778
12042
  const SUFFIX_BUFFER_SIZE = 12;
11779
12043
  return {
11780
12044
  stream: stream.pipeThrough(
@@ -11937,7 +12201,7 @@ function extractReasoningMiddleware({
11937
12201
  },
11938
12202
  wrapStream: async ({ doStream }) => {
11939
12203
  const { stream, ...rest } = await doStream();
11940
- const reasoningExtractions = {};
12204
+ const reasoningExtractions = createIdMap();
11941
12205
  let delayedTextStart;
11942
12206
  return {
11943
12207
  stream: stream.pipeThrough(
@@ -12127,13 +12391,13 @@ function addToolInputExamplesMiddleware({
12127
12391
  return {
12128
12392
  specificationVersion: "v3",
12129
12393
  transformParams: async ({ params }) => {
12130
- var _a21;
12131
- if (!((_a21 = params.tools) == null ? void 0 : _a21.length)) {
12394
+ var _a22;
12395
+ if (!((_a22 = params.tools) == null ? void 0 : _a22.length)) {
12132
12396
  return params;
12133
12397
  }
12134
12398
  const transformedTools = params.tools.map((tool2) => {
12135
- var _a22;
12136
- if (tool2.type !== "function" || !((_a22 = tool2.inputExamples) == null ? void 0 : _a22.length)) {
12399
+ var _a23;
12400
+ if (tool2.type !== "function" || !((_a23 = tool2.inputExamples) == null ? void 0 : _a23.length)) {
12137
12401
  return tool2;
12138
12402
  }
12139
12403
  const formattedExamples = tool2.inputExamples.map((example, index) => format(example, index)).join("\n");
@@ -12180,7 +12444,7 @@ var doWrap = ({
12180
12444
  modelId,
12181
12445
  providerId
12182
12446
  }) => {
12183
- var _a21, _b, _c;
12447
+ var _a22, _b, _c;
12184
12448
  async function doTransform({
12185
12449
  params,
12186
12450
  type
@@ -12189,7 +12453,7 @@ var doWrap = ({
12189
12453
  }
12190
12454
  return {
12191
12455
  specificationVersion: "v3",
12192
- provider: (_a21 = providerId != null ? providerId : overrideProvider == null ? void 0 : overrideProvider({ model })) != null ? _a21 : model.provider,
12456
+ provider: (_a22 = providerId != null ? providerId : overrideProvider == null ? void 0 : overrideProvider({ model })) != null ? _a22 : model.provider,
12193
12457
  modelId: (_b = modelId != null ? modelId : overrideModelId == null ? void 0 : overrideModelId({ model })) != null ? _b : model.modelId,
12194
12458
  supportedUrls: (_c = overrideSupportedUrls == null ? void 0 : overrideSupportedUrls({ model })) != null ? _c : model.supportedUrls,
12195
12459
  async doGenerate(params) {
@@ -12236,7 +12500,7 @@ var doWrap2 = ({
12236
12500
  modelId,
12237
12501
  providerId
12238
12502
  }) => {
12239
- var _a21, _b, _c, _d;
12503
+ var _a22, _b, _c, _d;
12240
12504
  async function doTransform({
12241
12505
  params
12242
12506
  }) {
@@ -12244,7 +12508,7 @@ var doWrap2 = ({
12244
12508
  }
12245
12509
  return {
12246
12510
  specificationVersion: "v3",
12247
- provider: (_a21 = providerId != null ? providerId : overrideProvider == null ? void 0 : overrideProvider({ model })) != null ? _a21 : model.provider,
12511
+ provider: (_a22 = providerId != null ? providerId : overrideProvider == null ? void 0 : overrideProvider({ model })) != null ? _a22 : model.provider,
12248
12512
  modelId: (_b = modelId != null ? modelId : overrideModelId == null ? void 0 : overrideModelId({ model })) != null ? _b : model.modelId,
12249
12513
  maxEmbeddingsPerCall: (_c = overrideMaxEmbeddingsPerCall == null ? void 0 : overrideMaxEmbeddingsPerCall({ model })) != null ? _c : model.maxEmbeddingsPerCall,
12250
12514
  supportsParallelCalls: (_d = overrideSupportsParallelCalls == null ? void 0 : overrideSupportsParallelCalls({ model })) != null ? _d : model.supportsParallelCalls,
@@ -12283,11 +12547,11 @@ var doWrap3 = ({
12283
12547
  modelId,
12284
12548
  providerId
12285
12549
  }) => {
12286
- var _a21, _b, _c;
12550
+ var _a22, _b, _c;
12287
12551
  async function doTransform({ params }) {
12288
12552
  return transformParams ? await transformParams({ params, model }) : params;
12289
12553
  }
12290
- const maxImagesPerCallRaw = (_a21 = overrideMaxImagesPerCall == null ? void 0 : overrideMaxImagesPerCall({ model })) != null ? _a21 : model.maxImagesPerCall;
12554
+ const maxImagesPerCallRaw = (_a22 = overrideMaxImagesPerCall == null ? void 0 : overrideMaxImagesPerCall({ model })) != null ? _a22 : model.maxImagesPerCall;
12291
12555
  const maxImagesPerCall = maxImagesPerCallRaw instanceof Function ? maxImagesPerCallRaw.bind(model) : maxImagesPerCallRaw;
12292
12556
  return {
12293
12557
  specificationVersion: "v3",
@@ -12437,11 +12701,11 @@ function customProvider({
12437
12701
  var experimental_customProvider = customProvider;
12438
12702
 
12439
12703
  // src/registry/no-such-provider-error.ts
12440
- import { AISDKError as AISDKError24, NoSuchModelError as NoSuchModelError3 } from "@ai-sdk/provider";
12441
- var name20 = "AI_NoSuchProviderError";
12442
- var marker20 = `vercel.ai.error.${name20}`;
12443
- var symbol20 = Symbol.for(marker20);
12444
- var _a20;
12704
+ import { AISDKError as AISDKError25, NoSuchModelError as NoSuchModelError3 } from "@ai-sdk/provider";
12705
+ var name21 = "AI_NoSuchProviderError";
12706
+ var marker21 = `vercel.ai.error.${name21}`;
12707
+ var symbol21 = Symbol.for(marker21);
12708
+ var _a21;
12445
12709
  var NoSuchProviderError = class extends NoSuchModelError3 {
12446
12710
  constructor({
12447
12711
  modelId,
@@ -12450,16 +12714,16 @@ var NoSuchProviderError = class extends NoSuchModelError3 {
12450
12714
  availableProviders,
12451
12715
  message = `No such provider: ${providerId} (available providers: ${availableProviders.join()})`
12452
12716
  }) {
12453
- super({ errorName: name20, modelId, modelType, message });
12454
- this[_a20] = true;
12717
+ super({ errorName: name21, modelId, modelType, message });
12718
+ this[_a21] = true;
12455
12719
  this.providerId = providerId;
12456
12720
  this.availableProviders = availableProviders;
12457
12721
  }
12458
12722
  static isInstance(error) {
12459
- return AISDKError24.hasMarker(error, marker20);
12723
+ return AISDKError25.hasMarker(error, marker21);
12460
12724
  }
12461
12725
  };
12462
- _a20 = symbol20;
12726
+ _a21 = symbol21;
12463
12727
 
12464
12728
  // src/registry/provider-registry.ts
12465
12729
  import {
@@ -12522,10 +12786,10 @@ var DefaultProviderRegistry = class {
12522
12786
  return [id.slice(0, index), id.slice(index + this.separator.length)];
12523
12787
  }
12524
12788
  languageModel(id) {
12525
- var _a21, _b;
12789
+ var _a22, _b;
12526
12790
  const [providerId, modelId] = this.splitId(id, "languageModel");
12527
- let model = (_b = (_a21 = this.getProvider(providerId, "languageModel")).languageModel) == null ? void 0 : _b.call(
12528
- _a21,
12791
+ let model = (_b = (_a22 = this.getProvider(providerId, "languageModel")).languageModel) == null ? void 0 : _b.call(
12792
+ _a22,
12529
12793
  modelId
12530
12794
  );
12531
12795
  if (model == null) {
@@ -12540,10 +12804,10 @@ var DefaultProviderRegistry = class {
12540
12804
  return model;
12541
12805
  }
12542
12806
  embeddingModel(id) {
12543
- var _a21;
12807
+ var _a22;
12544
12808
  const [providerId, modelId] = this.splitId(id, "embeddingModel");
12545
12809
  const provider = this.getProvider(providerId, "embeddingModel");
12546
- const model = (_a21 = provider.embeddingModel) == null ? void 0 : _a21.call(provider, modelId);
12810
+ const model = (_a22 = provider.embeddingModel) == null ? void 0 : _a22.call(provider, modelId);
12547
12811
  if (model == null) {
12548
12812
  throw new NoSuchModelError4({
12549
12813
  modelId: id,
@@ -12553,10 +12817,10 @@ var DefaultProviderRegistry = class {
12553
12817
  return model;
12554
12818
  }
12555
12819
  imageModel(id) {
12556
- var _a21;
12820
+ var _a22;
12557
12821
  const [providerId, modelId] = this.splitId(id, "imageModel");
12558
12822
  const provider = this.getProvider(providerId, "imageModel");
12559
- let model = (_a21 = provider.imageModel) == null ? void 0 : _a21.call(provider, modelId);
12823
+ let model = (_a22 = provider.imageModel) == null ? void 0 : _a22.call(provider, modelId);
12560
12824
  if (model == null) {
12561
12825
  throw new NoSuchModelError4({ modelId: id, modelType: "imageModel" });
12562
12826
  }
@@ -12569,10 +12833,10 @@ var DefaultProviderRegistry = class {
12569
12833
  return model;
12570
12834
  }
12571
12835
  transcriptionModel(id) {
12572
- var _a21;
12836
+ var _a22;
12573
12837
  const [providerId, modelId] = this.splitId(id, "transcriptionModel");
12574
12838
  const provider = this.getProvider(providerId, "transcriptionModel");
12575
- const model = (_a21 = provider.transcriptionModel) == null ? void 0 : _a21.call(provider, modelId);
12839
+ const model = (_a22 = provider.transcriptionModel) == null ? void 0 : _a22.call(provider, modelId);
12576
12840
  if (model == null) {
12577
12841
  throw new NoSuchModelError4({
12578
12842
  modelId: id,
@@ -12582,20 +12846,20 @@ var DefaultProviderRegistry = class {
12582
12846
  return model;
12583
12847
  }
12584
12848
  speechModel(id) {
12585
- var _a21;
12849
+ var _a22;
12586
12850
  const [providerId, modelId] = this.splitId(id, "speechModel");
12587
12851
  const provider = this.getProvider(providerId, "speechModel");
12588
- const model = (_a21 = provider.speechModel) == null ? void 0 : _a21.call(provider, modelId);
12852
+ const model = (_a22 = provider.speechModel) == null ? void 0 : _a22.call(provider, modelId);
12589
12853
  if (model == null) {
12590
12854
  throw new NoSuchModelError4({ modelId: id, modelType: "speechModel" });
12591
12855
  }
12592
12856
  return model;
12593
12857
  }
12594
12858
  rerankingModel(id) {
12595
- var _a21;
12859
+ var _a22;
12596
12860
  const [providerId, modelId] = this.splitId(id, "rerankingModel");
12597
12861
  const provider = this.getProvider(providerId, "rerankingModel");
12598
- const model = (_a21 = provider.rerankingModel) == null ? void 0 : _a21.call(provider, modelId);
12862
+ const model = (_a22 = provider.rerankingModel) == null ? void 0 : _a22.call(provider, modelId);
12599
12863
  if (model == null) {
12600
12864
  throw new NoSuchModelError4({ modelId: id, modelType: "rerankingModel" });
12601
12865
  }
@@ -12653,7 +12917,7 @@ async function rerank({
12653
12917
  }),
12654
12918
  tracer,
12655
12919
  fn: async () => {
12656
- var _a21, _b;
12920
+ var _a22, _b;
12657
12921
  const { ranking, response, providerMetadata, warnings } = await retry(
12658
12922
  () => recordSpan({
12659
12923
  name: "ai.rerank.doRerank",
@@ -12717,7 +12981,7 @@ async function rerank({
12717
12981
  providerMetadata,
12718
12982
  response: {
12719
12983
  id: response == null ? void 0 : response.id,
12720
- timestamp: (_a21 = response == null ? void 0 : response.timestamp) != null ? _a21 : /* @__PURE__ */ new Date(),
12984
+ timestamp: (_a22 = response == null ? void 0 : response.timestamp) != null ? _a22 : /* @__PURE__ */ new Date(),
12721
12985
  modelId: (_b = response == null ? void 0 : response.modelId) != null ? _b : model.modelId,
12722
12986
  headers: response == null ? void 0 : response.headers,
12723
12987
  body: response == null ? void 0 : response.body
@@ -12767,16 +13031,16 @@ async function transcribe({
12767
13031
  const audioData = audio instanceof URL ? (await downloadFn({ url: audio, abortSignal })).data : convertDataContentToUint8Array(audio);
12768
13032
  const result = await retry(
12769
13033
  () => {
12770
- var _a21;
13034
+ var _a22;
12771
13035
  return resolvedModel.doGenerate({
12772
13036
  audio: audioData,
12773
13037
  abortSignal,
12774
13038
  headers: headersWithUserAgent,
12775
13039
  providerOptions,
12776
- mediaType: (_a21 = detectMediaType({
13040
+ mediaType: (_a22 = detectMediaType({
12777
13041
  data: audioData,
12778
13042
  signatures: audioMediaTypeSignatures
12779
- })) != null ? _a21 : "audio/wav"
13043
+ })) != null ? _a22 : "audio/wav"
12780
13044
  });
12781
13045
  }
12782
13046
  );
@@ -12800,14 +13064,14 @@ async function transcribe({
12800
13064
  }
12801
13065
  var DefaultTranscriptionResult = class {
12802
13066
  constructor(options) {
12803
- var _a21;
13067
+ var _a22;
12804
13068
  this.text = options.text;
12805
13069
  this.segments = options.segments;
12806
13070
  this.language = options.language;
12807
13071
  this.durationInSeconds = options.durationInSeconds;
12808
13072
  this.warnings = options.warnings;
12809
13073
  this.responses = options.responses;
12810
- this.providerMetadata = (_a21 = options.providerMetadata) != null ? _a21 : {};
13074
+ this.providerMetadata = (_a22 = options.providerMetadata) != null ? _a22 : {};
12811
13075
  }
12812
13076
  };
12813
13077
 
@@ -12850,7 +13114,7 @@ async function callCompletionApi({
12850
13114
  onError,
12851
13115
  fetch: fetch2 = getOriginalFetch()
12852
13116
  }) {
12853
- var _a21;
13117
+ var _a22;
12854
13118
  try {
12855
13119
  setLoading(true);
12856
13120
  setError(void 0);
@@ -12878,7 +13142,7 @@ async function callCompletionApi({
12878
13142
  });
12879
13143
  if (!response.ok) {
12880
13144
  throw new Error(
12881
- (_a21 = await response.text()) != null ? _a21 : "Failed to fetch the chat response."
13145
+ (_a22 = await response.text()) != null ? _a22 : "Failed to fetch the chat response."
12882
13146
  );
12883
13147
  }
12884
13148
  if (!response.body) {
@@ -12964,12 +13228,12 @@ async function convertFileListToFileUIParts(files) {
12964
13228
  }
12965
13229
  return Promise.all(
12966
13230
  Array.from(files).map(async (file) => {
12967
- const { name: name21, type } = file;
13231
+ const { name: name22, type } = file;
12968
13232
  const dataUrl = await new Promise((resolve3, reject) => {
12969
13233
  const reader = new FileReader();
12970
13234
  reader.onload = (readerEvent) => {
12971
- var _a21;
12972
- resolve3((_a21 = readerEvent.target) == null ? void 0 : _a21.result);
13235
+ var _a22;
13236
+ resolve3((_a22 = readerEvent.target) == null ? void 0 : _a22.result);
12973
13237
  };
12974
13238
  reader.onerror = (error) => reject(error);
12975
13239
  reader.readAsDataURL(file);
@@ -12977,7 +13241,7 @@ async function convertFileListToFileUIParts(files) {
12977
13241
  return {
12978
13242
  type: "file",
12979
13243
  mediaType: type,
12980
- filename: name21,
13244
+ filename: name22,
12981
13245
  url: dataUrl
12982
13246
  };
12983
13247
  })
@@ -13014,7 +13278,7 @@ var HttpChatTransport = class {
13014
13278
  abortSignal,
13015
13279
  ...options
13016
13280
  }) {
13017
- var _a21, _b, _c, _d, _e;
13281
+ var _a22, _b, _c, _d, _e;
13018
13282
  const resolvedBody = await resolve2(this.body);
13019
13283
  const resolvedHeaders = await resolve2(this.headers);
13020
13284
  const resolvedCredentials = await resolve2(this.credentials);
@@ -13022,7 +13286,7 @@ var HttpChatTransport = class {
13022
13286
  ...normalizeHeaders(resolvedHeaders),
13023
13287
  ...normalizeHeaders(options.headers)
13024
13288
  };
13025
- const preparedRequest = await ((_a21 = this.prepareSendMessagesRequest) == null ? void 0 : _a21.call(this, {
13289
+ const preparedRequest = await ((_a22 = this.prepareSendMessagesRequest) == null ? void 0 : _a22.call(this, {
13026
13290
  api: this.api,
13027
13291
  id: options.chatId,
13028
13292
  messages: options.messages,
@@ -13066,7 +13330,7 @@ var HttpChatTransport = class {
13066
13330
  return this.processResponseStream(response.body);
13067
13331
  }
13068
13332
  async reconnectToStream(options) {
13069
- var _a21, _b, _c, _d, _e;
13333
+ var _a22, _b, _c, _d, _e;
13070
13334
  const resolvedBody = await resolve2(this.body);
13071
13335
  const resolvedHeaders = await resolve2(this.headers);
13072
13336
  const resolvedCredentials = await resolve2(this.credentials);
@@ -13074,7 +13338,7 @@ var HttpChatTransport = class {
13074
13338
  ...normalizeHeaders(resolvedHeaders),
13075
13339
  ...normalizeHeaders(options.headers)
13076
13340
  };
13077
- const preparedRequest = await ((_a21 = this.prepareReconnectToStreamRequest) == null ? void 0 : _a21.call(this, {
13341
+ const preparedRequest = await ((_a22 = this.prepareReconnectToStreamRequest) == null ? void 0 : _a22.call(this, {
13078
13342
  api: this.api,
13079
13343
  id: options.chatId,
13080
13344
  body: { ...resolvedBody, ...options.body },
@@ -13152,11 +13416,11 @@ var AbstractChat = class {
13152
13416
  * If a messageId is provided, the message will be replaced.
13153
13417
  */
13154
13418
  this.sendMessage = async (message, options) => {
13155
- var _a21, _b, _c, _d;
13419
+ var _a22, _b, _c, _d;
13156
13420
  if (message == null) {
13157
13421
  await this.makeRequest({
13158
13422
  trigger: "submit-message",
13159
- messageId: (_a21 = this.lastMessage) == null ? void 0 : _a21.id,
13423
+ messageId: (_a22 = this.lastMessage) == null ? void 0 : _a22.id,
13160
13424
  ...options
13161
13425
  });
13162
13426
  return;
@@ -13266,11 +13530,11 @@ var AbstractChat = class {
13266
13530
  }
13267
13531
  if (this.status !== "streaming" && this.status !== "submitted" && this.sendAutomaticallyWhen) {
13268
13532
  this.shouldSendAutomatically().then((shouldSend) => {
13269
- var _a21;
13533
+ var _a22;
13270
13534
  if (shouldSend) {
13271
13535
  this.makeRequest({
13272
13536
  trigger: "submit-message",
13273
- messageId: (_a21 = this.lastMessage) == null ? void 0 : _a21.id,
13537
+ messageId: (_a22 = this.lastMessage) == null ? void 0 : _a22.id,
13274
13538
  ...options
13275
13539
  });
13276
13540
  }
@@ -13296,11 +13560,11 @@ var AbstractChat = class {
13296
13560
  }
13297
13561
  if (this.status !== "streaming" && this.status !== "submitted" && this.sendAutomaticallyWhen) {
13298
13562
  this.shouldSendAutomatically().then((shouldSend) => {
13299
- var _a21;
13563
+ var _a22;
13300
13564
  if (shouldSend) {
13301
13565
  this.makeRequest({
13302
13566
  trigger: "submit-message",
13303
- messageId: (_a21 = this.lastMessage) == null ? void 0 : _a21.id,
13567
+ messageId: (_a22 = this.lastMessage) == null ? void 0 : _a22.id,
13304
13568
  ...options
13305
13569
  });
13306
13570
  }
@@ -13313,10 +13577,10 @@ var AbstractChat = class {
13313
13577
  * Abort the current request immediately, keep the generated tokens if any.
13314
13578
  */
13315
13579
  this.stop = async () => {
13316
- var _a21;
13580
+ var _a22;
13317
13581
  if (this.status !== "streaming" && this.status !== "submitted")
13318
13582
  return;
13319
- if ((_a21 = this.activeResponse) == null ? void 0 : _a21.abortController) {
13583
+ if ((_a22 = this.activeResponse) == null ? void 0 : _a22.abortController) {
13320
13584
  this.activeResponse.abortController.abort();
13321
13585
  }
13322
13586
  };
@@ -13382,7 +13646,7 @@ var AbstractChat = class {
13382
13646
  body,
13383
13647
  messageId
13384
13648
  }) {
13385
- var _a21, _b, _c;
13649
+ var _a22, _b, _c;
13386
13650
  let resumeStream;
13387
13651
  if (trigger === "resume-stream") {
13388
13652
  try {
@@ -13442,9 +13706,9 @@ var AbstractChat = class {
13442
13706
  () => job({
13443
13707
  state: activeResponse.state,
13444
13708
  write: () => {
13445
- var _a22;
13709
+ var _a23;
13446
13710
  this.setStatus({ status: "streaming" });
13447
- const replaceLastMessage = activeResponse.state.message.id === ((_a22 = this.lastMessage) == null ? void 0 : _a22.id);
13711
+ const replaceLastMessage = activeResponse.state.message.id === ((_a23 = this.lastMessage) == null ? void 0 : _a23.id);
13448
13712
  if (replaceLastMessage) {
13449
13713
  this.state.replaceMessage(
13450
13714
  this.state.messages.length - 1,
@@ -13496,7 +13760,7 @@ var AbstractChat = class {
13496
13760
  isAbort,
13497
13761
  isDisconnect,
13498
13762
  isError,
13499
- finishReason: (_a21 = this.activeResponse) == null ? void 0 : _a21.state.finishReason
13763
+ finishReason: (_a22 = this.activeResponse) == null ? void 0 : _a22.state.finishReason
13500
13764
  });
13501
13765
  } catch (err) {
13502
13766
  console.error(err);
@@ -13634,7 +13898,7 @@ var TextStreamChatTransport = class extends HttpChatTransport {
13634
13898
  }
13635
13899
  };
13636
13900
  export {
13637
- AISDKError21 as AISDKError,
13901
+ AISDKError22 as AISDKError,
13638
13902
  APICallError,
13639
13903
  AbstractChat,
13640
13904
  DefaultChatTransport,
@@ -13651,6 +13915,7 @@ export {
13651
13915
  InvalidResponseDataError,
13652
13916
  InvalidStreamPartError,
13653
13917
  InvalidToolApprovalError,
13918
+ InvalidToolApprovalSignatureError,
13654
13919
  InvalidToolInputError,
13655
13920
  JSONParseError,
13656
13921
  JsonToSseTransformStream,
@@ -13682,7 +13947,7 @@ export {
13682
13947
  UnsupportedFunctionalityError,
13683
13948
  UnsupportedModelVersionError,
13684
13949
  addToolInputExamplesMiddleware,
13685
- asSchema5 as asSchema,
13950
+ asSchema6 as asSchema,
13686
13951
  assistantModelMessageSchema,
13687
13952
  bindTelemetryIntegration,
13688
13953
  callCompletionApi,