/**
 * SpecVerse LLM Provider Interface
 * Abstracts different LLM providers (OpenAI, Anthropic, Azure, local)
 */
export interface LLMMessage {
    role: 'system' | 'user' | 'assistant';
    content: string;
}
export interface LLMCompletionOptions {
    messages: LLMMessage[];
    max_tokens?: number;
    temperature?: number;
    top_p?: number;
    stop?: string[];
    stream?: boolean;
}
export interface LLMCompletionResponse {
    content: string;
    usage?: {
        prompt_tokens: number;
        completion_tokens: number;
        total_tokens: number;
    };
    finish_reason?: 'stop' | 'length' | 'content_filter';
    model?: string;
}
export interface LLMProviderConfig {
    apiKey?: string;
    baseURL?: string;
    model: string;
    timeout?: number;
    retries?: number;
    defaultOptions?: Partial<LLMCompletionOptions>;
}
export interface LLMStreamChunk {
    content: string;
    finished: boolean;
    usage?: LLMCompletionResponse['usage'];
}
/**
 * Abstract base class for LLM providers
 */
export declare abstract class LLMProvider {
    protected config: LLMProviderConfig;
    constructor(config: LLMProviderConfig);
    /**
     * Complete a conversation with the LLM
     */
    abstract complete(options: LLMCompletionOptions): Promise<LLMCompletionResponse>;
    /**
     * Stream a conversation with the LLM
     */
    abstract stream(options: LLMCompletionOptions): AsyncIterable<LLMStreamChunk>;
    /**
     * Test the provider connection
     */
    abstract test(): Promise<boolean>;
    /**
     * Get provider information
     */
    abstract getInfo(): {
        name: string;
        version: string;
        models: string[];
        capabilities: string[];
    };
    /**
     * Update configuration
     */
    configure(newConfig: Partial<LLMProviderConfig>): void;
    /**
     * Get current configuration (without sensitive data)
     */
    getConfig(): Omit<LLMProviderConfig, 'apiKey'>;
    /**
     * Validate configuration
     */
    protected validateConfig(): void;
    /**
     * Merge completion options with defaults
     */
    protected mergeOptions(options: LLMCompletionOptions): LLMCompletionOptions;
    /**
     * Handle provider errors
     */
    protected handleError(error: any): never;
}
/**
 * Provider registry for managing multiple providers
 */
export declare class LLMProviderRegistry {
    private providers;
    private defaultProvider?;
    /**
     * Register a provider
     */
    register(name: string, provider: LLMProvider): void;
    /**
     * Get a provider by name
     */
    get(name?: string): LLMProvider;
    /**
     * Set default provider
     */
    setDefault(name: string): void;
    /**
     * List all registered providers
     */
    list(): Array<{
        name: string;
        info: ReturnType<LLMProvider['getInfo']>;
    }>;
    /**
     * Test all providers
     */
    testAll(): Promise<Array<{
        name: string;
        success: boolean;
        error?: string;
    }>>;
    /**
     * Clear all providers
     */
    clear(): void;
}
export declare const llmRegistry: LLMProviderRegistry;
//# sourceMappingURL=llm-provider.d.ts.map