export enum LLMProvider { OPENAI = 'openai', OLLAMA = 'ollama', GEMINI = 'gemini' } export interface LLMMessage { readonly role: 'system' | 'user' | 'assistant'; readonly content: string; readonly metadata?: Record; } export interface LLMResponse { readonly content: string; readonly usage?: { readonly promptTokens: number; readonly completionTokens: number; readonly totalTokens: number; }; readonly metadata?: Record; } export interface LLMOptions { readonly temperature?: number; readonly maxTokens?: number; readonly topP?: number; readonly frequencyPenalty?: number; readonly presencePenalty?: number; readonly model?: string; readonly timeout?: number; } export interface LLMPort { /** * Generate a response from the LLM */ generateResponse( messages: LLMMessage[], options?: LLMOptions ): Promise; /** * Generate a response with streaming support */ generateStreamingResponse( messages: LLMMessage[], options?: LLMOptions, onChunk?: (chunk: string) => void ): Promise; /** * Get available models */ getAvailableModels(): Promise; /** * Check if the LLM service is available */ isAvailable(): Promise; /** * Get model information */ getModelInfo(modelName: string): Promise<{ readonly name: string; readonly maxTokens: number; readonly contextWindow: number; readonly capabilities: string[]; } | null>; }