ai 5.0.229 → 5.0.231

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
@@ -727,7 +727,7 @@ import {
727
727
  } from "@ai-sdk/provider-utils";
728
728
 
729
729
  // src/version.ts
730
- var VERSION = true ? "5.0.229" : "0.0.0-test";
730
+ var VERSION = true ? "5.0.231" : "0.0.0-test";
731
731
 
732
732
  // src/util/download/download.ts
733
733
  var download = async ({
@@ -4221,9 +4221,20 @@ function createAsyncIterableStream(source) {
4221
4221
  // src/util/consume-stream.ts
4222
4222
  async function consumeStream({
4223
4223
  stream,
4224
- onError
4224
+ onError,
4225
+ abortSignal
4225
4226
  }) {
4226
4227
  const reader = stream.getReader();
4228
+ let cancelPromise;
4229
+ const cancelOnAbort = () => {
4230
+ cancelPromise != null ? cancelPromise : cancelPromise = reader.cancel().catch(() => {
4231
+ });
4232
+ };
4233
+ if (abortSignal == null ? void 0 : abortSignal.aborted) {
4234
+ cancelOnAbort();
4235
+ } else {
4236
+ abortSignal == null ? void 0 : abortSignal.addEventListener("abort", cancelOnAbort, { once: true });
4237
+ }
4227
4238
  try {
4228
4239
  while (true) {
4229
4240
  const { done } = await reader.read();
@@ -4233,6 +4244,8 @@ async function consumeStream({
4233
4244
  } catch (error) {
4234
4245
  onError == null ? void 0 : onError(error);
4235
4246
  } finally {
4247
+ await cancelPromise;
4248
+ abortSignal == null ? void 0 : abortSignal.removeEventListener("abort", cancelOnAbort);
4236
4249
  reader.releaseLock();
4237
4250
  }
4238
4251
  }
@@ -9307,7 +9320,8 @@ var HttpChatTransport = class {
9307
9320
  const response = await fetch2(api, {
9308
9321
  method: "GET",
9309
9322
  headers,
9310
- credentials
9323
+ credentials,
9324
+ signal: options.abortSignal
9311
9325
  });
9312
9326
  if (response.status === 204) {
9313
9327
  return null;
@@ -9362,6 +9376,7 @@ var AbstractChat = class {
9362
9376
  sendAutomaticallyWhen
9363
9377
  }) {
9364
9378
  this.activeResponse = void 0;
9379
+ this.activeResumeRequest = void 0;
9365
9380
  this.jobExecutor = new SerialJobExecutor();
9366
9381
  /**
9367
9382
  * Appends or replaces a user message to the chat list. This triggers the API call to fetch
@@ -9501,12 +9516,9 @@ var AbstractChat = class {
9501
9516
  * Abort the current request immediately, keep the generated tokens if any.
9502
9517
  */
9503
9518
  this.stop = async () => {
9504
- var _a16;
9505
- if (this.status !== "streaming" && this.status !== "submitted")
9506
- return;
9507
- if ((_a16 = this.activeResponse) == null ? void 0 : _a16.abortController) {
9508
- this.activeResponse.abortController.abort();
9509
- }
9519
+ var _a16, _b;
9520
+ (_a16 = this.activeResumeRequest) == null ? void 0 : _a16.abortController.abort();
9521
+ (_b = this.activeResponse) == null ? void 0 : _b.abortController.abort();
9510
9522
  };
9511
9523
  this.id = id;
9512
9524
  this.transport = transport;
@@ -9559,7 +9571,19 @@ var AbstractChat = class {
9559
9571
  body,
9560
9572
  messageId
9561
9573
  }) {
9562
- var _a16, _b, _c;
9574
+ var _a16, _b, _c, _d;
9575
+ const abortController = new AbortController();
9576
+ const activeResumeRequest = trigger === "resume-stream" ? { abortController } : void 0;
9577
+ if (activeResumeRequest) {
9578
+ (_a16 = this.activeResumeRequest) == null ? void 0 : _a16.abortController.abort();
9579
+ this.activeResumeRequest = activeResumeRequest;
9580
+ }
9581
+ const isCurrentRequest = () => activeResumeRequest == null || this.activeResumeRequest === activeResumeRequest;
9582
+ const clearActiveResumeRequest = () => {
9583
+ if (this.activeResumeRequest === activeResumeRequest) {
9584
+ this.activeResumeRequest = void 0;
9585
+ }
9586
+ };
9563
9587
  this.setStatus({ status: "submitted", error: void 0 });
9564
9588
  const lastMessage = this.lastMessage;
9565
9589
  let isAbort = false;
@@ -9572,7 +9596,7 @@ var AbstractChat = class {
9572
9596
  lastMessage: this.state.snapshot(lastMessage),
9573
9597
  messageId: this.generateId()
9574
9598
  }),
9575
- abortController: new AbortController()
9599
+ abortController
9576
9600
  };
9577
9601
  activeResponse = response;
9578
9602
  response.abortController.signal.addEventListener("abort", () => {
@@ -9583,12 +9607,23 @@ var AbstractChat = class {
9583
9607
  if (trigger === "resume-stream") {
9584
9608
  const reconnect = await this.transport.reconnectToStream({
9585
9609
  chatId: this.id,
9610
+ abortSignal: abortController.signal,
9586
9611
  metadata,
9587
9612
  headers,
9588
9613
  body
9589
9614
  });
9615
+ if (abortController.signal.aborted || !isCurrentRequest()) {
9616
+ await (reconnect == null ? void 0 : reconnect.cancel().catch(() => {
9617
+ }));
9618
+ if (isCurrentRequest()) {
9619
+ this.setStatus({ status: "ready" });
9620
+ }
9621
+ return;
9622
+ }
9590
9623
  if (reconnect == null) {
9591
- this.setStatus({ status: "ready" });
9624
+ if (isCurrentRequest()) {
9625
+ this.setStatus({ status: "ready" });
9626
+ }
9592
9627
  return;
9593
9628
  }
9594
9629
  stream = reconnect;
@@ -9606,11 +9641,17 @@ var AbstractChat = class {
9606
9641
  }
9607
9642
  const runUpdateMessageJob = (job) => (
9608
9643
  // serialize the job execution to avoid race conditions:
9609
- this.jobExecutor.run(
9610
- () => job({
9644
+ this.jobExecutor.run(() => {
9645
+ if (response.abortController.signal.aborted) {
9646
+ return Promise.resolve();
9647
+ }
9648
+ return job({
9611
9649
  state: response.state,
9612
9650
  write: () => {
9613
9651
  var _a17;
9652
+ if (response.abortController.signal.aborted) {
9653
+ return;
9654
+ }
9614
9655
  this.setStatus({ status: "streaming" });
9615
9656
  const replaceLastMessage = response.state.message.id === ((_a17 = this.lastMessage) == null ? void 0 : _a17.id);
9616
9657
  if (replaceLastMessage) {
@@ -9622,8 +9663,8 @@ var AbstractChat = class {
9622
9663
  this.state.pushMessage(response.state.message);
9623
9664
  }
9624
9665
  }
9625
- })
9626
- )
9666
+ });
9667
+ })
9627
9668
  );
9628
9669
  await consumeStream({
9629
9670
  stream: processUIMessageStream({
@@ -9637,15 +9678,29 @@ var AbstractChat = class {
9637
9678
  throw error;
9638
9679
  }
9639
9680
  }),
9681
+ abortSignal: response.abortController.signal,
9640
9682
  onError: (error) => {
9641
9683
  throw error;
9642
9684
  }
9643
9685
  });
9644
- this.setStatus({ status: "ready" });
9686
+ if (isAbort) {
9687
+ if (isCurrentRequest()) {
9688
+ this.setStatus({ status: "ready" });
9689
+ }
9690
+ return null;
9691
+ }
9692
+ if (isCurrentRequest()) {
9693
+ this.setStatus({ status: "ready" });
9694
+ }
9645
9695
  } catch (err) {
9646
9696
  if (isAbort || err.name === "AbortError") {
9647
9697
  isAbort = true;
9648
- this.setStatus({ status: "ready" });
9698
+ if (isCurrentRequest()) {
9699
+ this.setStatus({ status: "ready" });
9700
+ }
9701
+ return null;
9702
+ }
9703
+ if (!isCurrentRequest()) {
9649
9704
  return null;
9650
9705
  }
9651
9706
  isError = true;
@@ -9659,7 +9714,7 @@ var AbstractChat = class {
9659
9714
  } finally {
9660
9715
  try {
9661
9716
  if (activeResponse) {
9662
- (_a16 = this.onFinish) == null ? void 0 : _a16.call(this, {
9717
+ (_b = this.onFinish) == null ? void 0 : _b.call(this, {
9663
9718
  message: activeResponse.state.message,
9664
9719
  messages: this.state.messages,
9665
9720
  isAbort,
@@ -9674,11 +9729,12 @@ var AbstractChat = class {
9674
9729
  if (this.activeResponse === activeResponse) {
9675
9730
  this.activeResponse = void 0;
9676
9731
  }
9732
+ clearActiveResumeRequest();
9677
9733
  }
9678
- if (((_b = this.sendAutomaticallyWhen) == null ? void 0 : _b.call(this, { messages: this.state.messages })) && !isError) {
9734
+ if (((_c = this.sendAutomaticallyWhen) == null ? void 0 : _c.call(this, { messages: this.state.messages })) && !isError) {
9679
9735
  await this.makeRequest({
9680
9736
  trigger: "submit-message",
9681
- messageId: (_c = this.lastMessage) == null ? void 0 : _c.id,
9737
+ messageId: (_d = this.lastMessage) == null ? void 0 : _d.id,
9682
9738
  metadata,
9683
9739
  headers,
9684
9740
  body