ai 7.0.41 → 7.0.43

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,30 @@
1
1
  # ai
2
2
 
3
+ ## 7.0.43
4
+
5
+ ### Patch Changes
6
+
7
+ - b192878: feat: add experimental_toolCaller routing to generateText for code mode
8
+ - Updated dependencies [d8210b6]
9
+ - Updated dependencies [af3f400]
10
+ - Updated dependencies [b192878]
11
+ - @ai-sdk/provider-utils@5.0.16
12
+ - @ai-sdk/gateway@4.0.33
13
+
14
+ ## 7.0.42
15
+
16
+ ### Patch Changes
17
+
18
+ - 1659cd5: Prevent validated downloads on Node.js from reaching private or internal services through DNS aliases or DNS rebinding by validating and pinning every resolved address at connection time.
19
+ - 60f97f6: support overriding model call settings for individual `prepareStep` invocations
20
+ - 6a5bdff: Fix validated Node.js downloads when the HTTP connector requests a single DNS address.
21
+ - 6de2ec1: Preserve provider metadata from empty text deltas in `streamText`.
22
+ - Updated dependencies [1659cd5]
23
+ - Updated dependencies [6a5bdff]
24
+ - Updated dependencies [0012529]
25
+ - @ai-sdk/provider-utils@5.0.15
26
+ - @ai-sdk/gateway@4.0.32
27
+
3
28
  ## 7.0.41
4
29
 
5
30
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -3,8 +3,8 @@ export { AISDKError, APICallError, EmptyResponseBodyError, InvalidPromptError, I
3
3
  import { GatewayModelId } from '@ai-sdk/gateway';
4
4
  export { GatewayModelId, createGateway, gateway } from '@ai-sdk/gateway';
5
5
  import * as _ai_sdk_provider_utils from '@ai-sdk/provider-utils';
6
- import { ModelMessage, AssistantModelMessage, ToolModelMessage, ProviderOptions, ToolSet, SystemModelMessage, UserModelMessage, DataContent, FlexibleSchema, InferSchema, Context, Arrayable, InferToolSetContext, InferToolInput, InferToolOutput, ReasoningPart, ReasoningFilePart, Experimental_SandboxSession, Tool, ToolCall, IdGenerator, ToolExecutionOptions, MaybePromiseLike, InferToolContext, HasRequiredKey, TextPart, FilePart, Resolvable, FetchFunction } from '@ai-sdk/provider-utils';
7
- export { AssistantContent, AssistantModelMessage, DataContent, DownloadError, Experimental_SandboxProcess, Experimental_SandboxSession, FilePart, FlexibleSchema, IdGenerator, ImagePart, InferSchema, InferToolInput, InferToolOutput, ModelMessage, Schema, SystemModelMessage, TextPart, Tool, ToolApprovalRequest, ToolApprovalResponse, ToolCallPart, ToolContent, ToolExecuteFunction, ToolExecutionOptions, ToolModelMessage, ToolResultPart, ToolSet, UserContent, UserModelMessage, asSchema, createIdGenerator, dynamicTool, generateId, jsonSchema, parseJsonEventStream, tool, zodSchema } from '@ai-sdk/provider-utils';
6
+ import { ModelMessage, AssistantModelMessage, ToolModelMessage, ProviderOptions, ToolSet, SystemModelMessage, UserModelMessage, DataContent, FlexibleSchema, InferSchema, Context, Arrayable, InferToolSetContext, InferToolInput, InferToolOutput, ReasoningPart, ReasoningFilePart, Experimental_SandboxSession, Tool, ToolCall, IdGenerator, ToolExecutionOptions, MaybePromiseLike, InferToolContext, HasRequiredKey, Experimental_ToolCallerTool, TextPart, FilePart, Resolvable, FetchFunction } from '@ai-sdk/provider-utils';
7
+ export { AssistantContent, AssistantModelMessage, DataContent, DownloadError, Experimental_SandboxProcess, Experimental_SandboxSession, Experimental_ToolCallerTool, FilePart, FlexibleSchema, IdGenerator, ImagePart, InferSchema, InferToolInput, InferToolOutput, ModelMessage, Schema, SystemModelMessage, TextPart, Tool, ToolApprovalRequest, ToolApprovalResponse, ToolCallPart, ToolContent, ToolExecuteFunction, ToolExecutionOptions, ToolModelMessage, ToolResultPart, ToolSet, UserContent, UserModelMessage, asSchema, createIdGenerator, dynamicTool, experimental_toolCaller, generateId, jsonSchema, parseJsonEventStream, tool, zodSchema } from '@ai-sdk/provider-utils';
8
8
  import { ServerResponse } from 'node:http';
9
9
  import { ServerResponse as ServerResponse$1 } from 'http';
10
10
  import { z } from 'zod/v4';
@@ -1423,7 +1423,8 @@ type StepResult<TOOLS extends ToolSet, RUNTIME_CONTEXT extends Context = Context
1423
1423
  */
1424
1424
  readonly content: Array<ContentPart<TOOLS>>;
1425
1425
  /**
1426
- * The generated text. Can be an empty string if the model has not generated any text.
1426
+ * The concatenation of all text parts generated in this step.
1427
+ * It is an empty string if the step contains no text parts.
1427
1428
  */
1428
1429
  readonly text: string;
1429
1430
  /**
@@ -1680,9 +1681,13 @@ type PrepareStepFunction<TOOLS extends ToolSet, RUNTIME_CONTEXT extends Context
1680
1681
  }) => PromiseLike<PrepareStepResult<TOOLS, RUNTIME_CONTEXT>> | PrepareStepResult<TOOLS, RUNTIME_CONTEXT>;
1681
1682
  /**
1682
1683
  * The result type returned by a {@link PrepareStepFunction},
1683
- * allowing per-step overrides of model, tools, instructions, or messages.
1684
+ * allowing per-step overrides of model call settings, model, tools,
1685
+ * instructions, or messages.
1686
+ *
1687
+ * Model call setting overrides apply only to the current step. Undefined
1688
+ * settings fall back to the outer call settings.
1684
1689
  */
1685
- type PrepareStepResult<TOOLS extends ToolSet, RUNTIME_CONTEXT extends Context = Context> = {
1690
+ type PrepareStepResult<TOOLS extends ToolSet, RUNTIME_CONTEXT extends Context = Context> = ({
1686
1691
  /**
1687
1692
  * Optionally override which LanguageModel instance is used for this step.
1688
1693
  */
@@ -1746,7 +1751,7 @@ type PrepareStepResult<TOOLS extends ToolSet, RUNTIME_CONTEXT extends Context =
1746
1751
  * container IDs for Anthropic's code execution.
1747
1752
  */
1748
1753
  providerOptions?: ProviderOptions;
1749
- } | undefined;
1754
+ } & LanguageModelCallOptions) | undefined;
1750
1755
 
1751
1756
  /**
1752
1757
  * A predicate that decides whether a tool-calling loop should stop after the
@@ -4337,7 +4342,9 @@ interface GenerateTextResult<TOOLS extends ToolSet, RUNTIME_CONTEXT extends Cont
4337
4342
  */
4338
4343
  readonly content: Array<ContentPart<TOOLS>>;
4339
4344
  /**
4340
- * The text that was generated in the final step.
4345
+ * The concatenation of all text parts generated in the final step.
4346
+ * It is an empty string if the final step contains no text parts.
4347
+ * Inspect `finalStep.content` to distinguish that case.
4341
4348
  */
4342
4349
  readonly text: string;
4343
4350
  /**
@@ -4603,6 +4610,21 @@ interface Agent<CALL_OPTIONS = never, TOOLS extends ToolSet = {}, RUNTIME_CONTEX
4603
4610
  stream(options: AgentStreamParameters<CALL_OPTIONS, TOOLS, RUNTIME_CONTEXT>): PromiseLike<StreamTextResult<TOOLS, RUNTIME_CONTEXT, OUTPUT>>;
4604
4611
  }
4605
4612
 
4613
+ interface Experimental_ToolCallerReference<NAME extends string = string> {
4614
+ readonly toolName: NAME;
4615
+ }
4616
+ type ToolCallerName<TOOLS extends ToolSet> = {
4617
+ [NAME in keyof TOOLS]: TOOLS[NAME] extends Experimental_ToolCallerTool ? NAME : never;
4618
+ }[keyof TOOLS] & string;
4619
+ type ToolCallerReferenceUnion<TOOLS extends ToolSet> = {
4620
+ [NAME in ToolCallerName<TOOLS>]: Experimental_ToolCallerReference<NAME>;
4621
+ }[ToolCallerName<TOOLS>];
4622
+ type Experimental_ToolCallers<TOOLS extends ToolSet> = (callers: {
4623
+ [NAME in ToolCallerName<TOOLS>]: Experimental_ToolCallerReference<NAME>;
4624
+ }) => {
4625
+ [NAME in keyof TOOLS]?: ReadonlyArray<'direct' | ToolCallerReferenceUnion<TOOLS>>;
4626
+ };
4627
+
4606
4628
  type GenerateTextInclude = {
4607
4629
  /**
4608
4630
  * Whether to retain the request body in step results.
@@ -4692,7 +4714,7 @@ type GenerateTextInclude = {
4692
4714
  * @returns
4693
4715
  * A result object that contains the generated text, the results of the tool calls, and additional information.
4694
4716
  */
4695
- declare function generateText<TOOLS extends ToolSet, RUNTIME_CONTEXT extends Context = Context, OUTPUT extends Output = Output<string, string>>({ model: modelArg, tools, toolChoice, instructions, system, prompt, messages, allowSystemInMessages, maxRetries: maxRetriesArg, abortSignal, timeout, headers, stopWhen, experimental_sandbox: sandbox, output, toolApproval, experimental_toolApprovalSecret, experimental_telemetry, telemetry, providerOptions, activeTools, toolOrder, prepareStep, experimental_repairToolCall, repairToolCall, experimental_refineToolInput: refineToolInput, experimental_download: download, runtimeContext, toolsContext, experimental_include, include, _internal: { generateId, generateCallId, now, }, onStart, experimental_onStart, onStepStart, experimental_onStepStart, onLanguageModelCallStart, experimental_onLanguageModelCallStart, onLanguageModelCallEnd, experimental_onLanguageModelCallEnd, onToolExecutionStart, onToolExecutionEnd, experimental_onToolCallStart, experimental_onToolCallFinish, onStepEnd, onStepFinish, onFinish, onEnd, ...settings }: LanguageModelCallOptions & RequestOptions<TOOLS> & Prompt & ToolsContextParameter<TOOLS> & {
4717
+ declare function generateText<TOOLS extends ToolSet, RUNTIME_CONTEXT extends Context = Context, OUTPUT extends Output = Output<string, string>>({ model: modelArg, tools, toolChoice, instructions, system, prompt, messages, allowSystemInMessages, maxRetries: maxRetriesArg, abortSignal, timeout, headers, stopWhen, experimental_sandbox: sandbox, output, toolApproval, experimental_toolCallers, experimental_toolApprovalSecret, experimental_telemetry, telemetry, providerOptions, activeTools, toolOrder, prepareStep, experimental_repairToolCall, repairToolCall, experimental_refineToolInput: refineToolInput, experimental_download: download, runtimeContext, toolsContext, experimental_include, include, _internal: { generateId, generateCallId, now, }, onStart, experimental_onStart, onStepStart, experimental_onStepStart, onLanguageModelCallStart, experimental_onLanguageModelCallStart, onLanguageModelCallEnd, experimental_onLanguageModelCallEnd, onToolExecutionStart, onToolExecutionEnd, experimental_onToolCallStart, experimental_onToolCallFinish, onStepEnd, onStepFinish, onFinish, onEnd, ...settings }: LanguageModelCallOptions & RequestOptions<TOOLS> & Prompt & ToolsContextParameter<TOOLS> & {
4696
4718
  /**
4697
4719
  * The language model to use.
4698
4720
  */
@@ -4756,6 +4778,10 @@ declare function generateText<TOOLS extends ToolSet, RUNTIME_CONTEXT extends Con
4756
4778
  * This configuration takes precedence over tool-defined approval settings.
4757
4779
  */
4758
4780
  toolApproval?: ToolApprovalConfiguration<TOOLS, RUNTIME_CONTEXT>;
4781
+ /**
4782
+ * Configures which caller tools may invoke each tool.
4783
+ */
4784
+ experimental_toolCallers?: Experimental_ToolCallers<NoInfer<TOOLS>>;
4759
4785
  /**
4760
4786
  * Secret for HMAC-signing tool approval requests. When set, the server
4761
4787
  * signs each approval request at issuance and verifies the signature when
@@ -9089,4 +9115,4 @@ declare function uploadSkill({ api, files, displayTitle, providerOptions, }: {
9089
9115
  files: UploadSkillFile[];
9090
9116
  }): Promise<UploadSkillResult>;
9091
9117
 
9092
- 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, 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, StreamTranslationResult as Experimental_StreamTranslationResult, Experimental_TranscriptionResult, TranslationStreamPart as Experimental_TranslationStreamPart, 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, NoTranslationGeneratedError, 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, streamTranslate as experimental_streamTranslate, 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 };
9118
+ 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, 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, StreamTranslationResult as Experimental_StreamTranslationResult, Experimental_ToolCallerReference, Experimental_ToolCallers, Experimental_TranscriptionResult, TranslationStreamPart as Experimental_TranslationStreamPart, 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, NoTranslationGeneratedError, 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, streamTranslate as experimental_streamTranslate, 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
@@ -10,6 +10,7 @@ import {
10
10
  asSchema as asSchema8,
11
11
  createIdGenerator as createIdGenerator9,
12
12
  dynamicTool,
13
+ experimental_toolCaller,
13
14
  generateId,
14
15
  jsonSchema,
15
16
  parseJsonEventStream as parseJsonEventStream3,
@@ -1142,7 +1143,7 @@ import {
1142
1143
  } from "@ai-sdk/provider-utils";
1143
1144
 
1144
1145
  // src/version.ts
1145
- var VERSION = true ? "7.0.41" : "0.0.0-test";
1146
+ var VERSION = true ? "7.0.43" : "0.0.0-test";
1146
1147
 
1147
1148
  // src/util/download/download.ts
1148
1149
  var download = async ({
@@ -3955,6 +3956,25 @@ async function doParseToolCall({
3955
3956
  };
3956
3957
  }
3957
3958
 
3959
+ // src/generate-text/prepare-step-call-settings.ts
3960
+ function prepareStepCallSettings({
3961
+ callSettings,
3962
+ stepSettings
3963
+ }) {
3964
+ var _a23, _b, _c, _d, _e, _f, _g, _h, _i;
3965
+ return prepareLanguageModelCallOptions({
3966
+ maxOutputTokens: (_a23 = stepSettings == null ? void 0 : stepSettings.maxOutputTokens) != null ? _a23 : callSettings.maxOutputTokens,
3967
+ temperature: (_b = stepSettings == null ? void 0 : stepSettings.temperature) != null ? _b : callSettings.temperature,
3968
+ topP: (_c = stepSettings == null ? void 0 : stepSettings.topP) != null ? _c : callSettings.topP,
3969
+ topK: (_d = stepSettings == null ? void 0 : stepSettings.topK) != null ? _d : callSettings.topK,
3970
+ presencePenalty: (_e = stepSettings == null ? void 0 : stepSettings.presencePenalty) != null ? _e : callSettings.presencePenalty,
3971
+ frequencyPenalty: (_f = stepSettings == null ? void 0 : stepSettings.frequencyPenalty) != null ? _f : callSettings.frequencyPenalty,
3972
+ stopSequences: (_g = stepSettings == null ? void 0 : stepSettings.stopSequences) != null ? _g : callSettings.stopSequences,
3973
+ seed: (_h = stepSettings == null ? void 0 : stepSettings.seed) != null ? _h : callSettings.seed,
3974
+ reasoning: (_i = stepSettings == null ? void 0 : stepSettings.reasoning) != null ? _i : callSettings.reasoning
3975
+ });
3976
+ }
3977
+
3958
3978
  // src/generate-text/reasoning-output.ts
3959
3979
  function unwrapReasoningFileData(data) {
3960
3980
  if (typeof data === "object" && data !== null && "type" in data) {
@@ -4857,6 +4877,124 @@ function sortToolResultContentByToolCallOrder({
4857
4877
  );
4858
4878
  }
4859
4879
 
4880
+ // src/generate-text/tool-caller-configuration.ts
4881
+ import {
4882
+ experimental_getToolCaller
4883
+ } from "@ai-sdk/provider-utils";
4884
+ function resolveToolCallerConfiguration({
4885
+ tools,
4886
+ toolCallers
4887
+ }) {
4888
+ if (tools == null || toolCallers == null) {
4889
+ return void 0;
4890
+ }
4891
+ const namesByReference = /* @__PURE__ */ new WeakMap();
4892
+ const callerReferences = {};
4893
+ for (const [toolName, tool2] of Object.entries(tools)) {
4894
+ if (experimental_getToolCaller(tool2) == null) {
4895
+ continue;
4896
+ }
4897
+ const reference = Object.freeze({ toolName });
4898
+ namesByReference.set(reference, toolName);
4899
+ callerReferences[toolName] = reference;
4900
+ }
4901
+ const configuration = toolCallers(callerReferences);
4902
+ const resolved = {};
4903
+ for (const [toolName, callers] of Object.entries(configuration)) {
4904
+ if (!Object.prototype.hasOwnProperty.call(tools, toolName)) {
4905
+ throw new InvalidArgumentError({
4906
+ parameter: "experimental_toolCallers",
4907
+ value: configuration,
4908
+ message: `unknown tool "${toolName}".`
4909
+ });
4910
+ }
4911
+ if (!Array.isArray(callers)) {
4912
+ throw new InvalidArgumentError({
4913
+ parameter: "experimental_toolCallers",
4914
+ value: configuration,
4915
+ message: `callers for tool "${toolName}" must be an array.`
4916
+ });
4917
+ }
4918
+ resolved[toolName] = callers.map((caller) => {
4919
+ if (caller === "direct") {
4920
+ return caller;
4921
+ }
4922
+ const callerName = caller != null && typeof caller === "object" ? namesByReference.get(caller) : void 0;
4923
+ if (callerName == null) {
4924
+ throw new InvalidArgumentError({
4925
+ parameter: "experimental_toolCallers",
4926
+ value: configuration,
4927
+ message: `tool "${toolName}" contains an invalid caller reference.`
4928
+ });
4929
+ }
4930
+ return callerName;
4931
+ });
4932
+ }
4933
+ return resolved;
4934
+ }
4935
+ function prepareToolsForToolCallers({
4936
+ tools,
4937
+ toolCallers
4938
+ }) {
4939
+ var _a23, _b;
4940
+ if (tools == null || toolCallers == null) {
4941
+ return { executionTools: tools, modelTools: tools };
4942
+ }
4943
+ const executionTools = { ...tools };
4944
+ const modelTools = { ...tools };
4945
+ const localToolsByCaller = /* @__PURE__ */ new Map();
4946
+ for (const [toolName, callerNames] of Object.entries(toolCallers)) {
4947
+ const tool2 = executionTools[toolName];
4948
+ if (tool2 == null) {
4949
+ continue;
4950
+ }
4951
+ let availableDirectly = false;
4952
+ let availableToProvider = false;
4953
+ let preparedTool = tool2;
4954
+ for (const callerName of callerNames) {
4955
+ if (callerName === "direct") {
4956
+ availableDirectly = true;
4957
+ continue;
4958
+ }
4959
+ const caller = experimental_getToolCaller(executionTools[callerName]);
4960
+ if (caller == null) {
4961
+ continue;
4962
+ }
4963
+ if (caller.type === "provider") {
4964
+ availableToProvider = true;
4965
+ preparedTool = {
4966
+ ...preparedTool,
4967
+ providerOptions: caller.prepareProviderOptions(
4968
+ preparedTool.providerOptions
4969
+ )
4970
+ };
4971
+ } else {
4972
+ const localTools = (_a23 = localToolsByCaller.get(callerName)) != null ? _a23 : {};
4973
+ localTools[toolName] = preparedTool;
4974
+ localToolsByCaller.set(callerName, localTools);
4975
+ }
4976
+ }
4977
+ executionTools[toolName] = preparedTool;
4978
+ if (availableDirectly || availableToProvider) {
4979
+ modelTools[toolName] = preparedTool;
4980
+ } else {
4981
+ delete modelTools[toolName];
4982
+ }
4983
+ }
4984
+ for (const [callerName, callerTool] of Object.entries(executionTools)) {
4985
+ const caller = experimental_getToolCaller(callerTool);
4986
+ if ((caller == null ? void 0 : caller.type) !== "local") {
4987
+ continue;
4988
+ }
4989
+ const boundCaller = caller.bind((_b = localToolsByCaller.get(callerName)) != null ? _b : {});
4990
+ executionTools[callerName] = boundCaller;
4991
+ if (Object.prototype.hasOwnProperty.call(modelTools, callerName)) {
4992
+ modelTools[callerName] = boundCaller;
4993
+ }
4994
+ }
4995
+ return { executionTools, modelTools };
4996
+ }
4997
+
4860
4998
  // src/generate-text/tool-approval-signature.ts
4861
4999
  import { convertBase64ToUint8Array as convertBase64ToUint8Array2 } from "@ai-sdk/provider-utils";
4862
5000
 
@@ -5083,6 +5221,7 @@ async function generateText({
5083
5221
  experimental_sandbox: sandbox,
5084
5222
  output,
5085
5223
  toolApproval,
5224
+ experimental_toolCallers,
5086
5225
  experimental_toolApprovalSecret,
5087
5226
  experimental_telemetry,
5088
5227
  telemetry = experimental_telemetry,
@@ -5128,6 +5267,10 @@ async function generateText({
5128
5267
  responseBody: (_c = include == null ? void 0 : include.responseBody) != null ? _c : false
5129
5268
  };
5130
5269
  const model = resolveLanguageModel(modelArg);
5270
+ const resolvedToolCallers = resolveToolCallerConfiguration({
5271
+ tools,
5272
+ toolCallers: experimental_toolCallers
5273
+ });
5131
5274
  const stopConditions = asArray5(stopWhen);
5132
5275
  const resolvedOnStart = onStart != null ? onStart : experimental_onStart;
5133
5276
  const resolvedOnStepStart = onStepStart != null ? onStepStart : experimental_onStepStart;
@@ -5366,9 +5509,16 @@ async function generateText({
5366
5509
  tools,
5367
5510
  activeTools: (_h = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _h : activeTools
5368
5511
  });
5512
+ const {
5513
+ executionTools: stepExecutionTools,
5514
+ modelTools: stepModelTools
5515
+ } = prepareToolsForToolCallers({
5516
+ tools: stepActiveTools,
5517
+ toolCallers: resolvedToolCallers
5518
+ });
5369
5519
  const stepToolOrder = (_i = prepareStepResult == null ? void 0 : prepareStepResult.toolOrder) != null ? _i : toolOrder;
5370
5520
  const stepTools = await prepareTools({
5371
- tools: stepActiveTools,
5521
+ tools: stepModelTools,
5372
5522
  toolOrder: stepToolOrder,
5373
5523
  // active tools context is a subset of the tools context, so we can cast to the unknown type
5374
5524
  toolsContext,
@@ -5382,6 +5532,10 @@ async function generateText({
5382
5532
  providerOptions,
5383
5533
  prepareStepResult == null ? void 0 : prepareStepResult.providerOptions
5384
5534
  );
5535
+ const stepCallSettings = prepareStepCallSettings({
5536
+ callSettings: callSettings2,
5537
+ stepSettings: prepareStepResult
5538
+ });
5385
5539
  await notify({
5386
5540
  event: {
5387
5541
  callId,
@@ -5414,7 +5568,7 @@ async function generateText({
5414
5568
  instructions: stepInstructions,
5415
5569
  messages: stepMessages,
5416
5570
  tools: stepTools,
5417
- ...callSettings2
5571
+ ...stepCallSettings
5418
5572
  };
5419
5573
  const languageModelCallStartEvent = {
5420
5574
  callId,
@@ -5435,7 +5589,7 @@ async function generateText({
5435
5589
  {
5436
5590
  ...languageModelCallStartEvent,
5437
5591
  execute: async () => await stepModel.doGenerate({
5438
- ...callSettings2,
5592
+ ...stepCallSettings,
5439
5593
  tools: stepTools,
5440
5594
  toolChoice: stepToolChoice,
5441
5595
  responseFormat: await (output == null ? void 0 : output.responseFormat),
@@ -5465,7 +5619,7 @@ async function generateText({
5465
5619
  ).map(
5466
5620
  (toolCall) => parseToolCall({
5467
5621
  toolCall,
5468
- tools,
5622
+ tools: stepExecutionTools,
5469
5623
  repairToolCall,
5470
5624
  refineToolInput,
5471
5625
  instructions: stepInstructions,
@@ -5520,7 +5674,7 @@ async function generateText({
5520
5674
  if (toolCall.invalid) {
5521
5675
  continue;
5522
5676
  }
5523
- const tool2 = getOwn(tools, toolCall.toolName);
5677
+ const tool2 = getOwn(stepExecutionTools, toolCall.toolName);
5524
5678
  if (tool2 == null) {
5525
5679
  continue;
5526
5680
  }
@@ -5542,7 +5696,7 @@ async function generateText({
5542
5696
  });
5543
5697
  }
5544
5698
  const toolApprovalStatus = await resolveToolApproval({
5545
- tools,
5699
+ tools: stepExecutionTools,
5546
5700
  toolApproval,
5547
5701
  toolCall,
5548
5702
  messages: stepMessages,
@@ -5632,12 +5786,12 @@ async function generateText({
5632
5786
  (toolApprovalResponse) => toolApprovalResponse.approved === false
5633
5787
  );
5634
5788
  const toolExecutionMs = {};
5635
- if (tools != null) {
5789
+ if (stepExecutionTools != null) {
5636
5790
  const toolExecutionResults = await executeTools({
5637
5791
  toolCalls: clientToolCalls.filter(
5638
5792
  (toolCall) => !toolCall.invalid && !blockedToolCallIds.has(toolCall.toolCallId)
5639
5793
  ),
5640
- tools,
5794
+ tools: stepExecutionTools,
5641
5795
  callId,
5642
5796
  messages: stepMessages,
5643
5797
  abortSignal: mergedAbortSignal,
@@ -5689,7 +5843,7 @@ async function generateText({
5689
5843
  for (const toolCall of stepToolCalls) {
5690
5844
  if (!toolCall.providerExecuted)
5691
5845
  continue;
5692
- const tool2 = getOwn(tools, toolCall.toolName);
5846
+ const tool2 = getOwn(stepExecutionTools, toolCall.toolName);
5693
5847
  if ((tool2 == null ? void 0 : tool2.type) === "provider" && tool2.supportsDeferredResults) {
5694
5848
  const hasResultInResponse = currentModelResponse.content.some(
5695
5849
  (part) => part.type === "tool-result" && part.toolCallId === toolCall.toolCallId
@@ -8777,6 +8931,10 @@ function createOutputTransformStream(output) {
8777
8931
  text2 += chunk.text;
8778
8932
  textChunk += chunk.text;
8779
8933
  textProviderMetadata = (_a23 = chunk.providerMetadata) != null ? _a23 : textProviderMetadata;
8934
+ if (chunk.text.length === 0 && chunk.providerMetadata != null) {
8935
+ controller.enqueue({ part: chunk, partialOutput: void 0 });
8936
+ return;
8937
+ }
8780
8938
  const result = await output.parsePartialOutput({ text: text2 });
8781
8939
  if (result !== void 0) {
8782
8940
  const currentValue = typeof result.partial === "string" ? result.partial : JSON.stringify(result.partial);
@@ -9480,6 +9638,10 @@ var DefaultStreamTextResult = class {
9480
9638
  providerOptions,
9481
9639
  prepareStepResult == null ? void 0 : prepareStepResult.providerOptions
9482
9640
  );
9641
+ const stepCallSettings = prepareStepCallSettings({
9642
+ callSettings,
9643
+ stepSettings: prepareStepResult
9644
+ });
9483
9645
  const stepStartTimestampMs = now2();
9484
9646
  const { retry } = prepareRetries({ maxRetries, abortSignal });
9485
9647
  const {
@@ -9547,7 +9709,7 @@ var DefaultStreamTextResult = class {
9547
9709
  _internal: {
9548
9710
  now: now2
9549
9711
  },
9550
- ...callSettings
9712
+ ...stepCallSettings
9551
9713
  });
9552
9714
  }
9553
9715
  )
@@ -9664,7 +9826,7 @@ var DefaultStreamTextResult = class {
9664
9826
  break;
9665
9827
  }
9666
9828
  case "text-delta": {
9667
- if (chunk.text.length > 0) {
9829
+ if (chunk.text.length > 0 || chunk.providerMetadata != null) {
9668
9830
  controller.enqueue(chunk);
9669
9831
  }
9670
9832
  break;
@@ -17594,6 +17756,7 @@ export {
17594
17756
  streamLanguageModelCall as experimental_streamLanguageModelCall,
17595
17757
  streamTranscribe as experimental_streamTranscribe,
17596
17758
  streamTranslate as experimental_streamTranslate,
17759
+ experimental_toolCaller,
17597
17760
  experimental_transcribe,
17598
17761
  extractJsonMiddleware,
17599
17762
  extractReasoningMiddleware,