ai 6.0.289 → 6.0.291

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 (33) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/index.d.mts +13 -0
  3. package/dist/index.d.ts +13 -0
  4. package/dist/index.js +326 -250
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +263 -182
  7. package/dist/index.mjs.map +1 -1
  8. package/dist/internal/index.js +4 -2
  9. package/dist/internal/index.js.map +1 -1
  10. package/dist/internal/index.mjs +4 -2
  11. package/dist/internal/index.mjs.map +1 -1
  12. package/docs/03-ai-sdk-core/16-mcp-tools.mdx +57 -0
  13. package/docs/04-ai-sdk-ui/03-chatbot-tool-usage.mdx +7 -0
  14. package/package.json +4 -3
  15. package/src/embed/embed-many.ts +19 -3
  16. package/src/generate-speech/generated-audio-file.ts +0 -8
  17. package/src/generate-text/generated-file.ts +0 -4
  18. package/src/generate-text/parse-tool-call.ts +30 -23
  19. package/src/generate-text/stream-text.ts +9 -1
  20. package/src/generate-text/to-response-messages.ts +7 -0
  21. package/src/generate-text/tool-call.ts +26 -0
  22. package/src/generate-text/validate-tool-approvals.ts +20 -2
  23. package/src/middleware/extract-reasoning-middleware.ts +1 -1
  24. package/src/middleware/wrap-embedding-model.ts +12 -2
  25. package/src/model/get-embedding-model-provider-options-transformer.ts +17 -0
  26. package/src/prompt/content-part.ts +2 -0
  27. package/src/ui/chat.ts +108 -17
  28. package/src/ui/convert-to-model-messages.ts +8 -0
  29. package/src/ui/process-ui-message-stream.ts +6 -0
  30. package/src/ui/ui-messages.ts +10 -0
  31. package/src/ui/validate-ui-messages.ts +79 -114
  32. package/src/ui-message-stream/ui-message-chunks.ts +2 -0
  33. package/src/util/write-to-server-response.ts +0 -2
package/dist/index.js CHANGED
@@ -70,7 +70,7 @@ __export(src_exports, {
70
70
  UnsupportedFunctionalityError: () => import_provider23.UnsupportedFunctionalityError,
71
71
  UnsupportedModelVersionError: () => UnsupportedModelVersionError,
72
72
  addToolInputExamplesMiddleware: () => addToolInputExamplesMiddleware,
73
- asSchema: () => import_provider_utils43.asSchema,
73
+ asSchema: () => import_provider_utils44.asSchema,
74
74
  assistantModelMessageSchema: () => assistantModelMessageSchema,
75
75
  bindTelemetryIntegration: () => bindTelemetryIntegration,
76
76
  callCompletionApi: () => callCompletionApi,
@@ -82,7 +82,7 @@ __export(src_exports, {
82
82
  createAgentUIStreamResponse: () => createAgentUIStreamResponse,
83
83
  createDownload: () => createDownload,
84
84
  createGateway: () => import_gateway4.createGateway,
85
- createIdGenerator: () => import_provider_utils43.createIdGenerator,
85
+ createIdGenerator: () => import_provider_utils44.createIdGenerator,
86
86
  createProviderRegistry: () => createProviderRegistry,
87
87
  createTextStreamResponse: () => createTextStreamResponse,
88
88
  createUIMessageStream: () => createUIMessageStream,
@@ -90,7 +90,7 @@ __export(src_exports, {
90
90
  customProvider: () => customProvider,
91
91
  defaultEmbeddingSettingsMiddleware: () => defaultEmbeddingSettingsMiddleware,
92
92
  defaultSettingsMiddleware: () => defaultSettingsMiddleware,
93
- dynamicTool: () => import_provider_utils43.dynamicTool,
93
+ dynamicTool: () => import_provider_utils44.dynamicTool,
94
94
  embed: () => embed,
95
95
  embedMany: () => embedMany,
96
96
  experimental_createProviderRegistry: () => experimental_createProviderRegistry,
@@ -102,7 +102,7 @@ __export(src_exports, {
102
102
  extractJsonMiddleware: () => extractJsonMiddleware,
103
103
  extractReasoningMiddleware: () => extractReasoningMiddleware,
104
104
  gateway: () => import_gateway4.gateway,
105
- generateId: () => import_provider_utils43.generateId,
105
+ generateId: () => import_provider_utils44.generateId,
106
106
  generateImage: () => generateImage,
107
107
  generateObject: () => generateObject,
108
108
  generateText: () => generateText,
@@ -121,11 +121,11 @@ __export(src_exports, {
121
121
  isTextUIPart: () => isTextUIPart,
122
122
  isToolOrDynamicToolUIPart: () => isToolOrDynamicToolUIPart,
123
123
  isToolUIPart: () => isToolUIPart,
124
- jsonSchema: () => import_provider_utils43.jsonSchema,
124
+ jsonSchema: () => import_provider_utils44.jsonSchema,
125
125
  lastAssistantMessageIsCompleteWithApprovalResponses: () => lastAssistantMessageIsCompleteWithApprovalResponses,
126
126
  lastAssistantMessageIsCompleteWithToolCalls: () => lastAssistantMessageIsCompleteWithToolCalls,
127
127
  modelMessageSchema: () => modelMessageSchema,
128
- parseJsonEventStream: () => import_provider_utils43.parseJsonEventStream,
128
+ parseJsonEventStream: () => import_provider_utils44.parseJsonEventStream,
129
129
  parsePartialJson: () => parsePartialJson,
130
130
  pipeAgentUIStreamToResponse: () => pipeAgentUIStreamToResponse,
131
131
  pipeTextStreamToResponse: () => pipeTextStreamToResponse,
@@ -142,7 +142,7 @@ __export(src_exports, {
142
142
  streamObject: () => streamObject,
143
143
  streamText: () => streamText,
144
144
  systemModelMessageSchema: () => systemModelMessageSchema,
145
- tool: () => import_provider_utils43.tool,
145
+ tool: () => import_provider_utils44.tool,
146
146
  toolModelMessageSchema: () => toolModelMessageSchema,
147
147
  uiMessageChunkSchema: () => uiMessageChunkSchema,
148
148
  userModelMessageSchema: () => userModelMessageSchema,
@@ -151,11 +151,11 @@ __export(src_exports, {
151
151
  wrapImageModel: () => wrapImageModel,
152
152
  wrapLanguageModel: () => wrapLanguageModel,
153
153
  wrapProvider: () => wrapProvider,
154
- zodSchema: () => import_provider_utils43.zodSchema
154
+ zodSchema: () => import_provider_utils44.zodSchema
155
155
  });
156
156
  module.exports = __toCommonJS(src_exports);
157
157
  var import_gateway4 = require("@ai-sdk/gateway");
158
- var import_provider_utils43 = require("@ai-sdk/provider-utils");
158
+ var import_provider_utils44 = require("@ai-sdk/provider-utils");
159
159
 
160
160
  // src/agent/tool-loop-agent.ts
161
161
  var import_provider_utils21 = require("@ai-sdk/provider-utils");
@@ -1334,7 +1334,7 @@ function detectMediaType({
1334
1334
  var import_provider_utils3 = require("@ai-sdk/provider-utils");
1335
1335
 
1336
1336
  // src/version.ts
1337
- var VERSION = true ? "6.0.289" : "0.0.0-test";
1337
+ var VERSION = true ? "6.0.291" : "0.0.0-test";
1338
1338
 
1339
1339
  // src/util/download/download.ts
1340
1340
  var download = async ({
@@ -2286,7 +2286,9 @@ var toolResultPartSchema = import_v44.z.object({
2286
2286
  var toolApprovalRequestSchema = import_v44.z.object({
2287
2287
  type: import_v44.z.literal("tool-approval-request"),
2288
2288
  approvalId: import_v44.z.string(),
2289
- toolCallId: import_v44.z.string()
2289
+ toolCallId: import_v44.z.string(),
2290
+ signature: import_v44.z.string().optional(),
2291
+ inputSchemaInput: import_v44.z.unknown().optional()
2290
2292
  });
2291
2293
  var toolApprovalResponseSchema = import_v44.z.object({
2292
2294
  type: import_v44.z.literal("tool-approval-response"),
@@ -3244,8 +3246,8 @@ var DefaultGeneratedFile = class {
3244
3246
  }
3245
3247
  };
3246
3248
  var DefaultGeneratedFileWithType = class extends DefaultGeneratedFile {
3247
- constructor(options) {
3248
- super(options);
3249
+ constructor() {
3250
+ super(...arguments);
3249
3251
  this.type = "file";
3250
3252
  }
3251
3253
  };
@@ -3367,6 +3369,43 @@ async function maybeSignApproval({
3367
3369
 
3368
3370
  // src/generate-text/validate-tool-approvals.ts
3369
3371
  var import_provider_utils12 = require("@ai-sdk/provider-utils");
3372
+
3373
+ // src/util/is-deep-equal-data.ts
3374
+ function isDeepEqualData(obj1, obj2) {
3375
+ if (obj1 === obj2)
3376
+ return true;
3377
+ if (obj1 == null || obj2 == null)
3378
+ return false;
3379
+ if (typeof obj1 !== "object" && typeof obj2 !== "object")
3380
+ return obj1 === obj2;
3381
+ if (obj1.constructor !== obj2.constructor)
3382
+ return false;
3383
+ if (obj1 instanceof Date && obj2 instanceof Date) {
3384
+ return obj1.getTime() === obj2.getTime();
3385
+ }
3386
+ if (Array.isArray(obj1)) {
3387
+ if (obj1.length !== obj2.length)
3388
+ return false;
3389
+ for (let i = 0; i < obj1.length; i++) {
3390
+ if (!isDeepEqualData(obj1[i], obj2[i]))
3391
+ return false;
3392
+ }
3393
+ return true;
3394
+ }
3395
+ const keys1 = Object.keys(obj1);
3396
+ const keys2 = Object.keys(obj2);
3397
+ if (keys1.length !== keys2.length)
3398
+ return false;
3399
+ for (const key of keys1) {
3400
+ if (!keys2.includes(key))
3401
+ return false;
3402
+ if (!isDeepEqualData(obj1[key], obj2[key]))
3403
+ return false;
3404
+ }
3405
+ return true;
3406
+ }
3407
+
3408
+ // src/generate-text/validate-tool-approvals.ts
3370
3409
  async function validateApprovedToolApprovals({
3371
3410
  approvedToolApprovals,
3372
3411
  tools,
@@ -3406,17 +3445,29 @@ async function validateApprovedToolApprovals({
3406
3445
  }
3407
3446
  }
3408
3447
  if (tool2 != null && typeof tool2.execute === "function" && tool2.inputSchema != null) {
3448
+ const hasInputSchemaInput = Object.prototype.hasOwnProperty.call(
3449
+ approvalRequest,
3450
+ "inputSchemaInput"
3451
+ );
3409
3452
  const validation = await (0, import_provider_utils12.safeValidateTypes)({
3410
- value: toolCall.input,
3453
+ value: hasInputSchemaInput ? approvalRequest.inputSchemaInput : toolCall.input,
3411
3454
  schema: (0, import_provider_utils12.asSchema)(tool2.inputSchema)
3412
3455
  });
3456
+ let validationError;
3413
3457
  if (!validation.success) {
3458
+ validationError = validation.error;
3459
+ } else if (!isDeepEqualData(validation.value, toolCall.input)) {
3460
+ validationError = new Error(
3461
+ "Approved tool input does not match the validated schema output."
3462
+ );
3463
+ }
3464
+ if (validationError != null) {
3414
3465
  invalid.push({
3415
3466
  ...approval,
3416
3467
  error: new InvalidToolInputError({
3417
3468
  toolName: toolCall.toolName,
3418
3469
  toolInput: JSON.stringify(toolCall.input),
3419
- cause: validation.error
3470
+ cause: validationError
3420
3471
  })
3421
3472
  });
3422
3473
  continue;
@@ -4132,6 +4183,22 @@ var json = ({
4132
4183
 
4133
4184
  // src/generate-text/parse-tool-call.ts
4134
4185
  var import_provider_utils15 = require("@ai-sdk/provider-utils");
4186
+
4187
+ // src/generate-text/tool-call.ts
4188
+ var inputSchemaInputSymbol = Symbol("ai-sdk-tool-call-input-schema-input");
4189
+ function setToolCallInputSchemaInput(toolCall, inputSchemaInput) {
4190
+ Object.defineProperty(toolCall, inputSchemaInputSymbol, {
4191
+ value: inputSchemaInput
4192
+ });
4193
+ return toolCall;
4194
+ }
4195
+ function getToolCallInputSchemaInput(toolCall) {
4196
+ return inputSchemaInputSymbol in toolCall ? {
4197
+ value: toolCall[inputSchemaInputSymbol]
4198
+ } : void 0;
4199
+ }
4200
+
4201
+ // src/generate-text/parse-tool-call.ts
4135
4202
  async function parseToolCall({
4136
4203
  toolCall,
4137
4204
  tools,
@@ -4238,26 +4305,29 @@ async function doParseToolCall({
4238
4305
  cause: parseResult.error
4239
4306
  });
4240
4307
  }
4241
- return tool2.type === "dynamic" ? {
4242
- type: "tool-call",
4243
- toolCallId: toolCall.toolCallId,
4244
- toolName: toolCall.toolName,
4245
- input: parseResult.value,
4246
- providerExecuted: toolCall.providerExecuted,
4247
- providerMetadata: toolCall.providerMetadata,
4248
- ...tool2.metadata != null ? { toolMetadata: tool2.metadata } : {},
4249
- dynamic: true,
4250
- title: tool2.title
4251
- } : {
4252
- type: "tool-call",
4253
- toolCallId: toolCall.toolCallId,
4254
- toolName,
4255
- input: parseResult.value,
4256
- providerExecuted: toolCall.providerExecuted,
4257
- providerMetadata: toolCall.providerMetadata,
4258
- ...tool2.metadata != null ? { toolMetadata: tool2.metadata } : {},
4259
- title: tool2.title
4260
- };
4308
+ return setToolCallInputSchemaInput(
4309
+ tool2.type === "dynamic" ? {
4310
+ type: "tool-call",
4311
+ toolCallId: toolCall.toolCallId,
4312
+ toolName: toolCall.toolName,
4313
+ input: parseResult.value,
4314
+ providerExecuted: toolCall.providerExecuted,
4315
+ providerMetadata: toolCall.providerMetadata,
4316
+ ...tool2.metadata != null ? { toolMetadata: tool2.metadata } : {},
4317
+ dynamic: true,
4318
+ title: tool2.title
4319
+ } : {
4320
+ type: "tool-call",
4321
+ toolCallId: toolCall.toolCallId,
4322
+ toolName,
4323
+ input: parseResult.value,
4324
+ providerExecuted: toolCall.providerExecuted,
4325
+ providerMetadata: toolCall.providerMetadata,
4326
+ ...tool2.metadata != null ? { toolMetadata: tool2.metadata } : {},
4327
+ title: tool2.title
4328
+ },
4329
+ parseResult.rawValue
4330
+ );
4261
4331
  }
4262
4332
 
4263
4333
  // src/generate-text/prepare-step-call-settings.ts
@@ -4463,11 +4533,13 @@ async function toResponseMessages({
4463
4533
  break;
4464
4534
  }
4465
4535
  case "tool-approval-request":
4536
+ const inputSchemaInput = getToolCallInputSchemaInput(part.toolCall);
4466
4537
  content.push({
4467
4538
  type: "tool-approval-request",
4468
4539
  approvalId: part.approvalId,
4469
4540
  toolCallId: part.toolCall.toolCallId,
4470
- ...part.signature != null ? { signature: part.signature } : {}
4541
+ ...part.signature != null ? { signature: part.signature } : {},
4542
+ ...inputSchemaInput != null && !isDeepEqualData(inputSchemaInput.value, part.toolCall.input) ? { inputSchemaInput: inputSchemaInput.value } : {}
4471
4543
  });
4472
4544
  break;
4473
4545
  }
@@ -5588,8 +5660,6 @@ function writeToServerResponse({
5588
5660
  });
5589
5661
  }
5590
5662
  }
5591
- } catch (error) {
5592
- throw error;
5593
5663
  } finally {
5594
5664
  response.end();
5595
5665
  }
@@ -5753,6 +5823,7 @@ var uiMessageChunkSchema = (0, import_provider_utils17.lazySchema)(
5753
5823
  approvalId: import_v47.z.string(),
5754
5824
  toolCallId: import_v47.z.string(),
5755
5825
  approvalDescriptor: import_v47.z.unknown().optional(),
5826
+ inputSchemaInput: import_v47.z.unknown().optional(),
5756
5827
  signature: import_v47.z.string().optional()
5757
5828
  }),
5758
5829
  import_v47.z.looseObject({
@@ -6333,6 +6404,10 @@ function processUIMessageStream({
6333
6404
  toolInvocation.approval = {
6334
6405
  id: chunk.approvalId,
6335
6406
  ...chunk.approvalDescriptor != null ? { descriptor: chunk.approvalDescriptor } : {},
6407
+ ...Object.prototype.hasOwnProperty.call(
6408
+ chunk,
6409
+ "inputSchemaInput"
6410
+ ) ? { inputSchemaInput: chunk.inputSchemaInput } : {},
6336
6411
  ...chunk.signature != null ? { signature: chunk.signature } : {}
6337
6412
  };
6338
6413
  write();
@@ -9012,10 +9087,14 @@ var DefaultStreamTextResult = class {
9012
9087
  break;
9013
9088
  }
9014
9089
  case "tool-approval-request": {
9090
+ const inputSchemaInput = getToolCallInputSchemaInput(
9091
+ part.toolCall
9092
+ );
9015
9093
  controller.enqueue({
9016
9094
  type: "tool-approval-request",
9017
9095
  approvalId: part.approvalId,
9018
9096
  toolCallId: part.toolCall.toolCallId,
9097
+ ...inputSchemaInput != null && !isDeepEqualData(inputSchemaInput.value, part.toolCall.input) ? { inputSchemaInput: inputSchemaInput.value } : {},
9019
9098
  ...part.signature != null ? { signature: part.signature } : {}
9020
9099
  });
9021
9100
  break;
@@ -9606,6 +9685,12 @@ async function convertToModelMessages(messages, options) {
9606
9685
  type: "tool-approval-request",
9607
9686
  approvalId: part.approval.id,
9608
9687
  toolCallId: part.toolCallId,
9688
+ ...Object.prototype.hasOwnProperty.call(
9689
+ part.approval,
9690
+ "inputSchemaInput"
9691
+ ) ? {
9692
+ inputSchemaInput: part.approval.inputSchemaInput
9693
+ } : {},
9609
9694
  ...part.approval.signature != null ? { signature: part.approval.signature } : {}
9610
9695
  });
9611
9696
  }
@@ -9754,8 +9839,29 @@ function asDynamicToolPart(toolPart) {
9754
9839
  toolName: type.slice(5)
9755
9840
  };
9756
9841
  }
9757
- var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
9758
- () => (0, import_provider_utils24.zodSchema)(
9842
+ function getToolPartInputSchemaInput(toolPart) {
9843
+ return toolPart.approval != null && Object.prototype.hasOwnProperty.call(toolPart.approval, "inputSchemaInput") ? { value: toolPart.approval.inputSchemaInput } : void 0;
9844
+ }
9845
+ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(() => {
9846
+ const approvalRequestedSchema = import_v48.z.object({
9847
+ id: import_v48.z.string(),
9848
+ approved: import_v48.z.never().optional(),
9849
+ descriptor: import_v48.z.unknown().optional(),
9850
+ reason: import_v48.z.never().optional(),
9851
+ signature: import_v48.z.string().optional(),
9852
+ inputSchemaInput: import_v48.z.unknown().optional()
9853
+ });
9854
+ const approvalRespondedSchema = approvalRequestedSchema.extend({
9855
+ approved: import_v48.z.boolean(),
9856
+ reason: import_v48.z.string().optional()
9857
+ });
9858
+ const approvalGrantedSchema = approvalRespondedSchema.extend({
9859
+ approved: import_v48.z.literal(true)
9860
+ });
9861
+ const approvalDeniedSchema = approvalRespondedSchema.extend({
9862
+ approved: import_v48.z.literal(false)
9863
+ });
9864
+ return (0, import_provider_utils24.zodSchema)(
9759
9865
  import_v48.z.array(
9760
9866
  import_v48.z.object({
9761
9867
  id: import_v48.z.string(),
@@ -9843,13 +9949,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
9843
9949
  output: import_v48.z.never().optional(),
9844
9950
  errorText: import_v48.z.never().optional(),
9845
9951
  callProviderMetadata: providerMetadataSchema.optional(),
9846
- approval: import_v48.z.object({
9847
- id: import_v48.z.string(),
9848
- approved: import_v48.z.never().optional(),
9849
- descriptor: import_v48.z.unknown().optional(),
9850
- reason: import_v48.z.never().optional(),
9851
- signature: import_v48.z.string().optional()
9852
- })
9952
+ approval: approvalRequestedSchema
9853
9953
  }),
9854
9954
  import_v48.z.object({
9855
9955
  type: import_v48.z.literal("dynamic-tool"),
@@ -9862,13 +9962,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
9862
9962
  output: import_v48.z.never().optional(),
9863
9963
  errorText: import_v48.z.never().optional(),
9864
9964
  callProviderMetadata: providerMetadataSchema.optional(),
9865
- approval: import_v48.z.object({
9866
- id: import_v48.z.string(),
9867
- approved: import_v48.z.boolean(),
9868
- descriptor: import_v48.z.unknown().optional(),
9869
- reason: import_v48.z.string().optional(),
9870
- signature: import_v48.z.string().optional()
9871
- })
9965
+ approval: approvalRespondedSchema
9872
9966
  }),
9873
9967
  import_v48.z.object({
9874
9968
  type: import_v48.z.literal("dynamic-tool"),
@@ -9883,13 +9977,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
9883
9977
  callProviderMetadata: providerMetadataSchema.optional(),
9884
9978
  resultProviderMetadata: providerMetadataSchema.optional(),
9885
9979
  preliminary: import_v48.z.boolean().optional(),
9886
- approval: import_v48.z.object({
9887
- id: import_v48.z.string(),
9888
- approved: import_v48.z.literal(true),
9889
- descriptor: import_v48.z.unknown().optional(),
9890
- reason: import_v48.z.string().optional(),
9891
- signature: import_v48.z.string().optional()
9892
- }).optional()
9980
+ approval: approvalGrantedSchema.optional()
9893
9981
  }),
9894
9982
  import_v48.z.object({
9895
9983
  type: import_v48.z.literal("dynamic-tool"),
@@ -9904,13 +9992,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
9904
9992
  errorText: import_v48.z.string(),
9905
9993
  callProviderMetadata: providerMetadataSchema.optional(),
9906
9994
  resultProviderMetadata: providerMetadataSchema.optional(),
9907
- approval: import_v48.z.object({
9908
- id: import_v48.z.string(),
9909
- approved: import_v48.z.literal(true),
9910
- descriptor: import_v48.z.unknown().optional(),
9911
- reason: import_v48.z.string().optional(),
9912
- signature: import_v48.z.string().optional()
9913
- }).optional()
9995
+ approval: approvalGrantedSchema.optional()
9914
9996
  }),
9915
9997
  import_v48.z.object({
9916
9998
  type: import_v48.z.literal("dynamic-tool"),
@@ -9923,13 +10005,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
9923
10005
  output: import_v48.z.never().optional(),
9924
10006
  errorText: import_v48.z.never().optional(),
9925
10007
  callProviderMetadata: providerMetadataSchema.optional(),
9926
- approval: import_v48.z.object({
9927
- id: import_v48.z.string(),
9928
- approved: import_v48.z.literal(false),
9929
- descriptor: import_v48.z.unknown().optional(),
9930
- reason: import_v48.z.string().optional(),
9931
- signature: import_v48.z.string().optional()
9932
- })
10008
+ approval: approvalDeniedSchema
9933
10009
  }),
9934
10010
  import_v48.z.object({
9935
10011
  type: import_v48.z.string().startsWith("tool-"),
@@ -9965,13 +10041,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
9965
10041
  output: import_v48.z.never().optional(),
9966
10042
  errorText: import_v48.z.never().optional(),
9967
10043
  callProviderMetadata: providerMetadataSchema.optional(),
9968
- approval: import_v48.z.object({
9969
- id: import_v48.z.string(),
9970
- approved: import_v48.z.never().optional(),
9971
- descriptor: import_v48.z.unknown().optional(),
9972
- reason: import_v48.z.never().optional(),
9973
- signature: import_v48.z.string().optional()
9974
- })
10044
+ approval: approvalRequestedSchema
9975
10045
  }),
9976
10046
  import_v48.z.object({
9977
10047
  type: import_v48.z.string().startsWith("tool-"),
@@ -9983,13 +10053,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
9983
10053
  output: import_v48.z.never().optional(),
9984
10054
  errorText: import_v48.z.never().optional(),
9985
10055
  callProviderMetadata: providerMetadataSchema.optional(),
9986
- approval: import_v48.z.object({
9987
- id: import_v48.z.string(),
9988
- approved: import_v48.z.boolean(),
9989
- descriptor: import_v48.z.unknown().optional(),
9990
- reason: import_v48.z.string().optional(),
9991
- signature: import_v48.z.string().optional()
9992
- })
10056
+ approval: approvalRespondedSchema
9993
10057
  }),
9994
10058
  import_v48.z.object({
9995
10059
  type: import_v48.z.string().startsWith("tool-"),
@@ -10003,13 +10067,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
10003
10067
  callProviderMetadata: providerMetadataSchema.optional(),
10004
10068
  resultProviderMetadata: providerMetadataSchema.optional(),
10005
10069
  preliminary: import_v48.z.boolean().optional(),
10006
- approval: import_v48.z.object({
10007
- id: import_v48.z.string(),
10008
- approved: import_v48.z.literal(true),
10009
- descriptor: import_v48.z.unknown().optional(),
10010
- reason: import_v48.z.string().optional(),
10011
- signature: import_v48.z.string().optional()
10012
- }).optional()
10070
+ approval: approvalGrantedSchema.optional()
10013
10071
  }),
10014
10072
  import_v48.z.object({
10015
10073
  type: import_v48.z.string().startsWith("tool-"),
@@ -10023,13 +10081,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
10023
10081
  errorText: import_v48.z.string(),
10024
10082
  callProviderMetadata: providerMetadataSchema.optional(),
10025
10083
  resultProviderMetadata: providerMetadataSchema.optional(),
10026
- approval: import_v48.z.object({
10027
- id: import_v48.z.string(),
10028
- approved: import_v48.z.literal(true),
10029
- descriptor: import_v48.z.unknown().optional(),
10030
- reason: import_v48.z.string().optional(),
10031
- signature: import_v48.z.string().optional()
10032
- }).optional()
10084
+ approval: approvalGrantedSchema.optional()
10033
10085
  }),
10034
10086
  import_v48.z.object({
10035
10087
  type: import_v48.z.string().startsWith("tool-"),
@@ -10041,13 +10093,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
10041
10093
  output: import_v48.z.never().optional(),
10042
10094
  errorText: import_v48.z.never().optional(),
10043
10095
  callProviderMetadata: providerMetadataSchema.optional(),
10044
- approval: import_v48.z.object({
10045
- id: import_v48.z.string(),
10046
- approved: import_v48.z.literal(false),
10047
- descriptor: import_v48.z.unknown().optional(),
10048
- reason: import_v48.z.string().optional(),
10049
- signature: import_v48.z.string().optional()
10050
- })
10096
+ approval: approvalDeniedSchema
10051
10097
  })
10052
10098
  ])
10053
10099
  )
@@ -10065,8 +10111,8 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
10065
10111
  }
10066
10112
  })
10067
10113
  ).nonempty("Messages array must not be empty")
10068
- )
10069
- );
10114
+ );
10115
+ });
10070
10116
  async function safeValidateUIMessagesInternal({
10071
10117
  messages,
10072
10118
  metadataSchema,
@@ -10092,7 +10138,7 @@ async function safeValidateUIMessagesInternal({
10092
10138
  });
10093
10139
  if (metadataSchema) {
10094
10140
  for (const [msgIdx, message] of validatedMessages.entries()) {
10095
- await (0, import_provider_utils24.validateTypes)({
10141
+ message.metadata = await (0, import_provider_utils24.validateTypes)({
10096
10142
  value: message.metadata,
10097
10143
  schema: metadataSchema,
10098
10144
  context: {
@@ -10124,7 +10170,7 @@ async function safeValidateUIMessagesInternal({
10124
10170
  })
10125
10171
  };
10126
10172
  }
10127
- await (0, import_provider_utils24.validateTypes)({
10173
+ dataPart.data = await (0, import_provider_utils24.validateTypes)({
10128
10174
  value: dataPart.data,
10129
10175
  schema: dataSchema,
10130
10176
  context: {
@@ -10166,35 +10212,34 @@ async function safeValidateUIMessagesInternal({
10166
10212
  entityName: toolName,
10167
10213
  entityId: toolPart.toolCallId
10168
10214
  };
10215
+ const inputSchemaInput = getToolPartInputSchemaInput(toolPart);
10216
+ const inputToValidate = inputSchemaInput == null ? toolPart.input : inputSchemaInput.value;
10169
10217
  let convertToDynamic = false;
10170
- if (toolPart.state === "output-error") {
10171
- if (toolPart.input !== void 0) {
10172
- const result = await (0, import_provider_utils24.safeValidateTypes)({
10173
- value: toolPart.input,
10174
- schema: tool2.inputSchema,
10175
- context: inputValidationContext
10176
- });
10177
- convertToDynamic = !result.success;
10178
- }
10179
- } else if (toolPart.state === "output-available") {
10218
+ if (toolPart.state !== "input-streaming" && (toolPart.state !== "output-error" || inputSchemaInput != null || toolPart.input !== void 0)) {
10180
10219
  const result = await (0, import_provider_utils24.safeValidateTypes)({
10181
- value: toolPart.input,
10220
+ value: inputToValidate,
10182
10221
  schema: tool2.inputSchema,
10183
10222
  context: inputValidationContext
10184
10223
  });
10224
+ let inputError;
10185
10225
  if (!result.success) {
10186
- if (isEmptyObject(toolPart.input)) {
10226
+ inputError = result.error;
10227
+ } else if (inputSchemaInput != null) {
10228
+ if (!isDeepEqualData(result.value, toolPart.input)) {
10229
+ inputError = new import_provider31.TypeValidationError({
10230
+ value: toolPart.input,
10231
+ cause: "Tool input does not match the output reconstructed from inputSchemaInput.",
10232
+ context: inputValidationContext
10233
+ });
10234
+ }
10235
+ }
10236
+ if (inputError != null) {
10237
+ if (toolPart.state === "output-error" || toolPart.state === "output-available" && isEmptyObject(toolPart.input)) {
10187
10238
  convertToDynamic = true;
10188
10239
  } else {
10189
- throw result.error;
10240
+ throw inputError;
10190
10241
  }
10191
10242
  }
10192
- } else if (toolPart.state === "input-available" || toolPart.state === "approval-requested" || toolPart.state === "approval-responded" || toolPart.state === "output-denied") {
10193
- await (0, import_provider_utils24.validateTypes)({
10194
- value: toolPart.input,
10195
- schema: tool2.inputSchema,
10196
- context: inputValidationContext
10197
- });
10198
10243
  }
10199
10244
  if (toolPart.state === "output-available" && tool2.outputSchema) {
10200
10245
  await (0, import_provider_utils24.validateTypes)({
@@ -10451,7 +10496,7 @@ var DefaultEmbedResult = class {
10451
10496
  };
10452
10497
 
10453
10498
  // src/embed/embed-many.ts
10454
- var import_provider_utils27 = require("@ai-sdk/provider-utils");
10499
+ var import_provider_utils28 = require("@ai-sdk/provider-utils");
10455
10500
 
10456
10501
  // src/model/get-embedding-model-max-input-bytes-per-call.ts
10457
10502
  var import_provider_utils26 = require("@ai-sdk/provider-utils");
@@ -10459,6 +10504,12 @@ function getEmbeddingModelMaxInputBytesPerCall(model) {
10459
10504
  return model[import_provider_utils26.EXPERIMENTAL_EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL];
10460
10505
  }
10461
10506
 
10507
+ // src/model/get-embedding-model-provider-options-transformer.ts
10508
+ var import_provider_utils27 = require("@ai-sdk/provider-utils");
10509
+ function getEmbeddingModelProviderOptionsTransformer(model) {
10510
+ return model[import_provider_utils27.EXPERIMENTAL_EMBEDDING_MODEL_PROVIDER_OPTIONS_TRANSFORMER];
10511
+ }
10512
+
10462
10513
  // src/util/split-array.ts
10463
10514
  function splitArray(array2, chunkSize) {
10464
10515
  if (chunkSize <= 0) {
@@ -10487,7 +10538,7 @@ async function embedMany({
10487
10538
  maxRetries: maxRetriesArg,
10488
10539
  abortSignal
10489
10540
  });
10490
- const headersWithUserAgent = (0, import_provider_utils27.withUserAgentSuffix)(
10541
+ const headersWithUserAgent = (0, import_provider_utils28.withUserAgentSuffix)(
10491
10542
  headers != null ? headers : {},
10492
10543
  `ai/${VERSION}`
10493
10544
  );
@@ -10513,7 +10564,6 @@ async function embedMany({
10513
10564
  }),
10514
10565
  tracer,
10515
10566
  fn: async (span) => {
10516
- var _a23;
10517
10567
  const [
10518
10568
  maxEmbeddingsPerCall,
10519
10569
  maxInputBytesPerCall,
@@ -10545,7 +10595,7 @@ async function embedMany({
10545
10595
  }),
10546
10596
  tracer,
10547
10597
  fn: async (doEmbedSpan) => {
10548
- var _a24, _b;
10598
+ var _a23, _b;
10549
10599
  const modelResponse = await model.doEmbed({
10550
10600
  values,
10551
10601
  abortSignal,
@@ -10553,7 +10603,7 @@ async function embedMany({
10553
10603
  providerOptions
10554
10604
  });
10555
10605
  const embeddings3 = modelResponse.embeddings;
10556
- const usage2 = (_a24 = modelResponse.usage) != null ? _a24 : { tokens: NaN };
10606
+ const usage2 = (_a23 = modelResponse.usage) != null ? _a23 : { tokens: NaN };
10557
10607
  doEmbedSpan.setAttributes(
10558
10608
  await selectTelemetryAttributes({
10559
10609
  telemetry,
@@ -10607,6 +10657,7 @@ async function embedMany({
10607
10657
  maxEmbeddingsPerCall: hasEmbeddingLimit ? maxEmbeddingsPerCall : Infinity,
10608
10658
  maxInputBytesPerCall: hasInputByteLimit ? maxInputBytesPerCall : Infinity
10609
10659
  });
10660
+ const providerOptionsTransformer = getEmbeddingModelProviderOptionsTransformer(model);
10610
10661
  const embeddings = [];
10611
10662
  const warnings = [];
10612
10663
  const responses = [];
@@ -10616,9 +10667,18 @@ async function embedMany({
10616
10667
  valueChunks,
10617
10668
  supportsParallelCalls ? maxParallelCalls : 1
10618
10669
  );
10670
+ let nextChunkStartIndex = 0;
10619
10671
  for (const parallelChunk of parallelChunks) {
10620
10672
  const results = await Promise.all(
10621
- parallelChunk.map((chunk) => {
10673
+ parallelChunk.map(async (chunk) => {
10674
+ const startIndex = nextChunkStartIndex;
10675
+ nextChunkStartIndex += chunk.length;
10676
+ const chunkProviderOptions = providerOptionsTransformer ? await providerOptionsTransformer({
10677
+ providerOptions,
10678
+ values,
10679
+ startIndex,
10680
+ endIndex: startIndex + chunk.length
10681
+ }) : providerOptions;
10622
10682
  return retry(() => {
10623
10683
  return recordSpan({
10624
10684
  name: "ai.embedMany.doEmbed",
@@ -10638,15 +10698,15 @@ async function embedMany({
10638
10698
  }),
10639
10699
  tracer,
10640
10700
  fn: async (doEmbedSpan) => {
10641
- var _a24, _b;
10701
+ var _a23, _b;
10642
10702
  const modelResponse = await model.doEmbed({
10643
10703
  values: chunk,
10644
10704
  abortSignal,
10645
10705
  headers: headersWithUserAgent,
10646
- providerOptions
10706
+ providerOptions: chunkProviderOptions
10647
10707
  });
10648
10708
  const embeddings2 = modelResponse.embeddings;
10649
- const usage = (_a24 = modelResponse.usage) != null ? _a24 : { tokens: NaN };
10709
+ const usage = (_a23 = modelResponse.usage) != null ? _a23 : { tokens: NaN };
10650
10710
  doEmbedSpan.setAttributes(
10651
10711
  await selectTelemetryAttributes({
10652
10712
  telemetry,
@@ -10685,7 +10745,7 @@ async function embedMany({
10685
10745
  result.providerMetadata
10686
10746
  )) {
10687
10747
  providerMetadata[providerName] = {
10688
- ...(_a23 = providerMetadata[providerName]) != null ? _a23 : {},
10748
+ ...providerMetadata[providerName],
10689
10749
  ...metadata
10690
10750
  };
10691
10751
  }
@@ -10763,7 +10823,7 @@ var DefaultEmbedManyResult = class {
10763
10823
  };
10764
10824
 
10765
10825
  // src/generate-image/generate-image.ts
10766
- var import_provider_utils28 = require("@ai-sdk/provider-utils");
10826
+ var import_provider_utils29 = require("@ai-sdk/provider-utils");
10767
10827
  var RetryableNoImageResultError = class extends Error {
10768
10828
  constructor() {
10769
10829
  super("No image generated.");
@@ -10785,7 +10845,7 @@ async function generateImage({
10785
10845
  }) {
10786
10846
  var _a23, _b;
10787
10847
  const model = resolveImageModel(modelArg);
10788
- const headersWithUserAgent = (0, import_provider_utils28.withUserAgentSuffix)(
10848
+ const headersWithUserAgent = (0, import_provider_utils29.withUserAgentSuffix)(
10789
10849
  headers != null ? headers : {},
10790
10850
  `ai/${VERSION}`
10791
10851
  );
@@ -10945,7 +11005,7 @@ function toImageModelV3File(dataContent) {
10945
11005
  if (typeof dataContent === "string" && dataContent.startsWith("data:")) {
10946
11006
  const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(dataContent);
10947
11007
  if (base64Content != null) {
10948
- const uint8Data2 = (0, import_provider_utils28.convertBase64ToUint8Array)(base64Content);
11008
+ const uint8Data2 = (0, import_provider_utils29.convertBase64ToUint8Array)(base64Content);
10949
11009
  return {
10950
11010
  type: "file",
10951
11011
  data: uint8Data2,
@@ -10971,11 +11031,11 @@ function toImageModelV3File(dataContent) {
10971
11031
  var experimental_generateImage = generateImage;
10972
11032
 
10973
11033
  // src/generate-object/generate-object.ts
10974
- var import_provider_utils31 = require("@ai-sdk/provider-utils");
11034
+ var import_provider_utils32 = require("@ai-sdk/provider-utils");
10975
11035
 
10976
11036
  // src/generate-object/output-strategy.ts
10977
11037
  var import_provider32 = require("@ai-sdk/provider");
10978
- var import_provider_utils29 = require("@ai-sdk/provider-utils");
11038
+ var import_provider_utils30 = require("@ai-sdk/provider-utils");
10979
11039
  var noSchemaOutputStrategy = {
10980
11040
  type: "no-schema",
10981
11041
  jsonSchema: async () => void 0,
@@ -11014,7 +11074,7 @@ var objectOutputStrategy = (schema) => ({
11014
11074
  };
11015
11075
  },
11016
11076
  async validateFinalResult(value) {
11017
- return (0, import_provider_utils29.safeValidateTypes)({ value, schema });
11077
+ return (0, import_provider_utils30.safeValidateTypes)({ value, schema });
11018
11078
  },
11019
11079
  createElementStream() {
11020
11080
  throw new import_provider32.UnsupportedFunctionalityError({
@@ -11060,7 +11120,7 @@ var arrayOutputStrategy = (schema) => {
11060
11120
  const resultArray = [];
11061
11121
  for (let i = 0; i < inputArray.length; i++) {
11062
11122
  const element = inputArray[i];
11063
- const result = await (0, import_provider_utils29.safeValidateTypes)({ value: element, schema });
11123
+ const result = await (0, import_provider_utils30.safeValidateTypes)({ value: element, schema });
11064
11124
  if (i === inputArray.length - 1 && !isFinalDelta) {
11065
11125
  continue;
11066
11126
  }
@@ -11102,7 +11162,7 @@ var arrayOutputStrategy = (schema) => {
11102
11162
  const inputArray = value.elements;
11103
11163
  const resultArray = [];
11104
11164
  for (const element of inputArray) {
11105
- const result = await (0, import_provider_utils29.safeValidateTypes)({ value: element, schema });
11165
+ const result = await (0, import_provider_utils30.safeValidateTypes)({ value: element, schema });
11106
11166
  if (!result.success) {
11107
11167
  return result;
11108
11168
  }
@@ -11221,9 +11281,9 @@ function getOutputStrategy({
11221
11281
  }) {
11222
11282
  switch (output) {
11223
11283
  case "object":
11224
- return objectOutputStrategy((0, import_provider_utils29.asSchema)(schema));
11284
+ return objectOutputStrategy((0, import_provider_utils30.asSchema)(schema));
11225
11285
  case "array":
11226
- return arrayOutputStrategy((0, import_provider_utils29.asSchema)(schema));
11286
+ return arrayOutputStrategy((0, import_provider_utils30.asSchema)(schema));
11227
11287
  case "enum":
11228
11288
  return enumOutputStrategy(enumValues);
11229
11289
  case "no-schema":
@@ -11237,9 +11297,9 @@ function getOutputStrategy({
11237
11297
 
11238
11298
  // src/generate-object/parse-and-validate-object-result.ts
11239
11299
  var import_provider33 = require("@ai-sdk/provider");
11240
- var import_provider_utils30 = require("@ai-sdk/provider-utils");
11300
+ var import_provider_utils31 = require("@ai-sdk/provider-utils");
11241
11301
  async function parseAndValidateObjectResult(result, outputStrategy, context2) {
11242
- const parseResult = await (0, import_provider_utils30.safeParseJSON)({ text: result });
11302
+ const parseResult = await (0, import_provider_utils31.safeParseJSON)({ text: result });
11243
11303
  if (!parseResult.success) {
11244
11304
  throw new NoObjectGeneratedError({
11245
11305
  message: "No object generated: could not parse the response.",
@@ -11411,7 +11471,7 @@ function validateObjectGenerationInput({
11411
11471
  }
11412
11472
 
11413
11473
  // src/generate-object/generate-object.ts
11414
- var originalGenerateId3 = (0, import_provider_utils31.createIdGenerator)({ prefix: "aiobj", size: 24 });
11474
+ var originalGenerateId3 = (0, import_provider_utils32.createIdGenerator)({ prefix: "aiobj", size: 24 });
11415
11475
  async function generateObject(options) {
11416
11476
  const {
11417
11477
  model: modelArg,
@@ -11457,7 +11517,7 @@ async function generateObject(options) {
11457
11517
  enumValues
11458
11518
  });
11459
11519
  const callSettings = prepareCallSettings(settings);
11460
- const headersWithUserAgent = (0, import_provider_utils31.withUserAgentSuffix)(
11520
+ const headersWithUserAgent = (0, import_provider_utils32.withUserAgentSuffix)(
11461
11521
  headers != null ? headers : {},
11462
11522
  `ai/${VERSION}`
11463
11523
  );
@@ -11685,7 +11745,7 @@ var DefaultGenerateObjectResult = class {
11685
11745
  };
11686
11746
 
11687
11747
  // src/generate-object/stream-object.ts
11688
- var import_provider_utils33 = require("@ai-sdk/provider-utils");
11748
+ var import_provider_utils34 = require("@ai-sdk/provider-utils");
11689
11749
 
11690
11750
  // src/util/cosine-similarity.ts
11691
11751
  function cosineSimilarity(vector1, vector2) {
@@ -11733,41 +11793,6 @@ function getTextFromDataUrl(dataUrl) {
11733
11793
  }
11734
11794
  }
11735
11795
 
11736
- // src/util/is-deep-equal-data.ts
11737
- function isDeepEqualData(obj1, obj2) {
11738
- if (obj1 === obj2)
11739
- return true;
11740
- if (obj1 == null || obj2 == null)
11741
- return false;
11742
- if (typeof obj1 !== "object" && typeof obj2 !== "object")
11743
- return obj1 === obj2;
11744
- if (obj1.constructor !== obj2.constructor)
11745
- return false;
11746
- if (obj1 instanceof Date && obj2 instanceof Date) {
11747
- return obj1.getTime() === obj2.getTime();
11748
- }
11749
- if (Array.isArray(obj1)) {
11750
- if (obj1.length !== obj2.length)
11751
- return false;
11752
- for (let i = 0; i < obj1.length; i++) {
11753
- if (!isDeepEqualData(obj1[i], obj2[i]))
11754
- return false;
11755
- }
11756
- return true;
11757
- }
11758
- const keys1 = Object.keys(obj1);
11759
- const keys2 = Object.keys(obj2);
11760
- if (keys1.length !== keys2.length)
11761
- return false;
11762
- for (const key of keys1) {
11763
- if (!keys2.includes(key))
11764
- return false;
11765
- if (!isDeepEqualData(obj1[key], obj2[key]))
11766
- return false;
11767
- }
11768
- return true;
11769
- }
11770
-
11771
11796
  // src/util/serial-job-executor.ts
11772
11797
  var SerialJobExecutor = class {
11773
11798
  constructor() {
@@ -11801,7 +11826,7 @@ var SerialJobExecutor = class {
11801
11826
  };
11802
11827
 
11803
11828
  // src/util/simulate-readable-stream.ts
11804
- var import_provider_utils32 = require("@ai-sdk/provider-utils");
11829
+ var import_provider_utils33 = require("@ai-sdk/provider-utils");
11805
11830
  function simulateReadableStream({
11806
11831
  chunks,
11807
11832
  initialDelayInMs = 0,
@@ -11809,7 +11834,7 @@ function simulateReadableStream({
11809
11834
  _internal
11810
11835
  }) {
11811
11836
  var _a23;
11812
- const delay = (_a23 = _internal == null ? void 0 : _internal.delay) != null ? _a23 : import_provider_utils32.delay;
11837
+ const delay = (_a23 = _internal == null ? void 0 : _internal.delay) != null ? _a23 : import_provider_utils33.delay;
11813
11838
  let index = 0;
11814
11839
  return new ReadableStream({
11815
11840
  async pull(controller) {
@@ -11824,7 +11849,7 @@ function simulateReadableStream({
11824
11849
  }
11825
11850
 
11826
11851
  // src/generate-object/stream-object.ts
11827
- var originalGenerateId4 = (0, import_provider_utils33.createIdGenerator)({ prefix: "aiobj", size: 24 });
11852
+ var originalGenerateId4 = (0, import_provider_utils34.createIdGenerator)({ prefix: "aiobj", size: 24 });
11828
11853
  async function markPromiseAsHandled(promise) {
11829
11854
  try {
11830
11855
  await promise;
@@ -11923,13 +11948,13 @@ var DefaultStreamObjectResult = class {
11923
11948
  currentDate,
11924
11949
  now: now2
11925
11950
  }) {
11926
- this._object = new import_provider_utils33.DelayedPromise();
11927
- this._usage = new import_provider_utils33.DelayedPromise();
11928
- this._providerMetadata = new import_provider_utils33.DelayedPromise();
11929
- this._warnings = new import_provider_utils33.DelayedPromise();
11930
- this._request = new import_provider_utils33.DelayedPromise();
11931
- this._response = new import_provider_utils33.DelayedPromise();
11932
- this._finishReason = new import_provider_utils33.DelayedPromise();
11951
+ this._object = new import_provider_utils34.DelayedPromise();
11952
+ this._usage = new import_provider_utils34.DelayedPromise();
11953
+ this._providerMetadata = new import_provider_utils34.DelayedPromise();
11954
+ this._warnings = new import_provider_utils34.DelayedPromise();
11955
+ this._request = new import_provider_utils34.DelayedPromise();
11956
+ this._response = new import_provider_utils34.DelayedPromise();
11957
+ this._finishReason = new import_provider_utils34.DelayedPromise();
11933
11958
  const model = resolveLanguageModel(modelArg);
11934
11959
  const { maxRetries, retry } = prepareRetries({
11935
11960
  maxRetries: maxRetriesArg,
@@ -12407,7 +12432,7 @@ var DefaultStreamObjectResult = class {
12407
12432
  };
12408
12433
 
12409
12434
  // src/generate-speech/generate-speech.ts
12410
- var import_provider_utils34 = require("@ai-sdk/provider-utils");
12435
+ var import_provider_utils35 = require("@ai-sdk/provider-utils");
12411
12436
 
12412
12437
  // src/generate-speech/generated-audio-file.ts
12413
12438
  var DefaultGeneratedAudioFile = class extends DefaultGeneratedFile {
@@ -12453,7 +12478,7 @@ async function generateSpeech({
12453
12478
  if (!resolvedModel) {
12454
12479
  throw new Error("Model could not be resolved");
12455
12480
  }
12456
- const headersWithUserAgent = (0, import_provider_utils34.withUserAgentSuffix)(
12481
+ const headersWithUserAgent = (0, import_provider_utils35.withUserAgentSuffix)(
12457
12482
  headers != null ? headers : {},
12458
12483
  `ai/${VERSION}`
12459
12484
  );
@@ -12608,7 +12633,7 @@ function pruneMessages({
12608
12633
  }
12609
12634
 
12610
12635
  // src/generate-text/smooth-stream.ts
12611
- var import_provider_utils35 = require("@ai-sdk/provider-utils");
12636
+ var import_provider_utils36 = require("@ai-sdk/provider-utils");
12612
12637
  var import_provider34 = require("@ai-sdk/provider");
12613
12638
  var CHUNKING_REGEXPS = {
12614
12639
  word: /\S+\s+/m,
@@ -12620,7 +12645,7 @@ function isDocumentHidden() {
12620
12645
  function smoothStream({
12621
12646
  delayInMs = 10,
12622
12647
  chunking = "word",
12623
- _internal: { delay = import_provider_utils35.delay } = {}
12648
+ _internal: { delay = import_provider_utils36.delay } = {}
12624
12649
  } = {}) {
12625
12650
  let detectChunk;
12626
12651
  if (chunking != null && typeof chunking === "object" && "segment" in chunking && typeof chunking.segment === "function") {
@@ -12709,7 +12734,7 @@ function smoothStream({
12709
12734
  }
12710
12735
 
12711
12736
  // src/generate-video/generate-video.ts
12712
- var import_provider_utils36 = require("@ai-sdk/provider-utils");
12737
+ var import_provider_utils37 = require("@ai-sdk/provider-utils");
12713
12738
  var defaultDownload = createDownload();
12714
12739
  async function experimental_generateVideo({
12715
12740
  model: modelArg,
@@ -12732,7 +12757,7 @@ async function experimental_generateVideo({
12732
12757
  }) {
12733
12758
  var _a23, _b;
12734
12759
  const model = resolveVideoModel(modelArg);
12735
- const headersWithUserAgent = (0, import_provider_utils36.withUserAgentSuffix)(
12760
+ const headersWithUserAgent = (0, import_provider_utils37.withUserAgentSuffix)(
12736
12761
  headers != null ? headers : {},
12737
12762
  `ai/${VERSION}`
12738
12763
  );
@@ -12917,14 +12942,14 @@ function normalizeImageData(dataContent, { restrictToImages = true } = {}) {
12917
12942
  }
12918
12943
  if (dataContent.startsWith("data:")) {
12919
12944
  const { mediaType, base64Content } = splitDataUrl(dataContent);
12920
- const data = (0, import_provider_utils36.convertBase64ToUint8Array)(base64Content != null ? base64Content : "");
12945
+ const data = (0, import_provider_utils37.convertBase64ToUint8Array)(base64Content != null ? base64Content : "");
12921
12946
  return {
12922
12947
  type: "file",
12923
12948
  mediaType: mediaType != null ? mediaType : detectFileMediaType(data, restrictToImages),
12924
12949
  data
12925
12950
  };
12926
12951
  }
12927
- const bytes = (0, import_provider_utils36.convertBase64ToUint8Array)(dataContent);
12952
+ const bytes = (0, import_provider_utils37.convertBase64ToUint8Array)(dataContent);
12928
12953
  return {
12929
12954
  type: "file",
12930
12955
  mediaType: detectFileMediaType(bytes, restrictToImages),
@@ -13465,7 +13490,7 @@ var doWrap = ({
13465
13490
  };
13466
13491
 
13467
13492
  // src/middleware/wrap-embedding-model.ts
13468
- var import_provider_utils37 = require("@ai-sdk/provider-utils");
13493
+ var import_provider_utils38 = require("@ai-sdk/provider-utils");
13469
13494
  var wrapEmbeddingModel = ({
13470
13495
  model,
13471
13496
  middleware: middlewareArg,
@@ -13500,7 +13525,8 @@ var doWrap2 = ({
13500
13525
  provider: (_a23 = providerId != null ? providerId : overrideProvider == null ? void 0 : overrideProvider({ model })) != null ? _a23 : model.provider,
13501
13526
  modelId: (_b = modelId != null ? modelId : overrideModelId == null ? void 0 : overrideModelId({ model })) != null ? _b : model.modelId,
13502
13527
  maxEmbeddingsPerCall: (_c = overrideMaxEmbeddingsPerCall == null ? void 0 : overrideMaxEmbeddingsPerCall({ model })) != null ? _c : model.maxEmbeddingsPerCall,
13503
- [import_provider_utils37.EXPERIMENTAL_EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL]: getEmbeddingModelMaxInputBytesPerCall(model),
13528
+ [import_provider_utils38.EXPERIMENTAL_EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL]: getEmbeddingModelMaxInputBytesPerCall(model),
13529
+ [import_provider_utils38.EXPERIMENTAL_EMBEDDING_MODEL_PROVIDER_OPTIONS_TRANSFORMER]: getEmbeddingModelProviderOptionsTransformer(model),
13504
13530
  supportsParallelCalls: (_d = overrideSupportsParallelCalls == null ? void 0 : overrideSupportsParallelCalls({ model })) != null ? _d : model.supportsParallelCalls,
13505
13531
  async doEmbed(params) {
13506
13532
  const transformedParams = await doTransform({ params });
@@ -14004,7 +14030,7 @@ var DefaultRerankResult = class {
14004
14030
  };
14005
14031
 
14006
14032
  // src/transcribe/transcribe.ts
14007
- var import_provider_utils38 = require("@ai-sdk/provider-utils");
14033
+ var import_provider_utils39 = require("@ai-sdk/provider-utils");
14008
14034
  var defaultDownload2 = createDownload();
14009
14035
  async function transcribe({
14010
14036
  model,
@@ -14023,7 +14049,7 @@ async function transcribe({
14023
14049
  maxRetries: maxRetriesArg,
14024
14050
  abortSignal
14025
14051
  });
14026
- const headersWithUserAgent = (0, import_provider_utils38.withUserAgentSuffix)(
14052
+ const headersWithUserAgent = (0, import_provider_utils39.withUserAgentSuffix)(
14027
14053
  headers != null ? headers : {},
14028
14054
  `ai/${VERSION}`
14029
14055
  );
@@ -14075,7 +14101,7 @@ var DefaultTranscriptionResult = class {
14075
14101
  };
14076
14102
 
14077
14103
  // src/ui/call-completion-api.ts
14078
- var import_provider_utils39 = require("@ai-sdk/provider-utils");
14104
+ var import_provider_utils40 = require("@ai-sdk/provider-utils");
14079
14105
 
14080
14106
  // src/ui/process-text-stream.ts
14081
14107
  async function processTextStream({
@@ -14123,13 +14149,13 @@ async function callCompletionApi({
14123
14149
  ...body
14124
14150
  }),
14125
14151
  credentials,
14126
- headers: (0, import_provider_utils39.withUserAgentSuffix)(
14152
+ headers: (0, import_provider_utils40.withUserAgentSuffix)(
14127
14153
  {
14128
14154
  "Content-Type": "application/json",
14129
14155
  ...headers
14130
14156
  },
14131
14157
  `ai-sdk/${VERSION}`,
14132
- (0, import_provider_utils39.getRuntimeEnvironmentUserAgent)()
14158
+ (0, import_provider_utils40.getRuntimeEnvironmentUserAgent)()
14133
14159
  ),
14134
14160
  signal: abortController.signal
14135
14161
  }).catch((err) => {
@@ -14157,7 +14183,7 @@ async function callCompletionApi({
14157
14183
  }
14158
14184
  case "data": {
14159
14185
  await consumeStream({
14160
- stream: (0, import_provider_utils39.parseJsonEventStream)({
14186
+ stream: (0, import_provider_utils40.parseJsonEventStream)({
14161
14187
  stream: response.body,
14162
14188
  schema: uiMessageChunkSchema
14163
14189
  }).pipeThrough(
@@ -14209,7 +14235,7 @@ async function callCompletionApi({
14209
14235
  }
14210
14236
 
14211
14237
  // src/ui/chat.ts
14212
- var import_provider_utils42 = require("@ai-sdk/provider-utils");
14238
+ var import_provider_utils43 = require("@ai-sdk/provider-utils");
14213
14239
 
14214
14240
  // src/ui/convert-file-list-to-file-ui-parts.ts
14215
14241
  async function convertFileListToFileUIParts(files) {
@@ -14242,10 +14268,10 @@ async function convertFileListToFileUIParts(files) {
14242
14268
  }
14243
14269
 
14244
14270
  // src/ui/default-chat-transport.ts
14245
- var import_provider_utils41 = require("@ai-sdk/provider-utils");
14271
+ var import_provider_utils42 = require("@ai-sdk/provider-utils");
14246
14272
 
14247
14273
  // src/ui/http-chat-transport.ts
14248
- var import_provider_utils40 = require("@ai-sdk/provider-utils");
14274
+ var import_provider_utils41 = require("@ai-sdk/provider-utils");
14249
14275
  var HttpChatTransport = class {
14250
14276
  constructor({
14251
14277
  api = "/api/chat",
@@ -14269,12 +14295,12 @@ var HttpChatTransport = class {
14269
14295
  ...options
14270
14296
  }) {
14271
14297
  var _a23, _b, _c, _d, _e;
14272
- const resolvedBody = await (0, import_provider_utils40.resolve)(this.body);
14273
- const resolvedHeaders = await (0, import_provider_utils40.resolve)(this.headers);
14274
- const resolvedCredentials = await (0, import_provider_utils40.resolve)(this.credentials);
14298
+ const resolvedBody = await (0, import_provider_utils41.resolve)(this.body);
14299
+ const resolvedHeaders = await (0, import_provider_utils41.resolve)(this.headers);
14300
+ const resolvedCredentials = await (0, import_provider_utils41.resolve)(this.credentials);
14275
14301
  const baseHeaders = {
14276
- ...(0, import_provider_utils40.normalizeHeaders)(resolvedHeaders),
14277
- ...(0, import_provider_utils40.normalizeHeaders)(options.headers)
14302
+ ...(0, import_provider_utils41.normalizeHeaders)(resolvedHeaders),
14303
+ ...(0, import_provider_utils41.normalizeHeaders)(options.headers)
14278
14304
  };
14279
14305
  const preparedRequest = await ((_a23 = this.prepareSendMessagesRequest) == null ? void 0 : _a23.call(this, {
14280
14306
  api: this.api,
@@ -14288,7 +14314,7 @@ var HttpChatTransport = class {
14288
14314
  messageId: options.messageId
14289
14315
  }));
14290
14316
  const api = (_b = preparedRequest == null ? void 0 : preparedRequest.api) != null ? _b : this.api;
14291
- const headers = (preparedRequest == null ? void 0 : preparedRequest.headers) !== void 0 ? (0, import_provider_utils40.normalizeHeaders)(preparedRequest.headers) : baseHeaders;
14317
+ const headers = (preparedRequest == null ? void 0 : preparedRequest.headers) !== void 0 ? (0, import_provider_utils41.normalizeHeaders)(preparedRequest.headers) : baseHeaders;
14292
14318
  const body = (preparedRequest == null ? void 0 : preparedRequest.body) !== void 0 ? preparedRequest.body : {
14293
14319
  ...resolvedBody,
14294
14320
  ...options.body,
@@ -14321,12 +14347,12 @@ var HttpChatTransport = class {
14321
14347
  }
14322
14348
  async reconnectToStream(options) {
14323
14349
  var _a23, _b, _c, _d, _e;
14324
- const resolvedBody = await (0, import_provider_utils40.resolve)(this.body);
14325
- const resolvedHeaders = await (0, import_provider_utils40.resolve)(this.headers);
14326
- const resolvedCredentials = await (0, import_provider_utils40.resolve)(this.credentials);
14350
+ const resolvedBody = await (0, import_provider_utils41.resolve)(this.body);
14351
+ const resolvedHeaders = await (0, import_provider_utils41.resolve)(this.headers);
14352
+ const resolvedCredentials = await (0, import_provider_utils41.resolve)(this.credentials);
14327
14353
  const baseHeaders = {
14328
- ...(0, import_provider_utils40.normalizeHeaders)(resolvedHeaders),
14329
- ...(0, import_provider_utils40.normalizeHeaders)(options.headers)
14354
+ ...(0, import_provider_utils41.normalizeHeaders)(resolvedHeaders),
14355
+ ...(0, import_provider_utils41.normalizeHeaders)(options.headers)
14330
14356
  };
14331
14357
  const preparedRequest = await ((_a23 = this.prepareReconnectToStreamRequest) == null ? void 0 : _a23.call(this, {
14332
14358
  api: this.api,
@@ -14337,7 +14363,7 @@ var HttpChatTransport = class {
14337
14363
  requestMetadata: options.metadata
14338
14364
  }));
14339
14365
  const api = (_b = preparedRequest == null ? void 0 : preparedRequest.api) != null ? _b : `${this.api}/${options.chatId}/stream`;
14340
- const headers = (preparedRequest == null ? void 0 : preparedRequest.headers) !== void 0 ? (0, import_provider_utils40.normalizeHeaders)(preparedRequest.headers) : baseHeaders;
14366
+ const headers = (preparedRequest == null ? void 0 : preparedRequest.headers) !== void 0 ? (0, import_provider_utils41.normalizeHeaders)(preparedRequest.headers) : baseHeaders;
14341
14367
  const credentials = (_c = preparedRequest == null ? void 0 : preparedRequest.credentials) != null ? _c : resolvedCredentials;
14342
14368
  const fetch2 = (_d = this.fetch) != null ? _d : globalThis.fetch;
14343
14369
  const response = await fetch2(api, {
@@ -14367,7 +14393,7 @@ var DefaultChatTransport = class extends HttpChatTransport {
14367
14393
  super(options);
14368
14394
  }
14369
14395
  processResponseStream(stream) {
14370
- return (0, import_provider_utils41.parseJsonEventStream)({
14396
+ return (0, import_provider_utils42.parseJsonEventStream)({
14371
14397
  stream,
14372
14398
  schema: uiMessageChunkSchema
14373
14399
  }).pipeThrough(
@@ -14386,7 +14412,7 @@ var DefaultChatTransport = class extends HttpChatTransport {
14386
14412
  // src/ui/chat.ts
14387
14413
  var AbstractChat = class {
14388
14414
  constructor({
14389
- generateId: generateId2 = import_provider_utils42.generateId,
14415
+ generateId: generateId2 = import_provider_utils43.generateId,
14390
14416
  id = generateId2(),
14391
14417
  transport = new DefaultChatTransport(),
14392
14418
  messageMetadataSchema,
@@ -14410,9 +14436,24 @@ var AbstractChat = class {
14410
14436
  this.sendMessage = async (message, options) => {
14411
14437
  var _a23, _b, _c, _d;
14412
14438
  if (message == null) {
14413
- await this.makeRequest({
14414
- trigger: "submit-message",
14415
- messageId: (_a23 = this.lastMessage) == null ? void 0 : _a23.id,
14439
+ let messageId = this.pendingApprovalMessageId;
14440
+ if (messageId == null) {
14441
+ messageId = (_a23 = this.lastMessage) == null ? void 0 : _a23.id;
14442
+ for (let i = this.state.messages.length - 1; i >= 0; i--) {
14443
+ const candidate = this.state.messages[i];
14444
+ if (candidate.role === "assistant" && candidate.parts.some(
14445
+ (part) => isToolUIPart(part) && part.state === "approval-responded"
14446
+ )) {
14447
+ messageId = candidate.id;
14448
+ break;
14449
+ }
14450
+ }
14451
+ }
14452
+ const consumesPendingApproval = messageId != null && messageId === this.pendingApprovalMessageId;
14453
+ const pendingApprovalMessageIndex = consumesPendingApproval ? this.state.messages.findIndex((message2) => message2.id === messageId) : -1;
14454
+ await this.makeRequestForToolApproval({
14455
+ messageId,
14456
+ messageIndex: pendingApprovalMessageIndex,
14416
14457
  ...options
14417
14458
  });
14418
14459
  return;
@@ -14507,16 +14548,24 @@ var AbstractChat = class {
14507
14548
  options
14508
14549
  }) => this.jobExecutor.run(async () => {
14509
14550
  const messages = this.state.messages;
14510
- const lastMessage = messages[messages.length - 1];
14511
14551
  const updatePart = (part) => isToolUIPart(part) && part.state === "approval-requested" && part.approval.id === id ? {
14512
14552
  ...part,
14513
14553
  state: "approval-responded",
14514
14554
  approval: { ...part.approval, id, approved, reason }
14515
14555
  } : part;
14516
- this.state.replaceMessage(messages.length - 1, {
14517
- ...lastMessage,
14518
- parts: lastMessage.parts.map(updatePart)
14519
- });
14556
+ const messageIndex = messages.findIndex(
14557
+ (message) => message.parts.some(
14558
+ (part) => isToolUIPart(part) && part.state === "approval-requested" && part.approval.id === id
14559
+ )
14560
+ );
14561
+ if (messageIndex !== -1) {
14562
+ const message = messages[messageIndex];
14563
+ this.state.replaceMessage(messageIndex, {
14564
+ ...message,
14565
+ parts: message.parts.map(updatePart)
14566
+ });
14567
+ this.pendingApprovalMessageId = message.id;
14568
+ }
14520
14569
  if (this.activeResponse) {
14521
14570
  this.activeResponse.state.message.parts = this.activeResponse.state.message.parts.map(updatePart);
14522
14571
  }
@@ -14524,9 +14573,10 @@ var AbstractChat = class {
14524
14573
  this.shouldSendAutomatically().then((shouldSend) => {
14525
14574
  var _a23;
14526
14575
  if (shouldSend) {
14527
- this.makeRequest({
14528
- trigger: "submit-message",
14529
- messageId: (_a23 = this.lastMessage) == null ? void 0 : _a23.id,
14576
+ const messageId = messageIndex === -1 ? (_a23 = this.lastMessage) == null ? void 0 : _a23.id : messages[messageIndex].id;
14577
+ this.makeRequestForToolApproval({
14578
+ messageId,
14579
+ messageIndex,
14530
14580
  ...options
14531
14581
  });
14532
14582
  }
@@ -14628,6 +14678,25 @@ var AbstractChat = class {
14628
14678
  }
14629
14679
  return result;
14630
14680
  }
14681
+ async makeRequestForToolApproval({
14682
+ messageId,
14683
+ messageIndex,
14684
+ ...options
14685
+ }) {
14686
+ var _a23, _b;
14687
+ const consumesPendingApproval = messageId != null && messageId === this.pendingApprovalMessageId;
14688
+ if (consumesPendingApproval) {
14689
+ this.pendingApprovalMessageId = void 0;
14690
+ }
14691
+ await this.makeRequest({
14692
+ trigger: "submit-message",
14693
+ messageId,
14694
+ ...options
14695
+ });
14696
+ if (consumesPendingApproval && this.status === "error" && this.pendingApprovalMessageId == null) {
14697
+ this.pendingApprovalMessageId = (_b = (_a23 = this.state.messages[messageIndex]) == null ? void 0 : _a23.id) != null ? _b : messageId;
14698
+ }
14699
+ }
14631
14700
  async makeRequest({
14632
14701
  trigger,
14633
14702
  metadata,
@@ -14694,6 +14763,9 @@ var AbstractChat = class {
14694
14763
  }
14695
14764
  this.setStatus({ status: "submitted", error: void 0 });
14696
14765
  const lastMessage = this.lastMessage;
14766
+ const responseMessageIndex = trigger === "submit-message" && messageId != null ? this.state.messages.findIndex((message) => message.id === messageId) : this.state.messages.length - 1;
14767
+ const responseMessage = responseMessageIndex === -1 ? lastMessage : this.state.messages[responseMessageIndex];
14768
+ const usesEarlierAssistantMessage = responseMessageIndex !== -1 && responseMessageIndex < this.state.messages.length - 1 && (responseMessage == null ? void 0 : responseMessage.role) === "assistant";
14697
14769
  let isAbort = false;
14698
14770
  let isDisconnect = false;
14699
14771
  let isError = false;
@@ -14701,7 +14773,7 @@ var AbstractChat = class {
14701
14773
  try {
14702
14774
  const response = {
14703
14775
  state: createStreamingUIMessageState({
14704
- lastMessage: trigger === "resume-stream" || trigger === "regenerate-message" ? void 0 : this.state.snapshot(lastMessage),
14776
+ lastMessage: trigger === "resume-stream" || trigger === "regenerate-message" ? void 0 : this.state.snapshot(responseMessage),
14705
14777
  messageId: this.generateId()
14706
14778
  }),
14707
14779
  abortController
@@ -14742,8 +14814,12 @@ var AbstractChat = class {
14742
14814
  if (updateStatus) {
14743
14815
  this.setStatus({ status: "streaming" });
14744
14816
  }
14745
- const replaceLastMessage = response.state.message.id === ((_a24 = this.lastMessage) == null ? void 0 : _a24.id);
14746
- if (replaceLastMessage) {
14817
+ if (usesEarlierAssistantMessage) {
14818
+ this.state.replaceMessage(
14819
+ responseMessageIndex,
14820
+ response.state.message
14821
+ );
14822
+ } else if (response.state.message.id === ((_a24 = this.lastMessage) == null ? void 0 : _a24.id)) {
14747
14823
  this.state.replaceMessage(
14748
14824
  this.state.messages.length - 1,
14749
14825
  response.state.message