ai 5.0.215 → 5.0.217

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.js CHANGED
@@ -778,7 +778,7 @@ function detectMediaType({
778
778
  var import_provider_utils2 = require("@ai-sdk/provider-utils");
779
779
 
780
780
  // src/version.ts
781
- var VERSION = true ? "5.0.215" : "0.0.0-test";
781
+ var VERSION = true ? "5.0.217" : "0.0.0-test";
782
782
 
783
783
  // src/util/download/download.ts
784
784
  var download = async ({
@@ -1922,6 +1922,21 @@ function extractTextContent(content) {
1922
1922
  return parts.map((content2) => content2.text).join("");
1923
1923
  }
1924
1924
 
1925
+ // src/generate-text/filter-active-tools.ts
1926
+ function filterActiveTools({
1927
+ tools,
1928
+ activeTools
1929
+ }) {
1930
+ if (tools == null || activeTools == null) {
1931
+ return tools;
1932
+ }
1933
+ return Object.fromEntries(
1934
+ Object.entries(tools).filter(
1935
+ ([name16]) => activeTools.includes(name16)
1936
+ )
1937
+ );
1938
+ }
1939
+
1925
1940
  // src/generate-text/generated-file.ts
1926
1941
  var import_provider_utils8 = require("@ai-sdk/provider-utils");
1927
1942
  var DefaultGeneratedFile = class {
@@ -2334,6 +2349,9 @@ async function generateText({
2334
2349
  const responseMessages = [];
2335
2350
  const steps = [];
2336
2351
  do {
2352
+ if (steps.length > 0) {
2353
+ abortSignal == null ? void 0 : abortSignal.throwIfAborted();
2354
+ }
2337
2355
  const stepInputMessages = [
2338
2356
  ...initialPrompt.messages,
2339
2357
  ...responseMessages
@@ -2355,10 +2373,15 @@ async function generateText({
2355
2373
  supportedUrls: await stepModel.supportedUrls,
2356
2374
  download: download2
2357
2375
  });
2376
+ const stepActiveTools = (_d = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _d : activeTools;
2377
+ const stepToolSet = filterActiveTools({
2378
+ tools,
2379
+ activeTools: stepActiveTools
2380
+ });
2358
2381
  const { toolChoice: stepToolChoice, tools: stepTools } = prepareToolsAndToolChoice({
2359
2382
  tools,
2360
- toolChoice: (_d = prepareStepResult == null ? void 0 : prepareStepResult.toolChoice) != null ? _d : toolChoice,
2361
- activeTools: (_e = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _e : activeTools
2383
+ toolChoice: (_e = prepareStepResult == null ? void 0 : prepareStepResult.toolChoice) != null ? _e : toolChoice,
2384
+ activeTools: stepActiveTools
2362
2385
  });
2363
2386
  currentModelResponse = await retry(
2364
2387
  () => {
@@ -2462,7 +2485,7 @@ async function generateText({
2462
2485
  ).map(
2463
2486
  (toolCall) => parseToolCall({
2464
2487
  toolCall,
2465
- tools,
2488
+ tools: stepToolSet,
2466
2489
  repairToolCall,
2467
2490
  system,
2468
2491
  messages: stepInputMessages
@@ -2473,7 +2496,15 @@ async function generateText({
2473
2496
  if (toolCall.invalid) {
2474
2497
  continue;
2475
2498
  }
2476
- const tool2 = tools[toolCall.toolName];
2499
+ const tool2 = stepToolSet[toolCall.toolName];
2500
+ if (tool2.onInputStart != null) {
2501
+ await tool2.onInputStart({
2502
+ toolCallId: toolCall.toolCallId,
2503
+ messages: stepInputMessages,
2504
+ abortSignal,
2505
+ experimental_context
2506
+ });
2507
+ }
2477
2508
  if ((tool2 == null ? void 0 : tool2.onInputAvailable) != null) {
2478
2509
  await tool2.onInputAvailable({
2479
2510
  input: toolCall.input,
@@ -2501,13 +2532,13 @@ async function generateText({
2501
2532
  clientToolCalls = stepToolCalls.filter(
2502
2533
  (toolCall) => !toolCall.providerExecuted
2503
2534
  );
2504
- if (tools != null) {
2535
+ if (stepToolSet != null) {
2505
2536
  clientToolOutputs.push(
2506
2537
  ...await executeTools({
2507
2538
  toolCalls: clientToolCalls.filter(
2508
2539
  (toolCall) => !toolCall.invalid
2509
2540
  ),
2510
- tools,
2541
+ tools: stepToolSet,
2511
2542
  tracer,
2512
2543
  telemetry,
2513
2544
  messages: stepInputMessages,
@@ -2524,7 +2555,7 @@ async function generateText({
2524
2555
  responseMessages.push(
2525
2556
  ...toResponseMessages({
2526
2557
  content: stepContent,
2527
- tools
2558
+ tools: stepToolSet
2528
2559
  })
2529
2560
  );
2530
2561
  const currentStepResult = new DefaultStepResult({
@@ -2993,39 +3024,39 @@ var import_provider_utils11 = require("@ai-sdk/provider-utils");
2993
3024
  var uiMessageChunkSchema = (0, import_provider_utils11.lazyValidator)(
2994
3025
  () => (0, import_provider_utils11.zodSchema)(
2995
3026
  import_v47.z.union([
2996
- import_v47.z.strictObject({
3027
+ import_v47.z.looseObject({
2997
3028
  type: import_v47.z.literal("text-start"),
2998
3029
  id: import_v47.z.string(),
2999
3030
  providerMetadata: providerMetadataSchema.optional()
3000
3031
  }),
3001
- import_v47.z.strictObject({
3032
+ import_v47.z.looseObject({
3002
3033
  type: import_v47.z.literal("text-delta"),
3003
3034
  id: import_v47.z.string(),
3004
3035
  delta: import_v47.z.string(),
3005
3036
  providerMetadata: providerMetadataSchema.optional()
3006
3037
  }),
3007
- import_v47.z.strictObject({
3038
+ import_v47.z.looseObject({
3008
3039
  type: import_v47.z.literal("text-end"),
3009
3040
  id: import_v47.z.string(),
3010
3041
  providerMetadata: providerMetadataSchema.optional()
3011
3042
  }),
3012
- import_v47.z.strictObject({
3043
+ import_v47.z.looseObject({
3013
3044
  type: import_v47.z.literal("error"),
3014
3045
  errorText: import_v47.z.string()
3015
3046
  }),
3016
- import_v47.z.strictObject({
3047
+ import_v47.z.looseObject({
3017
3048
  type: import_v47.z.literal("tool-input-start"),
3018
3049
  toolCallId: import_v47.z.string(),
3019
3050
  toolName: import_v47.z.string(),
3020
3051
  providerExecuted: import_v47.z.boolean().optional(),
3021
3052
  dynamic: import_v47.z.boolean().optional()
3022
3053
  }),
3023
- import_v47.z.strictObject({
3054
+ import_v47.z.looseObject({
3024
3055
  type: import_v47.z.literal("tool-input-delta"),
3025
3056
  toolCallId: import_v47.z.string(),
3026
3057
  inputTextDelta: import_v47.z.string()
3027
3058
  }),
3028
- import_v47.z.strictObject({
3059
+ import_v47.z.looseObject({
3029
3060
  type: import_v47.z.literal("tool-input-available"),
3030
3061
  toolCallId: import_v47.z.string(),
3031
3062
  toolName: import_v47.z.string(),
@@ -3034,7 +3065,7 @@ var uiMessageChunkSchema = (0, import_provider_utils11.lazyValidator)(
3034
3065
  providerMetadata: providerMetadataSchema.optional(),
3035
3066
  dynamic: import_v47.z.boolean().optional()
3036
3067
  }),
3037
- import_v47.z.strictObject({
3068
+ import_v47.z.looseObject({
3038
3069
  type: import_v47.z.literal("tool-input-error"),
3039
3070
  toolCallId: import_v47.z.string(),
3040
3071
  toolName: import_v47.z.string(),
@@ -3044,7 +3075,7 @@ var uiMessageChunkSchema = (0, import_provider_utils11.lazyValidator)(
3044
3075
  dynamic: import_v47.z.boolean().optional(),
3045
3076
  errorText: import_v47.z.string()
3046
3077
  }),
3047
- import_v47.z.strictObject({
3078
+ import_v47.z.looseObject({
3048
3079
  type: import_v47.z.literal("tool-output-available"),
3049
3080
  toolCallId: import_v47.z.string(),
3050
3081
  output: import_v47.z.unknown(),
@@ -3052,37 +3083,37 @@ var uiMessageChunkSchema = (0, import_provider_utils11.lazyValidator)(
3052
3083
  dynamic: import_v47.z.boolean().optional(),
3053
3084
  preliminary: import_v47.z.boolean().optional()
3054
3085
  }),
3055
- import_v47.z.strictObject({
3086
+ import_v47.z.looseObject({
3056
3087
  type: import_v47.z.literal("tool-output-error"),
3057
3088
  toolCallId: import_v47.z.string(),
3058
3089
  errorText: import_v47.z.string(),
3059
3090
  providerExecuted: import_v47.z.boolean().optional(),
3060
3091
  dynamic: import_v47.z.boolean().optional()
3061
3092
  }),
3062
- import_v47.z.strictObject({
3093
+ import_v47.z.looseObject({
3063
3094
  type: import_v47.z.literal("reasoning-start"),
3064
3095
  id: import_v47.z.string(),
3065
3096
  providerMetadata: providerMetadataSchema.optional()
3066
3097
  }),
3067
- import_v47.z.strictObject({
3098
+ import_v47.z.looseObject({
3068
3099
  type: import_v47.z.literal("reasoning-delta"),
3069
3100
  id: import_v47.z.string(),
3070
3101
  delta: import_v47.z.string(),
3071
3102
  providerMetadata: providerMetadataSchema.optional()
3072
3103
  }),
3073
- import_v47.z.strictObject({
3104
+ import_v47.z.looseObject({
3074
3105
  type: import_v47.z.literal("reasoning-end"),
3075
3106
  id: import_v47.z.string(),
3076
3107
  providerMetadata: providerMetadataSchema.optional()
3077
3108
  }),
3078
- import_v47.z.strictObject({
3109
+ import_v47.z.looseObject({
3079
3110
  type: import_v47.z.literal("source-url"),
3080
3111
  sourceId: import_v47.z.string(),
3081
3112
  url: import_v47.z.string(),
3082
3113
  title: import_v47.z.string().optional(),
3083
3114
  providerMetadata: providerMetadataSchema.optional()
3084
3115
  }),
3085
- import_v47.z.strictObject({
3116
+ import_v47.z.looseObject({
3086
3117
  type: import_v47.z.literal("source-document"),
3087
3118
  sourceId: import_v47.z.string(),
3088
3119
  mediaType: import_v47.z.string(),
@@ -3090,13 +3121,13 @@ var uiMessageChunkSchema = (0, import_provider_utils11.lazyValidator)(
3090
3121
  filename: import_v47.z.string().optional(),
3091
3122
  providerMetadata: providerMetadataSchema.optional()
3092
3123
  }),
3093
- import_v47.z.strictObject({
3124
+ import_v47.z.looseObject({
3094
3125
  type: import_v47.z.literal("file"),
3095
3126
  url: import_v47.z.string(),
3096
3127
  mediaType: import_v47.z.string(),
3097
3128
  providerMetadata: providerMetadataSchema.optional()
3098
3129
  }),
3099
- import_v47.z.strictObject({
3130
+ import_v47.z.looseObject({
3100
3131
  type: import_v47.z.custom(
3101
3132
  (value) => typeof value === "string" && value.startsWith("data-"),
3102
3133
  { message: 'Type must start with "data-"' }
@@ -3105,18 +3136,18 @@ var uiMessageChunkSchema = (0, import_provider_utils11.lazyValidator)(
3105
3136
  data: import_v47.z.unknown(),
3106
3137
  transient: import_v47.z.boolean().optional()
3107
3138
  }),
3108
- import_v47.z.strictObject({
3139
+ import_v47.z.looseObject({
3109
3140
  type: import_v47.z.literal("start-step")
3110
3141
  }),
3111
- import_v47.z.strictObject({
3142
+ import_v47.z.looseObject({
3112
3143
  type: import_v47.z.literal("finish-step")
3113
3144
  }),
3114
- import_v47.z.strictObject({
3145
+ import_v47.z.looseObject({
3115
3146
  type: import_v47.z.literal("start"),
3116
3147
  messageId: import_v47.z.string().optional(),
3117
3148
  messageMetadata: import_v47.z.unknown().optional()
3118
3149
  }),
3119
- import_v47.z.strictObject({
3150
+ import_v47.z.looseObject({
3120
3151
  type: import_v47.z.literal("finish"),
3121
3152
  finishReason: import_v47.z.enum([
3122
3153
  "stop",
@@ -3129,10 +3160,10 @@ var uiMessageChunkSchema = (0, import_provider_utils11.lazyValidator)(
3129
3160
  ]).optional(),
3130
3161
  messageMetadata: import_v47.z.unknown().optional()
3131
3162
  }),
3132
- import_v47.z.strictObject({
3163
+ import_v47.z.looseObject({
3133
3164
  type: import_v47.z.literal("abort")
3134
3165
  }),
3135
- import_v47.z.strictObject({
3166
+ import_v47.z.looseObject({
3136
3167
  type: import_v47.z.literal("message-metadata"),
3137
3168
  messageMetadata: import_v47.z.unknown()
3138
3169
  })
@@ -4751,6 +4782,7 @@ var DefaultStreamTextResult = class {
4751
4782
  let recordedRequest = {};
4752
4783
  let recordedWarnings = [];
4753
4784
  const recordedSteps = [];
4785
+ let currentStepToolSet = tools;
4754
4786
  let rootSpan;
4755
4787
  let activeTextContent = createIdMap();
4756
4788
  let activeReasoningContent = createIdMap();
@@ -4866,7 +4898,7 @@ var DefaultStreamTextResult = class {
4866
4898
  if (part.type === "finish-step") {
4867
4899
  const stepMessages = toResponseMessages({
4868
4900
  content: recordedContent,
4869
- tools
4901
+ tools: currentStepToolSet
4870
4902
  });
4871
4903
  const currentStepResult = new DefaultStepResult({
4872
4904
  content: recordedContent,
@@ -5080,10 +5112,16 @@ var DefaultStreamTextResult = class {
5080
5112
  supportedUrls: await stepModel.supportedUrls,
5081
5113
  download: download2
5082
5114
  });
5115
+ const stepActiveTools = (_d = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _d : activeTools;
5116
+ const stepToolSet = filterActiveTools({
5117
+ tools,
5118
+ activeTools: stepActiveTools
5119
+ });
5120
+ currentStepToolSet = stepToolSet;
5083
5121
  const { toolChoice: stepToolChoice, tools: stepTools } = prepareToolsAndToolChoice({
5084
5122
  tools,
5085
- toolChoice: (_d = prepareStepResult == null ? void 0 : prepareStepResult.toolChoice) != null ? _d : toolChoice,
5086
- activeTools: (_e = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _e : activeTools
5123
+ toolChoice: (_e = prepareStepResult == null ? void 0 : prepareStepResult.toolChoice) != null ? _e : toolChoice,
5124
+ activeTools: stepActiveTools
5087
5125
  });
5088
5126
  const {
5089
5127
  result: { stream: stream2, response, request },
@@ -5149,7 +5187,7 @@ var DefaultStreamTextResult = class {
5149
5187
  })
5150
5188
  );
5151
5189
  const streamWithToolResults = runToolsTransformation({
5152
- tools,
5190
+ tools: stepToolSet,
5153
5191
  generatorStream: stream2,
5154
5192
  tracer,
5155
5193
  telemetry,
@@ -5282,7 +5320,7 @@ var DefaultStreamTextResult = class {
5282
5320
  }
5283
5321
  case "tool-input-start": {
5284
5322
  activeToolCallToolNames[chunk.id] = chunk.toolName;
5285
- const tool2 = tools == null ? void 0 : tools[chunk.toolName];
5323
+ const tool2 = stepToolSet == null ? void 0 : stepToolSet[chunk.toolName];
5286
5324
  if ((tool2 == null ? void 0 : tool2.onInputStart) != null) {
5287
5325
  await tool2.onInputStart({
5288
5326
  toolCallId: chunk.id,
@@ -5304,7 +5342,7 @@ var DefaultStreamTextResult = class {
5304
5342
  }
5305
5343
  case "tool-input-delta": {
5306
5344
  const toolName = activeToolCallToolNames[chunk.id];
5307
- const tool2 = tools == null ? void 0 : tools[toolName];
5345
+ const tool2 = stepToolSet == null ? void 0 : stepToolSet[toolName];
5308
5346
  if ((tool2 == null ? void 0 : tool2.onInputDelta) != null) {
5309
5347
  await tool2.onInputDelta({
5310
5348
  inputTextDelta: chunk.delta,
@@ -5401,7 +5439,7 @@ var DefaultStreamTextResult = class {
5401
5439
  // use transformed content to create the messages for the next step:
5402
5440
  recordedSteps[recordedSteps.length - 1].content
5403
5441
  ),
5404
- tools
5442
+ tools: stepToolSet
5405
5443
  })
5406
5444
  );
5407
5445
  try {
@@ -9460,24 +9498,26 @@ var AbstractChat = class {
9460
9498
  body,
9461
9499
  messageId
9462
9500
  }) {
9463
- var _a16, _b, _c, _d;
9501
+ var _a16, _b, _c;
9464
9502
  this.setStatus({ status: "submitted", error: void 0 });
9465
9503
  const lastMessage = this.lastMessage;
9466
9504
  let isAbort = false;
9467
9505
  let isDisconnect = false;
9468
9506
  let isError = false;
9507
+ let activeResponse;
9469
9508
  try {
9470
- const activeResponse = {
9509
+ const response = {
9471
9510
  state: createStreamingUIMessageState({
9472
9511
  lastMessage: this.state.snapshot(lastMessage),
9473
9512
  messageId: this.generateId()
9474
9513
  }),
9475
9514
  abortController: new AbortController()
9476
9515
  };
9477
- activeResponse.abortController.signal.addEventListener("abort", () => {
9516
+ activeResponse = response;
9517
+ response.abortController.signal.addEventListener("abort", () => {
9478
9518
  isAbort = true;
9479
9519
  });
9480
- this.activeResponse = activeResponse;
9520
+ this.activeResponse = response;
9481
9521
  let stream;
9482
9522
  if (trigger === "resume-stream") {
9483
9523
  const reconnect = await this.transport.reconnectToStream({
@@ -9495,7 +9535,7 @@ var AbstractChat = class {
9495
9535
  stream = await this.transport.sendMessages({
9496
9536
  chatId: this.id,
9497
9537
  messages: this.state.messages,
9498
- abortSignal: activeResponse.abortController.signal,
9538
+ abortSignal: response.abortController.signal,
9499
9539
  metadata,
9500
9540
  headers,
9501
9541
  body,
@@ -9507,18 +9547,18 @@ var AbstractChat = class {
9507
9547
  // serialize the job execution to avoid race conditions:
9508
9548
  this.jobExecutor.run(
9509
9549
  () => job({
9510
- state: activeResponse.state,
9550
+ state: response.state,
9511
9551
  write: () => {
9512
9552
  var _a17;
9513
9553
  this.setStatus({ status: "streaming" });
9514
- const replaceLastMessage = activeResponse.state.message.id === ((_a17 = this.lastMessage) == null ? void 0 : _a17.id);
9554
+ const replaceLastMessage = response.state.message.id === ((_a17 = this.lastMessage) == null ? void 0 : _a17.id);
9515
9555
  if (replaceLastMessage) {
9516
9556
  this.state.replaceMessage(
9517
9557
  this.state.messages.length - 1,
9518
- activeResponse.state.message
9558
+ response.state.message
9519
9559
  );
9520
9560
  } else {
9521
- this.state.pushMessage(activeResponse.state.message);
9561
+ this.state.pushMessage(response.state.message);
9522
9562
  }
9523
9563
  }
9524
9564
  })
@@ -9557,23 +9597,27 @@ var AbstractChat = class {
9557
9597
  this.setStatus({ status: "error", error: err });
9558
9598
  } finally {
9559
9599
  try {
9560
- (_b = this.onFinish) == null ? void 0 : _b.call(this, {
9561
- message: this.activeResponse.state.message,
9562
- messages: this.state.messages,
9563
- isAbort,
9564
- isDisconnect,
9565
- isError,
9566
- finishReason: (_a16 = this.activeResponse) == null ? void 0 : _a16.state.finishReason
9567
- });
9600
+ if (activeResponse) {
9601
+ (_a16 = this.onFinish) == null ? void 0 : _a16.call(this, {
9602
+ message: activeResponse.state.message,
9603
+ messages: this.state.messages,
9604
+ isAbort,
9605
+ isDisconnect,
9606
+ isError,
9607
+ finishReason: activeResponse.state.finishReason
9608
+ });
9609
+ }
9568
9610
  } catch (err) {
9569
9611
  console.error(err);
9570
9612
  }
9571
- this.activeResponse = void 0;
9613
+ if (this.activeResponse === activeResponse) {
9614
+ this.activeResponse = void 0;
9615
+ }
9572
9616
  }
9573
- if (((_c = this.sendAutomaticallyWhen) == null ? void 0 : _c.call(this, { messages: this.state.messages })) && !isError) {
9617
+ if (((_b = this.sendAutomaticallyWhen) == null ? void 0 : _b.call(this, { messages: this.state.messages })) && !isError) {
9574
9618
  await this.makeRequest({
9575
9619
  trigger: "submit-message",
9576
- messageId: (_d = this.lastMessage) == null ? void 0 : _d.id,
9620
+ messageId: (_c = this.lastMessage) == null ? void 0 : _c.id,
9577
9621
  metadata,
9578
9622
  headers,
9579
9623
  body