ai 6.0.230 → 6.0.232

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1171,7 +1171,7 @@ import {
1171
1171
  } from "@ai-sdk/provider-utils";
1172
1172
 
1173
1173
  // src/version.ts
1174
- var VERSION = true ? "6.0.230" : "0.0.0-test";
1174
+ var VERSION = true ? "6.0.232" : "0.0.0-test";
1175
1175
 
1176
1176
  // src/util/download/download.ts
1177
1177
  var download = async ({
@@ -1224,6 +1224,42 @@ var createDefaultDownloadFunction = (download2 = download) => (requestedDownload
1224
1224
  )
1225
1225
  );
1226
1226
 
1227
+ // src/util/merge-objects.ts
1228
+ function mergeObjects(base, overrides) {
1229
+ if (base === void 0 && overrides === void 0) {
1230
+ return void 0;
1231
+ }
1232
+ if (base === void 0) {
1233
+ return overrides;
1234
+ }
1235
+ if (overrides === void 0) {
1236
+ return base;
1237
+ }
1238
+ const result = { ...base };
1239
+ for (const key in overrides) {
1240
+ if (key === "__proto__" || key === "constructor" || key === "prototype") {
1241
+ continue;
1242
+ }
1243
+ if (Object.prototype.hasOwnProperty.call(overrides, key)) {
1244
+ const overridesValue = overrides[key];
1245
+ if (overridesValue === void 0)
1246
+ continue;
1247
+ const baseValue = key in base ? base[key] : void 0;
1248
+ const isSourceObject = overridesValue !== null && typeof overridesValue === "object" && !Array.isArray(overridesValue) && !(overridesValue instanceof Date) && !(overridesValue instanceof RegExp);
1249
+ const isTargetObject = baseValue !== null && baseValue !== void 0 && typeof baseValue === "object" && !Array.isArray(baseValue) && !(baseValue instanceof Date) && !(baseValue instanceof RegExp);
1250
+ if (isSourceObject && isTargetObject) {
1251
+ result[key] = mergeObjects(
1252
+ baseValue,
1253
+ overridesValue
1254
+ );
1255
+ } else {
1256
+ result[key] = overridesValue;
1257
+ }
1258
+ }
1259
+ }
1260
+ return result;
1261
+ }
1262
+
1227
1263
  // src/prompt/data-content.ts
1228
1264
  import { AISDKError as AISDKError23 } from "@ai-sdk/provider";
1229
1265
  import {
@@ -1374,7 +1410,15 @@ async function convertToLanguageModelPrompt({
1374
1410
  }
1375
1411
  const lastCombinedMessage = combinedMessages.at(-1);
1376
1412
  if ((lastCombinedMessage == null ? void 0 : lastCombinedMessage.role) === "tool") {
1413
+ const lastContentPart = lastCombinedMessage.content.at(-1);
1414
+ if (lastContentPart != null && lastCombinedMessage.providerOptions != null) {
1415
+ lastContentPart.providerOptions = mergeObjects(
1416
+ lastCombinedMessage.providerOptions,
1417
+ lastContentPart.providerOptions
1418
+ );
1419
+ }
1377
1420
  lastCombinedMessage.content.push(...message.content);
1421
+ lastCombinedMessage.providerOptions = message.providerOptions;
1378
1422
  } else {
1379
1423
  combinedMessages.push(message);
1380
1424
  }
@@ -2636,42 +2680,6 @@ function addImageModelUsage(usage1, usage2) {
2636
2680
  };
2637
2681
  }
2638
2682
 
2639
- // src/util/merge-objects.ts
2640
- function mergeObjects(base, overrides) {
2641
- if (base === void 0 && overrides === void 0) {
2642
- return void 0;
2643
- }
2644
- if (base === void 0) {
2645
- return overrides;
2646
- }
2647
- if (overrides === void 0) {
2648
- return base;
2649
- }
2650
- const result = { ...base };
2651
- for (const key in overrides) {
2652
- if (key === "__proto__" || key === "constructor" || key === "prototype") {
2653
- continue;
2654
- }
2655
- if (Object.prototype.hasOwnProperty.call(overrides, key)) {
2656
- const overridesValue = overrides[key];
2657
- if (overridesValue === void 0)
2658
- continue;
2659
- const baseValue = key in base ? base[key] : void 0;
2660
- const isSourceObject = overridesValue !== null && typeof overridesValue === "object" && !Array.isArray(overridesValue) && !(overridesValue instanceof Date) && !(overridesValue instanceof RegExp);
2661
- const isTargetObject = baseValue !== null && baseValue !== void 0 && typeof baseValue === "object" && !Array.isArray(baseValue) && !(baseValue instanceof Date) && !(baseValue instanceof RegExp);
2662
- if (isSourceObject && isTargetObject) {
2663
- result[key] = mergeObjects(
2664
- baseValue,
2665
- overridesValue
2666
- );
2667
- } else {
2668
- result[key] = overridesValue;
2669
- }
2670
- }
2671
- }
2672
- return result;
2673
- }
2674
-
2675
2683
  // src/util/retry-with-exponential-backoff.ts
2676
2684
  import { APICallError as APICallError2 } from "@ai-sdk/provider";
2677
2685
  import { GatewayError } from "@ai-sdk/gateway";
@@ -3013,6 +3021,21 @@ function extractTextContent(content) {
3013
3021
  return parts.map((content2) => content2.text).join("");
3014
3022
  }
3015
3023
 
3024
+ // src/generate-text/filter-active-tools.ts
3025
+ function filterActiveTools({
3026
+ tools,
3027
+ activeTools
3028
+ }) {
3029
+ if (tools == null || activeTools == null) {
3030
+ return tools;
3031
+ }
3032
+ return Object.fromEntries(
3033
+ Object.entries(tools).filter(
3034
+ ([name22]) => activeTools.includes(name22)
3035
+ )
3036
+ );
3037
+ }
3038
+
3016
3039
  // src/generate-text/generated-file.ts
3017
3040
  import {
3018
3041
  convertBase64ToUint8Array as convertBase64ToUint8Array3,
@@ -4569,6 +4592,9 @@ async function generateText({
4569
4592
  const steps = [];
4570
4593
  const pendingDeferredToolCalls = /* @__PURE__ */ new Map();
4571
4594
  do {
4595
+ if (steps.length > 0) {
4596
+ mergedAbortSignal == null ? void 0 : mergedAbortSignal.throwIfAborted();
4597
+ }
4572
4598
  const stepTimeoutId = setAbortTimeout({
4573
4599
  abortController: stepAbortController,
4574
4600
  label: "Step",
@@ -4600,6 +4626,10 @@ async function generateText({
4600
4626
  });
4601
4627
  experimental_context = (_d = prepareStepResult == null ? void 0 : prepareStepResult.experimental_context) != null ? _d : experimental_context;
4602
4628
  const stepActiveTools = (_e = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _e : activeTools;
4629
+ const stepToolSet = filterActiveTools({
4630
+ tools,
4631
+ activeTools: stepActiveTools
4632
+ });
4603
4633
  const { toolChoice: stepToolChoice, tools: stepTools } = await prepareToolsAndToolChoice({
4604
4634
  tools,
4605
4635
  toolChoice: (_f = prepareStepResult == null ? void 0 : prepareStepResult.toolChoice) != null ? _f : toolChoice,
@@ -4752,7 +4782,7 @@ async function generateText({
4752
4782
  ).map(
4753
4783
  (toolCall) => parseToolCall({
4754
4784
  toolCall,
4755
- tools,
4785
+ tools: stepToolSet,
4756
4786
  repairToolCall,
4757
4787
  system,
4758
4788
  messages: stepInputMessages
@@ -4764,7 +4794,7 @@ async function generateText({
4764
4794
  if (toolCall.invalid) {
4765
4795
  continue;
4766
4796
  }
4767
- const tool2 = tools == null ? void 0 : tools[toolCall.toolName];
4797
+ const tool2 = stepToolSet == null ? void 0 : stepToolSet[toolCall.toolName];
4768
4798
  if (tool2 == null) {
4769
4799
  continue;
4770
4800
  }
@@ -4824,13 +4854,13 @@ async function generateText({
4824
4854
  clientToolCalls = stepToolCalls.filter(
4825
4855
  (toolCall) => !toolCall.providerExecuted
4826
4856
  );
4827
- if (tools != null) {
4857
+ if (stepToolSet != null) {
4828
4858
  clientToolOutputs.push(
4829
4859
  ...await executeTools({
4830
4860
  toolCalls: clientToolCalls.filter(
4831
4861
  (toolCall) => !toolCall.invalid && toolApprovalRequests[toolCall.toolCallId] == null
4832
4862
  ),
4833
- tools,
4863
+ tools: stepToolSet,
4834
4864
  tracer,
4835
4865
  telemetry,
4836
4866
  messages: stepInputMessages,
@@ -4852,7 +4882,7 @@ async function generateText({
4852
4882
  for (const toolCall of stepToolCalls) {
4853
4883
  if (!toolCall.providerExecuted)
4854
4884
  continue;
4855
- const tool2 = tools == null ? void 0 : tools[toolCall.toolName];
4885
+ const tool2 = stepToolSet == null ? void 0 : stepToolSet[toolCall.toolName];
4856
4886
  if ((tool2 == null ? void 0 : tool2.type) === "provider" && tool2.supportsDeferredResults) {
4857
4887
  const hasResultInResponse = currentModelResponse.content.some(
4858
4888
  (part) => part.type === "tool-result" && part.toolCallId === toolCall.toolCallId
@@ -4874,12 +4904,12 @@ async function generateText({
4874
4904
  toolCalls: stepToolCalls,
4875
4905
  toolOutputs: clientToolOutputs,
4876
4906
  toolApprovalRequests: Object.values(toolApprovalRequests),
4877
- tools
4907
+ tools: stepToolSet
4878
4908
  });
4879
4909
  responseMessages.push(
4880
4910
  ...await toResponseMessages({
4881
4911
  content: stepContent,
4882
- tools
4912
+ tools: stepToolSet
4883
4913
  })
4884
4914
  );
4885
4915
  const stepRequest = ((_i = include == null ? void 0 : include.requestBody) != null ? _i : true) ? (_j = currentModelResponse.request) != null ? _j : {} : { ...currentModelResponse.request, body: void 0 };
@@ -5444,27 +5474,27 @@ var toolMetadataSchema = z7.record(
5444
5474
  var uiMessageChunkSchema = lazySchema(
5445
5475
  () => zodSchema(
5446
5476
  z7.union([
5447
- z7.strictObject({
5477
+ z7.looseObject({
5448
5478
  type: z7.literal("text-start"),
5449
5479
  id: z7.string(),
5450
5480
  providerMetadata: providerMetadataSchema.optional()
5451
5481
  }),
5452
- z7.strictObject({
5482
+ z7.looseObject({
5453
5483
  type: z7.literal("text-delta"),
5454
5484
  id: z7.string(),
5455
5485
  delta: z7.string(),
5456
5486
  providerMetadata: providerMetadataSchema.optional()
5457
5487
  }),
5458
- z7.strictObject({
5488
+ z7.looseObject({
5459
5489
  type: z7.literal("text-end"),
5460
5490
  id: z7.string(),
5461
5491
  providerMetadata: providerMetadataSchema.optional()
5462
5492
  }),
5463
- z7.strictObject({
5493
+ z7.looseObject({
5464
5494
  type: z7.literal("error"),
5465
5495
  errorText: z7.string()
5466
5496
  }),
5467
- z7.strictObject({
5497
+ z7.looseObject({
5468
5498
  type: z7.literal("tool-input-start"),
5469
5499
  toolCallId: z7.string(),
5470
5500
  toolName: z7.string(),
@@ -5474,12 +5504,12 @@ var uiMessageChunkSchema = lazySchema(
5474
5504
  dynamic: z7.boolean().optional(),
5475
5505
  title: z7.string().optional()
5476
5506
  }),
5477
- z7.strictObject({
5507
+ z7.looseObject({
5478
5508
  type: z7.literal("tool-input-delta"),
5479
5509
  toolCallId: z7.string(),
5480
5510
  inputTextDelta: z7.string()
5481
5511
  }),
5482
- z7.strictObject({
5512
+ z7.looseObject({
5483
5513
  type: z7.literal("tool-input-available"),
5484
5514
  toolCallId: z7.string(),
5485
5515
  toolName: z7.string(),
@@ -5490,7 +5520,7 @@ var uiMessageChunkSchema = lazySchema(
5490
5520
  dynamic: z7.boolean().optional(),
5491
5521
  title: z7.string().optional()
5492
5522
  }),
5493
- z7.strictObject({
5523
+ z7.looseObject({
5494
5524
  type: z7.literal("tool-input-error"),
5495
5525
  toolCallId: z7.string(),
5496
5526
  toolName: z7.string(),
@@ -5502,13 +5532,13 @@ var uiMessageChunkSchema = lazySchema(
5502
5532
  errorText: z7.string(),
5503
5533
  title: z7.string().optional()
5504
5534
  }),
5505
- z7.strictObject({
5535
+ z7.looseObject({
5506
5536
  type: z7.literal("tool-approval-request"),
5507
5537
  approvalId: z7.string(),
5508
5538
  toolCallId: z7.string(),
5509
5539
  signature: z7.string().optional()
5510
5540
  }),
5511
- z7.strictObject({
5541
+ z7.looseObject({
5512
5542
  type: z7.literal("tool-output-available"),
5513
5543
  toolCallId: z7.string(),
5514
5544
  output: z7.unknown(),
@@ -5518,7 +5548,7 @@ var uiMessageChunkSchema = lazySchema(
5518
5548
  dynamic: z7.boolean().optional(),
5519
5549
  preliminary: z7.boolean().optional()
5520
5550
  }),
5521
- z7.strictObject({
5551
+ z7.looseObject({
5522
5552
  type: z7.literal("tool-output-error"),
5523
5553
  toolCallId: z7.string(),
5524
5554
  errorText: z7.string(),
@@ -5527,34 +5557,34 @@ var uiMessageChunkSchema = lazySchema(
5527
5557
  toolMetadata: toolMetadataSchema.optional(),
5528
5558
  dynamic: z7.boolean().optional()
5529
5559
  }),
5530
- z7.strictObject({
5560
+ z7.looseObject({
5531
5561
  type: z7.literal("tool-output-denied"),
5532
5562
  toolCallId: z7.string()
5533
5563
  }),
5534
- z7.strictObject({
5564
+ z7.looseObject({
5535
5565
  type: z7.literal("reasoning-start"),
5536
5566
  id: z7.string(),
5537
5567
  providerMetadata: providerMetadataSchema.optional()
5538
5568
  }),
5539
- z7.strictObject({
5569
+ z7.looseObject({
5540
5570
  type: z7.literal("reasoning-delta"),
5541
5571
  id: z7.string(),
5542
5572
  delta: z7.string(),
5543
5573
  providerMetadata: providerMetadataSchema.optional()
5544
5574
  }),
5545
- z7.strictObject({
5575
+ z7.looseObject({
5546
5576
  type: z7.literal("reasoning-end"),
5547
5577
  id: z7.string(),
5548
5578
  providerMetadata: providerMetadataSchema.optional()
5549
5579
  }),
5550
- z7.strictObject({
5580
+ z7.looseObject({
5551
5581
  type: z7.literal("source-url"),
5552
5582
  sourceId: z7.string(),
5553
5583
  url: z7.string(),
5554
5584
  title: z7.string().optional(),
5555
5585
  providerMetadata: providerMetadataSchema.optional()
5556
5586
  }),
5557
- z7.strictObject({
5587
+ z7.looseObject({
5558
5588
  type: z7.literal("source-document"),
5559
5589
  sourceId: z7.string(),
5560
5590
  mediaType: z7.string(),
@@ -5562,13 +5592,13 @@ var uiMessageChunkSchema = lazySchema(
5562
5592
  filename: z7.string().optional(),
5563
5593
  providerMetadata: providerMetadataSchema.optional()
5564
5594
  }),
5565
- z7.strictObject({
5595
+ z7.looseObject({
5566
5596
  type: z7.literal("file"),
5567
5597
  url: z7.string(),
5568
5598
  mediaType: z7.string(),
5569
5599
  providerMetadata: providerMetadataSchema.optional()
5570
5600
  }),
5571
- z7.strictObject({
5601
+ z7.looseObject({
5572
5602
  type: z7.custom(
5573
5603
  (value) => typeof value === "string" && value.startsWith("data-"),
5574
5604
  { message: 'Type must start with "data-"' }
@@ -5577,18 +5607,18 @@ var uiMessageChunkSchema = lazySchema(
5577
5607
  data: z7.unknown(),
5578
5608
  transient: z7.boolean().optional()
5579
5609
  }),
5580
- z7.strictObject({
5610
+ z7.looseObject({
5581
5611
  type: z7.literal("start-step")
5582
5612
  }),
5583
- z7.strictObject({
5613
+ z7.looseObject({
5584
5614
  type: z7.literal("finish-step")
5585
5615
  }),
5586
- z7.strictObject({
5616
+ z7.looseObject({
5587
5617
  type: z7.literal("start"),
5588
5618
  messageId: z7.string().optional(),
5589
5619
  messageMetadata: z7.unknown().optional()
5590
5620
  }),
5591
- z7.strictObject({
5621
+ z7.looseObject({
5592
5622
  type: z7.literal("finish"),
5593
5623
  finishReason: z7.enum([
5594
5624
  "stop",
@@ -5600,11 +5630,11 @@ var uiMessageChunkSchema = lazySchema(
5600
5630
  ]).optional(),
5601
5631
  messageMetadata: z7.unknown().optional()
5602
5632
  }),
5603
- z7.strictObject({
5633
+ z7.looseObject({
5604
5634
  type: z7.literal("abort"),
5605
5635
  reason: z7.string().optional()
5606
5636
  }),
5607
- z7.strictObject({
5637
+ z7.looseObject({
5608
5638
  type: z7.literal("message-metadata"),
5609
5639
  messageMetadata: z7.unknown()
5610
5640
  })
@@ -7060,6 +7090,7 @@ var DefaultStreamTextResult = class {
7060
7090
  let recordedWarnings = [];
7061
7091
  const recordedSteps = [];
7062
7092
  let recordedNoOutputError;
7093
+ let currentStepToolSet = tools;
7063
7094
  const pendingDeferredToolCalls = /* @__PURE__ */ new Map();
7064
7095
  let rootSpan;
7065
7096
  let activeTextContent = createIdMap();
@@ -7187,7 +7218,7 @@ var DefaultStreamTextResult = class {
7187
7218
  if (part.type === "finish-step") {
7188
7219
  const stepMessages = await toResponseMessages({
7189
7220
  content: recordedContent,
7190
- tools
7221
+ tools: currentStepToolSet
7191
7222
  });
7192
7223
  const currentStepResult = new DefaultStepResult({
7193
7224
  stepNumber: recordedSteps.length,
@@ -7618,6 +7649,11 @@ var DefaultStreamTextResult = class {
7618
7649
  download: download2
7619
7650
  });
7620
7651
  const stepActiveTools = (_d = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _d : activeTools;
7652
+ const stepToolSet = filterActiveTools({
7653
+ tools,
7654
+ activeTools: stepActiveTools
7655
+ });
7656
+ currentStepToolSet = stepToolSet;
7621
7657
  const { toolChoice: stepToolChoice, tools: stepTools } = await prepareToolsAndToolChoice({
7622
7658
  tools,
7623
7659
  toolChoice: (_e = prepareStepResult == null ? void 0 : prepareStepResult.toolChoice) != null ? _e : toolChoice,
@@ -7717,7 +7753,7 @@ var DefaultStreamTextResult = class {
7717
7753
  })
7718
7754
  );
7719
7755
  const streamWithToolResults = runToolsTransformation({
7720
- tools,
7756
+ tools: stepToolSet,
7721
7757
  generatorStream: stream2,
7722
7758
  tracer,
7723
7759
  telemetry,
@@ -7868,7 +7904,7 @@ var DefaultStreamTextResult = class {
7868
7904
  }
7869
7905
  case "tool-input-start": {
7870
7906
  activeToolCallToolNames[chunk.id] = chunk.toolName;
7871
- const tool2 = tools == null ? void 0 : tools[chunk.toolName];
7907
+ const tool2 = stepToolSet == null ? void 0 : stepToolSet[chunk.toolName];
7872
7908
  if ((tool2 == null ? void 0 : tool2.onInputStart) != null) {
7873
7909
  await tool2.onInputStart({
7874
7910
  toolCallId: chunk.id,
@@ -7891,7 +7927,7 @@ var DefaultStreamTextResult = class {
7891
7927
  }
7892
7928
  case "tool-input-delta": {
7893
7929
  const toolName = activeToolCallToolNames[chunk.id];
7894
- const tool2 = tools == null ? void 0 : tools[toolName];
7930
+ const tool2 = stepToolSet == null ? void 0 : stepToolSet[toolName];
7895
7931
  if ((tool2 == null ? void 0 : tool2.onInputDelta) != null) {
7896
7932
  await tool2.onInputDelta({
7897
7933
  inputTextDelta: chunk.delta,
@@ -8023,7 +8059,7 @@ var DefaultStreamTextResult = class {
8023
8059
  for (const toolCall of stepToolCalls) {
8024
8060
  if (toolCall.providerExecuted !== true)
8025
8061
  continue;
8026
- const tool2 = tools == null ? void 0 : tools[toolCall.toolName];
8062
+ const tool2 = stepToolSet == null ? void 0 : stepToolSet[toolCall.toolName];
8027
8063
  if ((tool2 == null ? void 0 : tool2.type) === "provider" && tool2.supportsDeferredResults) {
8028
8064
  const hasResultInStep = stepToolOutputs.some(
8029
8065
  (output2) => (output2.type === "tool-result" || output2.type === "tool-error") && output2.toolCallId === toolCall.toolCallId
@@ -8058,7 +8094,7 @@ var DefaultStreamTextResult = class {
8058
8094
  // use transformed content to create the messages for the next step:
8059
8095
  recordedSteps[recordedSteps.length - 1].content
8060
8096
  ),
8061
- tools
8097
+ tools: stepToolSet
8062
8098
  })
8063
8099
  );
8064
8100
  try {