ai 6.0.219 → 6.0.221

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,41 @@
1
1
  # ai
2
2
 
3
+ ## 6.0.221
4
+
5
+ ### Patch Changes
6
+
7
+ - 2958540: fix(ui): export `isDynamicToolUIPart` from `ai` package
8
+ - aa2dbe6: Fix: `convertToModelMessages` no longer emits an empty assistant message when a block contains only unknown data parts (e.g. a data part before `step-start` with no `convertDataPart` provided)
9
+ - faaef7c: fix(ai): enforce `timeout.stepMs` for the whole step in `streamText`
10
+
11
+ Previously `streamText`'s step timer was cleared synchronously right after the step's stream was registered, before the stream produced anything, so `stepMs` never aborted a step that stalled before emitting content. The step timer now survives until the step's stream finishes or aborts, matching `generateText`. `chunkMs`/`totalMs` and normal step-finish cleanup are unchanged.
12
+
13
+ - 45a9cbf: Return validated elements from generateText array output
14
+ - 2706461: fix(ai): include tool input on tool result for provider executed dynamic tools
15
+ - 327642b: fix: more precise default message for tool execution denial
16
+ - 89df298: Preserve signed tool approval metadata when recording approval responses.
17
+ - 8ed1f83: fix(ai): tag step/chunk timeout aborts with `TimeoutError` reason
18
+
19
+ When `timeout: { stepMs }` or `timeout: { chunkMs }` fires, the abort reason is now a `TimeoutError` `DOMException`, matching what `AbortSignal.timeout()` produces natively. Consumers can distinguish a framework timeout from a user-initiated cancel via `signal.reason.name === 'TimeoutError'`.
20
+
21
+ - Updated dependencies [d559de9]
22
+ - Updated dependencies [9c54a9f]
23
+ - Updated dependencies [bbc4bd5]
24
+ - @ai-sdk/provider-utils@4.0.37
25
+ - @ai-sdk/gateway@3.0.145
26
+
27
+ ## 6.0.220
28
+
29
+ ### Patch Changes
30
+
31
+ - 158d027: Sort tool results by their tool call order when converting generation output to response messages.
32
+ - eb3cdd9: Fix `extractJsonMiddleware` preserving leading whitespace in the final streamed text suffix when no markdown fence prefix was stripped.
33
+ - Updated dependencies [7dea716]
34
+ - Updated dependencies [4f7fe37]
35
+ - Updated dependencies [0952964]
36
+ - @ai-sdk/gateway@3.0.144
37
+ - @ai-sdk/provider-utils@4.0.36
38
+
3
39
  ## 6.0.219
4
40
 
5
41
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -1915,6 +1915,12 @@ declare function isReasoningUIPart(part: UIMessagePart<UIDataTypes, UITools>): p
1915
1915
  * Static tools are tools for which the types are known at development time.
1916
1916
  */
1917
1917
  declare function isStaticToolUIPart<TOOLS extends UITools>(part: UIMessagePart<UIDataTypes, TOOLS>): part is ToolUIPart<TOOLS>;
1918
+ /**
1919
+ * Check if a message part is a dynamic tool part.
1920
+ *
1921
+ * Dynamic tools are tools for which the input and output types are unknown.
1922
+ */
1923
+ declare function isDynamicToolUIPart(part: UIMessagePart<UIDataTypes, UITools>): part is DynamicToolUIPart;
1918
1924
  /**
1919
1925
  * Check if a message part is a tool part.
1920
1926
  *
@@ -3459,6 +3465,16 @@ type ToolLoopAgentSettings<CALL_OPTIONS = never, TOOLS extends ToolSet = {}, OUT
3459
3465
  * Prepare the parameters for the generateText or streamText call.
3460
3466
  *
3461
3467
  * You can use this to have templates based on call options.
3468
+ *
3469
+ * The design requires you to pass call parameters as follows to
3470
+ * allow for the removal of parameters from the original settings
3471
+ * by setting them to `undefined`:
3472
+ *
3473
+ * ```
3474
+ * prepareCall: ({ options, ...rest }) => ({
3475
+ * ...rest,
3476
+ * }),
3477
+ * ```
3462
3478
  */
3463
3479
  prepareCall?: (options: Omit<AgentCallParameters<CALL_OPTIONS, NoInfer<TOOLS>>, 'onStepFinish'> & Pick<ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, OUTPUT>, 'model' | 'tools' | 'maxOutputTokens' | 'temperature' | 'topP' | 'topK' | 'presencePenalty' | 'frequencyPenalty' | 'stopSequences' | 'seed' | 'headers' | 'instructions' | 'allowSystemInMessages' | 'stopWhen' | 'experimental_telemetry' | 'activeTools' | 'providerOptions' | 'experimental_context' | 'experimental_download'>) => MaybePromiseLike<Pick<ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, OUTPUT>, 'model' | 'tools' | 'maxOutputTokens' | 'temperature' | 'topP' | 'topK' | 'presencePenalty' | 'frequencyPenalty' | 'stopSequences' | 'seed' | 'headers' | 'instructions' | 'allowSystemInMessages' | 'stopWhen' | 'experimental_telemetry' | 'activeTools' | 'providerOptions' | 'experimental_context' | 'experimental_download'> & Omit<Prompt, 'system'>>;
3464
3480
  };
@@ -6507,4 +6523,4 @@ declare function bindTelemetryIntegration(integration: TelemetryIntegration): Te
6507
6523
  */
6508
6524
  declare function registerTelemetryIntegration(integration: TelemetryIntegration): void;
6509
6525
 
6510
- export { AbstractChat, Agent, AgentCallParameters, AgentStreamParameters, AsyncIterableStream, CallSettings, CallWarning, ChatAddToolApproveResponseFunction, ChatAddToolOutputFunction, ChatInit, ChatOnDataCallback, ChatOnErrorCallback, ChatOnFinishCallback, ChatOnToolCallCallback, ChatRequestOptions, ChatState, ChatStatus, ChatTransport, ChunkDetector, CompletionRequestOptions, ContentPart, CreateUIMessage, DataUIPart, DeepPartial, DefaultChatTransport, DefaultGeneratedFile, DirectChatTransport, DirectChatTransportOptions, DynamicToolCall, DynamicToolError, DynamicToolResult, DynamicToolUIPart, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelMiddleware, EmbeddingModelUsage, ErrorHandler, ToolLoopAgent as Experimental_Agent, ToolLoopAgentSettings as Experimental_AgentSettings, DownloadFunction as Experimental_DownloadFunction, Experimental_GenerateImageResult, GeneratedFile as Experimental_GeneratedImage, InferAgentUIMessage as Experimental_InferAgentUIMessage, LogWarningsFunction as Experimental_LogWarningsFunction, SpeechResult as Experimental_SpeechResult, TranscriptionResult as Experimental_TranscriptionResult, FileUIPart, FinishReason, GenerateImageResult, GenerateObjectResult, GenerateTextOnFinishCallback, GenerateTextOnStartCallback, GenerateTextOnStepFinishCallback, GenerateTextOnStepStartCallback, GenerateTextOnToolCallFinishCallback, GenerateTextOnToolCallStartCallback, GenerateTextResult, GenerateVideoPrompt, GenerateVideoResult, GeneratedAudioFile, GeneratedFile, HttpChatTransport, HttpChatTransportInitOptions, ImageModel, ImageModelMiddleware, ImageModelProviderMetadata, ImageModelResponseMetadata, ImageModelUsage, InferAgentUIMessage, InferCompleteOutput as InferGenerateOutput, InferPartialOutput as InferStreamOutput, InferUIDataParts, InferUIMessageChunk, InferUITool, InferUITools, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidStreamPartError, InvalidToolApprovalError, InvalidToolApprovalSignatureError, InvalidToolInputError, JSONValue, JsonToSseTransformStream, LanguageModel, LanguageModelMiddleware, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, LogWarningsFunction, MessageConversionError, MissingToolResultsError, NoImageGeneratedError, NoObjectGeneratedError, NoOutputGeneratedError, NoSpeechGeneratedError, NoSuchProviderError, NoSuchToolError, NoTranscriptGeneratedError, NoVideoGeneratedError, ObjectStreamPart, OnFinishEvent, OnStartEvent, OnStepFinishEvent, OnStepStartEvent, OnToolCallFinishEvent, OnToolCallStartEvent, output as Output, PrepareReconnectToStreamRequest, PrepareSendMessagesRequest, PrepareStepFunction, PrepareStepResult, Prompt, Provider, ProviderMetadata, ProviderRegistryProvider, ReasoningOutput, ReasoningUIPart, RepairTextFunction, RerankResult, RerankingModel, RetryError, SafeValidateUIMessagesResult, SerialJobExecutor, SourceDocumentUIPart, SourceUrlUIPart, SpeechModel, SpeechModelResponseMetadata, StaticToolCall, StaticToolError, StaticToolOutputDenied, StaticToolResult, StepResult, StepStartUIPart, StopCondition, StreamObjectOnFinishCallback, StreamObjectResult, StreamTextOnChunkCallback, StreamTextOnErrorCallback, StreamTextOnFinishCallback, StreamTextOnStartCallback, StreamTextOnStepFinishCallback, StreamTextOnStepStartCallback, StreamTextOnToolCallFinishCallback, StreamTextOnToolCallStartCallback, StreamTextResult, StreamTextTransform, TelemetryIntegration, TelemetrySettings, TextStreamChatTransport, TextStreamPart, TextUIPart, TimeoutConfiguration, ToolApprovalRequestOutput, ToolCallNotFoundForApprovalError, ToolCallRepairError, ToolCallRepairFunction, ToolChoice, ToolLoopAgent, ToolLoopAgentOnFinishCallback, ToolLoopAgentOnStepFinishCallback, ToolLoopAgentSettings, ToolSet, ToolUIPart, TranscriptionModel, TranscriptionModelResponseMetadata, TypedToolCall, TypedToolError, TypedToolOutputDenied, TypedToolResult, UIDataPartSchemas, UIDataTypes, UIMessage, UIMessageChunk, UIMessagePart, UIMessageStreamError, UIMessageStreamOnFinishCallback, UIMessageStreamOnStepFinishCallback, UIMessageStreamOptions, UIMessageStreamWriter, UITool, UIToolInvocation, UITools, UI_MESSAGE_STREAM_HEADERS, UnsupportedModelVersionError, UseCompletionOptions, Warning, addToolInputExamplesMiddleware, assistantModelMessageSchema, bindTelemetryIntegration, callCompletionApi, consumeStream, convertFileListToFileUIParts, convertToModelMessages, cosineSimilarity, createAgentUIStream, createAgentUIStreamResponse, createDownload, createProviderRegistry, createTextStreamResponse, createUIMessageStream, createUIMessageStreamResponse, customProvider, defaultEmbeddingSettingsMiddleware, defaultSettingsMiddleware, embed, embedMany, experimental_createProviderRegistry, experimental_customProvider, experimental_generateImage, generateSpeech as experimental_generateSpeech, experimental_generateVideo, transcribe as experimental_transcribe, extractJsonMiddleware, extractReasoningMiddleware, generateImage, generateObject, generateText, getStaticToolName, getTextFromDataUrl, getToolName, getToolOrDynamicToolName, hasToolCall, isDataUIPart, isDeepEqualData, isFileUIPart, isLoopFinished, isReasoningUIPart, isStaticToolUIPart, isTextUIPart, isToolOrDynamicToolUIPart, isToolUIPart, lastAssistantMessageIsCompleteWithApprovalResponses, lastAssistantMessageIsCompleteWithToolCalls, modelMessageSchema, parsePartialJson, pipeAgentUIStreamToResponse, pipeTextStreamToResponse, pipeUIMessageStreamToResponse, pruneMessages, readUIMessageStream, registerTelemetryIntegration, rerank, safeValidateUIMessages, simulateReadableStream, simulateStreamingMiddleware, smoothStream, stepCountIs, streamObject, streamText, systemModelMessageSchema, toolModelMessageSchema, uiMessageChunkSchema, userModelMessageSchema, validateUIMessages, wrapEmbeddingModel, wrapImageModel, wrapLanguageModel, wrapProvider };
6526
+ export { AbstractChat, Agent, AgentCallParameters, AgentStreamParameters, AsyncIterableStream, CallSettings, CallWarning, ChatAddToolApproveResponseFunction, ChatAddToolOutputFunction, ChatInit, ChatOnDataCallback, ChatOnErrorCallback, ChatOnFinishCallback, ChatOnToolCallCallback, ChatRequestOptions, ChatState, ChatStatus, ChatTransport, ChunkDetector, CompletionRequestOptions, ContentPart, CreateUIMessage, DataUIPart, DeepPartial, DefaultChatTransport, DefaultGeneratedFile, DirectChatTransport, DirectChatTransportOptions, DynamicToolCall, DynamicToolError, DynamicToolResult, DynamicToolUIPart, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelMiddleware, EmbeddingModelUsage, ErrorHandler, ToolLoopAgent as Experimental_Agent, ToolLoopAgentSettings as Experimental_AgentSettings, DownloadFunction as Experimental_DownloadFunction, Experimental_GenerateImageResult, GeneratedFile as Experimental_GeneratedImage, InferAgentUIMessage as Experimental_InferAgentUIMessage, LogWarningsFunction as Experimental_LogWarningsFunction, SpeechResult as Experimental_SpeechResult, TranscriptionResult as Experimental_TranscriptionResult, FileUIPart, FinishReason, GenerateImageResult, GenerateObjectResult, GenerateTextOnFinishCallback, GenerateTextOnStartCallback, GenerateTextOnStepFinishCallback, GenerateTextOnStepStartCallback, GenerateTextOnToolCallFinishCallback, GenerateTextOnToolCallStartCallback, GenerateTextResult, GenerateVideoPrompt, GenerateVideoResult, GeneratedAudioFile, GeneratedFile, HttpChatTransport, HttpChatTransportInitOptions, ImageModel, ImageModelMiddleware, ImageModelProviderMetadata, ImageModelResponseMetadata, ImageModelUsage, InferAgentUIMessage, InferCompleteOutput as InferGenerateOutput, InferPartialOutput as InferStreamOutput, InferUIDataParts, InferUIMessageChunk, InferUITool, InferUITools, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidStreamPartError, InvalidToolApprovalError, InvalidToolApprovalSignatureError, InvalidToolInputError, JSONValue, JsonToSseTransformStream, LanguageModel, LanguageModelMiddleware, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, LogWarningsFunction, MessageConversionError, MissingToolResultsError, NoImageGeneratedError, NoObjectGeneratedError, NoOutputGeneratedError, NoSpeechGeneratedError, NoSuchProviderError, NoSuchToolError, NoTranscriptGeneratedError, NoVideoGeneratedError, ObjectStreamPart, OnFinishEvent, OnStartEvent, OnStepFinishEvent, OnStepStartEvent, OnToolCallFinishEvent, OnToolCallStartEvent, output as Output, PrepareReconnectToStreamRequest, PrepareSendMessagesRequest, PrepareStepFunction, PrepareStepResult, Prompt, Provider, ProviderMetadata, ProviderRegistryProvider, ReasoningOutput, ReasoningUIPart, RepairTextFunction, RerankResult, RerankingModel, RetryError, SafeValidateUIMessagesResult, SerialJobExecutor, SourceDocumentUIPart, SourceUrlUIPart, SpeechModel, SpeechModelResponseMetadata, StaticToolCall, StaticToolError, StaticToolOutputDenied, StaticToolResult, StepResult, StepStartUIPart, StopCondition, StreamObjectOnFinishCallback, StreamObjectResult, StreamTextOnChunkCallback, StreamTextOnErrorCallback, StreamTextOnFinishCallback, StreamTextOnStartCallback, StreamTextOnStepFinishCallback, StreamTextOnStepStartCallback, StreamTextOnToolCallFinishCallback, StreamTextOnToolCallStartCallback, StreamTextResult, StreamTextTransform, TelemetryIntegration, TelemetrySettings, TextStreamChatTransport, TextStreamPart, TextUIPart, TimeoutConfiguration, ToolApprovalRequestOutput, ToolCallNotFoundForApprovalError, ToolCallRepairError, ToolCallRepairFunction, ToolChoice, ToolLoopAgent, ToolLoopAgentOnFinishCallback, ToolLoopAgentOnStepFinishCallback, ToolLoopAgentSettings, ToolSet, ToolUIPart, TranscriptionModel, TranscriptionModelResponseMetadata, TypedToolCall, TypedToolError, TypedToolOutputDenied, TypedToolResult, UIDataPartSchemas, UIDataTypes, UIMessage, UIMessageChunk, UIMessagePart, UIMessageStreamError, UIMessageStreamOnFinishCallback, UIMessageStreamOnStepFinishCallback, UIMessageStreamOptions, UIMessageStreamWriter, UITool, UIToolInvocation, UITools, UI_MESSAGE_STREAM_HEADERS, UnsupportedModelVersionError, UseCompletionOptions, Warning, addToolInputExamplesMiddleware, assistantModelMessageSchema, bindTelemetryIntegration, callCompletionApi, consumeStream, convertFileListToFileUIParts, convertToModelMessages, cosineSimilarity, createAgentUIStream, createAgentUIStreamResponse, createDownload, createProviderRegistry, createTextStreamResponse, createUIMessageStream, createUIMessageStreamResponse, customProvider, defaultEmbeddingSettingsMiddleware, defaultSettingsMiddleware, embed, embedMany, experimental_createProviderRegistry, experimental_customProvider, experimental_generateImage, generateSpeech as experimental_generateSpeech, experimental_generateVideo, transcribe as experimental_transcribe, extractJsonMiddleware, extractReasoningMiddleware, generateImage, generateObject, generateText, getStaticToolName, getTextFromDataUrl, getToolName, getToolOrDynamicToolName, hasToolCall, isDataUIPart, isDeepEqualData, isDynamicToolUIPart, isFileUIPart, isLoopFinished, isReasoningUIPart, isStaticToolUIPart, isTextUIPart, isToolOrDynamicToolUIPart, isToolUIPart, lastAssistantMessageIsCompleteWithApprovalResponses, lastAssistantMessageIsCompleteWithToolCalls, modelMessageSchema, parsePartialJson, pipeAgentUIStreamToResponse, pipeTextStreamToResponse, pipeUIMessageStreamToResponse, pruneMessages, readUIMessageStream, registerTelemetryIntegration, rerank, safeValidateUIMessages, simulateReadableStream, simulateStreamingMiddleware, smoothStream, stepCountIs, streamObject, streamText, systemModelMessageSchema, toolModelMessageSchema, uiMessageChunkSchema, userModelMessageSchema, validateUIMessages, wrapEmbeddingModel, wrapImageModel, wrapLanguageModel, wrapProvider };
package/dist/index.d.ts CHANGED
@@ -1915,6 +1915,12 @@ declare function isReasoningUIPart(part: UIMessagePart<UIDataTypes, UITools>): p
1915
1915
  * Static tools are tools for which the types are known at development time.
1916
1916
  */
1917
1917
  declare function isStaticToolUIPart<TOOLS extends UITools>(part: UIMessagePart<UIDataTypes, TOOLS>): part is ToolUIPart<TOOLS>;
1918
+ /**
1919
+ * Check if a message part is a dynamic tool part.
1920
+ *
1921
+ * Dynamic tools are tools for which the input and output types are unknown.
1922
+ */
1923
+ declare function isDynamicToolUIPart(part: UIMessagePart<UIDataTypes, UITools>): part is DynamicToolUIPart;
1918
1924
  /**
1919
1925
  * Check if a message part is a tool part.
1920
1926
  *
@@ -3459,6 +3465,16 @@ type ToolLoopAgentSettings<CALL_OPTIONS = never, TOOLS extends ToolSet = {}, OUT
3459
3465
  * Prepare the parameters for the generateText or streamText call.
3460
3466
  *
3461
3467
  * You can use this to have templates based on call options.
3468
+ *
3469
+ * The design requires you to pass call parameters as follows to
3470
+ * allow for the removal of parameters from the original settings
3471
+ * by setting them to `undefined`:
3472
+ *
3473
+ * ```
3474
+ * prepareCall: ({ options, ...rest }) => ({
3475
+ * ...rest,
3476
+ * }),
3477
+ * ```
3462
3478
  */
3463
3479
  prepareCall?: (options: Omit<AgentCallParameters<CALL_OPTIONS, NoInfer<TOOLS>>, 'onStepFinish'> & Pick<ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, OUTPUT>, 'model' | 'tools' | 'maxOutputTokens' | 'temperature' | 'topP' | 'topK' | 'presencePenalty' | 'frequencyPenalty' | 'stopSequences' | 'seed' | 'headers' | 'instructions' | 'allowSystemInMessages' | 'stopWhen' | 'experimental_telemetry' | 'activeTools' | 'providerOptions' | 'experimental_context' | 'experimental_download'>) => MaybePromiseLike<Pick<ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, OUTPUT>, 'model' | 'tools' | 'maxOutputTokens' | 'temperature' | 'topP' | 'topK' | 'presencePenalty' | 'frequencyPenalty' | 'stopSequences' | 'seed' | 'headers' | 'instructions' | 'allowSystemInMessages' | 'stopWhen' | 'experimental_telemetry' | 'activeTools' | 'providerOptions' | 'experimental_context' | 'experimental_download'> & Omit<Prompt, 'system'>>;
3464
3480
  };
@@ -6507,4 +6523,4 @@ declare function bindTelemetryIntegration(integration: TelemetryIntegration): Te
6507
6523
  */
6508
6524
  declare function registerTelemetryIntegration(integration: TelemetryIntegration): void;
6509
6525
 
6510
- export { AbstractChat, Agent, AgentCallParameters, AgentStreamParameters, AsyncIterableStream, CallSettings, CallWarning, ChatAddToolApproveResponseFunction, ChatAddToolOutputFunction, ChatInit, ChatOnDataCallback, ChatOnErrorCallback, ChatOnFinishCallback, ChatOnToolCallCallback, ChatRequestOptions, ChatState, ChatStatus, ChatTransport, ChunkDetector, CompletionRequestOptions, ContentPart, CreateUIMessage, DataUIPart, DeepPartial, DefaultChatTransport, DefaultGeneratedFile, DirectChatTransport, DirectChatTransportOptions, DynamicToolCall, DynamicToolError, DynamicToolResult, DynamicToolUIPart, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelMiddleware, EmbeddingModelUsage, ErrorHandler, ToolLoopAgent as Experimental_Agent, ToolLoopAgentSettings as Experimental_AgentSettings, DownloadFunction as Experimental_DownloadFunction, Experimental_GenerateImageResult, GeneratedFile as Experimental_GeneratedImage, InferAgentUIMessage as Experimental_InferAgentUIMessage, LogWarningsFunction as Experimental_LogWarningsFunction, SpeechResult as Experimental_SpeechResult, TranscriptionResult as Experimental_TranscriptionResult, FileUIPart, FinishReason, GenerateImageResult, GenerateObjectResult, GenerateTextOnFinishCallback, GenerateTextOnStartCallback, GenerateTextOnStepFinishCallback, GenerateTextOnStepStartCallback, GenerateTextOnToolCallFinishCallback, GenerateTextOnToolCallStartCallback, GenerateTextResult, GenerateVideoPrompt, GenerateVideoResult, GeneratedAudioFile, GeneratedFile, HttpChatTransport, HttpChatTransportInitOptions, ImageModel, ImageModelMiddleware, ImageModelProviderMetadata, ImageModelResponseMetadata, ImageModelUsage, InferAgentUIMessage, InferCompleteOutput as InferGenerateOutput, InferPartialOutput as InferStreamOutput, InferUIDataParts, InferUIMessageChunk, InferUITool, InferUITools, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidStreamPartError, InvalidToolApprovalError, InvalidToolApprovalSignatureError, InvalidToolInputError, JSONValue, JsonToSseTransformStream, LanguageModel, LanguageModelMiddleware, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, LogWarningsFunction, MessageConversionError, MissingToolResultsError, NoImageGeneratedError, NoObjectGeneratedError, NoOutputGeneratedError, NoSpeechGeneratedError, NoSuchProviderError, NoSuchToolError, NoTranscriptGeneratedError, NoVideoGeneratedError, ObjectStreamPart, OnFinishEvent, OnStartEvent, OnStepFinishEvent, OnStepStartEvent, OnToolCallFinishEvent, OnToolCallStartEvent, output as Output, PrepareReconnectToStreamRequest, PrepareSendMessagesRequest, PrepareStepFunction, PrepareStepResult, Prompt, Provider, ProviderMetadata, ProviderRegistryProvider, ReasoningOutput, ReasoningUIPart, RepairTextFunction, RerankResult, RerankingModel, RetryError, SafeValidateUIMessagesResult, SerialJobExecutor, SourceDocumentUIPart, SourceUrlUIPart, SpeechModel, SpeechModelResponseMetadata, StaticToolCall, StaticToolError, StaticToolOutputDenied, StaticToolResult, StepResult, StepStartUIPart, StopCondition, StreamObjectOnFinishCallback, StreamObjectResult, StreamTextOnChunkCallback, StreamTextOnErrorCallback, StreamTextOnFinishCallback, StreamTextOnStartCallback, StreamTextOnStepFinishCallback, StreamTextOnStepStartCallback, StreamTextOnToolCallFinishCallback, StreamTextOnToolCallStartCallback, StreamTextResult, StreamTextTransform, TelemetryIntegration, TelemetrySettings, TextStreamChatTransport, TextStreamPart, TextUIPart, TimeoutConfiguration, ToolApprovalRequestOutput, ToolCallNotFoundForApprovalError, ToolCallRepairError, ToolCallRepairFunction, ToolChoice, ToolLoopAgent, ToolLoopAgentOnFinishCallback, ToolLoopAgentOnStepFinishCallback, ToolLoopAgentSettings, ToolSet, ToolUIPart, TranscriptionModel, TranscriptionModelResponseMetadata, TypedToolCall, TypedToolError, TypedToolOutputDenied, TypedToolResult, UIDataPartSchemas, UIDataTypes, UIMessage, UIMessageChunk, UIMessagePart, UIMessageStreamError, UIMessageStreamOnFinishCallback, UIMessageStreamOnStepFinishCallback, UIMessageStreamOptions, UIMessageStreamWriter, UITool, UIToolInvocation, UITools, UI_MESSAGE_STREAM_HEADERS, UnsupportedModelVersionError, UseCompletionOptions, Warning, addToolInputExamplesMiddleware, assistantModelMessageSchema, bindTelemetryIntegration, callCompletionApi, consumeStream, convertFileListToFileUIParts, convertToModelMessages, cosineSimilarity, createAgentUIStream, createAgentUIStreamResponse, createDownload, createProviderRegistry, createTextStreamResponse, createUIMessageStream, createUIMessageStreamResponse, customProvider, defaultEmbeddingSettingsMiddleware, defaultSettingsMiddleware, embed, embedMany, experimental_createProviderRegistry, experimental_customProvider, experimental_generateImage, generateSpeech as experimental_generateSpeech, experimental_generateVideo, transcribe as experimental_transcribe, extractJsonMiddleware, extractReasoningMiddleware, generateImage, generateObject, generateText, getStaticToolName, getTextFromDataUrl, getToolName, getToolOrDynamicToolName, hasToolCall, isDataUIPart, isDeepEqualData, isFileUIPart, isLoopFinished, isReasoningUIPart, isStaticToolUIPart, isTextUIPart, isToolOrDynamicToolUIPart, isToolUIPart, lastAssistantMessageIsCompleteWithApprovalResponses, lastAssistantMessageIsCompleteWithToolCalls, modelMessageSchema, parsePartialJson, pipeAgentUIStreamToResponse, pipeTextStreamToResponse, pipeUIMessageStreamToResponse, pruneMessages, readUIMessageStream, registerTelemetryIntegration, rerank, safeValidateUIMessages, simulateReadableStream, simulateStreamingMiddleware, smoothStream, stepCountIs, streamObject, streamText, systemModelMessageSchema, toolModelMessageSchema, uiMessageChunkSchema, userModelMessageSchema, validateUIMessages, wrapEmbeddingModel, wrapImageModel, wrapLanguageModel, wrapProvider };
6526
+ export { AbstractChat, Agent, AgentCallParameters, AgentStreamParameters, AsyncIterableStream, CallSettings, CallWarning, ChatAddToolApproveResponseFunction, ChatAddToolOutputFunction, ChatInit, ChatOnDataCallback, ChatOnErrorCallback, ChatOnFinishCallback, ChatOnToolCallCallback, ChatRequestOptions, ChatState, ChatStatus, ChatTransport, ChunkDetector, CompletionRequestOptions, ContentPart, CreateUIMessage, DataUIPart, DeepPartial, DefaultChatTransport, DefaultGeneratedFile, DirectChatTransport, DirectChatTransportOptions, DynamicToolCall, DynamicToolError, DynamicToolResult, DynamicToolUIPart, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelMiddleware, EmbeddingModelUsage, ErrorHandler, ToolLoopAgent as Experimental_Agent, ToolLoopAgentSettings as Experimental_AgentSettings, DownloadFunction as Experimental_DownloadFunction, Experimental_GenerateImageResult, GeneratedFile as Experimental_GeneratedImage, InferAgentUIMessage as Experimental_InferAgentUIMessage, LogWarningsFunction as Experimental_LogWarningsFunction, SpeechResult as Experimental_SpeechResult, TranscriptionResult as Experimental_TranscriptionResult, FileUIPart, FinishReason, GenerateImageResult, GenerateObjectResult, GenerateTextOnFinishCallback, GenerateTextOnStartCallback, GenerateTextOnStepFinishCallback, GenerateTextOnStepStartCallback, GenerateTextOnToolCallFinishCallback, GenerateTextOnToolCallStartCallback, GenerateTextResult, GenerateVideoPrompt, GenerateVideoResult, GeneratedAudioFile, GeneratedFile, HttpChatTransport, HttpChatTransportInitOptions, ImageModel, ImageModelMiddleware, ImageModelProviderMetadata, ImageModelResponseMetadata, ImageModelUsage, InferAgentUIMessage, InferCompleteOutput as InferGenerateOutput, InferPartialOutput as InferStreamOutput, InferUIDataParts, InferUIMessageChunk, InferUITool, InferUITools, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidStreamPartError, InvalidToolApprovalError, InvalidToolApprovalSignatureError, InvalidToolInputError, JSONValue, JsonToSseTransformStream, LanguageModel, LanguageModelMiddleware, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, LogWarningsFunction, MessageConversionError, MissingToolResultsError, NoImageGeneratedError, NoObjectGeneratedError, NoOutputGeneratedError, NoSpeechGeneratedError, NoSuchProviderError, NoSuchToolError, NoTranscriptGeneratedError, NoVideoGeneratedError, ObjectStreamPart, OnFinishEvent, OnStartEvent, OnStepFinishEvent, OnStepStartEvent, OnToolCallFinishEvent, OnToolCallStartEvent, output as Output, PrepareReconnectToStreamRequest, PrepareSendMessagesRequest, PrepareStepFunction, PrepareStepResult, Prompt, Provider, ProviderMetadata, ProviderRegistryProvider, ReasoningOutput, ReasoningUIPart, RepairTextFunction, RerankResult, RerankingModel, RetryError, SafeValidateUIMessagesResult, SerialJobExecutor, SourceDocumentUIPart, SourceUrlUIPart, SpeechModel, SpeechModelResponseMetadata, StaticToolCall, StaticToolError, StaticToolOutputDenied, StaticToolResult, StepResult, StepStartUIPart, StopCondition, StreamObjectOnFinishCallback, StreamObjectResult, StreamTextOnChunkCallback, StreamTextOnErrorCallback, StreamTextOnFinishCallback, StreamTextOnStartCallback, StreamTextOnStepFinishCallback, StreamTextOnStepStartCallback, StreamTextOnToolCallFinishCallback, StreamTextOnToolCallStartCallback, StreamTextResult, StreamTextTransform, TelemetryIntegration, TelemetrySettings, TextStreamChatTransport, TextStreamPart, TextUIPart, TimeoutConfiguration, ToolApprovalRequestOutput, ToolCallNotFoundForApprovalError, ToolCallRepairError, ToolCallRepairFunction, ToolChoice, ToolLoopAgent, ToolLoopAgentOnFinishCallback, ToolLoopAgentOnStepFinishCallback, ToolLoopAgentSettings, ToolSet, ToolUIPart, TranscriptionModel, TranscriptionModelResponseMetadata, TypedToolCall, TypedToolError, TypedToolOutputDenied, TypedToolResult, UIDataPartSchemas, UIDataTypes, UIMessage, UIMessageChunk, UIMessagePart, UIMessageStreamError, UIMessageStreamOnFinishCallback, UIMessageStreamOnStepFinishCallback, UIMessageStreamOptions, UIMessageStreamWriter, UITool, UIToolInvocation, UITools, UI_MESSAGE_STREAM_HEADERS, UnsupportedModelVersionError, UseCompletionOptions, Warning, addToolInputExamplesMiddleware, assistantModelMessageSchema, bindTelemetryIntegration, callCompletionApi, consumeStream, convertFileListToFileUIParts, convertToModelMessages, cosineSimilarity, createAgentUIStream, createAgentUIStreamResponse, createDownload, createProviderRegistry, createTextStreamResponse, createUIMessageStream, createUIMessageStreamResponse, customProvider, defaultEmbeddingSettingsMiddleware, defaultSettingsMiddleware, embed, embedMany, experimental_createProviderRegistry, experimental_customProvider, experimental_generateImage, generateSpeech as experimental_generateSpeech, experimental_generateVideo, transcribe as experimental_transcribe, extractJsonMiddleware, extractReasoningMiddleware, generateImage, generateObject, generateText, getStaticToolName, getTextFromDataUrl, getToolName, getToolOrDynamicToolName, hasToolCall, isDataUIPart, isDeepEqualData, isDynamicToolUIPart, isFileUIPart, isLoopFinished, isReasoningUIPart, isStaticToolUIPart, isTextUIPart, isToolOrDynamicToolUIPart, isToolUIPart, lastAssistantMessageIsCompleteWithApprovalResponses, lastAssistantMessageIsCompleteWithToolCalls, modelMessageSchema, parsePartialJson, pipeAgentUIStreamToResponse, pipeTextStreamToResponse, pipeUIMessageStreamToResponse, pruneMessages, readUIMessageStream, registerTelemetryIntegration, rerank, safeValidateUIMessages, simulateReadableStream, simulateStreamingMiddleware, smoothStream, stepCountIs, streamObject, streamText, systemModelMessageSchema, toolModelMessageSchema, uiMessageChunkSchema, userModelMessageSchema, validateUIMessages, wrapEmbeddingModel, wrapImageModel, wrapLanguageModel, wrapProvider };
package/dist/index.js CHANGED
@@ -112,6 +112,7 @@ __export(src_exports, {
112
112
  hasToolCall: () => hasToolCall,
113
113
  isDataUIPart: () => isDataUIPart,
114
114
  isDeepEqualData: () => isDeepEqualData,
115
+ isDynamicToolUIPart: () => isDynamicToolUIPart,
115
116
  isFileUIPart: () => isFileUIPart,
116
117
  isLoopFinished: () => isLoopFinished,
117
118
  isReasoningUIPart: () => isReasoningUIPart,
@@ -1281,7 +1282,7 @@ function detectMediaType({
1281
1282
  var import_provider_utils3 = require("@ai-sdk/provider-utils");
1282
1283
 
1283
1284
  // src/version.ts
1284
- var VERSION = true ? "6.0.219" : "0.0.0-test";
1285
+ var VERSION = true ? "6.0.221" : "0.0.0-test";
1285
1286
 
1286
1287
  // src/util/download/download.ts
1287
1288
  var download = async ({
@@ -2856,6 +2857,26 @@ function prepareRetries({
2856
2857
  };
2857
2858
  }
2858
2859
 
2860
+ // src/util/set-abort-timeout.ts
2861
+ function setAbortTimeout({
2862
+ abortController,
2863
+ label,
2864
+ timeoutMs
2865
+ }) {
2866
+ if (abortController == null || timeoutMs == null) {
2867
+ return void 0;
2868
+ }
2869
+ return setTimeout(
2870
+ () => abortController.abort(
2871
+ new DOMException(
2872
+ `${label} timeout of ${timeoutMs}ms exceeded`,
2873
+ "TimeoutError"
2874
+ )
2875
+ ),
2876
+ timeoutMs
2877
+ );
2878
+ }
2879
+
2859
2880
  // src/generate-text/collect-tool-approvals.ts
2860
2881
  function collectToolApprovals({
2861
2882
  messages
@@ -3808,6 +3829,7 @@ var array = ({
3808
3829
  finishReason: context2.finishReason
3809
3830
  });
3810
3831
  }
3832
+ const validatedElements = [];
3811
3833
  for (const element of outerValue.elements) {
3812
3834
  const validationResult = await (0, import_provider_utils14.safeValidateTypes)({
3813
3835
  value: element,
@@ -3823,8 +3845,9 @@ var array = ({
3823
3845
  finishReason: context2.finishReason
3824
3846
  });
3825
3847
  }
3848
+ validatedElements.push(validationResult.value);
3826
3849
  }
3827
- return outerValue.elements;
3850
+ return validatedElements;
3828
3851
  },
3829
3852
  async parsePartialOutput({ text: text2 }) {
3830
3853
  const result = await parsePartialJson(text2);
@@ -4223,6 +4246,7 @@ async function toResponseMessages({
4223
4246
  tools
4224
4247
  }) {
4225
4248
  const responseMessages = [];
4249
+ const toolCallOrder = /* @__PURE__ */ new Map();
4226
4250
  const content = [];
4227
4251
  for (const part of inputContent) {
4228
4252
  if (part.type === "source") {
@@ -4258,6 +4282,9 @@ async function toResponseMessages({
4258
4282
  });
4259
4283
  break;
4260
4284
  case "tool-call":
4285
+ if (!toolCallOrder.has(part.toolCallId)) {
4286
+ toolCallOrder.set(part.toolCallId, toolCallOrder.size);
4287
+ }
4261
4288
  content.push({
4262
4289
  type: "tool-call",
4263
4290
  toolCallId: part.toolCallId,
@@ -4340,11 +4367,37 @@ async function toResponseMessages({
4340
4367
  if (toolResultContent.length > 0) {
4341
4368
  responseMessages.push({
4342
4369
  role: "tool",
4343
- content: toolResultContent
4370
+ content: sortToolResultContentByToolCallOrder({
4371
+ toolResultContent,
4372
+ toolCallOrder
4373
+ })
4344
4374
  });
4345
4375
  }
4346
4376
  return responseMessages;
4347
4377
  }
4378
+ function sortToolResultContentByToolCallOrder({
4379
+ toolResultContent,
4380
+ toolCallOrder
4381
+ }) {
4382
+ const sortedToolResults = toolResultContent.filter((part) => part.type === "tool-result").map((part, index) => ({ part, index })).sort((a, b) => {
4383
+ const aOrder = toolCallOrder.get(a.part.toolCallId);
4384
+ const bOrder = toolCallOrder.get(b.part.toolCallId);
4385
+ if (aOrder == null && bOrder == null) {
4386
+ return a.index - b.index;
4387
+ }
4388
+ if (aOrder == null) {
4389
+ return 1;
4390
+ }
4391
+ if (bOrder == null) {
4392
+ return -1;
4393
+ }
4394
+ return aOrder - bOrder || a.index - b.index;
4395
+ }).map(({ part }) => part);
4396
+ let toolResultIndex = 0;
4397
+ return toolResultContent.map(
4398
+ (part) => part.type === "tool-result" ? sortedToolResults[toolResultIndex++] : part
4399
+ );
4400
+ }
4348
4401
 
4349
4402
  // src/util/merge-abort-signals.ts
4350
4403
  function mergeAbortSignals(...signals) {
@@ -4597,7 +4650,11 @@ async function generateText({
4597
4650
  const steps = [];
4598
4651
  const pendingDeferredToolCalls = /* @__PURE__ */ new Map();
4599
4652
  do {
4600
- const stepTimeoutId = stepTimeoutMs != null ? setTimeout(() => stepAbortController.abort(), stepTimeoutMs) : void 0;
4653
+ const stepTimeoutId = setAbortTimeout({
4654
+ abortController: stepAbortController,
4655
+ label: "Step",
4656
+ timeoutMs: stepTimeoutMs
4657
+ });
4601
4658
  try {
4602
4659
  const stepInputMessages = [...initialMessages, ...responseMessages];
4603
4660
  const prepareStepResult = await (prepareStep == null ? void 0 : prepareStep({
@@ -6560,7 +6617,6 @@ function runToolsTransformation({
6560
6617
  }
6561
6618
  });
6562
6619
  const outstandingToolResults = /* @__PURE__ */ new Set();
6563
- const toolInputs = /* @__PURE__ */ new Map();
6564
6620
  const toolCallsByToolCallId = /* @__PURE__ */ new Map();
6565
6621
  let canClose = false;
6566
6622
  let finishChunk = void 0;
@@ -6692,7 +6748,6 @@ function runToolsTransformation({
6692
6748
  });
6693
6749
  break;
6694
6750
  }
6695
- toolInputs.set(toolCall.toolCallId, toolCall.input);
6696
6751
  if (tool2.execute != null && toolCall.providerExecuted !== true) {
6697
6752
  const toolExecutionId = generateId2();
6698
6753
  outstandingToolResults.add(toolExecutionId);
@@ -6736,7 +6791,7 @@ function runToolsTransformation({
6736
6791
  type: "tool-error",
6737
6792
  toolCallId: chunk.toolCallId,
6738
6793
  toolName,
6739
- input: toolInputs.get(chunk.toolCallId),
6794
+ input: toolCall == null ? void 0 : toolCall.input,
6740
6795
  providerExecuted: true,
6741
6796
  error: chunk.result,
6742
6797
  dynamic: chunk.dynamic,
@@ -6748,7 +6803,7 @@ function runToolsTransformation({
6748
6803
  type: "tool-result",
6749
6804
  toolCallId: chunk.toolCallId,
6750
6805
  toolName,
6751
- input: toolInputs.get(chunk.toolCallId),
6806
+ input: toolCall == null ? void 0 : toolCall.input,
6752
6807
  output: chunk.result,
6753
6808
  providerExecuted: true,
6754
6809
  dynamic: chunk.dynamic,
@@ -7548,18 +7603,21 @@ var DefaultStreamTextResult = class {
7548
7603
  }) {
7549
7604
  var _a22, _b, _c, _d, _e, _f, _g, _h, _i;
7550
7605
  const includeRawChunks2 = self.includeRawChunks;
7551
- const stepTimeoutId = stepTimeoutMs != null ? setTimeout(() => stepAbortController.abort(), stepTimeoutMs) : void 0;
7606
+ const stepTimeoutId = setAbortTimeout({
7607
+ abortController: stepAbortController,
7608
+ label: "Step",
7609
+ timeoutMs: stepTimeoutMs
7610
+ });
7552
7611
  let chunkTimeoutId = void 0;
7553
7612
  function resetChunkTimeout() {
7554
- if (chunkTimeoutMs != null) {
7555
- if (chunkTimeoutId != null) {
7556
- clearTimeout(chunkTimeoutId);
7557
- }
7558
- chunkTimeoutId = setTimeout(
7559
- () => chunkAbortController.abort(),
7560
- chunkTimeoutMs
7561
- );
7613
+ if (chunkTimeoutId != null) {
7614
+ clearTimeout(chunkTimeoutId);
7562
7615
  }
7616
+ chunkTimeoutId = setAbortTimeout({
7617
+ abortController: chunkAbortController,
7618
+ label: "Chunk",
7619
+ timeoutMs: chunkTimeoutMs
7620
+ });
7563
7621
  }
7564
7622
  function clearChunkTimeout() {
7565
7623
  if (chunkTimeoutId != null) {
@@ -7572,6 +7630,8 @@ var DefaultStreamTextResult = class {
7572
7630
  clearTimeout(stepTimeoutId);
7573
7631
  }
7574
7632
  }
7633
+ abortSignal == null ? void 0 : abortSignal.addEventListener("abort", clearStepTimeout);
7634
+ abortSignal == null ? void 0 : abortSignal.addEventListener("abort", clearChunkTimeout);
7575
7635
  try {
7576
7636
  stepFinish = new import_provider_utils20.DelayedPromise();
7577
7637
  const stepInputMessages = [...initialMessages, ...responseMessages];
@@ -8067,9 +8127,10 @@ var DefaultStreamTextResult = class {
8067
8127
  })
8068
8128
  )
8069
8129
  );
8070
- } finally {
8130
+ } catch (error) {
8071
8131
  clearStepTimeout();
8072
8132
  clearChunkTimeout();
8133
+ throw error;
8073
8134
  }
8074
8135
  }
8075
8136
  await streamStep({
@@ -8987,10 +9048,12 @@ async function convertToModelMessages(messages, options) {
8987
9048
  throw new Error(`Unsupported part: ${_exhaustiveCheck}`);
8988
9049
  }
8989
9050
  }
8990
- modelMessages.push({
8991
- role: "assistant",
8992
- content
8993
- });
9051
+ if (content.length > 0) {
9052
+ modelMessages.push({
9053
+ role: "assistant",
9054
+ content
9055
+ });
9056
+ }
8994
9057
  const toolParts = block.filter(
8995
9058
  (part) => {
8996
9059
  var _a23;
@@ -9021,7 +9084,7 @@ async function convertToModelMessages(messages, options) {
9021
9084
  toolName: getToolName(toolPart),
9022
9085
  output: {
9023
9086
  type: "error-text",
9024
- value: (_g = (_f = toolPart.approval) == null ? void 0 : _f.reason) != null ? _g : "Tool execution denied."
9087
+ value: (_g = (_f = toolPart.approval) == null ? void 0 : _f.reason) != null ? _g : "Tool call execution denied."
9025
9088
  },
9026
9089
  ...toolPart.callProviderMetadata != null ? { providerOptions: toolPart.callProviderMetadata } : {}
9027
9090
  });
@@ -12093,6 +12156,9 @@ function defaultSettingsMiddleware({
12093
12156
  function defaultTransform(text2) {
12094
12157
  return text2.replace(/^```(?:json)?\s*\n?/, "").replace(/\n?```\s*$/, "").trim();
12095
12158
  }
12159
+ function stripMarkdownCodeFenceSuffix(text2) {
12160
+ return text2.replace(/\n?```\s*$/, "").trimEnd();
12161
+ }
12096
12162
  function extractJsonMiddleware(options) {
12097
12163
  var _a22;
12098
12164
  const transform = (_a22 = options == null ? void 0 : options.transform) != null ? _a22 : defaultTransform;
@@ -12187,9 +12253,11 @@ function extractJsonMiddleware(options) {
12187
12253
  if (block.phase === "buffering") {
12188
12254
  remaining = transform(remaining);
12189
12255
  } else if (block.prefixStripped) {
12190
- remaining = remaining.replace(/\n?```\s*$/, "").trimEnd();
12191
- } else {
12256
+ remaining = stripMarkdownCodeFenceSuffix(remaining);
12257
+ } else if (block.phase === "prefix") {
12192
12258
  remaining = transform(remaining);
12259
+ } else {
12260
+ remaining = stripMarkdownCodeFenceSuffix(remaining);
12193
12261
  }
12194
12262
  if (remaining.length > 0) {
12195
12263
  controller.enqueue({
@@ -13582,7 +13650,7 @@ var AbstractChat = class {
13582
13650
  const updatePart = (part) => isToolUIPart(part) && part.state === "approval-requested" && part.approval.id === id ? {
13583
13651
  ...part,
13584
13652
  state: "approval-responded",
13585
- approval: { id, approved, reason }
13653
+ approval: { ...part.approval, id, approved, reason }
13586
13654
  } : part;
13587
13655
  this.state.replaceMessage(messages.length - 1, {
13588
13656
  ...lastMessage,
@@ -14054,6 +14122,7 @@ var TextStreamChatTransport = class extends HttpChatTransport {
14054
14122
  hasToolCall,
14055
14123
  isDataUIPart,
14056
14124
  isDeepEqualData,
14125
+ isDynamicToolUIPart,
14057
14126
  isFileUIPart,
14058
14127
  isLoopFinished,
14059
14128
  isReasoningUIPart,