ai 7.0.59 → 7.0.61

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/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # ai
2
2
 
3
+ ## 7.0.61
4
+
5
+ ### Patch Changes
6
+
7
+ - 326054b: Prevent `resumeStream` from copying the previous assistant message into the resumed response.
8
+ - 975bb28: Cancel messages that are still being prepared when a chat is stopped.
9
+ - Updated dependencies [7fbfc6d]
10
+ - @ai-sdk/provider-utils@5.0.27
11
+ - @ai-sdk/gateway@4.0.49
12
+
13
+ ## 7.0.60
14
+
15
+ ### Patch Changes
16
+
17
+ - 79c52ef: Align `ToolLoopAgent` `prepareCall` types with the settings available and honored at runtime.
18
+ - Updated dependencies [3cc1bb6]
19
+ - @ai-sdk/gateway@4.0.48
20
+
3
21
  ## 7.0.59
4
22
 
5
23
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -5122,9 +5122,9 @@ type ToolLoopAgentSettings<CALL_OPTIONS = never, TOOLS extends ToolSet = {}, RUN
5122
5122
  * }),
5123
5123
  * ```
5124
5124
  */
5125
- prepareCall?: (options: Omit<AgentCallParameters<CALL_OPTIONS, NoInfer<TOOLS>, NoInfer<RUNTIME_CONTEXT>>, 'onStepEnd' | 'onStepFinish'> & Pick<ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, RUNTIME_CONTEXT, NoInfer<OUTPUT>>, 'model' | 'tools' | 'maxOutputTokens' | 'temperature' | 'topP' | 'topK' | 'presencePenalty' | 'frequencyPenalty' | 'stopSequences' | 'seed' | 'reasoning' | 'headers' | 'instructions' | 'allowSystemInMessages' | 'stopWhen' | 'telemetry' | 'experimental_telemetry' | 'activeTools' | 'toolOrder' | 'toolApproval' | 'experimental_toolCallers' | 'providerOptions' | 'experimental_download' | 'experimental_refineToolInput' | 'include' | 'runtimeContext' | '_internal'> & {
5125
+ prepareCall?: (options: Omit<AgentCallParameters<CALL_OPTIONS, NoInfer<TOOLS>, NoInfer<RUNTIME_CONTEXT>>, 'abortSignal' | 'timeout' | 'onStart' | 'experimental_onStart' | 'onStepStart' | 'experimental_onStepStart' | 'onToolExecutionStart' | 'onToolExecutionEnd' | 'onStepEnd' | 'onStepFinish' | 'onEnd' | 'onFinish'> & Pick<ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, RUNTIME_CONTEXT, NoInfer<OUTPUT>>, 'model' | 'tools' | 'toolChoice' | 'maxRetries' | 'maxOutputTokens' | 'temperature' | 'topP' | 'topK' | 'presencePenalty' | 'frequencyPenalty' | 'stopSequences' | 'seed' | 'reasoning' | 'headers' | 'instructions' | 'allowSystemInMessages' | 'stopWhen' | 'telemetry' | 'experimental_telemetry' | 'activeTools' | 'toolOrder' | 'toolApproval' | 'experimental_toolCallers' | 'prepareStep' | 'repairToolCall' | 'experimental_repairToolCall' | 'providerOptions' | 'experimental_download' | 'experimental_refineToolInput' | 'include' | 'runtimeContext' | '_internal'> & {
5126
5126
  toolsContext: InferToolSetContext<TOOLS>;
5127
- }) => MaybePromiseLike<Pick<ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, RUNTIME_CONTEXT, NoInfer<OUTPUT>>, 'model' | 'tools' | 'maxOutputTokens' | 'temperature' | 'topP' | 'topK' | 'presencePenalty' | 'frequencyPenalty' | 'stopSequences' | 'seed' | 'reasoning' | 'headers' | 'instructions' | 'allowSystemInMessages' | 'stopWhen' | 'telemetry' | 'experimental_telemetry' | 'activeTools' | 'toolOrder' | 'toolApproval' | 'experimental_toolCallers' | 'providerOptions' | 'experimental_download' | 'experimental_refineToolInput' | 'include' | 'runtimeContext' | '_internal'> & Omit<Prompt, 'system'> & {
5127
+ }) => MaybePromiseLike<Pick<ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, RUNTIME_CONTEXT, NoInfer<OUTPUT>>, 'model' | 'tools' | 'toolChoice' | 'maxRetries' | 'maxOutputTokens' | 'temperature' | 'topP' | 'topK' | 'presencePenalty' | 'frequencyPenalty' | 'stopSequences' | 'seed' | 'reasoning' | 'headers' | 'instructions' | 'allowSystemInMessages' | 'stopWhen' | 'telemetry' | 'experimental_telemetry' | 'activeTools' | 'toolOrder' | 'toolApproval' | 'experimental_toolCallers' | 'prepareStep' | 'repairToolCall' | 'experimental_repairToolCall' | 'providerOptions' | 'experimental_download' | 'experimental_refineToolInput' | 'include' | 'runtimeContext' | '_internal'> & Omit<Prompt, 'system'> & {
5128
5128
  toolsContext: InferToolSetContext<TOOLS>;
5129
5129
  }>;
5130
5130
  };
@@ -5491,6 +5491,7 @@ declare abstract class AbstractChat<UI_MESSAGE extends UIMessage> {
5491
5491
  private onFinish?;
5492
5492
  private onData?;
5493
5493
  private sendAutomaticallyWhen?;
5494
+ private pendingMessagePreparations;
5494
5495
  private activeResponse;
5495
5496
  private activeResumeRequest;
5496
5497
  private jobExecutor;
package/dist/index.js CHANGED
@@ -1143,7 +1143,7 @@ import {
1143
1143
  } from "@ai-sdk/provider-utils";
1144
1144
 
1145
1145
  // src/version.ts
1146
- var VERSION = true ? "7.0.59" : "0.0.0-test";
1146
+ var VERSION = true ? "7.0.61" : "0.0.0-test";
1147
1147
 
1148
1148
  // src/util/download/download.ts
1149
1149
  var download = async ({
@@ -17579,6 +17579,7 @@ var AbstractChat = class {
17579
17579
  onData,
17580
17580
  sendAutomaticallyWhen
17581
17581
  }) {
17582
+ this.pendingMessagePreparations = /* @__PURE__ */ new Set();
17582
17583
  this.activeResponse = void 0;
17583
17584
  this.activeResumeRequest = void 0;
17584
17585
  this.jobExecutor = new SerialJobExecutor();
@@ -17600,7 +17601,17 @@ var AbstractChat = class {
17600
17601
  }
17601
17602
  let uiMessage;
17602
17603
  if ("text" in message || "files" in message) {
17603
- const fileParts = Array.isArray(message.files) ? message.files : await convertFileListToFileUIParts(message.files);
17604
+ const abortController = new AbortController();
17605
+ this.pendingMessagePreparations.add(abortController);
17606
+ let fileParts;
17607
+ try {
17608
+ fileParts = Array.isArray(message.files) ? message.files : await convertFileListToFileUIParts(message.files);
17609
+ } finally {
17610
+ this.pendingMessagePreparations.delete(abortController);
17611
+ }
17612
+ if (abortController.signal.aborted) {
17613
+ return;
17614
+ }
17604
17615
  uiMessage = {
17605
17616
  parts: [
17606
17617
  ...fileParts,
@@ -17751,6 +17762,9 @@ var AbstractChat = class {
17751
17762
  */
17752
17763
  this.stop = async () => {
17753
17764
  var _a23, _b;
17765
+ for (const controller of this.pendingMessagePreparations) {
17766
+ controller.abort();
17767
+ }
17754
17768
  (_a23 = this.activeResumeRequest) == null ? void 0 : _a23.abortController.abort();
17755
17769
  (_b = this.activeResponse) == null ? void 0 : _b.abortController.abort();
17756
17770
  };
@@ -17882,7 +17896,7 @@ var AbstractChat = class {
17882
17896
  try {
17883
17897
  const response = {
17884
17898
  state: createStreamingUIMessageState({
17885
- lastMessage: trigger === "regenerate-message" ? void 0 : this.state.snapshot(lastMessage),
17899
+ lastMessage: trigger === "resume-stream" || trigger === "regenerate-message" ? void 0 : this.state.snapshot(lastMessage),
17886
17900
  messageId: this.generateId()
17887
17901
  }),
17888
17902
  abortController