ai 5.0.36 → 5.0.37

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,11 @@
1
1
  # ai
2
2
 
3
+ ## 5.0.37
4
+
5
+ ### Patch Changes
6
+
7
+ - d6785d7: feat (ai): add tool and agent helpers
8
+
3
9
  ## 5.0.36
4
10
 
5
11
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -1491,40 +1491,48 @@ type DataUIPart<DATA_TYPES extends UIDataTypes> = ValueOf<{
1491
1491
  data: DATA_TYPES[NAME];
1492
1492
  };
1493
1493
  }>;
1494
+ type asUITool<TOOL extends UITool | Tool> = TOOL extends Tool ? InferUITool<TOOL> : TOOL;
1495
+ /**
1496
+ * A UI tool invocation contains all the information needed to render a tool invocation in the UI.
1497
+ * It can be derived from a tool without knowing the tool name, and can be used to define
1498
+ * UI components for the tool.
1499
+ */
1500
+ type UIToolInvocation<TOOL extends UITool | Tool> = {
1501
+ toolCallId: string;
1502
+ } & ({
1503
+ state: 'input-streaming';
1504
+ input: DeepPartial<asUITool<TOOL>['input']> | undefined;
1505
+ providerExecuted?: boolean;
1506
+ output?: never;
1507
+ errorText?: never;
1508
+ } | {
1509
+ state: 'input-available';
1510
+ input: asUITool<TOOL>['input'];
1511
+ providerExecuted?: boolean;
1512
+ output?: never;
1513
+ errorText?: never;
1514
+ callProviderMetadata?: ProviderMetadata;
1515
+ } | {
1516
+ state: 'output-available';
1517
+ input: asUITool<TOOL>['input'];
1518
+ output: asUITool<TOOL>['output'];
1519
+ errorText?: never;
1520
+ providerExecuted?: boolean;
1521
+ callProviderMetadata?: ProviderMetadata;
1522
+ preliminary?: boolean;
1523
+ } | {
1524
+ state: 'output-error';
1525
+ input: asUITool<TOOL>['input'] | undefined;
1526
+ rawInput?: unknown;
1527
+ output?: never;
1528
+ errorText: string;
1529
+ providerExecuted?: boolean;
1530
+ callProviderMetadata?: ProviderMetadata;
1531
+ });
1494
1532
  type ToolUIPart<TOOLS extends UITools = UITools> = ValueOf<{
1495
1533
  [NAME in keyof TOOLS & string]: {
1496
1534
  type: `tool-${NAME}`;
1497
- toolCallId: string;
1498
- } & ({
1499
- state: 'input-streaming';
1500
- input: DeepPartial<TOOLS[NAME]['input']> | undefined;
1501
- providerExecuted?: boolean;
1502
- output?: never;
1503
- errorText?: never;
1504
- } | {
1505
- state: 'input-available';
1506
- input: TOOLS[NAME]['input'];
1507
- providerExecuted?: boolean;
1508
- output?: never;
1509
- errorText?: never;
1510
- callProviderMetadata?: ProviderMetadata;
1511
- } | {
1512
- state: 'output-available';
1513
- input: TOOLS[NAME]['input'];
1514
- output: TOOLS[NAME]['output'];
1515
- errorText?: never;
1516
- providerExecuted?: boolean;
1517
- callProviderMetadata?: ProviderMetadata;
1518
- preliminary?: boolean;
1519
- } | {
1520
- state: 'output-error';
1521
- input: TOOLS[NAME]['input'] | undefined;
1522
- rawInput?: unknown;
1523
- output?: never;
1524
- errorText: string;
1525
- providerExecuted?: boolean;
1526
- callProviderMetadata?: ProviderMetadata;
1527
- });
1535
+ } & UIToolInvocation<TOOLS[NAME]>;
1528
1536
  }>;
1529
1537
  type DynamicToolUIPart = {
1530
1538
  type: 'dynamic-tool';
@@ -2142,6 +2150,7 @@ type AgentSettings<TOOLS extends ToolSet, OUTPUT = never, OUTPUT_PARTIAL = never
2142
2150
  declare class Agent<TOOLS extends ToolSet, OUTPUT = never, OUTPUT_PARTIAL = never> {
2143
2151
  private readonly settings;
2144
2152
  constructor(settings: AgentSettings<TOOLS, OUTPUT, OUTPUT_PARTIAL>);
2153
+ get tools(): TOOLS;
2145
2154
  generate(options: Prompt & {
2146
2155
  /**
2147
2156
  Additional provider-specific metadata. They are passed through
@@ -2170,7 +2179,18 @@ declare class Agent<TOOLS extends ToolSet, OUTPUT = never, OUTPUT_PARTIAL = neve
2170
2179
  */
2171
2180
  providerOptions?: ProviderOptions;
2172
2181
  }): StreamTextResult<TOOLS, OUTPUT_PARTIAL>;
2182
+ /**
2183
+ * Creates a response object that streams UI messages to the client.
2184
+ */
2185
+ respond(options: {
2186
+ messages: UIMessage<never, never, InferUITools<TOOLS>>[];
2187
+ }): Response;
2173
2188
  }
2189
+ type InferAgentTools<AGENT> = AGENT extends Agent<infer TOOLS, any, any> ? TOOLS : never;
2190
+ /**
2191
+ * Infer the UI message type of an agent.
2192
+ */
2193
+ type InferAgentUIMessage<AGENT> = UIMessage<never, never, InferUITools<InferAgentTools<AGENT>>>;
2174
2194
 
2175
2195
  /**
2176
2196
  The result of an `embed` call.
@@ -4455,4 +4475,4 @@ declare global {
4455
4475
  var AI_SDK_LOG_WARNINGS: LogWarningsFunction | undefined | false;
4456
4476
  }
4457
4477
 
4458
- 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, LogWarningsFunction as Experimental_LogWarningsFunction, SpeechResult as Experimental_SpeechResult, TranscriptionResult as Experimental_TranscriptionResult, Warning as Experimental_Warning, 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 };
4478
+ 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, InferAgentUIMessage as Experimental_InferAgentUIMessage, LogWarningsFunction as Experimental_LogWarningsFunction, SpeechResult as Experimental_SpeechResult, TranscriptionResult as Experimental_TranscriptionResult, Warning as Experimental_Warning, 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, UIToolInvocation, 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
@@ -1491,40 +1491,48 @@ type DataUIPart<DATA_TYPES extends UIDataTypes> = ValueOf<{
1491
1491
  data: DATA_TYPES[NAME];
1492
1492
  };
1493
1493
  }>;
1494
+ type asUITool<TOOL extends UITool | Tool> = TOOL extends Tool ? InferUITool<TOOL> : TOOL;
1495
+ /**
1496
+ * A UI tool invocation contains all the information needed to render a tool invocation in the UI.
1497
+ * It can be derived from a tool without knowing the tool name, and can be used to define
1498
+ * UI components for the tool.
1499
+ */
1500
+ type UIToolInvocation<TOOL extends UITool | Tool> = {
1501
+ toolCallId: string;
1502
+ } & ({
1503
+ state: 'input-streaming';
1504
+ input: DeepPartial<asUITool<TOOL>['input']> | undefined;
1505
+ providerExecuted?: boolean;
1506
+ output?: never;
1507
+ errorText?: never;
1508
+ } | {
1509
+ state: 'input-available';
1510
+ input: asUITool<TOOL>['input'];
1511
+ providerExecuted?: boolean;
1512
+ output?: never;
1513
+ errorText?: never;
1514
+ callProviderMetadata?: ProviderMetadata;
1515
+ } | {
1516
+ state: 'output-available';
1517
+ input: asUITool<TOOL>['input'];
1518
+ output: asUITool<TOOL>['output'];
1519
+ errorText?: never;
1520
+ providerExecuted?: boolean;
1521
+ callProviderMetadata?: ProviderMetadata;
1522
+ preliminary?: boolean;
1523
+ } | {
1524
+ state: 'output-error';
1525
+ input: asUITool<TOOL>['input'] | undefined;
1526
+ rawInput?: unknown;
1527
+ output?: never;
1528
+ errorText: string;
1529
+ providerExecuted?: boolean;
1530
+ callProviderMetadata?: ProviderMetadata;
1531
+ });
1494
1532
  type ToolUIPart<TOOLS extends UITools = UITools> = ValueOf<{
1495
1533
  [NAME in keyof TOOLS & string]: {
1496
1534
  type: `tool-${NAME}`;
1497
- toolCallId: string;
1498
- } & ({
1499
- state: 'input-streaming';
1500
- input: DeepPartial<TOOLS[NAME]['input']> | undefined;
1501
- providerExecuted?: boolean;
1502
- output?: never;
1503
- errorText?: never;
1504
- } | {
1505
- state: 'input-available';
1506
- input: TOOLS[NAME]['input'];
1507
- providerExecuted?: boolean;
1508
- output?: never;
1509
- errorText?: never;
1510
- callProviderMetadata?: ProviderMetadata;
1511
- } | {
1512
- state: 'output-available';
1513
- input: TOOLS[NAME]['input'];
1514
- output: TOOLS[NAME]['output'];
1515
- errorText?: never;
1516
- providerExecuted?: boolean;
1517
- callProviderMetadata?: ProviderMetadata;
1518
- preliminary?: boolean;
1519
- } | {
1520
- state: 'output-error';
1521
- input: TOOLS[NAME]['input'] | undefined;
1522
- rawInput?: unknown;
1523
- output?: never;
1524
- errorText: string;
1525
- providerExecuted?: boolean;
1526
- callProviderMetadata?: ProviderMetadata;
1527
- });
1535
+ } & UIToolInvocation<TOOLS[NAME]>;
1528
1536
  }>;
1529
1537
  type DynamicToolUIPart = {
1530
1538
  type: 'dynamic-tool';
@@ -2142,6 +2150,7 @@ type AgentSettings<TOOLS extends ToolSet, OUTPUT = never, OUTPUT_PARTIAL = never
2142
2150
  declare class Agent<TOOLS extends ToolSet, OUTPUT = never, OUTPUT_PARTIAL = never> {
2143
2151
  private readonly settings;
2144
2152
  constructor(settings: AgentSettings<TOOLS, OUTPUT, OUTPUT_PARTIAL>);
2153
+ get tools(): TOOLS;
2145
2154
  generate(options: Prompt & {
2146
2155
  /**
2147
2156
  Additional provider-specific metadata. They are passed through
@@ -2170,7 +2179,18 @@ declare class Agent<TOOLS extends ToolSet, OUTPUT = never, OUTPUT_PARTIAL = neve
2170
2179
  */
2171
2180
  providerOptions?: ProviderOptions;
2172
2181
  }): StreamTextResult<TOOLS, OUTPUT_PARTIAL>;
2182
+ /**
2183
+ * Creates a response object that streams UI messages to the client.
2184
+ */
2185
+ respond(options: {
2186
+ messages: UIMessage<never, never, InferUITools<TOOLS>>[];
2187
+ }): Response;
2173
2188
  }
2189
+ type InferAgentTools<AGENT> = AGENT extends Agent<infer TOOLS, any, any> ? TOOLS : never;
2190
+ /**
2191
+ * Infer the UI message type of an agent.
2192
+ */
2193
+ type InferAgentUIMessage<AGENT> = UIMessage<never, never, InferUITools<InferAgentTools<AGENT>>>;
2174
2194
 
2175
2195
  /**
2176
2196
  The result of an `embed` call.
@@ -4455,4 +4475,4 @@ declare global {
4455
4475
  var AI_SDK_LOG_WARNINGS: LogWarningsFunction | undefined | false;
4456
4476
  }
4457
4477
 
4458
- 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, LogWarningsFunction as Experimental_LogWarningsFunction, SpeechResult as Experimental_SpeechResult, TranscriptionResult as Experimental_TranscriptionResult, Warning as Experimental_Warning, 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 };
4478
+ 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, InferAgentUIMessage as Experimental_InferAgentUIMessage, LogWarningsFunction as Experimental_LogWarningsFunction, SpeechResult as Experimental_SpeechResult, TranscriptionResult as Experimental_TranscriptionResult, Warning as Experimental_Warning, 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, UIToolInvocation, 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
@@ -5747,17 +5747,217 @@ var DefaultStreamTextResult = class {
5747
5747
  }
5748
5748
  };
5749
5749
 
5750
+ // src/ui/convert-to-model-messages.ts
5751
+ function convertToModelMessages(messages, options) {
5752
+ const modelMessages = [];
5753
+ if (options == null ? void 0 : options.ignoreIncompleteToolCalls) {
5754
+ messages = messages.map((message) => ({
5755
+ ...message,
5756
+ parts: message.parts.filter(
5757
+ (part) => !isToolOrDynamicToolUIPart(part) || part.state !== "input-streaming" && part.state !== "input-available"
5758
+ )
5759
+ }));
5760
+ }
5761
+ for (const message of messages) {
5762
+ switch (message.role) {
5763
+ case "system": {
5764
+ const textParts = message.parts.filter((part) => part.type === "text");
5765
+ const providerMetadata = textParts.reduce((acc, part) => {
5766
+ if (part.providerMetadata != null) {
5767
+ return { ...acc, ...part.providerMetadata };
5768
+ }
5769
+ return acc;
5770
+ }, {});
5771
+ modelMessages.push({
5772
+ role: "system",
5773
+ content: textParts.map((part) => part.text).join(""),
5774
+ ...Object.keys(providerMetadata).length > 0 ? { providerOptions: providerMetadata } : {}
5775
+ });
5776
+ break;
5777
+ }
5778
+ case "user": {
5779
+ modelMessages.push({
5780
+ role: "user",
5781
+ content: message.parts.filter(
5782
+ (part) => part.type === "text" || part.type === "file"
5783
+ ).map((part) => {
5784
+ switch (part.type) {
5785
+ case "text":
5786
+ return {
5787
+ type: "text",
5788
+ text: part.text,
5789
+ ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
5790
+ };
5791
+ case "file":
5792
+ return {
5793
+ type: "file",
5794
+ mediaType: part.mediaType,
5795
+ filename: part.filename,
5796
+ data: part.url,
5797
+ ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
5798
+ };
5799
+ default:
5800
+ return part;
5801
+ }
5802
+ })
5803
+ });
5804
+ break;
5805
+ }
5806
+ case "assistant": {
5807
+ if (message.parts != null) {
5808
+ let processBlock2 = function() {
5809
+ var _a17, _b;
5810
+ if (block.length === 0) {
5811
+ return;
5812
+ }
5813
+ const content = [];
5814
+ for (const part of block) {
5815
+ if (part.type === "text") {
5816
+ content.push({
5817
+ type: "text",
5818
+ text: part.text,
5819
+ ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
5820
+ });
5821
+ } else if (part.type === "file") {
5822
+ content.push({
5823
+ type: "file",
5824
+ mediaType: part.mediaType,
5825
+ filename: part.filename,
5826
+ data: part.url
5827
+ });
5828
+ } else if (part.type === "reasoning") {
5829
+ content.push({
5830
+ type: "reasoning",
5831
+ text: part.text,
5832
+ providerOptions: part.providerMetadata
5833
+ });
5834
+ } else if (part.type === "dynamic-tool") {
5835
+ const toolName = part.toolName;
5836
+ if (part.state !== "input-streaming") {
5837
+ content.push({
5838
+ type: "tool-call",
5839
+ toolCallId: part.toolCallId,
5840
+ toolName,
5841
+ input: part.input,
5842
+ ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
5843
+ });
5844
+ }
5845
+ } else if (isToolUIPart(part)) {
5846
+ const toolName = getToolName(part);
5847
+ if (part.state !== "input-streaming") {
5848
+ content.push({
5849
+ type: "tool-call",
5850
+ toolCallId: part.toolCallId,
5851
+ toolName,
5852
+ input: part.state === "output-error" ? (_a17 = part.input) != null ? _a17 : part.rawInput : part.input,
5853
+ providerExecuted: part.providerExecuted,
5854
+ ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
5855
+ });
5856
+ if (part.providerExecuted === true && (part.state === "output-available" || part.state === "output-error")) {
5857
+ content.push({
5858
+ type: "tool-result",
5859
+ toolCallId: part.toolCallId,
5860
+ toolName,
5861
+ output: createToolModelOutput({
5862
+ output: part.state === "output-error" ? part.errorText : part.output,
5863
+ tool: (_b = options == null ? void 0 : options.tools) == null ? void 0 : _b[toolName],
5864
+ errorMode: part.state === "output-error" ? "json" : "none"
5865
+ })
5866
+ });
5867
+ }
5868
+ }
5869
+ } else {
5870
+ const _exhaustiveCheck = part;
5871
+ throw new Error(`Unsupported part: ${_exhaustiveCheck}`);
5872
+ }
5873
+ }
5874
+ modelMessages.push({
5875
+ role: "assistant",
5876
+ content
5877
+ });
5878
+ const toolParts = block.filter(
5879
+ (part) => isToolUIPart(part) && part.providerExecuted !== true || part.type === "dynamic-tool"
5880
+ );
5881
+ if (toolParts.length > 0) {
5882
+ modelMessages.push({
5883
+ role: "tool",
5884
+ content: toolParts.map((toolPart) => {
5885
+ var _a18;
5886
+ switch (toolPart.state) {
5887
+ case "output-error":
5888
+ case "output-available": {
5889
+ const toolName = toolPart.type === "dynamic-tool" ? toolPart.toolName : getToolName(toolPart);
5890
+ return {
5891
+ type: "tool-result",
5892
+ toolCallId: toolPart.toolCallId,
5893
+ toolName,
5894
+ output: createToolModelOutput({
5895
+ output: toolPart.state === "output-error" ? toolPart.errorText : toolPart.output,
5896
+ tool: (_a18 = options == null ? void 0 : options.tools) == null ? void 0 : _a18[toolName],
5897
+ errorMode: toolPart.state === "output-error" ? "text" : "none"
5898
+ })
5899
+ };
5900
+ }
5901
+ default: {
5902
+ return null;
5903
+ }
5904
+ }
5905
+ }).filter(
5906
+ (output) => output != null
5907
+ )
5908
+ });
5909
+ }
5910
+ block = [];
5911
+ };
5912
+ var processBlock = processBlock2;
5913
+ let block = [];
5914
+ for (const part of message.parts) {
5915
+ if (part.type === "text" || part.type === "reasoning" || part.type === "file" || part.type === "dynamic-tool" || isToolUIPart(part)) {
5916
+ block.push(part);
5917
+ } else if (part.type === "step-start") {
5918
+ processBlock2();
5919
+ }
5920
+ }
5921
+ processBlock2();
5922
+ break;
5923
+ }
5924
+ break;
5925
+ }
5926
+ default: {
5927
+ const _exhaustiveCheck = message.role;
5928
+ throw new MessageConversionError({
5929
+ originalMessage: message,
5930
+ message: `Unsupported role: ${_exhaustiveCheck}`
5931
+ });
5932
+ }
5933
+ }
5934
+ }
5935
+ return modelMessages;
5936
+ }
5937
+ var convertToCoreMessages = convertToModelMessages;
5938
+
5750
5939
  // src/agent/agent.ts
5751
5940
  var Agent = class {
5752
5941
  constructor(settings) {
5753
5942
  this.settings = settings;
5754
5943
  }
5944
+ get tools() {
5945
+ return this.settings.tools;
5946
+ }
5755
5947
  async generate(options) {
5756
5948
  return generateText({ ...this.settings, ...options });
5757
5949
  }
5758
5950
  stream(options) {
5759
5951
  return streamText({ ...this.settings, ...options });
5760
5952
  }
5953
+ /**
5954
+ * Creates a response object that streams UI messages to the client.
5955
+ */
5956
+ respond(options) {
5957
+ return this.stream({
5958
+ prompt: convertToModelMessages(options.messages)
5959
+ }).toUIMessageStreamResponse();
5960
+ }
5761
5961
  };
5762
5962
 
5763
5963
  // src/embed/embed.ts
@@ -9638,195 +9838,6 @@ var AbstractChat = class {
9638
9838
  }
9639
9839
  };
9640
9840
 
9641
- // src/ui/convert-to-model-messages.ts
9642
- function convertToModelMessages(messages, options) {
9643
- const modelMessages = [];
9644
- if (options == null ? void 0 : options.ignoreIncompleteToolCalls) {
9645
- messages = messages.map((message) => ({
9646
- ...message,
9647
- parts: message.parts.filter(
9648
- (part) => !isToolOrDynamicToolUIPart(part) || part.state !== "input-streaming" && part.state !== "input-available"
9649
- )
9650
- }));
9651
- }
9652
- for (const message of messages) {
9653
- switch (message.role) {
9654
- case "system": {
9655
- const textParts = message.parts.filter((part) => part.type === "text");
9656
- const providerMetadata = textParts.reduce((acc, part) => {
9657
- if (part.providerMetadata != null) {
9658
- return { ...acc, ...part.providerMetadata };
9659
- }
9660
- return acc;
9661
- }, {});
9662
- modelMessages.push({
9663
- role: "system",
9664
- content: textParts.map((part) => part.text).join(""),
9665
- ...Object.keys(providerMetadata).length > 0 ? { providerOptions: providerMetadata } : {}
9666
- });
9667
- break;
9668
- }
9669
- case "user": {
9670
- modelMessages.push({
9671
- role: "user",
9672
- content: message.parts.filter(
9673
- (part) => part.type === "text" || part.type === "file"
9674
- ).map((part) => {
9675
- switch (part.type) {
9676
- case "text":
9677
- return {
9678
- type: "text",
9679
- text: part.text,
9680
- ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
9681
- };
9682
- case "file":
9683
- return {
9684
- type: "file",
9685
- mediaType: part.mediaType,
9686
- filename: part.filename,
9687
- data: part.url,
9688
- ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
9689
- };
9690
- default:
9691
- return part;
9692
- }
9693
- })
9694
- });
9695
- break;
9696
- }
9697
- case "assistant": {
9698
- if (message.parts != null) {
9699
- let processBlock2 = function() {
9700
- var _a17, _b;
9701
- if (block.length === 0) {
9702
- return;
9703
- }
9704
- const content = [];
9705
- for (const part of block) {
9706
- if (part.type === "text") {
9707
- content.push({
9708
- type: "text",
9709
- text: part.text,
9710
- ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}
9711
- });
9712
- } else if (part.type === "file") {
9713
- content.push({
9714
- type: "file",
9715
- mediaType: part.mediaType,
9716
- filename: part.filename,
9717
- data: part.url
9718
- });
9719
- } else if (part.type === "reasoning") {
9720
- content.push({
9721
- type: "reasoning",
9722
- text: part.text,
9723
- providerOptions: part.providerMetadata
9724
- });
9725
- } else if (part.type === "dynamic-tool") {
9726
- const toolName = part.toolName;
9727
- if (part.state !== "input-streaming") {
9728
- content.push({
9729
- type: "tool-call",
9730
- toolCallId: part.toolCallId,
9731
- toolName,
9732
- input: part.input,
9733
- ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
9734
- });
9735
- }
9736
- } else if (isToolUIPart(part)) {
9737
- const toolName = getToolName(part);
9738
- if (part.state !== "input-streaming") {
9739
- content.push({
9740
- type: "tool-call",
9741
- toolCallId: part.toolCallId,
9742
- toolName,
9743
- input: part.state === "output-error" ? (_a17 = part.input) != null ? _a17 : part.rawInput : part.input,
9744
- providerExecuted: part.providerExecuted,
9745
- ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}
9746
- });
9747
- if (part.providerExecuted === true && (part.state === "output-available" || part.state === "output-error")) {
9748
- content.push({
9749
- type: "tool-result",
9750
- toolCallId: part.toolCallId,
9751
- toolName,
9752
- output: createToolModelOutput({
9753
- output: part.state === "output-error" ? part.errorText : part.output,
9754
- tool: (_b = options == null ? void 0 : options.tools) == null ? void 0 : _b[toolName],
9755
- errorMode: part.state === "output-error" ? "json" : "none"
9756
- })
9757
- });
9758
- }
9759
- }
9760
- } else {
9761
- const _exhaustiveCheck = part;
9762
- throw new Error(`Unsupported part: ${_exhaustiveCheck}`);
9763
- }
9764
- }
9765
- modelMessages.push({
9766
- role: "assistant",
9767
- content
9768
- });
9769
- const toolParts = block.filter(
9770
- (part) => isToolUIPart(part) && part.providerExecuted !== true || part.type === "dynamic-tool"
9771
- );
9772
- if (toolParts.length > 0) {
9773
- modelMessages.push({
9774
- role: "tool",
9775
- content: toolParts.map((toolPart) => {
9776
- var _a18;
9777
- switch (toolPart.state) {
9778
- case "output-error":
9779
- case "output-available": {
9780
- const toolName = toolPart.type === "dynamic-tool" ? toolPart.toolName : getToolName(toolPart);
9781
- return {
9782
- type: "tool-result",
9783
- toolCallId: toolPart.toolCallId,
9784
- toolName,
9785
- output: createToolModelOutput({
9786
- output: toolPart.state === "output-error" ? toolPart.errorText : toolPart.output,
9787
- tool: (_a18 = options == null ? void 0 : options.tools) == null ? void 0 : _a18[toolName],
9788
- errorMode: toolPart.state === "output-error" ? "text" : "none"
9789
- })
9790
- };
9791
- }
9792
- default: {
9793
- return null;
9794
- }
9795
- }
9796
- }).filter(
9797
- (output) => output != null
9798
- )
9799
- });
9800
- }
9801
- block = [];
9802
- };
9803
- var processBlock = processBlock2;
9804
- let block = [];
9805
- for (const part of message.parts) {
9806
- if (part.type === "text" || part.type === "reasoning" || part.type === "file" || part.type === "dynamic-tool" || isToolUIPart(part)) {
9807
- block.push(part);
9808
- } else if (part.type === "step-start") {
9809
- processBlock2();
9810
- }
9811
- }
9812
- processBlock2();
9813
- break;
9814
- }
9815
- break;
9816
- }
9817
- default: {
9818
- const _exhaustiveCheck = message.role;
9819
- throw new MessageConversionError({
9820
- originalMessage: message,
9821
- message: `Unsupported role: ${_exhaustiveCheck}`
9822
- });
9823
- }
9824
- }
9825
- }
9826
- return modelMessages;
9827
- }
9828
- var convertToCoreMessages = convertToModelMessages;
9829
-
9830
9841
  // src/ui/last-assistant-message-is-complete-with-tool-calls.ts
9831
9842
  function lastAssistantMessageIsCompleteWithToolCalls({
9832
9843
  messages