ai 7.0.27 → 7.0.29

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.
Files changed (41) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/index.js +26 -20
  3. package/dist/index.js.map +1 -1
  4. package/dist/internal/index.js +1 -1
  5. package/docs/02-foundations/02-providers-and-models.mdx +5 -2
  6. package/docs/02-foundations/04-tools.mdx +1 -1
  7. package/docs/02-getting-started/02-nextjs-app-router.mdx +1 -1
  8. package/docs/02-getting-started/03-nextjs-pages-router.mdx +1 -1
  9. package/docs/02-getting-started/06-nodejs.mdx +1 -1
  10. package/docs/03-agents/08-terminal-ui.mdx +28 -7
  11. package/docs/03-ai-sdk-core/01-overview.mdx +1 -1
  12. package/docs/03-ai-sdk-core/05-generating-text.mdx +5 -5
  13. package/docs/03-ai-sdk-core/10-generating-structured-data.mdx +3 -3
  14. package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +10 -10
  15. package/docs/03-ai-sdk-core/25-settings.mdx +1 -1
  16. package/docs/03-ai-sdk-core/30-embeddings.mdx +1 -1
  17. package/docs/03-ai-sdk-core/31-reranking.mdx +4 -4
  18. package/docs/03-ai-sdk-core/35-image-generation.mdx +1 -1
  19. package/docs/03-ai-sdk-core/36-transcription.mdx +9 -4
  20. package/docs/03-ai-sdk-core/37-speech.mdx +1 -0
  21. package/docs/03-ai-sdk-core/38-video-generation.mdx +5 -5
  22. package/docs/03-ai-sdk-core/50-error-handling.mdx +5 -5
  23. package/docs/03-ai-sdk-core/55-testing.mdx +1 -1
  24. package/docs/03-ai-sdk-core/65-lifecycle-callbacks.mdx +5 -5
  25. package/docs/04-ai-sdk-ui/02-chatbot.mdx +2 -2
  26. package/docs/04-ai-sdk-ui/03-chatbot-message-persistence.mdx +3 -3
  27. package/docs/04-ai-sdk-ui/20-streaming-data.mdx +1 -1
  28. package/docs/05-ai-sdk-rsc/10-migrating-to-ui.mdx +1 -1
  29. package/docs/06-advanced/04-caching.mdx +1 -1
  30. package/docs/07-reference/01-ai-sdk-core/22-dynamic-tool.mdx +1 -1
  31. package/docs/07-reference/01-ai-sdk-core/33-safe-validate-ui-messages.mdx +1 -1
  32. package/docs/07-reference/01-ai-sdk-core/index.mdx +0 -5
  33. package/docs/07-reference/06-ai-sdk-tui/01-run-agent-tui.mdx +29 -8
  34. package/docs/08-migration-guides/23-migration-guide-7-0.mdx +1 -1
  35. package/docs/08-migration-guides/29-migration-guide-4-0.mdx +1 -1
  36. package/docs/08-migration-guides/37-migration-guide-3-3.mdx +1 -1
  37. package/docs/08-migration-guides/39-migration-guide-3-1.mdx +1 -1
  38. package/docs/09-troubleshooting/14-tool-calling-with-structured-outputs.mdx +1 -1
  39. package/docs/09-troubleshooting/15-stream-text-not-working.mdx +1 -1
  40. package/package.json +2 -2
  41. package/src/ui/chat.ts +24 -17
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # ai
2
2
 
3
+ ## 7.0.29
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [7069785]
8
+ - Updated dependencies [4bf9ac2]
9
+ - @ai-sdk/gateway@4.0.21
10
+
11
+ ## 7.0.28
12
+
13
+ ### Patch Changes
14
+
15
+ - 0bc8d4f: Fix chat `onFinish` handling when overlapping requests clear the active response before a resume stream finishes.
16
+
3
17
  ## 7.0.27
4
18
 
5
19
  ### Patch Changes
package/dist/index.js CHANGED
@@ -1089,7 +1089,7 @@ import {
1089
1089
  } from "@ai-sdk/provider-utils";
1090
1090
 
1091
1091
  // src/version.ts
1092
- var VERSION = true ? "7.0.27" : "0.0.0-test";
1092
+ var VERSION = true ? "7.0.29" : "0.0.0-test";
1093
1093
 
1094
1094
  // src/util/download/download.ts
1095
1095
  var download = async ({
@@ -16732,7 +16732,7 @@ var AbstractChat = class {
16732
16732
  body,
16733
16733
  messageId
16734
16734
  }) {
16735
- var _a22, _b, _c;
16735
+ var _a22, _b;
16736
16736
  let resumeStream;
16737
16737
  if (trigger === "resume-stream") {
16738
16738
  try {
@@ -16759,18 +16759,20 @@ var AbstractChat = class {
16759
16759
  let isAbort = false;
16760
16760
  let isDisconnect = false;
16761
16761
  let isError = false;
16762
+ let activeResponse;
16762
16763
  try {
16763
- const activeResponse = {
16764
+ const response = {
16764
16765
  state: createStreamingUIMessageState({
16765
16766
  lastMessage: this.state.snapshot(lastMessage),
16766
16767
  messageId: this.generateId()
16767
16768
  }),
16768
16769
  abortController: new AbortController()
16769
16770
  };
16770
- activeResponse.abortController.signal.addEventListener("abort", () => {
16771
+ activeResponse = response;
16772
+ response.abortController.signal.addEventListener("abort", () => {
16771
16773
  isAbort = true;
16772
16774
  });
16773
- this.activeResponse = activeResponse;
16775
+ this.activeResponse = response;
16774
16776
  let stream;
16775
16777
  if (trigger === "resume-stream") {
16776
16778
  stream = resumeStream;
@@ -16778,7 +16780,7 @@ var AbstractChat = class {
16778
16780
  stream = await this.transport.sendMessages({
16779
16781
  chatId: this.id,
16780
16782
  messages: this.state.messages,
16781
- abortSignal: activeResponse.abortController.signal,
16783
+ abortSignal: response.abortController.signal,
16782
16784
  metadata,
16783
16785
  headers,
16784
16786
  body,
@@ -16790,18 +16792,18 @@ var AbstractChat = class {
16790
16792
  // serialize the job execution to avoid race conditions:
16791
16793
  this.jobExecutor.run(
16792
16794
  () => job({
16793
- state: activeResponse.state,
16795
+ state: response.state,
16794
16796
  write: () => {
16795
16797
  var _a23;
16796
16798
  this.setStatus({ status: "streaming" });
16797
- const replaceLastMessage = activeResponse.state.message.id === ((_a23 = this.lastMessage) == null ? void 0 : _a23.id);
16799
+ const replaceLastMessage = response.state.message.id === ((_a23 = this.lastMessage) == null ? void 0 : _a23.id);
16798
16800
  if (replaceLastMessage) {
16799
16801
  this.state.replaceMessage(
16800
16802
  this.state.messages.length - 1,
16801
- activeResponse.state.message
16803
+ response.state.message
16802
16804
  );
16803
16805
  } else {
16804
- this.state.pushMessage(activeResponse.state.message);
16806
+ this.state.pushMessage(response.state.message);
16805
16807
  }
16806
16808
  }
16807
16809
  })
@@ -16840,23 +16842,27 @@ var AbstractChat = class {
16840
16842
  this.setStatus({ status: "error", error: err });
16841
16843
  } finally {
16842
16844
  try {
16843
- (_b = this.onFinish) == null ? void 0 : _b.call(this, {
16844
- message: this.activeResponse.state.message,
16845
- messages: this.state.messages,
16846
- isAbort,
16847
- isDisconnect,
16848
- isError,
16849
- finishReason: (_a22 = this.activeResponse) == null ? void 0 : _a22.state.finishReason
16850
- });
16845
+ if (activeResponse) {
16846
+ (_a22 = this.onFinish) == null ? void 0 : _a22.call(this, {
16847
+ message: activeResponse.state.message,
16848
+ messages: this.state.messages,
16849
+ isAbort,
16850
+ isDisconnect,
16851
+ isError,
16852
+ finishReason: activeResponse.state.finishReason
16853
+ });
16854
+ }
16851
16855
  } catch (err) {
16852
16856
  console.error(err);
16853
16857
  }
16854
- this.activeResponse = void 0;
16858
+ if (this.activeResponse === activeResponse) {
16859
+ this.activeResponse = void 0;
16860
+ }
16855
16861
  }
16856
16862
  if (!isError && await this.shouldSendAutomatically()) {
16857
16863
  await this.makeRequest({
16858
16864
  trigger: "submit-message",
16859
- messageId: (_c = this.lastMessage) == null ? void 0 : _c.id,
16865
+ messageId: (_b = this.lastMessage) == null ? void 0 : _b.id,
16860
16866
  metadata,
16861
16867
  headers,
16862
16868
  body