ai 6.0.198 → 6.0.200

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
@@ -1144,7 +1144,7 @@ import {
1144
1144
  } from "@ai-sdk/provider-utils";
1145
1145
 
1146
1146
  // src/version.ts
1147
- var VERSION = true ? "6.0.198" : "0.0.0-test";
1147
+ var VERSION = true ? "6.0.200" : "0.0.0-test";
1148
1148
 
1149
1149
  // src/util/download/download.ts
1150
1150
  var download = async ({
@@ -5324,6 +5324,11 @@ function isDataUIMessageChunk(chunk) {
5324
5324
  return chunk.type.startsWith("data-");
5325
5325
  }
5326
5326
 
5327
+ // src/util/create-id-map.ts
5328
+ function createIdMap() {
5329
+ return /* @__PURE__ */ Object.create(null);
5330
+ }
5331
+
5327
5332
  // src/ui/ui-messages.ts
5328
5333
  function isDataUIPart(part) {
5329
5334
  return part.type.startsWith("data-");
@@ -5367,9 +5372,9 @@ function createStreamingUIMessageState({
5367
5372
  role: "assistant",
5368
5373
  parts: []
5369
5374
  },
5370
- activeTextParts: {},
5371
- activeReasoningParts: {},
5372
- partialToolCalls: {}
5375
+ activeTextParts: createIdMap(),
5376
+ activeReasoningParts: createIdMap(),
5377
+ partialToolCalls: createIdMap()
5373
5378
  };
5374
5379
  }
5375
5380
  function processUIMessageStream({
@@ -5843,8 +5848,8 @@ function processUIMessageStream({
5843
5848
  break;
5844
5849
  }
5845
5850
  case "finish-step": {
5846
- state.activeTextParts = {};
5847
- state.activeReasoningParts = {};
5851
+ state.activeTextParts = createIdMap();
5852
+ state.activeReasoningParts = createIdMap();
5848
5853
  break;
5849
5854
  }
5850
5855
  case "start": {
@@ -6485,6 +6490,28 @@ var originalGenerateId2 = createIdGenerator2({
6485
6490
  prefix: "aitxt",
6486
6491
  size: 24
6487
6492
  });
6493
+ var isOutputChunkType = {
6494
+ file: true,
6495
+ source: true,
6496
+ "text-start": true,
6497
+ "text-end": true,
6498
+ "text-delta": true,
6499
+ "reasoning-start": true,
6500
+ "reasoning-end": true,
6501
+ "reasoning-delta": true,
6502
+ "tool-input-start": true,
6503
+ "tool-input-end": true,
6504
+ "tool-input-delta": true,
6505
+ "tool-approval-request": true,
6506
+ "tool-call": true,
6507
+ "tool-result": true,
6508
+ "tool-error": true,
6509
+ "stream-start": false,
6510
+ "response-metadata": false,
6511
+ finish: false,
6512
+ error: false,
6513
+ raw: false
6514
+ };
6488
6515
  function streamText({
6489
6516
  model,
6490
6517
  tools,
@@ -6703,6 +6730,7 @@ var DefaultStreamTextResult = class {
6703
6730
  let recordedRequest = {};
6704
6731
  let recordedWarnings = [];
6705
6732
  const recordedSteps = [];
6733
+ let recordedNoOutputError;
6706
6734
  const pendingDeferredToolCalls = /* @__PURE__ */ new Map();
6707
6735
  let rootSpan;
6708
6736
  let activeTextContent = {};
@@ -6716,7 +6744,11 @@ var DefaultStreamTextResult = class {
6716
6744
  await (onChunk == null ? void 0 : onChunk({ chunk: part }));
6717
6745
  }
6718
6746
  if (part.type === "error") {
6719
- await onError({ error: wrapGatewayError(part.error) });
6747
+ const error = wrapGatewayError(part.error);
6748
+ if (NoOutputGeneratedError.isInstance(error)) {
6749
+ recordedNoOutputError = error;
6750
+ }
6751
+ await onError({ error });
6720
6752
  }
6721
6753
  if (part.type === "text-start") {
6722
6754
  activeTextContent[part.id] = {
@@ -6867,8 +6899,8 @@ var DefaultStreamTextResult = class {
6867
6899
  async flush(controller) {
6868
6900
  var _a21, _b, _c, _d, _e, _f, _g;
6869
6901
  try {
6870
- if (recordedSteps.length === 0) {
6871
- const error = (abortSignal == null ? void 0 : abortSignal.aborted) ? abortSignal.reason : new NoOutputGeneratedError({
6902
+ if (recordedSteps.length === 0 || recordedNoOutputError != null) {
6903
+ const error = (abortSignal == null ? void 0 : abortSignal.aborted) ? abortSignal.reason : recordedNoOutputError != null ? recordedNoOutputError : new NoOutputGeneratedError({
6872
6904
  message: "No output generated. Check the stream for errors."
6873
6905
  });
6874
6906
  self._finishReason.reject(error);
@@ -7367,6 +7399,8 @@ var DefaultStreamTextResult = class {
7367
7399
  const activeToolCallToolNames = {};
7368
7400
  let stepFinishReason = "other";
7369
7401
  let stepRawFinishReason = void 0;
7402
+ let hasReceivedTerminalChunk = false;
7403
+ let hasReceivedOutputChunk = false;
7370
7404
  let stepUsage = createNullLanguageModelUsage();
7371
7405
  let stepProviderMetadata;
7372
7406
  let stepFirstChunk = true;
@@ -7402,6 +7436,9 @@ var DefaultStreamTextResult = class {
7402
7436
  });
7403
7437
  }
7404
7438
  const chunkType = chunk.type;
7439
+ if (isOutputChunkType[chunkType]) {
7440
+ hasReceivedOutputChunk = true;
7441
+ }
7405
7442
  switch (chunkType) {
7406
7443
  case "tool-approval-request":
7407
7444
  case "text-start":
@@ -7461,6 +7498,7 @@ var DefaultStreamTextResult = class {
7461
7498
  break;
7462
7499
  }
7463
7500
  case "finish": {
7501
+ hasReceivedTerminalChunk = true;
7464
7502
  stepUsage = chunk.usage;
7465
7503
  stepFinishReason = chunk.finishReason;
7466
7504
  stepRawFinishReason = chunk.rawFinishReason;
@@ -7520,6 +7558,7 @@ var DefaultStreamTextResult = class {
7520
7558
  break;
7521
7559
  }
7522
7560
  case "error": {
7561
+ hasReceivedTerminalChunk = true;
7523
7562
  controller.enqueue(chunk);
7524
7563
  stepFinishReason = "error";
7525
7564
  break;
@@ -7541,6 +7580,19 @@ var DefaultStreamTextResult = class {
7541
7580
  // invoke onFinish callback and resolve toolResults promise when the stream is about to close:
7542
7581
  async flush(controller) {
7543
7582
  var _a22, _b2, _c2, _d2, _e2, _f2, _g2;
7583
+ if (!hasReceivedTerminalChunk && !hasReceivedOutputChunk) {
7584
+ controller.enqueue({
7585
+ type: "error",
7586
+ error: new NoOutputGeneratedError({
7587
+ message: "No output generated. The model stream ended without a finish chunk."
7588
+ })
7589
+ });
7590
+ doStreamSpan.end();
7591
+ clearStepTimeout();
7592
+ clearChunkTimeout();
7593
+ self.closeStream();
7594
+ return;
7595
+ }
7544
7596
  const stepToolCallsJson = stepToolCalls.length > 0 ? JSON.stringify(stepToolCalls) : void 0;
7545
7597
  try {
7546
7598
  doStreamSpan.setAttributes(
@@ -7818,14 +7870,29 @@ var DefaultStreamTextResult = class {
7818
7870
  )
7819
7871
  );
7820
7872
  }
7873
+ rejectResultPromises(error) {
7874
+ if (this._finishReason.isPending())
7875
+ this._finishReason.reject(error);
7876
+ if (this._rawFinishReason.isPending())
7877
+ this._rawFinishReason.reject(error);
7878
+ if (this._totalUsage.isPending())
7879
+ this._totalUsage.reject(error);
7880
+ if (this._steps.isPending())
7881
+ this._steps.reject(error);
7882
+ }
7821
7883
  async consumeStream(options) {
7822
7884
  var _a21;
7823
7885
  try {
7824
7886
  await consumeStream({
7825
7887
  stream: this.fullStream,
7826
- onError: options == null ? void 0 : options.onError
7888
+ onError: (error) => {
7889
+ var _a22;
7890
+ this.rejectResultPromises(error);
7891
+ (_a22 = options == null ? void 0 : options.onError) == null ? void 0 : _a22.call(options, error);
7892
+ }
7827
7893
  });
7828
7894
  } catch (error) {
7895
+ this.rejectResultPromises(error);
7829
7896
  (_a21 = options == null ? void 0 : options.onError) == null ? void 0 : _a21.call(options, error);
7830
7897
  }
7831
7898
  }
@@ -8518,7 +8585,7 @@ async function convertToModelMessages(messages, options) {
8518
8585
  if (message.parts != null) {
8519
8586
  let block = [];
8520
8587
  async function processBlock() {
8521
- var _a21, _b, _c, _d, _e, _f, _g;
8588
+ var _a21, _b, _c, _d, _e, _f, _g, _h;
8522
8589
  if (block.length === 0) {
8523
8590
  return;
8524
8591
  }
@@ -8626,7 +8693,7 @@ async function convertToModelMessages(messages, options) {
8626
8693
  toolName: getToolName(toolPart),
8627
8694
  output: {
8628
8695
  type: "error-text",
8629
- value: (_f = toolPart.approval.reason) != null ? _f : "Tool execution denied."
8696
+ value: (_g = (_f = toolPart.approval) == null ? void 0 : _f.reason) != null ? _g : "Tool execution denied."
8630
8697
  },
8631
8698
  ...toolPart.callProviderMetadata != null ? { providerOptions: toolPart.callProviderMetadata } : {}
8632
8699
  });
@@ -8643,7 +8710,7 @@ async function convertToModelMessages(messages, options) {
8643
8710
  toolCallId: toolPart.toolCallId,
8644
8711
  input: toolPart.input,
8645
8712
  output: toolPart.state === "output-error" ? toolPart.errorText : toolPart.output,
8646
- tool: (_g = options == null ? void 0 : options.tools) == null ? void 0 : _g[toolName],
8713
+ tool: (_h = options == null ? void 0 : options.tools) == null ? void 0 : _h[toolName],
8647
8714
  errorMode: toolPart.state === "output-error" ? "text" : "none"
8648
8715
  }),
8649
8716
  ...toolPart.callProviderMetadata != null ? { providerOptions: toolPart.callProviderMetadata } : {}