@tanstack/ai
Version:
Core TanStack AI library - Open source AI SDK
61 lines (60 loc) • 2.46 kB
TypeScript
import { ModelMessage, UIMessage } from '../../types.js';
/**
* Convert UIMessages or ModelMessages to ModelMessages
*/
export declare function convertMessagesToModelMessages(messages: Array<UIMessage | ModelMessage>): Array<ModelMessage>;
/**
* Convert a UIMessage to ModelMessage(s)
*
* Walks the parts array IN ORDER to preserve the interleaving of text,
* tool calls, and tool results. This is critical for multi-round tool
* flows where the model generates text, calls a tool, gets the result,
* then generates more text and calls another tool.
*
* The output preserves the sequential structure:
* text1 → toolCall1 → toolResult1 → text2 → toolCall2 → toolResult2
* becomes:
* assistant: {content: "text1", toolCalls: [toolCall1]}
* tool: toolResult1
* assistant: {content: "text2", toolCalls: [toolCall2]}
* tool: toolResult2
*
* @param uiMessage - The UIMessage to convert
* @returns An array of ModelMessages preserving part ordering
*/
export declare function uiMessageToModelMessages(uiMessage: UIMessage): Array<ModelMessage>;
/**
* Convert a ModelMessage to UIMessage
*
* This conversion creates a parts-based structure:
* - content field → TextPart
* - toolCalls array → ToolCallPart[]
* - role="tool" messages should be converted separately and merged
*
* @param modelMessage - The ModelMessage to convert
* @param id - Optional ID for the UIMessage (generated if not provided)
* @returns A UIMessage with parts
*/
export declare function modelMessageToUIMessage(modelMessage: ModelMessage, id?: string): UIMessage;
/**
* Convert an array of ModelMessages to UIMessages
*
* This handles merging tool result messages with their corresponding assistant messages
*
* @param modelMessages - Array of ModelMessages to convert
* @returns Array of UIMessages
*/
export declare function modelMessagesToUIMessages(modelMessages: Array<ModelMessage>): Array<UIMessage>;
/**
* Normalize a message (UIMessage or ModelMessage) to a UIMessage
* Ensures the message has an ID and createdAt timestamp
*
* @param message - Either a UIMessage or ModelMessage
* @param generateId - Function to generate a message ID if needed
* @returns A UIMessage with guaranteed id and createdAt
*/
export declare function normalizeToUIMessage(message: UIMessage | ModelMessage, generateId: () => string): UIMessage;
/**
* Generate a unique message ID
*/
export declare function generateMessageId(): string;