ai 5.0.25 → 5.0.27

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,20 @@
1
1
  # ai
2
2
 
3
+ ## 5.0.27
4
+
5
+ ### Patch Changes
6
+
7
+ - ca40fac: feat(ai): support custom download functions (experimental)
8
+
9
+ ## 5.0.26
10
+
11
+ ### Patch Changes
12
+
13
+ - 33cf848: feat(ai): pass messages to `useChat({ onFinish })`
14
+ - Updated dependencies [980633d]
15
+ - Updated dependencies [1c5b88d]
16
+ - @ai-sdk/gateway@1.0.15
17
+
3
18
  ## 5.0.25
4
19
 
5
20
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -372,6 +372,31 @@ type EmbeddingModelUsage = {
372
372
  tokens: number;
373
373
  };
374
374
 
375
+ /**
376
+ * Experimental. Can change in patch versions without warning.
377
+ *
378
+ * Download function. Called with the array of URLs and a boolean indicating
379
+ * whether the URL is supported by the model.
380
+ *
381
+ * The download function can decide for each URL:
382
+ * - to return null (which means that the URL should be passed to the model)
383
+ * - to download the asset and return the data (incl. retries, authentication, etc.)
384
+ *
385
+ * Should throw DownloadError if the download fails.
386
+ *
387
+ * Should return an array of objects sorted by the order of the requested downloads.
388
+ * For each object, the data should be a Uint8Array if the URL was downloaded.
389
+ * For each object, the mediaType should be the media type of the downloaded asset.
390
+ * For each object, the data should be null if the URL should be passed through as is.
391
+ */
392
+ type DownloadFunction = (options: Array<{
393
+ url: URL;
394
+ isUrlSupportedByModel: boolean;
395
+ }>) => PromiseLike<Array<{
396
+ data: Uint8Array;
397
+ mediaType: string | undefined;
398
+ } | null>>;
399
+
375
400
  /**
376
401
  * A generated file.
377
402
  */
@@ -981,7 +1006,7 @@ If set and supported by the model, calls will generate deterministic results.
981
1006
  @returns
982
1007
  A result object that contains the generated text, the results of the tool calls, and additional information.
983
1008
  */
984
- declare function generateText<TOOLS extends ToolSet, OUTPUT = never, OUTPUT_PARTIAL = never>({ model: modelArg, tools, toolChoice, system, prompt, messages, maxRetries: maxRetriesArg, abortSignal, headers, stopWhen, experimental_output: output, experimental_telemetry: telemetry, providerOptions, experimental_activeTools, activeTools, experimental_prepareStep, prepareStep, experimental_repairToolCall: repairToolCall, experimental_context, _internal: { generateId, currentDate, }, onStepFinish, ...settings }: CallSettings & Prompt & {
1009
+ declare function generateText<TOOLS extends ToolSet, OUTPUT = never, OUTPUT_PARTIAL = never>({ model: modelArg, tools, toolChoice, system, prompt, messages, maxRetries: maxRetriesArg, abortSignal, headers, stopWhen, experimental_output: output, experimental_telemetry: telemetry, providerOptions, experimental_activeTools, activeTools, experimental_prepareStep, prepareStep, experimental_repairToolCall: repairToolCall, experimental_download: download, experimental_context, _internal: { generateId, currentDate, }, onStepFinish, ...settings }: CallSettings & Prompt & {
985
1010
  /**
986
1011
  The language model to use.
987
1012
  */
@@ -1025,6 +1050,12 @@ Optional specification for parsing structured outputs from the LLM response.
1025
1050
  */
1026
1051
  experimental_output?: Output<OUTPUT, OUTPUT_PARTIAL>;
1027
1052
  /**
1053
+ Custom download function to use for URLs.
1054
+
1055
+ By default, files are downloaded if the model does not support the URL for the given media type.
1056
+ */
1057
+ experimental_download?: DownloadFunction | undefined;
1058
+ /**
1028
1059
  * @deprecated Use `prepareStep` instead.
1029
1060
  */
1030
1061
  experimental_prepareStep?: PrepareStepFunction<NoInfer<TOOLS>>;
@@ -1194,7 +1225,7 @@ If set and supported by the model, calls will generate deterministic results.
1194
1225
  @return
1195
1226
  A result object for accessing different stream types and additional information.
1196
1227
  */
1197
- declare function streamText<TOOLS extends ToolSet, OUTPUT = never, PARTIAL_OUTPUT = never>({ model, tools, toolChoice, system, prompt, messages, maxRetries, abortSignal, headers, stopWhen, experimental_output: output, experimental_telemetry: telemetry, prepareStep, providerOptions, experimental_activeTools, activeTools, experimental_repairToolCall: repairToolCall, experimental_transform: transform, includeRawChunks, onChunk, onError, onFinish, onAbort, onStepFinish, experimental_context, _internal: { now, generateId, currentDate, }, ...settings }: CallSettings & Prompt & {
1228
+ declare function streamText<TOOLS extends ToolSet, OUTPUT = never, PARTIAL_OUTPUT = never>({ model, tools, toolChoice, system, prompt, messages, maxRetries, abortSignal, headers, stopWhen, experimental_output: output, experimental_telemetry: telemetry, prepareStep, providerOptions, experimental_activeTools, activeTools, experimental_repairToolCall: repairToolCall, experimental_transform: transform, experimental_download: download, includeRawChunks, onChunk, onError, onFinish, onAbort, onStepFinish, experimental_context, _internal: { now, generateId, currentDate, }, ...settings }: CallSettings & Prompt & {
1198
1229
  /**
1199
1230
  The language model to use.
1200
1231
  */
@@ -1260,6 +1291,12 @@ The stream transformations must maintain the stream structure for streamText to
1260
1291
  */
1261
1292
  experimental_transform?: StreamTextTransform<TOOLS> | Array<StreamTextTransform<TOOLS>>;
1262
1293
  /**
1294
+ Custom download function to use for URLs.
1295
+
1296
+ By default, files are downloaded if the model does not support the URL for the given media type.
1297
+ */
1298
+ experimental_download?: DownloadFunction | undefined;
1299
+ /**
1263
1300
  Whether to include raw chunks from the provider in the stream.
1264
1301
  When enabled, you will receive raw chunks with type 'raw' that contain the unprocessed data from the provider.
1265
1302
  This allows access to cutting-edge provider features not yet wrapped by the AI SDK.
@@ -2889,6 +2926,12 @@ Optional telemetry configuration (experimental).
2889
2926
  */
2890
2927
  experimental_telemetry?: TelemetrySettings;
2891
2928
  /**
2929
+ Custom download function to use for URLs.
2930
+
2931
+ By default, files are downloaded if the model does not support the URL for the given media type.
2932
+ */
2933
+ experimental_download?: DownloadFunction | undefined;
2934
+ /**
2892
2935
  Additional provider-specific options. They are passed through
2893
2936
  to the provider from the AI SDK and enable provider-specific
2894
2937
  functionality that can be fully encapsulated in the provider.
@@ -3227,6 +3270,12 @@ Optional telemetry configuration (experimental).
3227
3270
  */
3228
3271
  experimental_telemetry?: TelemetrySettings;
3229
3272
  /**
3273
+ Custom download function to use for URLs.
3274
+
3275
+ By default, files are downloaded if the model does not support the URL for the given media type.
3276
+ */
3277
+ experimental_download?: DownloadFunction | undefined;
3278
+ /**
3230
3279
  Additional provider-specific options. They are passed through
3231
3280
  to the provider from the AI SDK and enable provider-specific
3232
3281
  functionality that can be fully encapsulated in the provider.
@@ -3999,6 +4048,7 @@ type ChatOnToolCallCallback<UI_MESSAGE extends UIMessage = UIMessage> = (options
3999
4048
  type ChatOnDataCallback<UI_MESSAGE extends UIMessage> = (dataPart: DataUIPart<InferUIMessageData<UI_MESSAGE>>) => void;
4000
4049
  type ChatOnFinishCallback<UI_MESSAGE extends UIMessage> = (options: {
4001
4050
  message: UI_MESSAGE;
4051
+ messages: UI_MESSAGE[];
4002
4052
  }) => void;
4003
4053
  interface ChatInit<UI_MESSAGE extends UIMessage> {
4004
4054
  /**
@@ -4374,4 +4424,4 @@ declare global {
4374
4424
  var AI_SDK_DEFAULT_PROVIDER: ProviderV2 | undefined;
4375
4425
  }
4376
4426
 
4377
- export { AbstractChat, AsyncIterableStream, CallSettings, CallWarning, ChatInit, ChatOnDataCallback, ChatOnErrorCallback, ChatOnFinishCallback, ChatOnToolCallCallback, ChatRequestOptions, ChatState, ChatStatus, ChatTransport, ChunkDetector, CompletionRequestOptions, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreToolMessage, CoreUserMessage, CreateUIMessage, DataUIPart, DeepPartial, DefaultChatTransport, DownloadError, DynamicToolCall, DynamicToolError, DynamicToolResult, DynamicToolUIPart, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelUsage, ErrorHandler, Agent as Experimental_Agent, AgentSettings as Experimental_AgentSettings, GenerateImageResult as Experimental_GenerateImageResult, GeneratedFile as Experimental_GeneratedImage, SpeechResult as Experimental_SpeechResult, TranscriptionResult as Experimental_TranscriptionResult, FileUIPart, FinishReason, GenerateObjectResult, GenerateTextOnStepFinishCallback, GenerateTextResult, GeneratedAudioFile, GeneratedFile, HttpChatTransport, HttpChatTransportInitOptions, ImageModel, ImageGenerationWarning as ImageModelCallWarning, ImageModelProviderMetadata, ImageModelResponseMetadata, InferUIDataParts, InferUIMessageChunk, InferUITool, InferUITools, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidStreamPartError, InvalidToolInputError, JSONRPCError, JSONRPCMessage, JSONRPCNotification, JSONRPCRequest, JSONRPCResponse, JSONValue, JsonToSseTransformStream, LanguageModel, LanguageModelMiddleware, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, MCPClientError, MCPTransport, MessageConversionError, NoImageGeneratedError, NoObjectGeneratedError, NoOutputGeneratedError, NoOutputSpecifiedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, output as Output, PrepareReconnectToStreamRequest, PrepareSendMessagesRequest, PrepareStepFunction, PrepareStepResult, Prompt, Provider, ProviderMetadata, ProviderRegistryProvider, ReasoningUIPart, RepairTextFunction, RetryError, SerialJobExecutor, SourceDocumentUIPart, SourceUrlUIPart, SpeechModel, SpeechModelResponseMetadata, SpeechWarning, StaticToolCall, StaticToolError, StaticToolResult, StepResult, StepStartUIPart, StopCondition, StreamObjectOnFinishCallback, StreamObjectResult, StreamTextOnChunkCallback, StreamTextOnErrorCallback, StreamTextOnFinishCallback, StreamTextOnStepFinishCallback, StreamTextResult, StreamTextTransform, TelemetrySettings, TextStreamChatTransport, TextStreamPart, TextUIPart, ToolCallRepairError, ToolCallRepairFunction, ToolChoice, ToolSet, ToolUIPart, TranscriptionModel, TranscriptionModelResponseMetadata, TranscriptionWarning, TypedToolCall, TypedToolError, TypedToolResult, UIDataPartSchemas, UIDataTypes, UIMessage, UIMessageChunk, UIMessagePart, UIMessageStreamOnFinishCallback, UIMessageStreamOptions, UIMessageStreamWriter, UITool, UITools, UI_MESSAGE_STREAM_HEADERS, UnsupportedModelVersionError, UseCompletionOptions, assistantModelMessageSchema, callCompletionApi, consumeStream, convertFileListToFileUIParts, convertToCoreMessages, convertToModelMessages, coreAssistantMessageSchema, coreMessageSchema, coreSystemMessageSchema, coreToolMessageSchema, coreUserMessageSchema, cosineSimilarity, createProviderRegistry, createTextStreamResponse, createUIMessageStream, createUIMessageStreamResponse, customProvider, defaultSettingsMiddleware, embed, embedMany, MCPClient as experimental_MCPClient, MCPClientConfig as experimental_MCPClientConfig, createMCPClient as experimental_createMCPClient, experimental_createProviderRegistry, experimental_customProvider, generateImage as experimental_generateImage, generateSpeech as experimental_generateSpeech, transcribe as experimental_transcribe, extractReasoningMiddleware, generateObject, generateText, getTextFromDataUrl, getToolName, getToolOrDynamicToolName, hasToolCall, isDeepEqualData, isToolOrDynamicToolUIPart, isToolUIPart, lastAssistantMessageIsCompleteWithToolCalls, modelMessageSchema, parsePartialJson, pipeTextStreamToResponse, pipeUIMessageStreamToResponse, readUIMessageStream, simulateReadableStream, simulateStreamingMiddleware, smoothStream, stepCountIs, streamObject, streamText, systemModelMessageSchema, toolModelMessageSchema, userModelMessageSchema, validateUIMessages, wrapLanguageModel, wrapProvider };
4427
+ export { AbstractChat, AsyncIterableStream, CallSettings, CallWarning, ChatInit, ChatOnDataCallback, ChatOnErrorCallback, ChatOnFinishCallback, ChatOnToolCallCallback, ChatRequestOptions, ChatState, ChatStatus, ChatTransport, ChunkDetector, CompletionRequestOptions, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreToolMessage, CoreUserMessage, CreateUIMessage, DataUIPart, DeepPartial, DefaultChatTransport, DownloadError, DynamicToolCall, DynamicToolError, DynamicToolResult, DynamicToolUIPart, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelUsage, ErrorHandler, Agent as Experimental_Agent, AgentSettings as Experimental_AgentSettings, DownloadFunction as Experimental_DownloadFunction, GenerateImageResult as Experimental_GenerateImageResult, GeneratedFile as Experimental_GeneratedImage, SpeechResult as Experimental_SpeechResult, TranscriptionResult as Experimental_TranscriptionResult, FileUIPart, FinishReason, GenerateObjectResult, GenerateTextOnStepFinishCallback, GenerateTextResult, GeneratedAudioFile, GeneratedFile, HttpChatTransport, HttpChatTransportInitOptions, ImageModel, ImageGenerationWarning as ImageModelCallWarning, ImageModelProviderMetadata, ImageModelResponseMetadata, InferUIDataParts, InferUIMessageChunk, InferUITool, InferUITools, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidStreamPartError, InvalidToolInputError, JSONRPCError, JSONRPCMessage, JSONRPCNotification, JSONRPCRequest, JSONRPCResponse, JSONValue, JsonToSseTransformStream, LanguageModel, LanguageModelMiddleware, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, MCPClientError, MCPTransport, MessageConversionError, NoImageGeneratedError, NoObjectGeneratedError, NoOutputGeneratedError, NoOutputSpecifiedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, output as Output, PrepareReconnectToStreamRequest, PrepareSendMessagesRequest, PrepareStepFunction, PrepareStepResult, Prompt, Provider, ProviderMetadata, ProviderRegistryProvider, ReasoningUIPart, RepairTextFunction, RetryError, SerialJobExecutor, SourceDocumentUIPart, SourceUrlUIPart, SpeechModel, SpeechModelResponseMetadata, SpeechWarning, StaticToolCall, StaticToolError, StaticToolResult, StepResult, StepStartUIPart, StopCondition, StreamObjectOnFinishCallback, StreamObjectResult, StreamTextOnChunkCallback, StreamTextOnErrorCallback, StreamTextOnFinishCallback, StreamTextOnStepFinishCallback, StreamTextResult, StreamTextTransform, TelemetrySettings, TextStreamChatTransport, TextStreamPart, TextUIPart, ToolCallRepairError, ToolCallRepairFunction, ToolChoice, ToolSet, ToolUIPart, TranscriptionModel, TranscriptionModelResponseMetadata, TranscriptionWarning, TypedToolCall, TypedToolError, TypedToolResult, UIDataPartSchemas, UIDataTypes, UIMessage, UIMessageChunk, UIMessagePart, UIMessageStreamOnFinishCallback, UIMessageStreamOptions, UIMessageStreamWriter, UITool, UITools, UI_MESSAGE_STREAM_HEADERS, UnsupportedModelVersionError, UseCompletionOptions, assistantModelMessageSchema, callCompletionApi, consumeStream, convertFileListToFileUIParts, convertToCoreMessages, convertToModelMessages, coreAssistantMessageSchema, coreMessageSchema, coreSystemMessageSchema, coreToolMessageSchema, coreUserMessageSchema, cosineSimilarity, createProviderRegistry, createTextStreamResponse, createUIMessageStream, createUIMessageStreamResponse, customProvider, defaultSettingsMiddleware, embed, embedMany, MCPClient as experimental_MCPClient, MCPClientConfig as experimental_MCPClientConfig, createMCPClient as experimental_createMCPClient, experimental_createProviderRegistry, experimental_customProvider, generateImage as experimental_generateImage, generateSpeech as experimental_generateSpeech, transcribe as experimental_transcribe, extractReasoningMiddleware, generateObject, generateText, getTextFromDataUrl, getToolName, getToolOrDynamicToolName, hasToolCall, isDeepEqualData, isToolOrDynamicToolUIPart, isToolUIPart, lastAssistantMessageIsCompleteWithToolCalls, modelMessageSchema, parsePartialJson, pipeTextStreamToResponse, pipeUIMessageStreamToResponse, readUIMessageStream, simulateReadableStream, simulateStreamingMiddleware, smoothStream, stepCountIs, streamObject, streamText, systemModelMessageSchema, toolModelMessageSchema, userModelMessageSchema, validateUIMessages, wrapLanguageModel, wrapProvider };
package/dist/index.d.ts CHANGED
@@ -372,6 +372,31 @@ type EmbeddingModelUsage = {
372
372
  tokens: number;
373
373
  };
374
374
 
375
+ /**
376
+ * Experimental. Can change in patch versions without warning.
377
+ *
378
+ * Download function. Called with the array of URLs and a boolean indicating
379
+ * whether the URL is supported by the model.
380
+ *
381
+ * The download function can decide for each URL:
382
+ * - to return null (which means that the URL should be passed to the model)
383
+ * - to download the asset and return the data (incl. retries, authentication, etc.)
384
+ *
385
+ * Should throw DownloadError if the download fails.
386
+ *
387
+ * Should return an array of objects sorted by the order of the requested downloads.
388
+ * For each object, the data should be a Uint8Array if the URL was downloaded.
389
+ * For each object, the mediaType should be the media type of the downloaded asset.
390
+ * For each object, the data should be null if the URL should be passed through as is.
391
+ */
392
+ type DownloadFunction = (options: Array<{
393
+ url: URL;
394
+ isUrlSupportedByModel: boolean;
395
+ }>) => PromiseLike<Array<{
396
+ data: Uint8Array;
397
+ mediaType: string | undefined;
398
+ } | null>>;
399
+
375
400
  /**
376
401
  * A generated file.
377
402
  */
@@ -981,7 +1006,7 @@ If set and supported by the model, calls will generate deterministic results.
981
1006
  @returns
982
1007
  A result object that contains the generated text, the results of the tool calls, and additional information.
983
1008
  */
984
- declare function generateText<TOOLS extends ToolSet, OUTPUT = never, OUTPUT_PARTIAL = never>({ model: modelArg, tools, toolChoice, system, prompt, messages, maxRetries: maxRetriesArg, abortSignal, headers, stopWhen, experimental_output: output, experimental_telemetry: telemetry, providerOptions, experimental_activeTools, activeTools, experimental_prepareStep, prepareStep, experimental_repairToolCall: repairToolCall, experimental_context, _internal: { generateId, currentDate, }, onStepFinish, ...settings }: CallSettings & Prompt & {
1009
+ declare function generateText<TOOLS extends ToolSet, OUTPUT = never, OUTPUT_PARTIAL = never>({ model: modelArg, tools, toolChoice, system, prompt, messages, maxRetries: maxRetriesArg, abortSignal, headers, stopWhen, experimental_output: output, experimental_telemetry: telemetry, providerOptions, experimental_activeTools, activeTools, experimental_prepareStep, prepareStep, experimental_repairToolCall: repairToolCall, experimental_download: download, experimental_context, _internal: { generateId, currentDate, }, onStepFinish, ...settings }: CallSettings & Prompt & {
985
1010
  /**
986
1011
  The language model to use.
987
1012
  */
@@ -1025,6 +1050,12 @@ Optional specification for parsing structured outputs from the LLM response.
1025
1050
  */
1026
1051
  experimental_output?: Output<OUTPUT, OUTPUT_PARTIAL>;
1027
1052
  /**
1053
+ Custom download function to use for URLs.
1054
+
1055
+ By default, files are downloaded if the model does not support the URL for the given media type.
1056
+ */
1057
+ experimental_download?: DownloadFunction | undefined;
1058
+ /**
1028
1059
  * @deprecated Use `prepareStep` instead.
1029
1060
  */
1030
1061
  experimental_prepareStep?: PrepareStepFunction<NoInfer<TOOLS>>;
@@ -1194,7 +1225,7 @@ If set and supported by the model, calls will generate deterministic results.
1194
1225
  @return
1195
1226
  A result object for accessing different stream types and additional information.
1196
1227
  */
1197
- declare function streamText<TOOLS extends ToolSet, OUTPUT = never, PARTIAL_OUTPUT = never>({ model, tools, toolChoice, system, prompt, messages, maxRetries, abortSignal, headers, stopWhen, experimental_output: output, experimental_telemetry: telemetry, prepareStep, providerOptions, experimental_activeTools, activeTools, experimental_repairToolCall: repairToolCall, experimental_transform: transform, includeRawChunks, onChunk, onError, onFinish, onAbort, onStepFinish, experimental_context, _internal: { now, generateId, currentDate, }, ...settings }: CallSettings & Prompt & {
1228
+ declare function streamText<TOOLS extends ToolSet, OUTPUT = never, PARTIAL_OUTPUT = never>({ model, tools, toolChoice, system, prompt, messages, maxRetries, abortSignal, headers, stopWhen, experimental_output: output, experimental_telemetry: telemetry, prepareStep, providerOptions, experimental_activeTools, activeTools, experimental_repairToolCall: repairToolCall, experimental_transform: transform, experimental_download: download, includeRawChunks, onChunk, onError, onFinish, onAbort, onStepFinish, experimental_context, _internal: { now, generateId, currentDate, }, ...settings }: CallSettings & Prompt & {
1198
1229
  /**
1199
1230
  The language model to use.
1200
1231
  */
@@ -1260,6 +1291,12 @@ The stream transformations must maintain the stream structure for streamText to
1260
1291
  */
1261
1292
  experimental_transform?: StreamTextTransform<TOOLS> | Array<StreamTextTransform<TOOLS>>;
1262
1293
  /**
1294
+ Custom download function to use for URLs.
1295
+
1296
+ By default, files are downloaded if the model does not support the URL for the given media type.
1297
+ */
1298
+ experimental_download?: DownloadFunction | undefined;
1299
+ /**
1263
1300
  Whether to include raw chunks from the provider in the stream.
1264
1301
  When enabled, you will receive raw chunks with type 'raw' that contain the unprocessed data from the provider.
1265
1302
  This allows access to cutting-edge provider features not yet wrapped by the AI SDK.
@@ -2889,6 +2926,12 @@ Optional telemetry configuration (experimental).
2889
2926
  */
2890
2927
  experimental_telemetry?: TelemetrySettings;
2891
2928
  /**
2929
+ Custom download function to use for URLs.
2930
+
2931
+ By default, files are downloaded if the model does not support the URL for the given media type.
2932
+ */
2933
+ experimental_download?: DownloadFunction | undefined;
2934
+ /**
2892
2935
  Additional provider-specific options. They are passed through
2893
2936
  to the provider from the AI SDK and enable provider-specific
2894
2937
  functionality that can be fully encapsulated in the provider.
@@ -3227,6 +3270,12 @@ Optional telemetry configuration (experimental).
3227
3270
  */
3228
3271
  experimental_telemetry?: TelemetrySettings;
3229
3272
  /**
3273
+ Custom download function to use for URLs.
3274
+
3275
+ By default, files are downloaded if the model does not support the URL for the given media type.
3276
+ */
3277
+ experimental_download?: DownloadFunction | undefined;
3278
+ /**
3230
3279
  Additional provider-specific options. They are passed through
3231
3280
  to the provider from the AI SDK and enable provider-specific
3232
3281
  functionality that can be fully encapsulated in the provider.
@@ -3999,6 +4048,7 @@ type ChatOnToolCallCallback<UI_MESSAGE extends UIMessage = UIMessage> = (options
3999
4048
  type ChatOnDataCallback<UI_MESSAGE extends UIMessage> = (dataPart: DataUIPart<InferUIMessageData<UI_MESSAGE>>) => void;
4000
4049
  type ChatOnFinishCallback<UI_MESSAGE extends UIMessage> = (options: {
4001
4050
  message: UI_MESSAGE;
4051
+ messages: UI_MESSAGE[];
4002
4052
  }) => void;
4003
4053
  interface ChatInit<UI_MESSAGE extends UIMessage> {
4004
4054
  /**
@@ -4374,4 +4424,4 @@ declare global {
4374
4424
  var AI_SDK_DEFAULT_PROVIDER: ProviderV2 | undefined;
4375
4425
  }
4376
4426
 
4377
- export { AbstractChat, AsyncIterableStream, CallSettings, CallWarning, ChatInit, ChatOnDataCallback, ChatOnErrorCallback, ChatOnFinishCallback, ChatOnToolCallCallback, ChatRequestOptions, ChatState, ChatStatus, ChatTransport, ChunkDetector, CompletionRequestOptions, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreToolMessage, CoreUserMessage, CreateUIMessage, DataUIPart, DeepPartial, DefaultChatTransport, DownloadError, DynamicToolCall, DynamicToolError, DynamicToolResult, DynamicToolUIPart, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelUsage, ErrorHandler, Agent as Experimental_Agent, AgentSettings as Experimental_AgentSettings, GenerateImageResult as Experimental_GenerateImageResult, GeneratedFile as Experimental_GeneratedImage, SpeechResult as Experimental_SpeechResult, TranscriptionResult as Experimental_TranscriptionResult, FileUIPart, FinishReason, GenerateObjectResult, GenerateTextOnStepFinishCallback, GenerateTextResult, GeneratedAudioFile, GeneratedFile, HttpChatTransport, HttpChatTransportInitOptions, ImageModel, ImageGenerationWarning as ImageModelCallWarning, ImageModelProviderMetadata, ImageModelResponseMetadata, InferUIDataParts, InferUIMessageChunk, InferUITool, InferUITools, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidStreamPartError, InvalidToolInputError, JSONRPCError, JSONRPCMessage, JSONRPCNotification, JSONRPCRequest, JSONRPCResponse, JSONValue, JsonToSseTransformStream, LanguageModel, LanguageModelMiddleware, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, MCPClientError, MCPTransport, MessageConversionError, NoImageGeneratedError, NoObjectGeneratedError, NoOutputGeneratedError, NoOutputSpecifiedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, output as Output, PrepareReconnectToStreamRequest, PrepareSendMessagesRequest, PrepareStepFunction, PrepareStepResult, Prompt, Provider, ProviderMetadata, ProviderRegistryProvider, ReasoningUIPart, RepairTextFunction, RetryError, SerialJobExecutor, SourceDocumentUIPart, SourceUrlUIPart, SpeechModel, SpeechModelResponseMetadata, SpeechWarning, StaticToolCall, StaticToolError, StaticToolResult, StepResult, StepStartUIPart, StopCondition, StreamObjectOnFinishCallback, StreamObjectResult, StreamTextOnChunkCallback, StreamTextOnErrorCallback, StreamTextOnFinishCallback, StreamTextOnStepFinishCallback, StreamTextResult, StreamTextTransform, TelemetrySettings, TextStreamChatTransport, TextStreamPart, TextUIPart, ToolCallRepairError, ToolCallRepairFunction, ToolChoice, ToolSet, ToolUIPart, TranscriptionModel, TranscriptionModelResponseMetadata, TranscriptionWarning, TypedToolCall, TypedToolError, TypedToolResult, UIDataPartSchemas, UIDataTypes, UIMessage, UIMessageChunk, UIMessagePart, UIMessageStreamOnFinishCallback, UIMessageStreamOptions, UIMessageStreamWriter, UITool, UITools, UI_MESSAGE_STREAM_HEADERS, UnsupportedModelVersionError, UseCompletionOptions, assistantModelMessageSchema, callCompletionApi, consumeStream, convertFileListToFileUIParts, convertToCoreMessages, convertToModelMessages, coreAssistantMessageSchema, coreMessageSchema, coreSystemMessageSchema, coreToolMessageSchema, coreUserMessageSchema, cosineSimilarity, createProviderRegistry, createTextStreamResponse, createUIMessageStream, createUIMessageStreamResponse, customProvider, defaultSettingsMiddleware, embed, embedMany, MCPClient as experimental_MCPClient, MCPClientConfig as experimental_MCPClientConfig, createMCPClient as experimental_createMCPClient, experimental_createProviderRegistry, experimental_customProvider, generateImage as experimental_generateImage, generateSpeech as experimental_generateSpeech, transcribe as experimental_transcribe, extractReasoningMiddleware, generateObject, generateText, getTextFromDataUrl, getToolName, getToolOrDynamicToolName, hasToolCall, isDeepEqualData, isToolOrDynamicToolUIPart, isToolUIPart, lastAssistantMessageIsCompleteWithToolCalls, modelMessageSchema, parsePartialJson, pipeTextStreamToResponse, pipeUIMessageStreamToResponse, readUIMessageStream, simulateReadableStream, simulateStreamingMiddleware, smoothStream, stepCountIs, streamObject, streamText, systemModelMessageSchema, toolModelMessageSchema, userModelMessageSchema, validateUIMessages, wrapLanguageModel, wrapProvider };
4427
+ export { AbstractChat, AsyncIterableStream, CallSettings, CallWarning, ChatInit, ChatOnDataCallback, ChatOnErrorCallback, ChatOnFinishCallback, ChatOnToolCallCallback, ChatRequestOptions, ChatState, ChatStatus, ChatTransport, ChunkDetector, CompletionRequestOptions, CoreAssistantMessage, CoreMessage, CoreSystemMessage, CoreToolMessage, CoreUserMessage, CreateUIMessage, DataUIPart, DeepPartial, DefaultChatTransport, DownloadError, DynamicToolCall, DynamicToolError, DynamicToolResult, DynamicToolUIPart, EmbedManyResult, EmbedResult, Embedding, EmbeddingModel, EmbeddingModelUsage, ErrorHandler, Agent as Experimental_Agent, AgentSettings as Experimental_AgentSettings, DownloadFunction as Experimental_DownloadFunction, GenerateImageResult as Experimental_GenerateImageResult, GeneratedFile as Experimental_GeneratedImage, SpeechResult as Experimental_SpeechResult, TranscriptionResult as Experimental_TranscriptionResult, FileUIPart, FinishReason, GenerateObjectResult, GenerateTextOnStepFinishCallback, GenerateTextResult, GeneratedAudioFile, GeneratedFile, HttpChatTransport, HttpChatTransportInitOptions, ImageModel, ImageGenerationWarning as ImageModelCallWarning, ImageModelProviderMetadata, ImageModelResponseMetadata, InferUIDataParts, InferUIMessageChunk, InferUITool, InferUITools, InvalidArgumentError, InvalidDataContentError, InvalidMessageRoleError, InvalidStreamPartError, InvalidToolInputError, JSONRPCError, JSONRPCMessage, JSONRPCNotification, JSONRPCRequest, JSONRPCResponse, JSONValue, JsonToSseTransformStream, LanguageModel, LanguageModelMiddleware, LanguageModelRequestMetadata, LanguageModelResponseMetadata, LanguageModelUsage, MCPClientError, MCPTransport, MessageConversionError, NoImageGeneratedError, NoObjectGeneratedError, NoOutputGeneratedError, NoOutputSpecifiedError, NoSuchProviderError, NoSuchToolError, ObjectStreamPart, output as Output, PrepareReconnectToStreamRequest, PrepareSendMessagesRequest, PrepareStepFunction, PrepareStepResult, Prompt, Provider, ProviderMetadata, ProviderRegistryProvider, ReasoningUIPart, RepairTextFunction, RetryError, SerialJobExecutor, SourceDocumentUIPart, SourceUrlUIPart, SpeechModel, SpeechModelResponseMetadata, SpeechWarning, StaticToolCall, StaticToolError, StaticToolResult, StepResult, StepStartUIPart, StopCondition, StreamObjectOnFinishCallback, StreamObjectResult, StreamTextOnChunkCallback, StreamTextOnErrorCallback, StreamTextOnFinishCallback, StreamTextOnStepFinishCallback, StreamTextResult, StreamTextTransform, TelemetrySettings, TextStreamChatTransport, TextStreamPart, TextUIPart, ToolCallRepairError, ToolCallRepairFunction, ToolChoice, ToolSet, ToolUIPart, TranscriptionModel, TranscriptionModelResponseMetadata, TranscriptionWarning, TypedToolCall, TypedToolError, TypedToolResult, UIDataPartSchemas, UIDataTypes, UIMessage, UIMessageChunk, UIMessagePart, UIMessageStreamOnFinishCallback, UIMessageStreamOptions, UIMessageStreamWriter, UITool, UITools, UI_MESSAGE_STREAM_HEADERS, UnsupportedModelVersionError, UseCompletionOptions, assistantModelMessageSchema, callCompletionApi, consumeStream, convertFileListToFileUIParts, convertToCoreMessages, convertToModelMessages, coreAssistantMessageSchema, coreMessageSchema, coreSystemMessageSchema, coreToolMessageSchema, coreUserMessageSchema, cosineSimilarity, createProviderRegistry, createTextStreamResponse, createUIMessageStream, createUIMessageStreamResponse, customProvider, defaultSettingsMiddleware, embed, embedMany, MCPClient as experimental_MCPClient, MCPClientConfig as experimental_MCPClientConfig, createMCPClient as experimental_createMCPClient, experimental_createProviderRegistry, experimental_customProvider, generateImage as experimental_generateImage, generateSpeech as experimental_generateSpeech, transcribe as experimental_transcribe, extractReasoningMiddleware, generateObject, generateText, getTextFromDataUrl, getToolName, getToolOrDynamicToolName, hasToolCall, isDeepEqualData, isToolOrDynamicToolUIPart, isToolUIPart, lastAssistantMessageIsCompleteWithToolCalls, modelMessageSchema, parsePartialJson, pipeTextStreamToResponse, pipeUIMessageStreamToResponse, readUIMessageStream, simulateReadableStream, simulateStreamingMiddleware, smoothStream, stepCountIs, streamObject, streamText, systemModelMessageSchema, toolModelMessageSchema, userModelMessageSchema, validateUIMessages, wrapLanguageModel, wrapProvider };
package/dist/index.js CHANGED
@@ -435,7 +435,7 @@ var MessageConversionError = class extends import_provider14.AISDKError {
435
435
  };
436
436
  _a13 = symbol13;
437
437
 
438
- // src/util/download-error.ts
438
+ // src/util/download/download-error.ts
439
439
  var import_provider15 = require("@ai-sdk/provider");
440
440
  var name14 = "AI_DownloadError";
441
441
  var marker14 = `vercel.ai.error.${name14}`;
@@ -685,8 +685,8 @@ function detectMediaType({
685
685
  return void 0;
686
686
  }
687
687
 
688
- // src/util/download.ts
689
- async function download({ url }) {
688
+ // src/util/download/download.ts
689
+ var download = async ({ url }) => {
690
690
  var _a17;
691
691
  const urlText = url.toString();
692
692
  try {
@@ -708,7 +708,14 @@ async function download({ url }) {
708
708
  }
709
709
  throw new DownloadError({ url: urlText, cause: error });
710
710
  }
711
- }
711
+ };
712
+
713
+ // src/util/download/download-function.ts
714
+ var createDefaultDownloadFunction = (download2 = download) => (requestedDownloads) => Promise.all(
715
+ requestedDownloads.map(
716
+ async (requestedDownload) => requestedDownload.isUrlSupportedByModel ? null : download2(requestedDownload)
717
+ )
718
+ );
712
719
 
713
720
  // src/prompt/data-content.ts
714
721
  var import_provider18 = require("@ai-sdk/provider");
@@ -806,11 +813,11 @@ function convertDataContentToUint8Array(content) {
806
813
  async function convertToLanguageModelPrompt({
807
814
  prompt,
808
815
  supportedUrls,
809
- downloadImplementation = download
816
+ download: download2 = createDefaultDownloadFunction()
810
817
  }) {
811
818
  const downloadedAssets = await downloadAssets(
812
819
  prompt.messages,
813
- downloadImplementation,
820
+ download2,
814
821
  supportedUrls
815
822
  );
816
823
  return [
@@ -932,8 +939,8 @@ function convertToLanguageModelMessage({
932
939
  }
933
940
  }
934
941
  }
935
- async function downloadAssets(messages, downloadImplementation, supportedUrls) {
936
- const urls = messages.filter((message) => message.role === "user").map((message) => message.content).filter(
942
+ async function downloadAssets(messages, download2, supportedUrls) {
943
+ const plannedDownloads = messages.filter((message) => message.role === "user").map((message) => message.content).filter(
937
944
  (content) => Array.isArray(content)
938
945
  ).flat().filter(
939
946
  (part) => part.type === "image" || part.type === "file"
@@ -949,20 +956,23 @@ async function downloadAssets(messages, downloadImplementation, supportedUrls) {
949
956
  }
950
957
  return { mediaType, data };
951
958
  }).filter(
952
- (part) => part.data instanceof URL && part.mediaType != null && !(0, import_provider_utils3.isUrlSupported)({
959
+ (part) => part.data instanceof URL
960
+ ).map((part) => ({
961
+ url: part.data,
962
+ isUrlSupportedByModel: part.mediaType != null && (0, import_provider_utils3.isUrlSupported)({
953
963
  url: part.data.toString(),
954
964
  mediaType: part.mediaType,
955
965
  supportedUrls
956
966
  })
957
- ).map((part) => part.data);
958
- const downloadedImages = await Promise.all(
959
- urls.map(async (url) => ({
960
- url,
961
- data: await downloadImplementation({ url })
962
- }))
963
- );
967
+ }));
968
+ const downloadedFiles = await download2(plannedDownloads);
964
969
  return Object.fromEntries(
965
- downloadedImages.map(({ url, data }) => [url.toString(), data])
970
+ downloadedFiles.filter(
971
+ (downloadedFile) => (downloadedFile == null ? void 0 : downloadedFile.data) != null
972
+ ).map(({ data, mediaType }, index) => [
973
+ plannedDownloads[index].url.toString(),
974
+ { data, mediaType }
975
+ ])
966
976
  );
967
977
  }
968
978
  function convertPartToLanguageModelPart(part, downloadedAssets) {
@@ -2118,6 +2128,7 @@ async function generateText({
2118
2128
  experimental_prepareStep,
2119
2129
  prepareStep = experimental_prepareStep,
2120
2130
  experimental_repairToolCall: repairToolCall,
2131
+ experimental_download: download2,
2121
2132
  experimental_context,
2122
2133
  _internal: {
2123
2134
  generateId: generateId3 = originalGenerateId,
@@ -2190,7 +2201,8 @@ async function generateText({
2190
2201
  system: (_a17 = prepareStepResult == null ? void 0 : prepareStepResult.system) != null ? _a17 : initialPrompt.system,
2191
2202
  messages: (_b = prepareStepResult == null ? void 0 : prepareStepResult.messages) != null ? _b : stepInputMessages
2192
2203
  },
2193
- supportedUrls: await model.supportedUrls
2204
+ supportedUrls: await model.supportedUrls,
2205
+ download: download2
2194
2206
  });
2195
2207
  const stepModel = resolveLanguageModel(
2196
2208
  (_c = prepareStepResult == null ? void 0 : prepareStepResult.model) != null ? _c : model
@@ -4388,6 +4400,7 @@ function streamText({
4388
4400
  activeTools = experimental_activeTools,
4389
4401
  experimental_repairToolCall: repairToolCall,
4390
4402
  experimental_transform: transform,
4403
+ experimental_download: download2,
4391
4404
  includeRawChunks = false,
4392
4405
  onChunk,
4393
4406
  onError = ({ error }) => {
@@ -4432,7 +4445,8 @@ function streamText({
4432
4445
  now: now2,
4433
4446
  currentDate,
4434
4447
  generateId: generateId3,
4435
- experimental_context
4448
+ experimental_context,
4449
+ download: download2
4436
4450
  });
4437
4451
  }
4438
4452
  function createOutputTransformStream(output) {
@@ -4529,7 +4543,8 @@ var DefaultStreamTextResult = class {
4529
4543
  onFinish,
4530
4544
  onAbort,
4531
4545
  onStepFinish,
4532
- experimental_context
4546
+ experimental_context,
4547
+ download: download2
4533
4548
  }) {
4534
4549
  this._totalUsage = new DelayedPromise();
4535
4550
  this._finishReason = new DelayedPromise();
@@ -4851,7 +4866,8 @@ var DefaultStreamTextResult = class {
4851
4866
  system: (_a17 = prepareStepResult == null ? void 0 : prepareStepResult.system) != null ? _a17 : initialPrompt.system,
4852
4867
  messages: (_b = prepareStepResult == null ? void 0 : prepareStepResult.messages) != null ? _b : stepInputMessages
4853
4868
  },
4854
- supportedUrls: await model.supportedUrls
4869
+ supportedUrls: await model.supportedUrls,
4870
+ download: download2
4855
4871
  });
4856
4872
  const stepModel = resolveLanguageModel(
4857
4873
  (_c = prepareStepResult == null ? void 0 : prepareStepResult.model) != null ? _c : model
@@ -6615,6 +6631,7 @@ async function generateObject(options) {
6615
6631
  headers,
6616
6632
  experimental_repairText: repairText,
6617
6633
  experimental_telemetry: telemetry,
6634
+ experimental_download: download2,
6618
6635
  providerOptions,
6619
6636
  _internal: {
6620
6637
  generateId: generateId3 = originalGenerateId3,
@@ -6692,7 +6709,8 @@ async function generateObject(options) {
6692
6709
  });
6693
6710
  const promptMessages = await convertToLanguageModelPrompt({
6694
6711
  prompt: standardizedPrompt,
6695
- supportedUrls: await model.supportedUrls
6712
+ supportedUrls: await model.supportedUrls,
6713
+ download: download2
6696
6714
  });
6697
6715
  const generateResult = await retry(
6698
6716
  () => recordSpan({
@@ -7005,6 +7023,7 @@ function streamObject(options) {
7005
7023
  headers,
7006
7024
  experimental_repairText: repairText,
7007
7025
  experimental_telemetry: telemetry,
7026
+ experimental_download: download2,
7008
7027
  providerOptions,
7009
7028
  onError = ({ error }) => {
7010
7029
  console.error(error);
@@ -7052,6 +7071,7 @@ function streamObject(options) {
7052
7071
  repairText,
7053
7072
  onError,
7054
7073
  onFinish,
7074
+ download: download2,
7055
7075
  generateId: generateId3,
7056
7076
  currentDate,
7057
7077
  now: now2
@@ -7075,6 +7095,7 @@ var DefaultStreamObjectResult = class {
7075
7095
  repairText,
7076
7096
  onError,
7077
7097
  onFinish,
7098
+ download: download2,
7078
7099
  generateId: generateId3,
7079
7100
  currentDate,
7080
7101
  now: now2
@@ -7148,7 +7169,8 @@ var DefaultStreamObjectResult = class {
7148
7169
  ...prepareCallSettings(settings),
7149
7170
  prompt: await convertToLanguageModelPrompt({
7150
7171
  prompt: standardizedPrompt,
7151
- supportedUrls: await model.supportedUrls
7172
+ supportedUrls: await model.supportedUrls,
7173
+ download: download2
7152
7174
  }),
7153
7175
  providerOptions,
7154
7176
  abortSignal,
@@ -9509,7 +9531,10 @@ var AbstractChat = class {
9509
9531
  throw error;
9510
9532
  }
9511
9533
  });
9512
- (_a17 = this.onFinish) == null ? void 0 : _a17.call(this, { message: activeResponse.state.message });
9534
+ (_a17 = this.onFinish) == null ? void 0 : _a17.call(this, {
9535
+ message: activeResponse.state.message,
9536
+ messages: this.state.messages
9537
+ });
9513
9538
  this.setStatus({ status: "ready" });
9514
9539
  } catch (err) {
9515
9540
  if (err.name === "AbortError") {