ai 6.0.285 → 6.0.286

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
@@ -1224,7 +1224,7 @@ import {
1224
1224
  } from "@ai-sdk/provider-utils";
1225
1225
 
1226
1226
  // src/version.ts
1227
- var VERSION = true ? "6.0.285" : "0.0.0-test";
1227
+ var VERSION = true ? "6.0.286" : "0.0.0-test";
1228
1228
 
1229
1229
  // src/util/download/download.ts
1230
1230
  var download = async ({
@@ -1271,9 +1271,9 @@ var download = async ({
1271
1271
  };
1272
1272
 
1273
1273
  // src/util/download/download-function.ts
1274
- var createDefaultDownloadFunction = (download2 = download) => (requestedDownloads) => Promise.all(
1274
+ var createDefaultDownloadFunction = (download2 = download, abortSignal) => (requestedDownloads) => Promise.all(
1275
1275
  requestedDownloads.map(
1276
- async (requestedDownload) => requestedDownload.isUrlSupportedByModel ? null : download2(requestedDownload)
1276
+ async (requestedDownload) => requestedDownload.isUrlSupportedByModel ? null : await download2({ ...requestedDownload, abortSignal })
1277
1277
  )
1278
1278
  );
1279
1279
 
@@ -1412,11 +1412,12 @@ function convertDataContentToUint8Array(content) {
1412
1412
  async function convertToLanguageModelPrompt({
1413
1413
  prompt,
1414
1414
  supportedUrls,
1415
- download: download2 = createDefaultDownloadFunction()
1415
+ download: download2,
1416
+ abortSignal
1416
1417
  }) {
1417
1418
  const downloadedAssets = await downloadAssets(
1418
1419
  prompt.messages,
1419
- download2,
1420
+ download2 != null ? download2 : createDefaultDownloadFunction(void 0, abortSignal),
1420
1421
  supportedUrls
1421
1422
  );
1422
1423
  const approvalIdToToolCallId = /* @__PURE__ */ new Map();
@@ -4735,7 +4736,8 @@ async function generateText({
4735
4736
  messages: (_c = prepareStepResult == null ? void 0 : prepareStepResult.messages) != null ? _c : stepInputMessages
4736
4737
  },
4737
4738
  supportedUrls: await stepModel.supportedUrls,
4738
- download: download2
4739
+ download: download2,
4740
+ abortSignal: mergedAbortSignal
4739
4741
  });
4740
4742
  experimental_context = (_d = prepareStepResult == null ? void 0 : prepareStepResult.experimental_context) != null ? _d : experimental_context;
4741
4743
  const stepActiveTools = (_e = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _e : activeTools;
@@ -7223,7 +7225,15 @@ function createOutputTransformStream(output) {
7223
7225
  let text2 = "";
7224
7226
  let textChunk = "";
7225
7227
  let textProviderMetadata = void 0;
7226
- let lastPublishedValue = "";
7228
+ let lastPublishedValue = void 0;
7229
+ let hasPublishedValue = false;
7230
+ function resetOutputState() {
7231
+ firstTextChunkId = void 0;
7232
+ text2 = "";
7233
+ textChunk = "";
7234
+ textProviderMetadata = void 0;
7235
+ lastPublishedValue = "";
7236
+ }
7227
7237
  function publishTextChunk({
7228
7238
  controller,
7229
7239
  partialOutput = void 0
@@ -7242,6 +7252,9 @@ function createOutputTransformStream(output) {
7242
7252
  return new TransformStream({
7243
7253
  async transform(chunk, controller) {
7244
7254
  var _a23;
7255
+ if (chunk.type === "start-step") {
7256
+ resetOutputState();
7257
+ }
7245
7258
  if (chunk.type === "finish-step" && textChunk.length > 0) {
7246
7259
  publishTextChunk({ controller });
7247
7260
  }
@@ -7276,9 +7289,10 @@ function createOutputTransformStream(output) {
7276
7289
  const result = await output.parsePartialOutput({ text: text2 });
7277
7290
  if (result !== void 0) {
7278
7291
  const currentValue = typeof result.partial === "string" ? result.partial : JSON.stringify(result.partial);
7279
- if (currentValue !== lastPublishedValue) {
7292
+ if (!hasPublishedValue || currentValue !== lastPublishedValue) {
7280
7293
  publishTextChunk({ controller, partialOutput: result.partial });
7281
7294
  lastPublishedValue = currentValue;
7295
+ hasPublishedValue = true;
7282
7296
  }
7283
7297
  }
7284
7298
  }
@@ -7349,6 +7363,7 @@ var DefaultStreamTextResult = class {
7349
7363
  const recordedSteps = [];
7350
7364
  let recordedNoOutputError;
7351
7365
  let currentStepToolSet = tools;
7366
+ let currentStepModel = model;
7352
7367
  const createPartIdReserver = () => {
7353
7368
  const usedIds = /* @__PURE__ */ new Set();
7354
7369
  return (id) => {
@@ -7505,7 +7520,10 @@ var DefaultStreamTextResult = class {
7505
7520
  });
7506
7521
  const currentStepResult = new DefaultStepResult({
7507
7522
  stepNumber: recordedSteps.length,
7508
- model: modelInfo,
7523
+ model: {
7524
+ provider: currentStepModel.provider,
7525
+ modelId: currentStepModel.modelId
7526
+ },
7509
7527
  ...callbackTelemetryProps,
7510
7528
  experimental_context,
7511
7529
  content: recordedContent,
@@ -7526,8 +7544,8 @@ var DefaultStreamTextResult = class {
7526
7544
  });
7527
7545
  logWarnings({
7528
7546
  warnings: recordedWarnings,
7529
- provider: modelInfo.provider,
7530
- model: modelInfo.modelId
7547
+ provider: currentStepModel.provider,
7548
+ model: currentStepModel.modelId
7531
7549
  });
7532
7550
  recordedSteps.push(currentStepResult);
7533
7551
  recordedResponseMessages.push(...stepMessages);
@@ -7966,6 +7984,7 @@ var DefaultStreamTextResult = class {
7966
7984
  const stepModel = resolveLanguageModel(
7967
7985
  (_a23 = prepareStepResult == null ? void 0 : prepareStepResult.model) != null ? _a23 : model
7968
7986
  );
7987
+ currentStepModel = stepModel;
7969
7988
  const stepModelInfo = {
7970
7989
  provider: stepModel.provider,
7971
7990
  modelId: stepModel.modelId
@@ -7976,7 +7995,8 @@ var DefaultStreamTextResult = class {
7976
7995
  messages: (_c = prepareStepResult == null ? void 0 : prepareStepResult.messages) != null ? _c : stepInputMessages
7977
7996
  },
7978
7997
  supportedUrls: await stepModel.supportedUrls,
7979
- download: download2
7998
+ download: download2,
7999
+ abortSignal
7980
8000
  });
7981
8001
  const stepActiveTools = (_d = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _d : activeTools;
7982
8002
  const stepToolSet = filterActiveTools({
@@ -8125,7 +8145,7 @@ var DefaultStreamTextResult = class {
8125
8145
  let stepResponse = {
8126
8146
  id: generateId2(),
8127
8147
  timestamp: /* @__PURE__ */ new Date(),
8128
- modelId: modelInfo.modelId
8148
+ modelId: stepModelInfo.modelId
8129
8149
  };
8130
8150
  let activeText = "";
8131
8151
  const textPartIds = /* @__PURE__ */ new Map();
@@ -8647,7 +8667,7 @@ var DefaultStreamTextResult = class {
8647
8667
  this.teeStream().pipeThrough(
8648
8668
  new TransformStream({
8649
8669
  transform({ partialOutput }, controller) {
8650
- if (partialOutput != null) {
8670
+ if (partialOutput !== void 0) {
8651
8671
  controller.enqueue(partialOutput);
8652
8672
  }
8653
8673
  }
@@ -9341,9 +9361,15 @@ function readUIMessageStream({
9341
9361
  var _a23;
9342
9362
  let controller;
9343
9363
  let hasErrored = false;
9364
+ let isCancelled = false;
9365
+ const abortController = new AbortController();
9344
9366
  const outputStream = new ReadableStream({
9345
9367
  start(controllerParam) {
9346
9368
  controller = controllerParam;
9369
+ },
9370
+ cancel() {
9371
+ isCancelled = true;
9372
+ abortController.abort();
9347
9373
  }
9348
9374
  });
9349
9375
  const state = createStreamingUIMessageState({
@@ -9364,15 +9390,18 @@ function readUIMessageStream({
9364
9390
  return job({
9365
9391
  state,
9366
9392
  write: () => {
9367
- controller == null ? void 0 : controller.enqueue(createUIMessageSnapshot(state.message));
9393
+ if (!isCancelled) {
9394
+ controller == null ? void 0 : controller.enqueue(createUIMessageSnapshot(state.message));
9395
+ }
9368
9396
  }
9369
9397
  });
9370
9398
  },
9371
9399
  onError: handleError
9372
9400
  }),
9373
- onError: handleError
9401
+ onError: handleError,
9402
+ abortSignal: abortController.signal
9374
9403
  }).finally(() => {
9375
- if (!hasErrored) {
9404
+ if (!hasErrored && !isCancelled) {
9376
9405
  controller == null ? void 0 : controller.close();
9377
9406
  }
9378
9407
  });
@@ -11418,7 +11447,8 @@ async function generateObject(options) {
11418
11447
  const promptMessages = await convertToLanguageModelPrompt({
11419
11448
  prompt: standardizedPrompt,
11420
11449
  supportedUrls: await model.supportedUrls,
11421
- download: download2
11450
+ download: download2,
11451
+ abortSignal
11422
11452
  });
11423
11453
  const generateResult = await retry(
11424
11454
  () => recordSpan({
@@ -11910,7 +11940,8 @@ var DefaultStreamObjectResult = class {
11910
11940
  prompt: await convertToLanguageModelPrompt({
11911
11941
  prompt: standardizedPrompt,
11912
11942
  supportedUrls: await model.supportedUrls,
11913
- download: download2
11943
+ download: download2,
11944
+ abortSignal
11914
11945
  }),
11915
11946
  providerOptions,
11916
11947
  abortSignal,
@@ -12472,11 +12503,13 @@ function pruneMessages({
12472
12503
  }
12473
12504
  }
12474
12505
  }
12506
+ const approvalIdToToolCallId = /* @__PURE__ */ new Map();
12475
12507
  const approvalIdToToolName = /* @__PURE__ */ new Map();
12476
12508
  for (const message of messages) {
12477
12509
  if ((message.role === "assistant" || message.role === "tool") && typeof message.content !== "string") {
12478
12510
  for (const part of message.content) {
12479
12511
  if (part.type === "tool-approval-request") {
12512
+ approvalIdToToolCallId.set(part.approvalId, part.toolCallId);
12480
12513
  const toolName = toolCallIdToToolName.get(part.toolCallId);
12481
12514
  if (toolName != null) {
12482
12515
  approvalIdToToolName.set(part.approvalId, toolName);
@@ -12485,6 +12518,12 @@ function pruneMessages({
12485
12518
  }
12486
12519
  }
12487
12520
  }
12521
+ for (const approvalId of keptApprovalIds) {
12522
+ const toolCallId = approvalIdToToolCallId.get(approvalId);
12523
+ if (toolCallId != null) {
12524
+ keptToolCallIds.add(toolCallId);
12525
+ }
12526
+ }
12488
12527
  messages = messages.map((message, messageIndex) => {
12489
12528
  if (message.role !== "assistant" && message.role !== "tool" || typeof message.content === "string" || keepLastMessagesCount && messageIndex >= messages.length - keepLastMessagesCount) {
12490
12529
  return message;
@@ -13221,7 +13260,11 @@ function simulateStreamingMiddleware() {
13221
13260
  switch (part.type) {
13222
13261
  case "text": {
13223
13262
  if (part.text.length > 0) {
13224
- controller.enqueue({ type: "text-start", id: String(id) });
13263
+ controller.enqueue({
13264
+ type: "text-start",
13265
+ id: String(id),
13266
+ ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}
13267
+ });
13225
13268
  controller.enqueue({
13226
13269
  type: "text-delta",
13227
13270
  id: String(id),