ai 6.0.288 → 6.0.290

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 (40) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/index.d.mts +13 -0
  3. package/dist/index.d.ts +13 -0
  4. package/dist/index.js +377 -281
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +314 -213
  7. package/dist/index.mjs.map +1 -1
  8. package/dist/internal/index.js +20 -5
  9. package/dist/internal/index.js.map +1 -1
  10. package/dist/internal/index.mjs +20 -5
  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/03-ai-sdk-core/40-middleware.mdx +92 -7
  14. package/docs/04-ai-sdk-ui/03-chatbot-tool-usage.mdx +7 -0
  15. package/package.json +5 -4
  16. package/src/embed/embed-many.ts +19 -3
  17. package/src/generate-speech/generated-audio-file.ts +0 -8
  18. package/src/generate-text/generated-file.ts +0 -4
  19. package/src/generate-text/parse-tool-call.ts +30 -23
  20. package/src/generate-text/run-tools-transformation.ts +37 -3
  21. package/src/generate-text/stream-text.ts +9 -28
  22. package/src/generate-text/to-response-messages.ts +7 -0
  23. package/src/generate-text/tool-call.ts +26 -0
  24. package/src/generate-text/validate-tool-approvals.ts +20 -2
  25. package/src/middleware/extract-reasoning-middleware.ts +1 -1
  26. package/src/middleware/wrap-embedding-model.ts +12 -2
  27. package/src/model/get-embedding-model-provider-options-transformer.ts +17 -0
  28. package/src/prompt/content-part.ts +2 -0
  29. package/src/prompt/convert-to-language-model-prompt.ts +7 -2
  30. package/src/prompt/data-content.ts +11 -2
  31. package/src/ui/chat.ts +108 -17
  32. package/src/ui/convert-to-model-messages.ts +8 -0
  33. package/src/ui/http-chat-transport.ts +1 -1
  34. package/src/ui/last-assistant-message-is-complete-with-approval-responses.ts +1 -1
  35. package/src/ui/last-assistant-message-is-complete-with-tool-calls.ts +2 -1
  36. package/src/ui/process-ui-message-stream.ts +6 -0
  37. package/src/ui/ui-messages.ts +10 -0
  38. package/src/ui/validate-ui-messages.ts +79 -114
  39. package/src/ui-message-stream/ui-message-chunks.ts +2 -0
  40. 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.288" : "0.0.0-test";
1337
+ var VERSION = true ? "6.0.290" : "0.0.0-test";
1338
1338
 
1339
1339
  // src/util/download/download.ts
1340
1340
  var download = async ({
@@ -1459,6 +1459,7 @@ var dataContentSchema = import_v4.z.union([
1459
1459
  )
1460
1460
  ]);
1461
1461
  function convertToLanguageModelV3DataContent(content) {
1462
+ let originalUrl;
1462
1463
  if (content instanceof Uint8Array) {
1463
1464
  return { data: content, mediaType: void 0 };
1464
1465
  }
@@ -1467,7 +1468,9 @@ function convertToLanguageModelV3DataContent(content) {
1467
1468
  }
1468
1469
  if (typeof content === "string") {
1469
1470
  try {
1470
- content = new URL(content);
1471
+ const url = new URL(content);
1472
+ originalUrl = url.toString() !== content ? content : void 0;
1473
+ content = url;
1471
1474
  } catch (error) {
1472
1475
  }
1473
1476
  }
@@ -1483,7 +1486,11 @@ function convertToLanguageModelV3DataContent(content) {
1483
1486
  }
1484
1487
  return { data: base64Content, mediaType: dataUrlMediaType };
1485
1488
  }
1486
- return { data: content, mediaType: void 0 };
1489
+ return {
1490
+ data: content,
1491
+ mediaType: void 0,
1492
+ ...originalUrl != null ? { originalUrl } : {}
1493
+ };
1487
1494
  }
1488
1495
  function convertDataContentToBase64String(content) {
1489
1496
  if (typeof content === "string") {
@@ -1848,7 +1855,11 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
1848
1855
  default:
1849
1856
  throw new Error(`Unsupported part type: ${type}`);
1850
1857
  }
1851
- const { data: convertedData, mediaType: convertedMediaType } = convertToLanguageModelV3DataContent(originalData);
1858
+ const {
1859
+ data: convertedData,
1860
+ mediaType: convertedMediaType,
1861
+ originalUrl
1862
+ } = convertToLanguageModelV3DataContent(originalData);
1852
1863
  let mediaType = convertedMediaType != null ? convertedMediaType : part.mediaType;
1853
1864
  let data = convertedData;
1854
1865
  if (data instanceof URL) {
@@ -1869,6 +1880,7 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
1869
1880
  // any image
1870
1881
  filename: void 0,
1871
1882
  data,
1883
+ ...data instanceof URL && originalUrl != null ? { originalUrl } : {},
1872
1884
  providerOptions: part.providerOptions
1873
1885
  };
1874
1886
  }
@@ -1881,6 +1893,7 @@ function convertPartToLanguageModelPart(part, downloadedAssets) {
1881
1893
  mediaType,
1882
1894
  filename: part.filename,
1883
1895
  data,
1896
+ ...data instanceof URL && originalUrl != null ? { originalUrl } : {},
1884
1897
  providerOptions: part.providerOptions
1885
1898
  };
1886
1899
  }
@@ -2273,7 +2286,9 @@ var toolResultPartSchema = import_v44.z.object({
2273
2286
  var toolApprovalRequestSchema = import_v44.z.object({
2274
2287
  type: import_v44.z.literal("tool-approval-request"),
2275
2288
  approvalId: import_v44.z.string(),
2276
- 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()
2277
2292
  });
2278
2293
  var toolApprovalResponseSchema = import_v44.z.object({
2279
2294
  type: import_v44.z.literal("tool-approval-response"),
@@ -3231,8 +3246,8 @@ var DefaultGeneratedFile = class {
3231
3246
  }
3232
3247
  };
3233
3248
  var DefaultGeneratedFileWithType = class extends DefaultGeneratedFile {
3234
- constructor(options) {
3235
- super(options);
3249
+ constructor() {
3250
+ super(...arguments);
3236
3251
  this.type = "file";
3237
3252
  }
3238
3253
  };
@@ -3354,6 +3369,43 @@ async function maybeSignApproval({
3354
3369
 
3355
3370
  // src/generate-text/validate-tool-approvals.ts
3356
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
3357
3409
  async function validateApprovedToolApprovals({
3358
3410
  approvedToolApprovals,
3359
3411
  tools,
@@ -3393,17 +3445,29 @@ async function validateApprovedToolApprovals({
3393
3445
  }
3394
3446
  }
3395
3447
  if (tool2 != null && typeof tool2.execute === "function" && tool2.inputSchema != null) {
3448
+ const hasInputSchemaInput = Object.prototype.hasOwnProperty.call(
3449
+ approvalRequest,
3450
+ "inputSchemaInput"
3451
+ );
3396
3452
  const validation = await (0, import_provider_utils12.safeValidateTypes)({
3397
- value: toolCall.input,
3453
+ value: hasInputSchemaInput ? approvalRequest.inputSchemaInput : toolCall.input,
3398
3454
  schema: (0, import_provider_utils12.asSchema)(tool2.inputSchema)
3399
3455
  });
3456
+ let validationError;
3400
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) {
3401
3465
  invalid.push({
3402
3466
  ...approval,
3403
3467
  error: new InvalidToolInputError({
3404
3468
  toolName: toolCall.toolName,
3405
3469
  toolInput: JSON.stringify(toolCall.input),
3406
- cause: validation.error
3470
+ cause: validationError
3407
3471
  })
3408
3472
  });
3409
3473
  continue;
@@ -4119,6 +4183,22 @@ var json = ({
4119
4183
 
4120
4184
  // src/generate-text/parse-tool-call.ts
4121
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
4122
4202
  async function parseToolCall({
4123
4203
  toolCall,
4124
4204
  tools,
@@ -4225,26 +4305,29 @@ async function doParseToolCall({
4225
4305
  cause: parseResult.error
4226
4306
  });
4227
4307
  }
4228
- return tool2.type === "dynamic" ? {
4229
- type: "tool-call",
4230
- toolCallId: toolCall.toolCallId,
4231
- toolName: toolCall.toolName,
4232
- input: parseResult.value,
4233
- providerExecuted: toolCall.providerExecuted,
4234
- providerMetadata: toolCall.providerMetadata,
4235
- ...tool2.metadata != null ? { toolMetadata: tool2.metadata } : {},
4236
- dynamic: true,
4237
- title: tool2.title
4238
- } : {
4239
- type: "tool-call",
4240
- toolCallId: toolCall.toolCallId,
4241
- toolName,
4242
- input: parseResult.value,
4243
- providerExecuted: toolCall.providerExecuted,
4244
- providerMetadata: toolCall.providerMetadata,
4245
- ...tool2.metadata != null ? { toolMetadata: tool2.metadata } : {},
4246
- title: tool2.title
4247
- };
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
+ );
4248
4331
  }
4249
4332
 
4250
4333
  // src/generate-text/prepare-step-call-settings.ts
@@ -4450,11 +4533,13 @@ async function toResponseMessages({
4450
4533
  break;
4451
4534
  }
4452
4535
  case "tool-approval-request":
4536
+ const inputSchemaInput = getToolCallInputSchemaInput(part.toolCall);
4453
4537
  content.push({
4454
4538
  type: "tool-approval-request",
4455
4539
  approvalId: part.approvalId,
4456
4540
  toolCallId: part.toolCall.toolCallId,
4457
- ...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 } : {}
4458
4543
  });
4459
4544
  break;
4460
4545
  }
@@ -5575,8 +5660,6 @@ function writeToServerResponse({
5575
5660
  });
5576
5661
  }
5577
5662
  }
5578
- } catch (error) {
5579
- throw error;
5580
5663
  } finally {
5581
5664
  response.end();
5582
5665
  }
@@ -5740,6 +5823,7 @@ var uiMessageChunkSchema = (0, import_provider_utils17.lazySchema)(
5740
5823
  approvalId: import_v47.z.string(),
5741
5824
  toolCallId: import_v47.z.string(),
5742
5825
  approvalDescriptor: import_v47.z.unknown().optional(),
5826
+ inputSchemaInput: import_v47.z.unknown().optional(),
5743
5827
  signature: import_v47.z.string().optional()
5744
5828
  }),
5745
5829
  import_v47.z.looseObject({
@@ -6320,6 +6404,10 @@ function processUIMessageStream({
6320
6404
  toolInvocation.approval = {
6321
6405
  id: chunk.approvalId,
6322
6406
  ...chunk.approvalDescriptor != null ? { descriptor: chunk.approvalDescriptor } : {},
6407
+ ...Object.prototype.hasOwnProperty.call(
6408
+ chunk,
6409
+ "inputSchemaInput"
6410
+ ) ? { inputSchemaInput: chunk.inputSchemaInput } : {},
6323
6411
  ...chunk.signature != null ? { signature: chunk.signature } : {}
6324
6412
  };
6325
6413
  write();
@@ -6963,8 +7051,10 @@ function runToolsTransformation({
6963
7051
  attemptClose();
6964
7052
  });
6965
7053
  }
7054
+ const activeToolCallToolNames = /* @__PURE__ */ new Map();
6966
7055
  const forwardStream = new TransformStream({
6967
7056
  async transform(chunk, controller) {
7057
+ var _a23, _b, _c, _d;
6968
7058
  const chunkType = chunk.type;
6969
7059
  switch (chunkType) {
6970
7060
  case "stream-start":
@@ -6974,9 +7064,6 @@ function runToolsTransformation({
6974
7064
  case "reasoning-start":
6975
7065
  case "reasoning-delta":
6976
7066
  case "reasoning-end":
6977
- case "tool-input-start":
6978
- case "tool-input-delta":
6979
- case "tool-input-end":
6980
7067
  case "source":
6981
7068
  case "response-metadata":
6982
7069
  case "error":
@@ -6984,6 +7071,36 @@ function runToolsTransformation({
6984
7071
  controller.enqueue(chunk);
6985
7072
  break;
6986
7073
  }
7074
+ case "tool-input-start": {
7075
+ activeToolCallToolNames.set(chunk.id, chunk.toolName);
7076
+ await ((_b = (_a23 = tools == null ? void 0 : tools[chunk.toolName]) == null ? void 0 : _a23.onInputStart) == null ? void 0 : _b.call(_a23, {
7077
+ toolCallId: chunk.id,
7078
+ messages,
7079
+ abortSignal,
7080
+ experimental_context
7081
+ }));
7082
+ controller.enqueue(chunk);
7083
+ break;
7084
+ }
7085
+ case "tool-input-delta": {
7086
+ const toolName = activeToolCallToolNames.get(chunk.id);
7087
+ if (toolName != null) {
7088
+ await ((_d = (_c = tools == null ? void 0 : tools[toolName]) == null ? void 0 : _c.onInputDelta) == null ? void 0 : _d.call(_c, {
7089
+ inputTextDelta: chunk.delta,
7090
+ toolCallId: chunk.id,
7091
+ messages,
7092
+ abortSignal,
7093
+ experimental_context
7094
+ }));
7095
+ }
7096
+ controller.enqueue(chunk);
7097
+ break;
7098
+ }
7099
+ case "tool-input-end": {
7100
+ activeToolCallToolNames.delete(chunk.id);
7101
+ controller.enqueue(chunk);
7102
+ break;
7103
+ }
6987
7104
  case "file": {
6988
7105
  controller.enqueue({
6989
7106
  type: "file",
@@ -8205,7 +8322,6 @@ var DefaultStreamTextResult = class {
8205
8322
  const stepToolCalls = [];
8206
8323
  const stepToolOutputs = [];
8207
8324
  let warnings;
8208
- const activeToolCallToolNames = {};
8209
8325
  let stepFinishReason = "other";
8210
8326
  let stepRawFinishReason = void 0;
8211
8327
  let hasReceivedTerminalChunk = false;
@@ -8352,16 +8468,7 @@ var DefaultStreamTextResult = class {
8352
8468
  break;
8353
8469
  }
8354
8470
  case "tool-input-start": {
8355
- activeToolCallToolNames[chunk.id] = chunk.toolName;
8356
8471
  const tool2 = stepToolSet == null ? void 0 : stepToolSet[chunk.toolName];
8357
- if ((tool2 == null ? void 0 : tool2.onInputStart) != null) {
8358
- await tool2.onInputStart({
8359
- toolCallId: chunk.id,
8360
- messages: stepInputMessages,
8361
- abortSignal,
8362
- experimental_context
8363
- });
8364
- }
8365
8472
  controller.enqueue({
8366
8473
  ...chunk,
8367
8474
  dynamic: (_i2 = chunk.dynamic) != null ? _i2 : (tool2 == null ? void 0 : tool2.type) === "dynamic",
@@ -8370,22 +8477,10 @@ var DefaultStreamTextResult = class {
8370
8477
  break;
8371
8478
  }
8372
8479
  case "tool-input-end": {
8373
- delete activeToolCallToolNames[chunk.id];
8374
8480
  controller.enqueue(chunk);
8375
8481
  break;
8376
8482
  }
8377
8483
  case "tool-input-delta": {
8378
- const toolName = activeToolCallToolNames[chunk.id];
8379
- const tool2 = stepToolSet == null ? void 0 : stepToolSet[toolName];
8380
- if ((tool2 == null ? void 0 : tool2.onInputDelta) != null) {
8381
- await tool2.onInputDelta({
8382
- inputTextDelta: chunk.delta,
8383
- toolCallId: chunk.id,
8384
- messages: stepInputMessages,
8385
- abortSignal,
8386
- experimental_context
8387
- });
8388
- }
8389
8484
  controller.enqueue(chunk);
8390
8485
  break;
8391
8486
  }
@@ -8992,10 +9087,14 @@ var DefaultStreamTextResult = class {
8992
9087
  break;
8993
9088
  }
8994
9089
  case "tool-approval-request": {
9090
+ const inputSchemaInput = getToolCallInputSchemaInput(
9091
+ part.toolCall
9092
+ );
8995
9093
  controller.enqueue({
8996
9094
  type: "tool-approval-request",
8997
9095
  approvalId: part.approvalId,
8998
9096
  toolCallId: part.toolCall.toolCallId,
9097
+ ...inputSchemaInput != null && !isDeepEqualData(inputSchemaInput.value, part.toolCall.input) ? { inputSchemaInput: inputSchemaInput.value } : {},
8999
9098
  ...part.signature != null ? { signature: part.signature } : {}
9000
9099
  });
9001
9100
  break;
@@ -9586,6 +9685,12 @@ async function convertToModelMessages(messages, options) {
9586
9685
  type: "tool-approval-request",
9587
9686
  approvalId: part.approval.id,
9588
9687
  toolCallId: part.toolCallId,
9688
+ ...Object.prototype.hasOwnProperty.call(
9689
+ part.approval,
9690
+ "inputSchemaInput"
9691
+ ) ? {
9692
+ inputSchemaInput: part.approval.inputSchemaInput
9693
+ } : {},
9589
9694
  ...part.approval.signature != null ? { signature: part.approval.signature } : {}
9590
9695
  });
9591
9696
  }
@@ -9734,8 +9839,29 @@ function asDynamicToolPart(toolPart) {
9734
9839
  toolName: type.slice(5)
9735
9840
  };
9736
9841
  }
9737
- var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
9738
- () => (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)(
9739
9865
  import_v48.z.array(
9740
9866
  import_v48.z.object({
9741
9867
  id: import_v48.z.string(),
@@ -9823,13 +9949,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
9823
9949
  output: import_v48.z.never().optional(),
9824
9950
  errorText: import_v48.z.never().optional(),
9825
9951
  callProviderMetadata: providerMetadataSchema.optional(),
9826
- approval: import_v48.z.object({
9827
- id: import_v48.z.string(),
9828
- approved: import_v48.z.never().optional(),
9829
- descriptor: import_v48.z.unknown().optional(),
9830
- reason: import_v48.z.never().optional(),
9831
- signature: import_v48.z.string().optional()
9832
- })
9952
+ approval: approvalRequestedSchema
9833
9953
  }),
9834
9954
  import_v48.z.object({
9835
9955
  type: import_v48.z.literal("dynamic-tool"),
@@ -9842,13 +9962,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
9842
9962
  output: import_v48.z.never().optional(),
9843
9963
  errorText: import_v48.z.never().optional(),
9844
9964
  callProviderMetadata: providerMetadataSchema.optional(),
9845
- approval: import_v48.z.object({
9846
- id: import_v48.z.string(),
9847
- approved: import_v48.z.boolean(),
9848
- descriptor: import_v48.z.unknown().optional(),
9849
- reason: import_v48.z.string().optional(),
9850
- signature: import_v48.z.string().optional()
9851
- })
9965
+ approval: approvalRespondedSchema
9852
9966
  }),
9853
9967
  import_v48.z.object({
9854
9968
  type: import_v48.z.literal("dynamic-tool"),
@@ -9863,13 +9977,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
9863
9977
  callProviderMetadata: providerMetadataSchema.optional(),
9864
9978
  resultProviderMetadata: providerMetadataSchema.optional(),
9865
9979
  preliminary: import_v48.z.boolean().optional(),
9866
- approval: import_v48.z.object({
9867
- id: import_v48.z.string(),
9868
- approved: import_v48.z.literal(true),
9869
- descriptor: import_v48.z.unknown().optional(),
9870
- reason: import_v48.z.string().optional(),
9871
- signature: import_v48.z.string().optional()
9872
- }).optional()
9980
+ approval: approvalGrantedSchema.optional()
9873
9981
  }),
9874
9982
  import_v48.z.object({
9875
9983
  type: import_v48.z.literal("dynamic-tool"),
@@ -9884,13 +9992,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
9884
9992
  errorText: import_v48.z.string(),
9885
9993
  callProviderMetadata: providerMetadataSchema.optional(),
9886
9994
  resultProviderMetadata: providerMetadataSchema.optional(),
9887
- approval: import_v48.z.object({
9888
- id: import_v48.z.string(),
9889
- approved: import_v48.z.literal(true),
9890
- descriptor: import_v48.z.unknown().optional(),
9891
- reason: import_v48.z.string().optional(),
9892
- signature: import_v48.z.string().optional()
9893
- }).optional()
9995
+ approval: approvalGrantedSchema.optional()
9894
9996
  }),
9895
9997
  import_v48.z.object({
9896
9998
  type: import_v48.z.literal("dynamic-tool"),
@@ -9903,13 +10005,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
9903
10005
  output: import_v48.z.never().optional(),
9904
10006
  errorText: import_v48.z.never().optional(),
9905
10007
  callProviderMetadata: providerMetadataSchema.optional(),
9906
- approval: import_v48.z.object({
9907
- id: import_v48.z.string(),
9908
- approved: import_v48.z.literal(false),
9909
- descriptor: import_v48.z.unknown().optional(),
9910
- reason: import_v48.z.string().optional(),
9911
- signature: import_v48.z.string().optional()
9912
- })
10008
+ approval: approvalDeniedSchema
9913
10009
  }),
9914
10010
  import_v48.z.object({
9915
10011
  type: import_v48.z.string().startsWith("tool-"),
@@ -9945,13 +10041,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
9945
10041
  output: import_v48.z.never().optional(),
9946
10042
  errorText: import_v48.z.never().optional(),
9947
10043
  callProviderMetadata: providerMetadataSchema.optional(),
9948
- approval: import_v48.z.object({
9949
- id: import_v48.z.string(),
9950
- approved: import_v48.z.never().optional(),
9951
- descriptor: import_v48.z.unknown().optional(),
9952
- reason: import_v48.z.never().optional(),
9953
- signature: import_v48.z.string().optional()
9954
- })
10044
+ approval: approvalRequestedSchema
9955
10045
  }),
9956
10046
  import_v48.z.object({
9957
10047
  type: import_v48.z.string().startsWith("tool-"),
@@ -9963,13 +10053,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
9963
10053
  output: import_v48.z.never().optional(),
9964
10054
  errorText: import_v48.z.never().optional(),
9965
10055
  callProviderMetadata: providerMetadataSchema.optional(),
9966
- approval: import_v48.z.object({
9967
- id: import_v48.z.string(),
9968
- approved: import_v48.z.boolean(),
9969
- descriptor: import_v48.z.unknown().optional(),
9970
- reason: import_v48.z.string().optional(),
9971
- signature: import_v48.z.string().optional()
9972
- })
10056
+ approval: approvalRespondedSchema
9973
10057
  }),
9974
10058
  import_v48.z.object({
9975
10059
  type: import_v48.z.string().startsWith("tool-"),
@@ -9983,13 +10067,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
9983
10067
  callProviderMetadata: providerMetadataSchema.optional(),
9984
10068
  resultProviderMetadata: providerMetadataSchema.optional(),
9985
10069
  preliminary: import_v48.z.boolean().optional(),
9986
- approval: import_v48.z.object({
9987
- id: import_v48.z.string(),
9988
- approved: import_v48.z.literal(true),
9989
- descriptor: import_v48.z.unknown().optional(),
9990
- reason: import_v48.z.string().optional(),
9991
- signature: import_v48.z.string().optional()
9992
- }).optional()
10070
+ approval: approvalGrantedSchema.optional()
9993
10071
  }),
9994
10072
  import_v48.z.object({
9995
10073
  type: import_v48.z.string().startsWith("tool-"),
@@ -10003,13 +10081,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
10003
10081
  errorText: import_v48.z.string(),
10004
10082
  callProviderMetadata: providerMetadataSchema.optional(),
10005
10083
  resultProviderMetadata: providerMetadataSchema.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()
10084
+ approval: approvalGrantedSchema.optional()
10013
10085
  }),
10014
10086
  import_v48.z.object({
10015
10087
  type: import_v48.z.string().startsWith("tool-"),
@@ -10021,13 +10093,7 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
10021
10093
  output: import_v48.z.never().optional(),
10022
10094
  errorText: import_v48.z.never().optional(),
10023
10095
  callProviderMetadata: providerMetadataSchema.optional(),
10024
- approval: import_v48.z.object({
10025
- id: import_v48.z.string(),
10026
- approved: import_v48.z.literal(false),
10027
- descriptor: import_v48.z.unknown().optional(),
10028
- reason: import_v48.z.string().optional(),
10029
- signature: import_v48.z.string().optional()
10030
- })
10096
+ approval: approvalDeniedSchema
10031
10097
  })
10032
10098
  ])
10033
10099
  )
@@ -10045,8 +10111,8 @@ var uiMessagesSchema = (0, import_provider_utils24.lazySchema)(
10045
10111
  }
10046
10112
  })
10047
10113
  ).nonempty("Messages array must not be empty")
10048
- )
10049
- );
10114
+ );
10115
+ });
10050
10116
  async function safeValidateUIMessagesInternal({
10051
10117
  messages,
10052
10118
  metadataSchema,
@@ -10072,7 +10138,7 @@ async function safeValidateUIMessagesInternal({
10072
10138
  });
10073
10139
  if (metadataSchema) {
10074
10140
  for (const [msgIdx, message] of validatedMessages.entries()) {
10075
- await (0, import_provider_utils24.validateTypes)({
10141
+ message.metadata = await (0, import_provider_utils24.validateTypes)({
10076
10142
  value: message.metadata,
10077
10143
  schema: metadataSchema,
10078
10144
  context: {
@@ -10104,7 +10170,7 @@ async function safeValidateUIMessagesInternal({
10104
10170
  })
10105
10171
  };
10106
10172
  }
10107
- await (0, import_provider_utils24.validateTypes)({
10173
+ dataPart.data = await (0, import_provider_utils24.validateTypes)({
10108
10174
  value: dataPart.data,
10109
10175
  schema: dataSchema,
10110
10176
  context: {
@@ -10146,35 +10212,34 @@ async function safeValidateUIMessagesInternal({
10146
10212
  entityName: toolName,
10147
10213
  entityId: toolPart.toolCallId
10148
10214
  };
10215
+ const inputSchemaInput = getToolPartInputSchemaInput(toolPart);
10216
+ const inputToValidate = inputSchemaInput == null ? toolPart.input : inputSchemaInput.value;
10149
10217
  let convertToDynamic = false;
10150
- if (toolPart.state === "output-error") {
10151
- if (toolPart.input !== void 0) {
10152
- const result = await (0, import_provider_utils24.safeValidateTypes)({
10153
- value: toolPart.input,
10154
- schema: tool2.inputSchema,
10155
- context: inputValidationContext
10156
- });
10157
- convertToDynamic = !result.success;
10158
- }
10159
- } else if (toolPart.state === "output-available") {
10218
+ if (toolPart.state !== "input-streaming" && (toolPart.state !== "output-error" || inputSchemaInput != null || toolPart.input !== void 0)) {
10160
10219
  const result = await (0, import_provider_utils24.safeValidateTypes)({
10161
- value: toolPart.input,
10220
+ value: inputToValidate,
10162
10221
  schema: tool2.inputSchema,
10163
10222
  context: inputValidationContext
10164
10223
  });
10224
+ let inputError;
10165
10225
  if (!result.success) {
10166
- 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)) {
10167
10238
  convertToDynamic = true;
10168
10239
  } else {
10169
- throw result.error;
10240
+ throw inputError;
10170
10241
  }
10171
10242
  }
10172
- } else if (toolPart.state === "input-available" || toolPart.state === "approval-requested" || toolPart.state === "approval-responded" || toolPart.state === "output-denied") {
10173
- await (0, import_provider_utils24.validateTypes)({
10174
- value: toolPart.input,
10175
- schema: tool2.inputSchema,
10176
- context: inputValidationContext
10177
- });
10178
10243
  }
10179
10244
  if (toolPart.state === "output-available" && tool2.outputSchema) {
10180
10245
  await (0, import_provider_utils24.validateTypes)({
@@ -10431,7 +10496,7 @@ var DefaultEmbedResult = class {
10431
10496
  };
10432
10497
 
10433
10498
  // src/embed/embed-many.ts
10434
- var import_provider_utils27 = require("@ai-sdk/provider-utils");
10499
+ var import_provider_utils28 = require("@ai-sdk/provider-utils");
10435
10500
 
10436
10501
  // src/model/get-embedding-model-max-input-bytes-per-call.ts
10437
10502
  var import_provider_utils26 = require("@ai-sdk/provider-utils");
@@ -10439,6 +10504,12 @@ function getEmbeddingModelMaxInputBytesPerCall(model) {
10439
10504
  return model[import_provider_utils26.EXPERIMENTAL_EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL];
10440
10505
  }
10441
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
+
10442
10513
  // src/util/split-array.ts
10443
10514
  function splitArray(array2, chunkSize) {
10444
10515
  if (chunkSize <= 0) {
@@ -10467,7 +10538,7 @@ async function embedMany({
10467
10538
  maxRetries: maxRetriesArg,
10468
10539
  abortSignal
10469
10540
  });
10470
- const headersWithUserAgent = (0, import_provider_utils27.withUserAgentSuffix)(
10541
+ const headersWithUserAgent = (0, import_provider_utils28.withUserAgentSuffix)(
10471
10542
  headers != null ? headers : {},
10472
10543
  `ai/${VERSION}`
10473
10544
  );
@@ -10493,7 +10564,6 @@ async function embedMany({
10493
10564
  }),
10494
10565
  tracer,
10495
10566
  fn: async (span) => {
10496
- var _a23;
10497
10567
  const [
10498
10568
  maxEmbeddingsPerCall,
10499
10569
  maxInputBytesPerCall,
@@ -10525,7 +10595,7 @@ async function embedMany({
10525
10595
  }),
10526
10596
  tracer,
10527
10597
  fn: async (doEmbedSpan) => {
10528
- var _a24, _b;
10598
+ var _a23, _b;
10529
10599
  const modelResponse = await model.doEmbed({
10530
10600
  values,
10531
10601
  abortSignal,
@@ -10533,7 +10603,7 @@ async function embedMany({
10533
10603
  providerOptions
10534
10604
  });
10535
10605
  const embeddings3 = modelResponse.embeddings;
10536
- const usage2 = (_a24 = modelResponse.usage) != null ? _a24 : { tokens: NaN };
10606
+ const usage2 = (_a23 = modelResponse.usage) != null ? _a23 : { tokens: NaN };
10537
10607
  doEmbedSpan.setAttributes(
10538
10608
  await selectTelemetryAttributes({
10539
10609
  telemetry,
@@ -10587,6 +10657,7 @@ async function embedMany({
10587
10657
  maxEmbeddingsPerCall: hasEmbeddingLimit ? maxEmbeddingsPerCall : Infinity,
10588
10658
  maxInputBytesPerCall: hasInputByteLimit ? maxInputBytesPerCall : Infinity
10589
10659
  });
10660
+ const providerOptionsTransformer = getEmbeddingModelProviderOptionsTransformer(model);
10590
10661
  const embeddings = [];
10591
10662
  const warnings = [];
10592
10663
  const responses = [];
@@ -10596,9 +10667,18 @@ async function embedMany({
10596
10667
  valueChunks,
10597
10668
  supportsParallelCalls ? maxParallelCalls : 1
10598
10669
  );
10670
+ let nextChunkStartIndex = 0;
10599
10671
  for (const parallelChunk of parallelChunks) {
10600
10672
  const results = await Promise.all(
10601
- 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;
10602
10682
  return retry(() => {
10603
10683
  return recordSpan({
10604
10684
  name: "ai.embedMany.doEmbed",
@@ -10618,15 +10698,15 @@ async function embedMany({
10618
10698
  }),
10619
10699
  tracer,
10620
10700
  fn: async (doEmbedSpan) => {
10621
- var _a24, _b;
10701
+ var _a23, _b;
10622
10702
  const modelResponse = await model.doEmbed({
10623
10703
  values: chunk,
10624
10704
  abortSignal,
10625
10705
  headers: headersWithUserAgent,
10626
- providerOptions
10706
+ providerOptions: chunkProviderOptions
10627
10707
  });
10628
10708
  const embeddings2 = modelResponse.embeddings;
10629
- const usage = (_a24 = modelResponse.usage) != null ? _a24 : { tokens: NaN };
10709
+ const usage = (_a23 = modelResponse.usage) != null ? _a23 : { tokens: NaN };
10630
10710
  doEmbedSpan.setAttributes(
10631
10711
  await selectTelemetryAttributes({
10632
10712
  telemetry,
@@ -10665,7 +10745,7 @@ async function embedMany({
10665
10745
  result.providerMetadata
10666
10746
  )) {
10667
10747
  providerMetadata[providerName] = {
10668
- ...(_a23 = providerMetadata[providerName]) != null ? _a23 : {},
10748
+ ...providerMetadata[providerName],
10669
10749
  ...metadata
10670
10750
  };
10671
10751
  }
@@ -10743,7 +10823,7 @@ var DefaultEmbedManyResult = class {
10743
10823
  };
10744
10824
 
10745
10825
  // src/generate-image/generate-image.ts
10746
- var import_provider_utils28 = require("@ai-sdk/provider-utils");
10826
+ var import_provider_utils29 = require("@ai-sdk/provider-utils");
10747
10827
  var RetryableNoImageResultError = class extends Error {
10748
10828
  constructor() {
10749
10829
  super("No image generated.");
@@ -10765,7 +10845,7 @@ async function generateImage({
10765
10845
  }) {
10766
10846
  var _a23, _b;
10767
10847
  const model = resolveImageModel(modelArg);
10768
- const headersWithUserAgent = (0, import_provider_utils28.withUserAgentSuffix)(
10848
+ const headersWithUserAgent = (0, import_provider_utils29.withUserAgentSuffix)(
10769
10849
  headers != null ? headers : {},
10770
10850
  `ai/${VERSION}`
10771
10851
  );
@@ -10925,7 +11005,7 @@ function toImageModelV3File(dataContent) {
10925
11005
  if (typeof dataContent === "string" && dataContent.startsWith("data:")) {
10926
11006
  const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(dataContent);
10927
11007
  if (base64Content != null) {
10928
- const uint8Data2 = (0, import_provider_utils28.convertBase64ToUint8Array)(base64Content);
11008
+ const uint8Data2 = (0, import_provider_utils29.convertBase64ToUint8Array)(base64Content);
10929
11009
  return {
10930
11010
  type: "file",
10931
11011
  data: uint8Data2,
@@ -10951,11 +11031,11 @@ function toImageModelV3File(dataContent) {
10951
11031
  var experimental_generateImage = generateImage;
10952
11032
 
10953
11033
  // src/generate-object/generate-object.ts
10954
- var import_provider_utils31 = require("@ai-sdk/provider-utils");
11034
+ var import_provider_utils32 = require("@ai-sdk/provider-utils");
10955
11035
 
10956
11036
  // src/generate-object/output-strategy.ts
10957
11037
  var import_provider32 = require("@ai-sdk/provider");
10958
- var import_provider_utils29 = require("@ai-sdk/provider-utils");
11038
+ var import_provider_utils30 = require("@ai-sdk/provider-utils");
10959
11039
  var noSchemaOutputStrategy = {
10960
11040
  type: "no-schema",
10961
11041
  jsonSchema: async () => void 0,
@@ -10994,7 +11074,7 @@ var objectOutputStrategy = (schema) => ({
10994
11074
  };
10995
11075
  },
10996
11076
  async validateFinalResult(value) {
10997
- return (0, import_provider_utils29.safeValidateTypes)({ value, schema });
11077
+ return (0, import_provider_utils30.safeValidateTypes)({ value, schema });
10998
11078
  },
10999
11079
  createElementStream() {
11000
11080
  throw new import_provider32.UnsupportedFunctionalityError({
@@ -11040,7 +11120,7 @@ var arrayOutputStrategy = (schema) => {
11040
11120
  const resultArray = [];
11041
11121
  for (let i = 0; i < inputArray.length; i++) {
11042
11122
  const element = inputArray[i];
11043
- const result = await (0, import_provider_utils29.safeValidateTypes)({ value: element, schema });
11123
+ const result = await (0, import_provider_utils30.safeValidateTypes)({ value: element, schema });
11044
11124
  if (i === inputArray.length - 1 && !isFinalDelta) {
11045
11125
  continue;
11046
11126
  }
@@ -11082,7 +11162,7 @@ var arrayOutputStrategy = (schema) => {
11082
11162
  const inputArray = value.elements;
11083
11163
  const resultArray = [];
11084
11164
  for (const element of inputArray) {
11085
- const result = await (0, import_provider_utils29.safeValidateTypes)({ value: element, schema });
11165
+ const result = await (0, import_provider_utils30.safeValidateTypes)({ value: element, schema });
11086
11166
  if (!result.success) {
11087
11167
  return result;
11088
11168
  }
@@ -11201,9 +11281,9 @@ function getOutputStrategy({
11201
11281
  }) {
11202
11282
  switch (output) {
11203
11283
  case "object":
11204
- return objectOutputStrategy((0, import_provider_utils29.asSchema)(schema));
11284
+ return objectOutputStrategy((0, import_provider_utils30.asSchema)(schema));
11205
11285
  case "array":
11206
- return arrayOutputStrategy((0, import_provider_utils29.asSchema)(schema));
11286
+ return arrayOutputStrategy((0, import_provider_utils30.asSchema)(schema));
11207
11287
  case "enum":
11208
11288
  return enumOutputStrategy(enumValues);
11209
11289
  case "no-schema":
@@ -11217,9 +11297,9 @@ function getOutputStrategy({
11217
11297
 
11218
11298
  // src/generate-object/parse-and-validate-object-result.ts
11219
11299
  var import_provider33 = require("@ai-sdk/provider");
11220
- var import_provider_utils30 = require("@ai-sdk/provider-utils");
11300
+ var import_provider_utils31 = require("@ai-sdk/provider-utils");
11221
11301
  async function parseAndValidateObjectResult(result, outputStrategy, context2) {
11222
- const parseResult = await (0, import_provider_utils30.safeParseJSON)({ text: result });
11302
+ const parseResult = await (0, import_provider_utils31.safeParseJSON)({ text: result });
11223
11303
  if (!parseResult.success) {
11224
11304
  throw new NoObjectGeneratedError({
11225
11305
  message: "No object generated: could not parse the response.",
@@ -11391,7 +11471,7 @@ function validateObjectGenerationInput({
11391
11471
  }
11392
11472
 
11393
11473
  // src/generate-object/generate-object.ts
11394
- var originalGenerateId3 = (0, import_provider_utils31.createIdGenerator)({ prefix: "aiobj", size: 24 });
11474
+ var originalGenerateId3 = (0, import_provider_utils32.createIdGenerator)({ prefix: "aiobj", size: 24 });
11395
11475
  async function generateObject(options) {
11396
11476
  const {
11397
11477
  model: modelArg,
@@ -11437,7 +11517,7 @@ async function generateObject(options) {
11437
11517
  enumValues
11438
11518
  });
11439
11519
  const callSettings = prepareCallSettings(settings);
11440
- const headersWithUserAgent = (0, import_provider_utils31.withUserAgentSuffix)(
11520
+ const headersWithUserAgent = (0, import_provider_utils32.withUserAgentSuffix)(
11441
11521
  headers != null ? headers : {},
11442
11522
  `ai/${VERSION}`
11443
11523
  );
@@ -11665,7 +11745,7 @@ var DefaultGenerateObjectResult = class {
11665
11745
  };
11666
11746
 
11667
11747
  // src/generate-object/stream-object.ts
11668
- var import_provider_utils33 = require("@ai-sdk/provider-utils");
11748
+ var import_provider_utils34 = require("@ai-sdk/provider-utils");
11669
11749
 
11670
11750
  // src/util/cosine-similarity.ts
11671
11751
  function cosineSimilarity(vector1, vector2) {
@@ -11713,41 +11793,6 @@ function getTextFromDataUrl(dataUrl) {
11713
11793
  }
11714
11794
  }
11715
11795
 
11716
- // src/util/is-deep-equal-data.ts
11717
- function isDeepEqualData(obj1, obj2) {
11718
- if (obj1 === obj2)
11719
- return true;
11720
- if (obj1 == null || obj2 == null)
11721
- return false;
11722
- if (typeof obj1 !== "object" && typeof obj2 !== "object")
11723
- return obj1 === obj2;
11724
- if (obj1.constructor !== obj2.constructor)
11725
- return false;
11726
- if (obj1 instanceof Date && obj2 instanceof Date) {
11727
- return obj1.getTime() === obj2.getTime();
11728
- }
11729
- if (Array.isArray(obj1)) {
11730
- if (obj1.length !== obj2.length)
11731
- return false;
11732
- for (let i = 0; i < obj1.length; i++) {
11733
- if (!isDeepEqualData(obj1[i], obj2[i]))
11734
- return false;
11735
- }
11736
- return true;
11737
- }
11738
- const keys1 = Object.keys(obj1);
11739
- const keys2 = Object.keys(obj2);
11740
- if (keys1.length !== keys2.length)
11741
- return false;
11742
- for (const key of keys1) {
11743
- if (!keys2.includes(key))
11744
- return false;
11745
- if (!isDeepEqualData(obj1[key], obj2[key]))
11746
- return false;
11747
- }
11748
- return true;
11749
- }
11750
-
11751
11796
  // src/util/serial-job-executor.ts
11752
11797
  var SerialJobExecutor = class {
11753
11798
  constructor() {
@@ -11781,7 +11826,7 @@ var SerialJobExecutor = class {
11781
11826
  };
11782
11827
 
11783
11828
  // src/util/simulate-readable-stream.ts
11784
- var import_provider_utils32 = require("@ai-sdk/provider-utils");
11829
+ var import_provider_utils33 = require("@ai-sdk/provider-utils");
11785
11830
  function simulateReadableStream({
11786
11831
  chunks,
11787
11832
  initialDelayInMs = 0,
@@ -11789,7 +11834,7 @@ function simulateReadableStream({
11789
11834
  _internal
11790
11835
  }) {
11791
11836
  var _a23;
11792
- 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;
11793
11838
  let index = 0;
11794
11839
  return new ReadableStream({
11795
11840
  async pull(controller) {
@@ -11804,7 +11849,7 @@ function simulateReadableStream({
11804
11849
  }
11805
11850
 
11806
11851
  // src/generate-object/stream-object.ts
11807
- var originalGenerateId4 = (0, import_provider_utils33.createIdGenerator)({ prefix: "aiobj", size: 24 });
11852
+ var originalGenerateId4 = (0, import_provider_utils34.createIdGenerator)({ prefix: "aiobj", size: 24 });
11808
11853
  async function markPromiseAsHandled(promise) {
11809
11854
  try {
11810
11855
  await promise;
@@ -11903,13 +11948,13 @@ var DefaultStreamObjectResult = class {
11903
11948
  currentDate,
11904
11949
  now: now2
11905
11950
  }) {
11906
- this._object = new import_provider_utils33.DelayedPromise();
11907
- this._usage = new import_provider_utils33.DelayedPromise();
11908
- this._providerMetadata = new import_provider_utils33.DelayedPromise();
11909
- this._warnings = new import_provider_utils33.DelayedPromise();
11910
- this._request = new import_provider_utils33.DelayedPromise();
11911
- this._response = new import_provider_utils33.DelayedPromise();
11912
- 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();
11913
11958
  const model = resolveLanguageModel(modelArg);
11914
11959
  const { maxRetries, retry } = prepareRetries({
11915
11960
  maxRetries: maxRetriesArg,
@@ -12387,7 +12432,7 @@ var DefaultStreamObjectResult = class {
12387
12432
  };
12388
12433
 
12389
12434
  // src/generate-speech/generate-speech.ts
12390
- var import_provider_utils34 = require("@ai-sdk/provider-utils");
12435
+ var import_provider_utils35 = require("@ai-sdk/provider-utils");
12391
12436
 
12392
12437
  // src/generate-speech/generated-audio-file.ts
12393
12438
  var DefaultGeneratedAudioFile = class extends DefaultGeneratedFile {
@@ -12433,7 +12478,7 @@ async function generateSpeech({
12433
12478
  if (!resolvedModel) {
12434
12479
  throw new Error("Model could not be resolved");
12435
12480
  }
12436
- const headersWithUserAgent = (0, import_provider_utils34.withUserAgentSuffix)(
12481
+ const headersWithUserAgent = (0, import_provider_utils35.withUserAgentSuffix)(
12437
12482
  headers != null ? headers : {},
12438
12483
  `ai/${VERSION}`
12439
12484
  );
@@ -12588,7 +12633,7 @@ function pruneMessages({
12588
12633
  }
12589
12634
 
12590
12635
  // src/generate-text/smooth-stream.ts
12591
- var import_provider_utils35 = require("@ai-sdk/provider-utils");
12636
+ var import_provider_utils36 = require("@ai-sdk/provider-utils");
12592
12637
  var import_provider34 = require("@ai-sdk/provider");
12593
12638
  var CHUNKING_REGEXPS = {
12594
12639
  word: /\S+\s+/m,
@@ -12600,7 +12645,7 @@ function isDocumentHidden() {
12600
12645
  function smoothStream({
12601
12646
  delayInMs = 10,
12602
12647
  chunking = "word",
12603
- _internal: { delay = import_provider_utils35.delay } = {}
12648
+ _internal: { delay = import_provider_utils36.delay } = {}
12604
12649
  } = {}) {
12605
12650
  let detectChunk;
12606
12651
  if (chunking != null && typeof chunking === "object" && "segment" in chunking && typeof chunking.segment === "function") {
@@ -12689,7 +12734,7 @@ function smoothStream({
12689
12734
  }
12690
12735
 
12691
12736
  // src/generate-video/generate-video.ts
12692
- var import_provider_utils36 = require("@ai-sdk/provider-utils");
12737
+ var import_provider_utils37 = require("@ai-sdk/provider-utils");
12693
12738
  var defaultDownload = createDownload();
12694
12739
  async function experimental_generateVideo({
12695
12740
  model: modelArg,
@@ -12712,7 +12757,7 @@ async function experimental_generateVideo({
12712
12757
  }) {
12713
12758
  var _a23, _b;
12714
12759
  const model = resolveVideoModel(modelArg);
12715
- const headersWithUserAgent = (0, import_provider_utils36.withUserAgentSuffix)(
12760
+ const headersWithUserAgent = (0, import_provider_utils37.withUserAgentSuffix)(
12716
12761
  headers != null ? headers : {},
12717
12762
  `ai/${VERSION}`
12718
12763
  );
@@ -12897,14 +12942,14 @@ function normalizeImageData(dataContent, { restrictToImages = true } = {}) {
12897
12942
  }
12898
12943
  if (dataContent.startsWith("data:")) {
12899
12944
  const { mediaType, base64Content } = splitDataUrl(dataContent);
12900
- const data = (0, import_provider_utils36.convertBase64ToUint8Array)(base64Content != null ? base64Content : "");
12945
+ const data = (0, import_provider_utils37.convertBase64ToUint8Array)(base64Content != null ? base64Content : "");
12901
12946
  return {
12902
12947
  type: "file",
12903
12948
  mediaType: mediaType != null ? mediaType : detectFileMediaType(data, restrictToImages),
12904
12949
  data
12905
12950
  };
12906
12951
  }
12907
- const bytes = (0, import_provider_utils36.convertBase64ToUint8Array)(dataContent);
12952
+ const bytes = (0, import_provider_utils37.convertBase64ToUint8Array)(dataContent);
12908
12953
  return {
12909
12954
  type: "file",
12910
12955
  mediaType: detectFileMediaType(bytes, restrictToImages),
@@ -13445,7 +13490,7 @@ var doWrap = ({
13445
13490
  };
13446
13491
 
13447
13492
  // src/middleware/wrap-embedding-model.ts
13448
- var import_provider_utils37 = require("@ai-sdk/provider-utils");
13493
+ var import_provider_utils38 = require("@ai-sdk/provider-utils");
13449
13494
  var wrapEmbeddingModel = ({
13450
13495
  model,
13451
13496
  middleware: middlewareArg,
@@ -13480,7 +13525,8 @@ var doWrap2 = ({
13480
13525
  provider: (_a23 = providerId != null ? providerId : overrideProvider == null ? void 0 : overrideProvider({ model })) != null ? _a23 : model.provider,
13481
13526
  modelId: (_b = modelId != null ? modelId : overrideModelId == null ? void 0 : overrideModelId({ model })) != null ? _b : model.modelId,
13482
13527
  maxEmbeddingsPerCall: (_c = overrideMaxEmbeddingsPerCall == null ? void 0 : overrideMaxEmbeddingsPerCall({ model })) != null ? _c : model.maxEmbeddingsPerCall,
13483
- [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),
13484
13530
  supportsParallelCalls: (_d = overrideSupportsParallelCalls == null ? void 0 : overrideSupportsParallelCalls({ model })) != null ? _d : model.supportsParallelCalls,
13485
13531
  async doEmbed(params) {
13486
13532
  const transformedParams = await doTransform({ params });
@@ -13984,7 +14030,7 @@ var DefaultRerankResult = class {
13984
14030
  };
13985
14031
 
13986
14032
  // src/transcribe/transcribe.ts
13987
- var import_provider_utils38 = require("@ai-sdk/provider-utils");
14033
+ var import_provider_utils39 = require("@ai-sdk/provider-utils");
13988
14034
  var defaultDownload2 = createDownload();
13989
14035
  async function transcribe({
13990
14036
  model,
@@ -14003,7 +14049,7 @@ async function transcribe({
14003
14049
  maxRetries: maxRetriesArg,
14004
14050
  abortSignal
14005
14051
  });
14006
- const headersWithUserAgent = (0, import_provider_utils38.withUserAgentSuffix)(
14052
+ const headersWithUserAgent = (0, import_provider_utils39.withUserAgentSuffix)(
14007
14053
  headers != null ? headers : {},
14008
14054
  `ai/${VERSION}`
14009
14055
  );
@@ -14055,7 +14101,7 @@ var DefaultTranscriptionResult = class {
14055
14101
  };
14056
14102
 
14057
14103
  // src/ui/call-completion-api.ts
14058
- var import_provider_utils39 = require("@ai-sdk/provider-utils");
14104
+ var import_provider_utils40 = require("@ai-sdk/provider-utils");
14059
14105
 
14060
14106
  // src/ui/process-text-stream.ts
14061
14107
  async function processTextStream({
@@ -14103,13 +14149,13 @@ async function callCompletionApi({
14103
14149
  ...body
14104
14150
  }),
14105
14151
  credentials,
14106
- headers: (0, import_provider_utils39.withUserAgentSuffix)(
14152
+ headers: (0, import_provider_utils40.withUserAgentSuffix)(
14107
14153
  {
14108
14154
  "Content-Type": "application/json",
14109
14155
  ...headers
14110
14156
  },
14111
14157
  `ai-sdk/${VERSION}`,
14112
- (0, import_provider_utils39.getRuntimeEnvironmentUserAgent)()
14158
+ (0, import_provider_utils40.getRuntimeEnvironmentUserAgent)()
14113
14159
  ),
14114
14160
  signal: abortController.signal
14115
14161
  }).catch((err) => {
@@ -14137,7 +14183,7 @@ async function callCompletionApi({
14137
14183
  }
14138
14184
  case "data": {
14139
14185
  await consumeStream({
14140
- stream: (0, import_provider_utils39.parseJsonEventStream)({
14186
+ stream: (0, import_provider_utils40.parseJsonEventStream)({
14141
14187
  stream: response.body,
14142
14188
  schema: uiMessageChunkSchema
14143
14189
  }).pipeThrough(
@@ -14189,7 +14235,7 @@ async function callCompletionApi({
14189
14235
  }
14190
14236
 
14191
14237
  // src/ui/chat.ts
14192
- var import_provider_utils42 = require("@ai-sdk/provider-utils");
14238
+ var import_provider_utils43 = require("@ai-sdk/provider-utils");
14193
14239
 
14194
14240
  // src/ui/convert-file-list-to-file-ui-parts.ts
14195
14241
  async function convertFileListToFileUIParts(files) {
@@ -14222,10 +14268,10 @@ async function convertFileListToFileUIParts(files) {
14222
14268
  }
14223
14269
 
14224
14270
  // src/ui/default-chat-transport.ts
14225
- var import_provider_utils41 = require("@ai-sdk/provider-utils");
14271
+ var import_provider_utils42 = require("@ai-sdk/provider-utils");
14226
14272
 
14227
14273
  // src/ui/http-chat-transport.ts
14228
- var import_provider_utils40 = require("@ai-sdk/provider-utils");
14274
+ var import_provider_utils41 = require("@ai-sdk/provider-utils");
14229
14275
  var HttpChatTransport = class {
14230
14276
  constructor({
14231
14277
  api = "/api/chat",
@@ -14249,12 +14295,12 @@ var HttpChatTransport = class {
14249
14295
  ...options
14250
14296
  }) {
14251
14297
  var _a23, _b, _c, _d, _e;
14252
- const resolvedBody = await (0, import_provider_utils40.resolve)(this.body);
14253
- const resolvedHeaders = await (0, import_provider_utils40.resolve)(this.headers);
14254
- 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);
14255
14301
  const baseHeaders = {
14256
- ...(0, import_provider_utils40.normalizeHeaders)(resolvedHeaders),
14257
- ...(0, import_provider_utils40.normalizeHeaders)(options.headers)
14302
+ ...(0, import_provider_utils41.normalizeHeaders)(resolvedHeaders),
14303
+ ...(0, import_provider_utils41.normalizeHeaders)(options.headers)
14258
14304
  };
14259
14305
  const preparedRequest = await ((_a23 = this.prepareSendMessagesRequest) == null ? void 0 : _a23.call(this, {
14260
14306
  api: this.api,
@@ -14268,7 +14314,7 @@ var HttpChatTransport = class {
14268
14314
  messageId: options.messageId
14269
14315
  }));
14270
14316
  const api = (_b = preparedRequest == null ? void 0 : preparedRequest.api) != null ? _b : this.api;
14271
- 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;
14272
14318
  const body = (preparedRequest == null ? void 0 : preparedRequest.body) !== void 0 ? preparedRequest.body : {
14273
14319
  ...resolvedBody,
14274
14320
  ...options.body,
@@ -14282,7 +14328,7 @@ var HttpChatTransport = class {
14282
14328
  const response = await fetch2(api, {
14283
14329
  method: "POST",
14284
14330
  headers: {
14285
- "Content-Type": "application/json",
14331
+ "content-type": "application/json",
14286
14332
  ...headers
14287
14333
  },
14288
14334
  body: JSON.stringify(body),
@@ -14301,12 +14347,12 @@ var HttpChatTransport = class {
14301
14347
  }
14302
14348
  async reconnectToStream(options) {
14303
14349
  var _a23, _b, _c, _d, _e;
14304
- const resolvedBody = await (0, import_provider_utils40.resolve)(this.body);
14305
- const resolvedHeaders = await (0, import_provider_utils40.resolve)(this.headers);
14306
- 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);
14307
14353
  const baseHeaders = {
14308
- ...(0, import_provider_utils40.normalizeHeaders)(resolvedHeaders),
14309
- ...(0, import_provider_utils40.normalizeHeaders)(options.headers)
14354
+ ...(0, import_provider_utils41.normalizeHeaders)(resolvedHeaders),
14355
+ ...(0, import_provider_utils41.normalizeHeaders)(options.headers)
14310
14356
  };
14311
14357
  const preparedRequest = await ((_a23 = this.prepareReconnectToStreamRequest) == null ? void 0 : _a23.call(this, {
14312
14358
  api: this.api,
@@ -14317,7 +14363,7 @@ var HttpChatTransport = class {
14317
14363
  requestMetadata: options.metadata
14318
14364
  }));
14319
14365
  const api = (_b = preparedRequest == null ? void 0 : preparedRequest.api) != null ? _b : `${this.api}/${options.chatId}/stream`;
14320
- 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;
14321
14367
  const credentials = (_c = preparedRequest == null ? void 0 : preparedRequest.credentials) != null ? _c : resolvedCredentials;
14322
14368
  const fetch2 = (_d = this.fetch) != null ? _d : globalThis.fetch;
14323
14369
  const response = await fetch2(api, {
@@ -14347,7 +14393,7 @@ var DefaultChatTransport = class extends HttpChatTransport {
14347
14393
  super(options);
14348
14394
  }
14349
14395
  processResponseStream(stream) {
14350
- return (0, import_provider_utils41.parseJsonEventStream)({
14396
+ return (0, import_provider_utils42.parseJsonEventStream)({
14351
14397
  stream,
14352
14398
  schema: uiMessageChunkSchema
14353
14399
  }).pipeThrough(
@@ -14366,7 +14412,7 @@ var DefaultChatTransport = class extends HttpChatTransport {
14366
14412
  // src/ui/chat.ts
14367
14413
  var AbstractChat = class {
14368
14414
  constructor({
14369
- generateId: generateId2 = import_provider_utils42.generateId,
14415
+ generateId: generateId2 = import_provider_utils43.generateId,
14370
14416
  id = generateId2(),
14371
14417
  transport = new DefaultChatTransport(),
14372
14418
  messageMetadataSchema,
@@ -14390,9 +14436,24 @@ var AbstractChat = class {
14390
14436
  this.sendMessage = async (message, options) => {
14391
14437
  var _a23, _b, _c, _d;
14392
14438
  if (message == null) {
14393
- await this.makeRequest({
14394
- trigger: "submit-message",
14395
- 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,
14396
14457
  ...options
14397
14458
  });
14398
14459
  return;
@@ -14487,16 +14548,24 @@ var AbstractChat = class {
14487
14548
  options
14488
14549
  }) => this.jobExecutor.run(async () => {
14489
14550
  const messages = this.state.messages;
14490
- const lastMessage = messages[messages.length - 1];
14491
14551
  const updatePart = (part) => isToolUIPart(part) && part.state === "approval-requested" && part.approval.id === id ? {
14492
14552
  ...part,
14493
14553
  state: "approval-responded",
14494
14554
  approval: { ...part.approval, id, approved, reason }
14495
14555
  } : part;
14496
- this.state.replaceMessage(messages.length - 1, {
14497
- ...lastMessage,
14498
- parts: lastMessage.parts.map(updatePart)
14499
- });
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
+ }
14500
14569
  if (this.activeResponse) {
14501
14570
  this.activeResponse.state.message.parts = this.activeResponse.state.message.parts.map(updatePart);
14502
14571
  }
@@ -14504,9 +14573,10 @@ var AbstractChat = class {
14504
14573
  this.shouldSendAutomatically().then((shouldSend) => {
14505
14574
  var _a23;
14506
14575
  if (shouldSend) {
14507
- this.makeRequest({
14508
- trigger: "submit-message",
14509
- 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,
14510
14580
  ...options
14511
14581
  });
14512
14582
  }
@@ -14608,6 +14678,25 @@ var AbstractChat = class {
14608
14678
  }
14609
14679
  return result;
14610
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
+ }
14611
14700
  async makeRequest({
14612
14701
  trigger,
14613
14702
  metadata,
@@ -14674,6 +14763,9 @@ var AbstractChat = class {
14674
14763
  }
14675
14764
  this.setStatus({ status: "submitted", error: void 0 });
14676
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";
14677
14769
  let isAbort = false;
14678
14770
  let isDisconnect = false;
14679
14771
  let isError = false;
@@ -14681,7 +14773,7 @@ var AbstractChat = class {
14681
14773
  try {
14682
14774
  const response = {
14683
14775
  state: createStreamingUIMessageState({
14684
- 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),
14685
14777
  messageId: this.generateId()
14686
14778
  }),
14687
14779
  abortController
@@ -14722,8 +14814,12 @@ var AbstractChat = class {
14722
14814
  if (updateStatus) {
14723
14815
  this.setStatus({ status: "streaming" });
14724
14816
  }
14725
- const replaceLastMessage = response.state.message.id === ((_a24 = this.lastMessage) == null ? void 0 : _a24.id);
14726
- 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)) {
14727
14823
  this.state.replaceMessage(
14728
14824
  this.state.messages.length - 1,
14729
14825
  response.state.message
@@ -14870,7 +14966,7 @@ function lastAssistantMessageIsCompleteWithApprovalResponses({
14870
14966
  // has at least one tool approval response
14871
14967
  lastStepToolInvocations.filter((part) => part.state === "approval-responded").length > 0 && // all tool approvals must have a response
14872
14968
  lastStepToolInvocations.every(
14873
- (part) => part.state === "output-available" || part.state === "output-error" || part.state === "output-denied" || part.state === "approval-responded"
14969
+ (part) => part.state === "output-available" && part.preliminary !== true || part.state === "output-error" || part.state === "output-denied" || part.state === "approval-responded"
14874
14970
  )
14875
14971
  );
14876
14972
  }
@@ -14891,7 +14987,7 @@ function lastAssistantMessageIsCompleteWithToolCalls({
14891
14987
  }, -1);
14892
14988
  const lastStepToolInvocations = message.parts.slice(lastStepStartIndex + 1).filter(isToolUIPart).filter((part) => !part.providerExecuted);
14893
14989
  return lastStepToolInvocations.length > 0 && lastStepToolInvocations.every(
14894
- (part) => part.state === "output-available" || part.state === "output-error"
14990
+ (part) => part.state === "output-available" && part.preliminary !== true || part.state === "output-error"
14895
14991
  );
14896
14992
  }
14897
14993