/** * Message format for chat interactions */ export interface ChatMessage { role: 'assistant' | 'user' | 'system'; content: string; } /** * Options for chat interactions */ export interface ChatOptions { systemMessage: string; userMessage: string; messageHistory: ChatMessage[]; } /** * Response format for chat interactions */ export interface ChatResponse { role: 'assistant'; message: string; } /** * Abstract base class for multi-modal AI models. * Provides a common interface for different AI providers (OpenAI, Anthropic, Perplexity, Ollama) */ export abstract class MultiModalModel { /** * Initializes the model and any necessary resources * Should be called before using any other methods */ abstract start(): Promise; /** * Cleans up any resources used by the model * Should be called when the model is no longer needed */ abstract stop(): Promise; /** * Synchronous chat interaction with the model * @param optionsArg Options containing system message, user message, and message history * @returns Promise resolving to the assistant's response */ public abstract chat(optionsArg: ChatOptions): Promise; /** * Streaming interface for chat interactions * Allows for real-time responses from the model * @param input Stream of user messages * @returns Stream of model responses */ public abstract chatStream(input: ReadableStream): Promise>; /** * Text-to-speech conversion * @param optionsArg Options containing the message to convert to speech * @returns Promise resolving to a readable stream of audio data * @throws Error if the provider doesn't support audio generation */ public abstract audio(optionsArg: { message: string }): Promise; }