ai 7.0.34 → 7.0.36

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 (31) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/index.d.ts +26 -10
  3. package/dist/index.js +144 -47
  4. package/dist/index.js.map +1 -1
  5. package/dist/internal/index.d.ts +5 -2
  6. package/dist/internal/index.js +26 -3
  7. package/dist/internal/index.js.map +1 -1
  8. package/docs/03-ai-sdk-core/25-settings.mdx +15 -2
  9. package/docs/03-ai-sdk-core/65-devtools.mdx +6 -0
  10. package/docs/03-ai-sdk-harnesses/02-harness-agent.mdx +42 -0
  11. package/docs/04-ai-sdk-ui/03-chatbot-tool-usage.mdx +29 -0
  12. package/docs/04-ai-sdk-ui/21-error-handling.mdx +10 -4
  13. package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +4 -4
  14. package/docs/07-reference/01-ai-sdk-core/16-tool-loop-agent.mdx +10 -8
  15. package/docs/07-reference/02-ai-sdk-ui/42-pipe-ui-message-stream-to-response.mdx +6 -1
  16. package/docs/08-migration-guides/24-migration-guide-6-0.mdx +28 -0
  17. package/package.json +2 -2
  18. package/src/agent/agent.ts +4 -1
  19. package/src/agent/pipe-agent-ui-stream-to-response.ts +1 -1
  20. package/src/generate-object/stream-object-result.ts +4 -1
  21. package/src/generate-object/stream-object.ts +1 -1
  22. package/src/generate-text/generate-text-events.ts +2 -1
  23. package/src/generate-text/stream-text-result.ts +5 -2
  24. package/src/generate-text/stream-text.ts +113 -33
  25. package/src/generate-text/tool-approval-signature.ts +54 -2
  26. package/src/prompt/index.ts +1 -0
  27. package/src/prompt/request-options.ts +20 -2
  28. package/src/text-stream/pipe-text-stream-to-response.ts +3 -2
  29. package/src/ui-message-stream/pipe-ui-message-stream-to-response.ts +3 -2
  30. package/src/util/create-stitchable-stream.ts +41 -15
  31. package/src/util/write-to-server-response.ts +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # ai
2
2
 
3
+ ## 7.0.36
4
+
5
+ ### Patch Changes
6
+
7
+ - 7fa85b2: fix(ai): use injective serialization for tool approval HMAC payload
8
+
9
+ The tool approval signature (`experimental_toolApprovalSecret`) built its HMAC
10
+ payload by joining fields with `\n`. Because fields such as `toolName` and
11
+ `toolCallId` can themselves contain a newline, distinct field tuples could
12
+ serialize to identical bytes, allowing a signed approval to verify against a
13
+ different tuple. The payload is now serialized with `JSON.stringify` (with a
14
+ versioned domain-separation prefix), which escapes delimiter/control characters
15
+ and makes the encoding injective.
16
+
17
+ Verification remains backwards compatible: a signature in the old format still
18
+ verifies, but only when no field contains the `\n` delimiter (the condition
19
+ that made the old format ambiguous), so a pending approval that straddles an
20
+ upgrade is not rejected while the collision stays closed.
21
+
22
+ ## 7.0.35
23
+
24
+ ### Patch Changes
25
+
26
+ - 7f6650b: Return response piping promises so callers can catch stream read and write errors.
27
+ - 106ea59: feat(ai): add per-step first content timeout for streaming generations
28
+ - Updated dependencies [2112ff1]
29
+ - @ai-sdk/gateway@4.0.27
30
+
3
31
  ## 7.0.34
4
32
 
5
33
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -589,13 +589,15 @@ type LanguageModelCallOptions = {
589
589
  * - A number representing milliseconds
590
590
  * - An object with `totalMs` property for the total timeout in milliseconds
591
591
  * - An object with `stepMs` property for the timeout of each step in milliseconds
592
- * - An object with `chunkMs` property for the timeout between stream chunks (streaming only)
592
+ * - An object with `firstChunkMs` property for the timeout until the first content chunk of each step (streaming only)
593
+ * - An object with `chunkMs` property for the timeout between content chunks (streaming only)
593
594
  * - An object with `toolMs` property for the default timeout for all tool executions
594
595
  * - An object with `tools` property for per-tool timeout overrides using `{toolName}Ms` keys
595
596
  */
596
597
  type TimeoutConfiguration<TOOLS extends ToolSet> = number | {
597
598
  totalMs?: number;
598
599
  stepMs?: number;
600
+ firstChunkMs?: number;
599
601
  chunkMs?: number;
600
602
  toolMs?: number;
601
603
  tools?: Partial<Record<`${keyof TOOLS & string}Ms`, number>>;
@@ -614,9 +616,17 @@ declare function getTotalTimeoutMs(timeout: TimeoutConfiguration<any> | undefine
614
616
  * @returns The step timeout in milliseconds, or undefined if no step timeout is configured.
615
617
  */
616
618
  declare function getStepTimeoutMs(timeout: TimeoutConfiguration<any> | undefined): number | undefined;
619
+ /**
620
+ * Extracts the first chunk timeout value in milliseconds from a TimeoutConfiguration.
621
+ * This timeout is for streaming only - it aborts if no content chunk is received within the specified duration.
622
+ *
623
+ * @param timeout - The timeout configuration.
624
+ * @returns The first chunk timeout in milliseconds, or undefined if no first chunk timeout is configured.
625
+ */
626
+ declare function getFirstChunkTimeoutMs(timeout: TimeoutConfiguration<any> | undefined): number | undefined;
617
627
  /**
618
628
  * Extracts the chunk timeout value in milliseconds from a TimeoutConfiguration.
619
- * This timeout is for streaming only - it aborts if no new chunk is received within the specified duration.
629
+ * This timeout is for streaming only - it aborts if no new content chunk is received within the specified duration.
620
630
  *
621
631
  * @param timeout - The timeout configuration.
622
632
  * @returns The chunk timeout in milliseconds, or undefined if no chunk timeout is configured.
@@ -2758,7 +2768,7 @@ interface StreamTextResult<TOOLS extends ToolSet, RUNTIME_CONTEXT extends Contex
2758
2768
  * `pipeUIMessageStreamToResponse` helpers from `'ai'` with `result.stream`
2759
2769
  * instead. This method will be removed in the next major release.
2760
2770
  */
2761
- pipeUIMessageStreamToResponse<UI_MESSAGE extends UIMessage>(response: ServerResponse, options?: UIMessageStreamResponseInit & UIMessageStreamOptions<UI_MESSAGE>): void;
2771
+ pipeUIMessageStreamToResponse<UI_MESSAGE extends UIMessage>(response: ServerResponse, options?: UIMessageStreamResponseInit & UIMessageStreamOptions<UI_MESSAGE>): Promise<void>;
2762
2772
  /**
2763
2773
  * Writes text delta output to a Node.js response-like object.
2764
2774
  * It sets a `Content-Type` header to `text/plain; charset=utf-8` and
@@ -2771,7 +2781,7 @@ interface StreamTextResult<TOOLS extends ToolSet, RUNTIME_CONTEXT extends Contex
2771
2781
  * `pipeTextStreamToResponse` helpers from `'ai'` with `result.stream`
2772
2782
  * instead. This method will be removed in the next major release.
2773
2783
  */
2774
- pipeTextStreamToResponse(response: ServerResponse, init?: ResponseInit): void;
2784
+ pipeTextStreamToResponse(response: ServerResponse, init?: ResponseInit): Promise<void>;
2775
2785
  /**
2776
2786
  * Converts the result to a streamed response object with a stream data part stream.
2777
2787
  *
@@ -3778,7 +3788,8 @@ type GenerateTextStartEvent<TOOLS extends ToolSet = ToolSet, RUNTIME_CONTEXT ext
3778
3788
  readonly maxRetries: number;
3779
3789
  /**
3780
3790
  * Timeout configuration for the generation.
3781
- * Can be a number (milliseconds) or an object with totalMs, stepMs, chunkMs, toolMs, and per-tool overrides via tools.
3791
+ * Can be a number (milliseconds) or an object with totalMs, stepMs,
3792
+ * firstChunkMs (streaming only), chunkMs, toolMs, and per-tool overrides via tools.
3782
3793
  */
3783
3794
  readonly timeout: TimeoutConfiguration<TOOLS> | undefined;
3784
3795
  /** Additional HTTP headers sent with the request. */
@@ -4474,7 +4485,10 @@ type AgentCallParameters<CALL_OPTIONS, TOOLS extends ToolSet = {}, RUNTIME_CONTE
4474
4485
  */
4475
4486
  abortSignal?: AbortSignal;
4476
4487
  /**
4477
- * Timeout in milliseconds. Can be specified as a number or as an object with `totalMs`.
4488
+ * Timeout in milliseconds. Can be specified as a number or as an object
4489
+ * with total, per-step, first-content, inter-content, and tool timeouts.
4490
+ * First-content and inter-content timeouts are only enforced by streaming
4491
+ * calls.
4478
4492
  */
4479
4493
  timeout?: TimeoutConfiguration<TOOLS>;
4480
4494
  /**
@@ -5915,11 +5929,12 @@ declare class JsonToSseTransformStream extends TransformStream<unknown, string>
5915
5929
  * @param options.headers - Additional HTTP headers to include in the response.
5916
5930
  * @param options.stream - The UI message chunk stream to send.
5917
5931
  * @param options.consumeSseStream - Optional callback to consume a copy of the SSE stream independently.
5932
+ * @returns A promise that resolves when the stream has been written.
5918
5933
  */
5919
5934
  declare function pipeUIMessageStreamToResponse({ response, status, statusText, headers, stream, consumeSseStream, }: {
5920
5935
  response: ServerResponse;
5921
5936
  stream: ReadableStream<UIMessageChunk>;
5922
- } & UIMessageStreamResponseInit): void;
5937
+ } & UIMessageStreamResponseInit): Promise<void>;
5923
5938
 
5924
5939
  /**
5925
5940
  * Transforms a stream of `UIMessageChunk`s into an `AsyncIterableStream` of `UIMessage`s.
@@ -7369,7 +7384,7 @@ interface StreamObjectResult<PARTIAL, RESULT, ELEMENT_STREAM> {
7369
7384
  * @param response A Node.js response-like object (ServerResponse).
7370
7385
  * @param init Optional headers, status code, and status text.
7371
7386
  */
7372
- pipeTextStreamToResponse(response: ServerResponse$1, init?: ResponseInit): void;
7387
+ pipeTextStreamToResponse(response: ServerResponse$1, init?: ResponseInit): Promise<void>;
7373
7388
  /**
7374
7389
  * Creates a simple text stream response.
7375
7390
  * The response has a `Content-Type` header set to `text/plain; charset=utf-8`.
@@ -8512,11 +8527,12 @@ declare function createTextStreamResponse({ status, statusText, headers, stream,
8512
8527
  * @param options.statusText - Optional HTTP status text.
8513
8528
  * @param options.headers - Optional response headers.
8514
8529
  * @param options.stream - The text stream to pipe.
8530
+ * @returns A promise that resolves when the stream has been written.
8515
8531
  */
8516
8532
  declare function pipeTextStreamToResponse({ response, status, statusText, headers, stream, }: {
8517
8533
  response: ServerResponse;
8518
8534
  stream: ReadableStream<string>;
8519
- } & ResponseInit): void;
8535
+ } & ResponseInit): Promise<void>;
8520
8536
 
8521
8537
  /**
8522
8538
  * Converts a stream of `TextStreamPart` chunks into a stream of text deltas.
@@ -8827,4 +8843,4 @@ declare function uploadSkill({ api, files, displayTitle, providerOptions, }: {
8827
8843
  files: UploadSkillFile[];
8828
8844
  }): Promise<UploadSkillResult>;
8829
8845
 
8830
- export { AI_SDK_TELEMETRY_TRACING_CHANNEL, AbstractChat, ActiveTools, Agent, AgentCallParameters, AgentStreamParameters, AsyncIterableStream, CallSettings, CallWarning, ChatAddToolApproveResponseFunction, ChatAddToolOutputFunction, ChatInit, ChatOnDataCallback, ChatOnErrorCallback, ChatOnFinishCallback, ChatOnToolCallCallback, ChatRequestOptions, ChatState, ChatStatus, ChatTransport, ChunkDetector, CompletionRequestOptions, ContentPart, CreateUIMessage, CustomContentUIPart, DataUIPart, DeepPartial, DefaultChatTransport, DefaultGeneratedFile, DirectChatTransport, DirectChatTransportOptions, DynamicToolCall, DynamicToolError, DynamicToolResult, DynamicToolUIPart, EmbedEndEvent, EmbedManyResult, EmbedResult, EmbedStartEvent, Embedding, EmbeddingModel, EmbeddingModelCallEndEvent, EmbeddingModelCallStartEvent, EmbeddingModelMiddleware, EmbeddingModelUsage, ErrorHandler, AbstractRealtimeSession as Experimental_AbstractRealtimeSession, ToolLoopAgent as Experimental_Agent, ToolLoopAgentSettings as Experimental_AgentSettings, DownloadFunction as Experimental_DownloadFunction, GeneratedFile as Experimental_GeneratedImage, InferAgentUIMessage as Experimental_InferAgentUIMessage, LanguageModelStreamPart as Experimental_LanguageModelStreamPart, LogWarningsFunction as Experimental_LogWarningsFunction, RealtimeClientEvent as Experimental_RealtimeClientEvent, RealtimeFactory as Experimental_RealtimeFactory, RealtimeFactoryGetTokenOptions as Experimental_RealtimeFactoryGetTokenOptions, RealtimeFactoryGetTokenResult as Experimental_RealtimeFactoryGetTokenResult, RealtimeModel as Experimental_RealtimeModel, RealtimeServerEvent as Experimental_RealtimeServerEvent, RealtimeSessionConfig as Experimental_RealtimeSessionConfig, RealtimeSessionOptions as Experimental_RealtimeSessionOptions, RealtimeSetupResponse as Experimental_RealtimeSetupResponse, RealtimeState as Experimental_RealtimeState, RealtimeStatus as Experimental_RealtimeStatus, RealtimeToolDefinition as Experimental_RealtimeToolDefinition, Experimental_SpeechResult, Experimental_TranscriptionResult, FileUIPart, FinishReason, GenerateImageResult, GenerateObjectEndEvent, GenerateObjectResult, GenerateObjectStartEvent, GenerateObjectStepEndEvent, GenerateObjectStepStartEvent, GenerateTextAbortEvent, GenerateTextEndEvent, GenerateTextInclude, GenerateTextOnAbortCallback, GenerateTextOnEndCallback, GenerateTextOnFinishCallback, GenerateTextOnStartCallback, GenerateTextOnStepEndCallback, GenerateTextOnStepFinishCallback, GenerateTextOnStepStartCallback, GenerateTextResult, GenerateTextStartEvent, GenerateTextStepEndEvent, GenerateTextStepStartEvent, GenerateVideoPrompt, GenerateVideoResult, GeneratedAudioFile, GeneratedFile, GenericToolApprovalFunction, HttpChatTransport, HttpChatTransportInitOptions, ImageModel, ImageModelMiddleware, ImageModelProviderMetadata, ImageModelResponseMetadata, ImageModelUsage, InferAgentUIMessage, InferCompleteOutput as InferGenerateOutput, InferPartialOutput as InferStreamOutput, InferTelemetryEvent, InferUIDataParts, InferUIMessageChunk, InferUITool, InferUITools, Instructions, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidStreamPartError, InvalidToolApprovalError, InvalidToolApprovalSignatureError, InvalidToolInputError, JSONValue, JsonToSseTransformStream, LanguageModel, LanguageModelCallEndEvent, LanguageModelCallOptions, LanguageModelCallStartEvent, LanguageModelMiddleware, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, LogWarningsFunction, MessageConversionError, MissingToolResultsError, ModelInfo, NoImageGeneratedError, NoObjectGeneratedError, NoOutputGeneratedError, NoSpeechGeneratedError, NoSuchProviderError, NoSuchToolError, NoTranscriptGeneratedError, NoVideoGeneratedError, ObjectStreamPart, OnFinishEvent, OnLanguageModelCallEndCallback, OnLanguageModelCallStartCallback, OnStartEvent, OnStepFinishEvent, OnStepStartEvent, OnToolCallFinishEvent, OnToolCallStartEvent, OnToolExecutionEndCallback, OnToolExecutionStartCallback, output as Output, OutputChunkTimingStats, PrepareReconnectToStreamRequest, PrepareSendMessagesRequest, PrepareStepFunction, PrepareStepResult, Prompt, Provider, ProviderMetadata, ProviderReference, ProviderRegistryProvider, ReasoningFileOutput, ReasoningFileUIPart, ReasoningOutput, ReasoningUIPart, RepairTextFunction, RequestOptions, RerankEndEvent, RerankResult, RerankStartEvent, RerankingModel, RerankingModelCallEndEvent, RerankingModelCallStartEvent, RetryError, SafeValidateUIMessagesResult, SerialJobExecutor, SingleToolApprovalFunction, SourceDocumentUIPart, SourceUrlUIPart, SpeechModel, SpeechModelResponseMetadata, SpeechResult, StaticToolCall, StaticToolError, StaticToolOutputDenied, StaticToolResult, StepResult, StepResultPerformance, StepStartUIPart, StopCondition, StreamObjectOnFinishCallback, StreamObjectResult, StreamTextInclude, StreamTextOnChunkCallback, StreamTextOnErrorCallback, StreamTextResult, StreamTextTransform, StreamTranscriptionResult, Telemetry, TelemetryOptions, TelemetryTracingChannelMessage, TelemetryTracingEventType, TextStreamChatTransport, TextStreamPart, TextUIPart, TimeoutConfiguration, ToUIMessageChunkOptions, ToolApprovalConfiguration, ToolApprovalRequestOutput, ToolApprovalResponseOutput, ToolApprovalStatus, ToolCallNotFoundForApprovalError, ToolCallRepairError, ToolCallRepairFunction, ToolChoice, ToolExecutionEndEvent, ToolExecutionStartEvent, ToolInputRefinement, ToolLoopAgent, ToolLoopAgentSettings, ToolOrder, ToolUIPart, TranscriptionModel, TranscriptionModelResponseMetadata, TranscriptionResult, TranscriptionStreamPart, TypedToolCall, TypedToolError, TypedToolOutputDenied, TypedToolResult, UIDataPartSchemas, UIDataTypes, UIMessage, UIMessageChunk, UIMessagePart, UIMessageStreamError, UIMessageStreamOnEndCallback, UIMessageStreamOnFinishCallback, UIMessageStreamOnStepEndCallback, UIMessageStreamOnStepFinishCallback, UIMessageStreamOptions, UIMessageStreamWriter, UITool, UIToolInvocation, UITools, UI_MESSAGE_STREAM_HEADERS, UnsupportedModelVersionError, UploadFileResult, UploadSkillResult, UseCompletionOptions, Warning, addToolInputExamplesMiddleware, assistantModelMessageSchema, callCompletionApi, consumeStream, convertDataContentToBase64String, convertFileListToFileUIParts, convertToModelMessages, cosineSimilarity, createAgentUIStream, createAgentUIStreamResponse, createDownload, createProviderRegistry, createTextStreamResponse, createUIMessageStream, createUIMessageStreamResponse, customProvider, defaultEmbeddingSettingsMiddleware, defaultSettingsMiddleware, detectToolDrift, embed, embedMany, experimental_createProviderRegistry, decodeRealtimeAudio as experimental_decodeRealtimeAudio, encodeRealtimeAudio as experimental_encodeRealtimeAudio, filterActiveTools as experimental_filterActiveTools, experimental_generateSpeech, experimental_generateVideo, getRealtimeToolDefinitions as experimental_getRealtimeToolDefinitions, resampleAudio as experimental_resampleAudio, streamLanguageModelCall as experimental_streamLanguageModelCall, streamTranscribe as experimental_streamTranscribe, experimental_transcribe, extractJsonMiddleware, extractReasoningMiddleware, fingerprintTools, generateImage, generateObject, generateSpeech, generateText, getChunkTimeoutMs, getStaticToolName, getStepTimeoutMs, getTextFromDataUrl, getToolName, getToolOrDynamicToolName, getToolTimeoutMs, getTotalTimeoutMs, hasToolCall, isCustomContentUIPart, isDataUIPart, isDeepEqualData, isDynamicToolUIPart, isFileUIPart, isLoopFinished, isReasoningFileUIPart, isReasoningUIPart, isStaticToolUIPart, isStepCount, isTextUIPart, isToolUIPart, lastAssistantMessageIsCompleteWithApprovalResponses, lastAssistantMessageIsCompleteWithToolCalls, modelMessageSchema, parsePartialJson, pipeAgentUIStreamToResponse, pipeTextStreamToResponse, pipeUIMessageStreamToResponse, pruneMessages, readUIMessageStream, registerTelemetry, rerank, safeValidateUIMessages, simulateReadableStream, simulateStreamingMiddleware, smoothStream, isStepCount as stepCountIs, streamObject, streamText, systemModelMessageSchema, toTextStream, toUIMessageChunk, toUIMessageStream, toolModelMessageSchema, transcribe, uiMessageChunkSchema, uploadFile, uploadSkill, userModelMessageSchema, validateUIMessages, wrapEmbeddingModel, wrapImageModel, wrapLanguageModel, wrapProvider };
8846
+ export { AI_SDK_TELEMETRY_TRACING_CHANNEL, AbstractChat, ActiveTools, Agent, AgentCallParameters, AgentStreamParameters, AsyncIterableStream, CallSettings, CallWarning, ChatAddToolApproveResponseFunction, ChatAddToolOutputFunction, ChatInit, ChatOnDataCallback, ChatOnErrorCallback, ChatOnFinishCallback, ChatOnToolCallCallback, ChatRequestOptions, ChatState, ChatStatus, ChatTransport, ChunkDetector, CompletionRequestOptions, ContentPart, CreateUIMessage, CustomContentUIPart, DataUIPart, DeepPartial, DefaultChatTransport, DefaultGeneratedFile, DirectChatTransport, DirectChatTransportOptions, DynamicToolCall, DynamicToolError, DynamicToolResult, DynamicToolUIPart, EmbedEndEvent, EmbedManyResult, EmbedResult, EmbedStartEvent, Embedding, EmbeddingModel, EmbeddingModelCallEndEvent, EmbeddingModelCallStartEvent, EmbeddingModelMiddleware, EmbeddingModelUsage, ErrorHandler, AbstractRealtimeSession as Experimental_AbstractRealtimeSession, ToolLoopAgent as Experimental_Agent, ToolLoopAgentSettings as Experimental_AgentSettings, DownloadFunction as Experimental_DownloadFunction, GeneratedFile as Experimental_GeneratedImage, InferAgentUIMessage as Experimental_InferAgentUIMessage, LanguageModelStreamPart as Experimental_LanguageModelStreamPart, LogWarningsFunction as Experimental_LogWarningsFunction, RealtimeClientEvent as Experimental_RealtimeClientEvent, RealtimeFactory as Experimental_RealtimeFactory, RealtimeFactoryGetTokenOptions as Experimental_RealtimeFactoryGetTokenOptions, RealtimeFactoryGetTokenResult as Experimental_RealtimeFactoryGetTokenResult, RealtimeModel as Experimental_RealtimeModel, RealtimeServerEvent as Experimental_RealtimeServerEvent, RealtimeSessionConfig as Experimental_RealtimeSessionConfig, RealtimeSessionOptions as Experimental_RealtimeSessionOptions, RealtimeSetupResponse as Experimental_RealtimeSetupResponse, RealtimeState as Experimental_RealtimeState, RealtimeStatus as Experimental_RealtimeStatus, RealtimeToolDefinition as Experimental_RealtimeToolDefinition, Experimental_SpeechResult, Experimental_TranscriptionResult, FileUIPart, FinishReason, GenerateImageResult, GenerateObjectEndEvent, GenerateObjectResult, GenerateObjectStartEvent, GenerateObjectStepEndEvent, GenerateObjectStepStartEvent, GenerateTextAbortEvent, GenerateTextEndEvent, GenerateTextInclude, GenerateTextOnAbortCallback, GenerateTextOnEndCallback, GenerateTextOnFinishCallback, GenerateTextOnStartCallback, GenerateTextOnStepEndCallback, GenerateTextOnStepFinishCallback, GenerateTextOnStepStartCallback, GenerateTextResult, GenerateTextStartEvent, GenerateTextStepEndEvent, GenerateTextStepStartEvent, GenerateVideoPrompt, GenerateVideoResult, GeneratedAudioFile, GeneratedFile, GenericToolApprovalFunction, HttpChatTransport, HttpChatTransportInitOptions, ImageModel, ImageModelMiddleware, ImageModelProviderMetadata, ImageModelResponseMetadata, ImageModelUsage, InferAgentUIMessage, InferCompleteOutput as InferGenerateOutput, InferPartialOutput as InferStreamOutput, InferTelemetryEvent, InferUIDataParts, InferUIMessageChunk, InferUITool, InferUITools, Instructions, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidStreamPartError, InvalidToolApprovalError, InvalidToolApprovalSignatureError, InvalidToolInputError, JSONValue, JsonToSseTransformStream, LanguageModel, LanguageModelCallEndEvent, LanguageModelCallOptions, LanguageModelCallStartEvent, LanguageModelMiddleware, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, LogWarningsFunction, MessageConversionError, MissingToolResultsError, ModelInfo, NoImageGeneratedError, NoObjectGeneratedError, NoOutputGeneratedError, NoSpeechGeneratedError, NoSuchProviderError, NoSuchToolError, NoTranscriptGeneratedError, NoVideoGeneratedError, ObjectStreamPart, OnFinishEvent, OnLanguageModelCallEndCallback, OnLanguageModelCallStartCallback, OnStartEvent, OnStepFinishEvent, OnStepStartEvent, OnToolCallFinishEvent, OnToolCallStartEvent, OnToolExecutionEndCallback, OnToolExecutionStartCallback, output as Output, OutputChunkTimingStats, PrepareReconnectToStreamRequest, PrepareSendMessagesRequest, PrepareStepFunction, PrepareStepResult, Prompt, Provider, ProviderMetadata, ProviderReference, ProviderRegistryProvider, ReasoningFileOutput, ReasoningFileUIPart, ReasoningOutput, ReasoningUIPart, RepairTextFunction, RequestOptions, RerankEndEvent, RerankResult, RerankStartEvent, RerankingModel, RerankingModelCallEndEvent, RerankingModelCallStartEvent, RetryError, SafeValidateUIMessagesResult, SerialJobExecutor, SingleToolApprovalFunction, SourceDocumentUIPart, SourceUrlUIPart, SpeechModel, SpeechModelResponseMetadata, SpeechResult, StaticToolCall, StaticToolError, StaticToolOutputDenied, StaticToolResult, StepResult, StepResultPerformance, StepStartUIPart, StopCondition, StreamObjectOnFinishCallback, StreamObjectResult, StreamTextInclude, StreamTextOnChunkCallback, StreamTextOnErrorCallback, StreamTextResult, StreamTextTransform, StreamTranscriptionResult, Telemetry, TelemetryOptions, TelemetryTracingChannelMessage, TelemetryTracingEventType, TextStreamChatTransport, TextStreamPart, TextUIPart, TimeoutConfiguration, ToUIMessageChunkOptions, ToolApprovalConfiguration, ToolApprovalRequestOutput, ToolApprovalResponseOutput, ToolApprovalStatus, ToolCallNotFoundForApprovalError, ToolCallRepairError, ToolCallRepairFunction, ToolChoice, ToolExecutionEndEvent, ToolExecutionStartEvent, ToolInputRefinement, ToolLoopAgent, ToolLoopAgentSettings, ToolOrder, ToolUIPart, TranscriptionModel, TranscriptionModelResponseMetadata, TranscriptionResult, TranscriptionStreamPart, TypedToolCall, TypedToolError, TypedToolOutputDenied, TypedToolResult, UIDataPartSchemas, UIDataTypes, UIMessage, UIMessageChunk, UIMessagePart, UIMessageStreamError, UIMessageStreamOnEndCallback, UIMessageStreamOnFinishCallback, UIMessageStreamOnStepEndCallback, UIMessageStreamOnStepFinishCallback, UIMessageStreamOptions, UIMessageStreamWriter, UITool, UIToolInvocation, UITools, UI_MESSAGE_STREAM_HEADERS, UnsupportedModelVersionError, UploadFileResult, UploadSkillResult, UseCompletionOptions, Warning, addToolInputExamplesMiddleware, assistantModelMessageSchema, callCompletionApi, consumeStream, convertDataContentToBase64String, convertFileListToFileUIParts, convertToModelMessages, cosineSimilarity, createAgentUIStream, createAgentUIStreamResponse, createDownload, createProviderRegistry, createTextStreamResponse, createUIMessageStream, createUIMessageStreamResponse, customProvider, defaultEmbeddingSettingsMiddleware, defaultSettingsMiddleware, detectToolDrift, embed, embedMany, experimental_createProviderRegistry, decodeRealtimeAudio as experimental_decodeRealtimeAudio, encodeRealtimeAudio as experimental_encodeRealtimeAudio, filterActiveTools as experimental_filterActiveTools, experimental_generateSpeech, experimental_generateVideo, getRealtimeToolDefinitions as experimental_getRealtimeToolDefinitions, resampleAudio as experimental_resampleAudio, streamLanguageModelCall as experimental_streamLanguageModelCall, streamTranscribe as experimental_streamTranscribe, experimental_transcribe, extractJsonMiddleware, extractReasoningMiddleware, fingerprintTools, generateImage, generateObject, generateSpeech, generateText, getChunkTimeoutMs, getFirstChunkTimeoutMs, getStaticToolName, getStepTimeoutMs, getTextFromDataUrl, getToolName, getToolOrDynamicToolName, getToolTimeoutMs, getTotalTimeoutMs, hasToolCall, isCustomContentUIPart, isDataUIPart, isDeepEqualData, isDynamicToolUIPart, isFileUIPart, isLoopFinished, isReasoningFileUIPart, isReasoningUIPart, isStaticToolUIPart, isStepCount, isTextUIPart, isToolUIPart, lastAssistantMessageIsCompleteWithApprovalResponses, lastAssistantMessageIsCompleteWithToolCalls, modelMessageSchema, parsePartialJson, pipeAgentUIStreamToResponse, pipeTextStreamToResponse, pipeUIMessageStreamToResponse, pruneMessages, readUIMessageStream, registerTelemetry, rerank, safeValidateUIMessages, simulateReadableStream, simulateStreamingMiddleware, smoothStream, isStepCount as stepCountIs, streamObject, streamText, systemModelMessageSchema, toTextStream, toUIMessageChunk, toUIMessageStream, toolModelMessageSchema, transcribe, uiMessageChunkSchema, uploadFile, uploadSkill, userModelMessageSchema, validateUIMessages, wrapEmbeddingModel, wrapImageModel, wrapLanguageModel, wrapProvider };
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.34" : "0.0.0-test";
1092
+ var VERSION = true ? "7.0.36" : "0.0.0-test";
1093
1093
 
1094
1094
  // src/util/download/download.ts
1095
1095
  var download = async ({
@@ -2147,6 +2147,12 @@ function getStepTimeoutMs(timeout) {
2147
2147
  }
2148
2148
  return timeout.stepMs;
2149
2149
  }
2150
+ function getFirstChunkTimeoutMs(timeout) {
2151
+ if (timeout == null || typeof timeout === "number") {
2152
+ return void 0;
2153
+ }
2154
+ return timeout.firstChunkMs;
2155
+ }
2150
2156
  function getChunkTimeoutMs(timeout) {
2151
2157
  if (timeout == null || typeof timeout === "number") {
2152
2158
  return void 0;
@@ -4847,6 +4853,17 @@ async function importKey(secret) {
4847
4853
  );
4848
4854
  }
4849
4855
  function buildPayload(approvalId, toolCallId, toolName, inputDigest) {
4856
+ return encoder2.encode(
4857
+ JSON.stringify([
4858
+ "ai-sdk-tool-approval-v1",
4859
+ approvalId,
4860
+ toolCallId,
4861
+ toolName,
4862
+ inputDigest
4863
+ ])
4864
+ );
4865
+ }
4866
+ function buildLegacyPayload(approvalId, toolCallId, toolName, inputDigest) {
4850
4867
  return encoder2.encode(
4851
4868
  `${approvalId}
4852
4869
  ${toolCallId}
@@ -4877,9 +4894,21 @@ async function verifyToolApprovalSignature({
4877
4894
  }) {
4878
4895
  const key = await importKey(secret);
4879
4896
  const inputDigest = await hashCanonical(input);
4880
- const payload = buildPayload(approvalId, toolCallId, toolName, inputDigest);
4881
4897
  const sigBytes = fromBase64url(signature);
4882
- return crypto.subtle.verify("HMAC", key, sigBytes, payload);
4898
+ const payload = buildPayload(approvalId, toolCallId, toolName, inputDigest);
4899
+ if (await crypto.subtle.verify("HMAC", key, sigBytes, payload)) {
4900
+ return true;
4901
+ }
4902
+ if (!approvalId.includes("\n") && !toolCallId.includes("\n") && !toolName.includes("\n")) {
4903
+ const legacyPayload = buildLegacyPayload(
4904
+ approvalId,
4905
+ toolCallId,
4906
+ toolName,
4907
+ inputDigest
4908
+ );
4909
+ return crypto.subtle.verify("HMAC", key, sigBytes, legacyPayload);
4910
+ }
4911
+ return false;
4883
4912
  }
4884
4913
  async function maybeSignApproval({
4885
4914
  secret,
@@ -6128,7 +6157,7 @@ function writeToServerResponse({
6128
6157
  response.end();
6129
6158
  }
6130
6159
  };
6131
- read();
6160
+ return read();
6132
6161
  }
6133
6162
 
6134
6163
  // src/text-stream/pipe-text-stream-to-response.ts
@@ -6139,7 +6168,7 @@ function pipeTextStreamToResponse({
6139
6168
  headers,
6140
6169
  stream
6141
6170
  }) {
6142
- writeToServerResponse({
6171
+ return writeToServerResponse({
6143
6172
  response,
6144
6173
  status,
6145
6174
  statusText,
@@ -6229,7 +6258,7 @@ function pipeUIMessageStreamToResponse({
6229
6258
  sseStream = stream1;
6230
6259
  consumeSseStream({ stream: stream2 });
6231
6260
  }
6232
- writeToServerResponse({
6261
+ return writeToServerResponse({
6233
6262
  response,
6234
6263
  status,
6235
6264
  statusText,
@@ -7665,32 +7694,37 @@ function createResolvablePromise() {
7665
7694
 
7666
7695
  // src/util/create-stitchable-stream.ts
7667
7696
  function createStitchableStream() {
7668
- let innerStreamReaders = [];
7697
+ let innerStreams = [];
7669
7698
  let controller = null;
7670
7699
  let isClosed = false;
7671
7700
  let waitForNewStream = createResolvablePromise();
7672
7701
  const terminate = () => {
7673
7702
  isClosed = true;
7674
7703
  waitForNewStream.resolve();
7675
- innerStreamReaders.forEach((reader) => reader.cancel());
7676
- innerStreamReaders = [];
7704
+ innerStreams.forEach(({ reader, onCancel }) => {
7705
+ onCancel == null ? void 0 : onCancel();
7706
+ reader.cancel();
7707
+ });
7708
+ innerStreams = [];
7677
7709
  controller == null ? void 0 : controller.close();
7678
7710
  };
7679
7711
  const processPull = async () => {
7680
- if (isClosed && innerStreamReaders.length === 0) {
7712
+ var _a22;
7713
+ if (isClosed && innerStreams.length === 0) {
7681
7714
  controller == null ? void 0 : controller.close();
7682
7715
  return;
7683
7716
  }
7684
- if (innerStreamReaders.length === 0) {
7717
+ if (innerStreams.length === 0) {
7685
7718
  waitForNewStream = createResolvablePromise();
7686
7719
  await waitForNewStream.promise;
7687
7720
  return await processPull();
7688
7721
  }
7722
+ const currentStream = innerStreams[0];
7689
7723
  try {
7690
- const { value, done } = await innerStreamReaders[0].read();
7724
+ const { value, done } = await currentStream.reader.read();
7691
7725
  if (done) {
7692
- innerStreamReaders.shift();
7693
- if (innerStreamReaders.length === 0 && isClosed) {
7726
+ innerStreams.shift();
7727
+ if (innerStreams.length === 0 && isClosed) {
7694
7728
  controller == null ? void 0 : controller.close();
7695
7729
  } else {
7696
7730
  await processPull();
@@ -7699,8 +7733,9 @@ function createStitchableStream() {
7699
7733
  controller == null ? void 0 : controller.enqueue(value);
7700
7734
  }
7701
7735
  } catch (error) {
7736
+ (_a22 = currentStream.onError) == null ? void 0 : _a22.call(currentStream, error);
7702
7737
  controller == null ? void 0 : controller.error(error);
7703
- innerStreamReaders.shift();
7738
+ innerStreams.shift();
7704
7739
  terminate();
7705
7740
  }
7706
7741
  };
@@ -7711,18 +7746,22 @@ function createStitchableStream() {
7711
7746
  },
7712
7747
  pull: processPull,
7713
7748
  async cancel() {
7714
- for (const reader of innerStreamReaders) {
7749
+ for (const { reader, onCancel } of innerStreams) {
7750
+ onCancel == null ? void 0 : onCancel();
7715
7751
  await reader.cancel();
7716
7752
  }
7717
- innerStreamReaders = [];
7753
+ innerStreams = [];
7718
7754
  isClosed = true;
7719
7755
  }
7720
7756
  }),
7721
- addStream: (innerStream) => {
7757
+ addStream: (innerStream, callbacks) => {
7722
7758
  if (isClosed) {
7723
7759
  throw new Error("Cannot add inner stream: outer stream is closed");
7724
7760
  }
7725
- innerStreamReaders.push(innerStream.getReader());
7761
+ innerStreams.push({
7762
+ reader: innerStream.getReader(),
7763
+ ...callbacks
7764
+ });
7726
7765
  waitForNewStream.resolve();
7727
7766
  },
7728
7767
  /**
@@ -7732,7 +7771,7 @@ function createStitchableStream() {
7732
7771
  close: () => {
7733
7772
  isClosed = true;
7734
7773
  waitForNewStream.resolve();
7735
- if (innerStreamReaders.length === 0) {
7774
+ if (innerStreams.length === 0) {
7736
7775
  controller == null ? void 0 : controller.close();
7737
7776
  }
7738
7777
  },
@@ -8443,23 +8482,23 @@ var originalGenerateCallId3 = createIdGenerator3({
8443
8482
  });
8444
8483
  var isOutputChunkType = {
8445
8484
  file: true,
8446
- custom: true,
8447
- source: true,
8448
- "text-start": true,
8449
- "text-end": true,
8485
+ custom: false,
8486
+ source: false,
8487
+ "text-start": false,
8488
+ "text-end": false,
8450
8489
  "text-delta": true,
8451
- "reasoning-start": true,
8452
- "reasoning-end": true,
8490
+ "reasoning-start": false,
8491
+ "reasoning-end": false,
8453
8492
  "reasoning-delta": true,
8454
8493
  "reasoning-file": true,
8455
- "tool-input-start": true,
8456
- "tool-input-end": true,
8494
+ "tool-input-start": false,
8495
+ "tool-input-end": false,
8457
8496
  "tool-input-delta": true,
8458
- "tool-approval-request": true,
8459
- "tool-approval-response": true,
8497
+ "tool-approval-request": false,
8498
+ "tool-approval-response": false,
8460
8499
  "tool-call": true,
8461
- "tool-result": true,
8462
- "tool-error": true,
8500
+ "tool-result": false,
8501
+ "tool-error": false,
8463
8502
  "tool-execution-end": false,
8464
8503
  "model-call-start": false,
8465
8504
  "model-call-response-metadata": false,
@@ -8467,6 +8506,24 @@ var isOutputChunkType = {
8467
8506
  error: false,
8468
8507
  raw: false
8469
8508
  };
8509
+ function isOutputChunk2(chunk) {
8510
+ if (!isOutputChunkType[chunk.type]) {
8511
+ return false;
8512
+ }
8513
+ switch (chunk.type) {
8514
+ case "text-delta":
8515
+ case "reasoning-delta":
8516
+ return chunk.text.length > 0;
8517
+ case "tool-input-delta":
8518
+ return chunk.delta.length > 0;
8519
+ case "file":
8520
+ case "reasoning-file":
8521
+ case "tool-call":
8522
+ return true;
8523
+ default:
8524
+ return false;
8525
+ }
8526
+ }
8470
8527
  function streamText({
8471
8528
  model,
8472
8529
  tools,
@@ -8532,8 +8589,10 @@ function streamText({
8532
8589
  var _a22, _b, _c, _d;
8533
8590
  const totalTimeoutMs = getTotalTimeoutMs(timeout);
8534
8591
  const stepTimeoutMs = getStepTimeoutMs(timeout);
8592
+ const firstChunkTimeoutMs = getFirstChunkTimeoutMs(timeout);
8535
8593
  const chunkTimeoutMs = getChunkTimeoutMs(timeout);
8536
8594
  const stepAbortController = stepTimeoutMs != null ? new AbortController() : void 0;
8595
+ const firstChunkAbortController = firstChunkTimeoutMs != null ? new AbortController() : void 0;
8537
8596
  const chunkAbortController = chunkTimeoutMs != null ? new AbortController() : void 0;
8538
8597
  const resolvedOnStart = onStart != null ? onStart : experimental_onStart;
8539
8598
  const resolvedOnStepStart = onStepStart != null ? onStepStart : experimental_onStepStart;
@@ -8552,10 +8611,13 @@ function streamText({
8552
8611
  abortSignal,
8553
8612
  totalTimeoutMs,
8554
8613
  stepAbortController == null ? void 0 : stepAbortController.signal,
8614
+ firstChunkAbortController == null ? void 0 : firstChunkAbortController.signal,
8555
8615
  chunkAbortController == null ? void 0 : chunkAbortController.signal
8556
8616
  ),
8557
8617
  stepTimeoutMs,
8558
8618
  stepAbortController,
8619
+ firstChunkTimeoutMs,
8620
+ firstChunkAbortController,
8559
8621
  chunkTimeoutMs,
8560
8622
  chunkAbortController,
8561
8623
  instructions,
@@ -8681,6 +8743,8 @@ var DefaultStreamTextResult = class {
8681
8743
  abortSignal,
8682
8744
  stepTimeoutMs,
8683
8745
  stepAbortController,
8746
+ firstChunkTimeoutMs,
8747
+ firstChunkAbortController,
8684
8748
  chunkTimeoutMs,
8685
8749
  chunkAbortController,
8686
8750
  instructions,
@@ -9246,6 +9310,23 @@ var DefaultStreamTextResult = class {
9246
9310
  label: "Step",
9247
9311
  timeoutMs: stepTimeoutMs
9248
9312
  });
9313
+ let firstChunkTimeoutId = void 0;
9314
+ function startFirstChunkTimeout() {
9315
+ if (abortSignal == null ? void 0 : abortSignal.aborted) {
9316
+ return;
9317
+ }
9318
+ firstChunkTimeoutId = setAbortTimeout({
9319
+ abortController: firstChunkAbortController,
9320
+ label: "First chunk",
9321
+ timeoutMs: firstChunkTimeoutMs
9322
+ });
9323
+ }
9324
+ function clearFirstChunkTimeout() {
9325
+ if (firstChunkTimeoutId != null) {
9326
+ clearTimeout(firstChunkTimeoutId);
9327
+ firstChunkTimeoutId = void 0;
9328
+ }
9329
+ }
9249
9330
  let chunkTimeoutId = void 0;
9250
9331
  function resetChunkTimeout() {
9251
9332
  if (chunkTimeoutId != null) {
@@ -9268,8 +9349,18 @@ var DefaultStreamTextResult = class {
9268
9349
  clearTimeout(stepTimeoutId);
9269
9350
  }
9270
9351
  }
9271
- abortSignal == null ? void 0 : abortSignal.addEventListener("abort", clearStepTimeout);
9272
- abortSignal == null ? void 0 : abortSignal.addEventListener("abort", clearChunkTimeout);
9352
+ function clearStepTimeouts() {
9353
+ clearStepTimeout();
9354
+ clearFirstChunkTimeout();
9355
+ clearChunkTimeout();
9356
+ }
9357
+ function cleanupStepTimeouts() {
9358
+ abortSignal == null ? void 0 : abortSignal.removeEventListener("abort", cleanupStepTimeouts);
9359
+ clearStepTimeouts();
9360
+ }
9361
+ abortSignal == null ? void 0 : abortSignal.addEventListener("abort", cleanupStepTimeouts, {
9362
+ once: true
9363
+ });
9273
9364
  try {
9274
9365
  stepFinish = new DelayedPromise();
9275
9366
  const stepTracingChannelContext = (_a23 = telemetryDispatcher.startTracingChannelContext) == null ? void 0 : _a23.call(telemetryDispatcher, {
@@ -9406,6 +9497,7 @@ var DefaultStreamTextResult = class {
9406
9497
  }
9407
9498
  )
9408
9499
  );
9500
+ startFirstChunkTimeout();
9409
9501
  const streamAfterToolCallbackInvocation = invokeToolCallbacksFromStream({
9410
9502
  stream: languageModelStream,
9411
9503
  tools,
@@ -9479,7 +9571,6 @@ var DefaultStreamTextResult = class {
9479
9571
  new TransformStream({
9480
9572
  async transform(chunk, controller) {
9481
9573
  var _a24, _b2, _c2;
9482
- resetChunkTimeout();
9483
9574
  if (chunk.type === "model-call-start") {
9484
9575
  warnings = chunk.warnings;
9485
9576
  return;
@@ -9493,8 +9584,12 @@ var DefaultStreamTextResult = class {
9493
9584
  });
9494
9585
  }
9495
9586
  const chunkType = chunk.type;
9496
- if (isOutputChunkType[chunkType]) {
9587
+ if (isOutputChunk2(chunk)) {
9588
+ if (!hasReceivedOutputChunk) {
9589
+ clearFirstChunkTimeout();
9590
+ }
9497
9591
  hasReceivedOutputChunk = true;
9592
+ resetChunkTimeout();
9498
9593
  }
9499
9594
  switch (chunkType) {
9500
9595
  case "file":
@@ -9589,8 +9684,7 @@ var DefaultStreamTextResult = class {
9589
9684
  message: "No output generated. The model stream ended without a finish chunk."
9590
9685
  })
9591
9686
  });
9592
- clearStepTimeout();
9593
- clearChunkTimeout();
9687
+ cleanupStepTimeouts();
9594
9688
  self.closeStream();
9595
9689
  return;
9596
9690
  }
@@ -9643,8 +9737,7 @@ var DefaultStreamTextResult = class {
9643
9737
  pendingDeferredToolCalls.delete(output2.toolCallId);
9644
9738
  }
9645
9739
  }
9646
- clearStepTimeout();
9647
- clearChunkTimeout();
9740
+ cleanupStepTimeouts();
9648
9741
  if (
9649
9742
  // Continue if:
9650
9743
  // 1. There are client tool calls that have all been executed or denied, OR
@@ -9680,11 +9773,14 @@ var DefaultStreamTextResult = class {
9680
9773
  }
9681
9774
  }
9682
9775
  })
9683
- )
9776
+ ),
9777
+ {
9778
+ onError: cleanupStepTimeouts,
9779
+ onCancel: cleanupStepTimeouts
9780
+ }
9684
9781
  );
9685
9782
  } catch (error) {
9686
- clearStepTimeout();
9687
- clearChunkTimeout();
9783
+ cleanupStepTimeouts();
9688
9784
  throw error;
9689
9785
  }
9690
9786
  }
@@ -9951,7 +10047,7 @@ var DefaultStreamTextResult = class {
9951
10047
  onError,
9952
10048
  ...init
9953
10049
  } = {}) {
9954
- pipeUIMessageStreamToResponse({
10050
+ return pipeUIMessageStreamToResponse({
9955
10051
  response,
9956
10052
  stream: this.toUIMessageStream({
9957
10053
  originalMessages,
@@ -9968,7 +10064,7 @@ var DefaultStreamTextResult = class {
9968
10064
  });
9969
10065
  }
9970
10066
  pipeTextStreamToResponse(response, init) {
9971
- pipeTextStreamToResponse({
10067
+ return pipeTextStreamToResponse({
9972
10068
  response,
9973
10069
  stream: this.textStream,
9974
10070
  ...init
@@ -11175,7 +11271,7 @@ async function pipeAgentUIStreamToResponse({
11175
11271
  consumeSseStream,
11176
11272
  ...options
11177
11273
  }) {
11178
- pipeUIMessageStreamToResponse({
11274
+ return pipeUIMessageStreamToResponse({
11179
11275
  response,
11180
11276
  headers,
11181
11277
  status,
@@ -13182,7 +13278,7 @@ var DefaultStreamObjectResult = class {
13182
13278
  return createAsyncIterableStream(this.baseStream);
13183
13279
  }
13184
13280
  pipeTextStreamToResponse(response, init) {
13185
- pipeTextStreamToResponse({
13281
+ return pipeTextStreamToResponse({
13186
13282
  response,
13187
13283
  stream: this.textStream,
13188
13284
  ...init
@@ -17236,6 +17332,7 @@ export {
17236
17332
  generateSpeech,
17237
17333
  generateText,
17238
17334
  getChunkTimeoutMs,
17335
+ getFirstChunkTimeoutMs,
17239
17336
  getStaticToolName,
17240
17337
  getStepTimeoutMs,
17241
17338
  getTextFromDataUrl,