/**
 * Factory utilities for creating AI providers
 * Provides convenient methods for instantiating and configuring providers
 */
import type { AIProviderConfig } from '../types/index.js';
import { ClaudeProvider, type ClaudeConfig } from '../providers/claude.js';
import { OpenAIProvider, type OpenAIConfig } from '../providers/openai.js';
import { GeminiProvider, type GeminiConfig } from '../providers/gemini.js';
import { OpenWebUIProvider, type OpenWebUIConfig } from '../providers/openwebui.js';
import { BaseAIProvider } from '../providers/base.js';
/**
 * Supported AI provider types
 */
export type ProviderType = 'claude' | 'openai' | 'gemini' | 'openwebui';
/**
 * Configuration map for different provider types
 */
export interface ProviderConfigMap {
    claude: ClaudeConfig;
    openai: OpenAIConfig;
    gemini: GeminiConfig;
    openwebui: OpenWebUIConfig;
}
/**
 * Factory function to create AI providers
 * @param type - The type of provider to create
 * @param config - Configuration for the provider
 * @returns Configured AI provider instance
 */
export declare function createProvider<T extends ProviderType>(type: T, config: ProviderConfigMap[T]): BaseAIProvider;
/**
 * Create a Claude provider with simplified configuration
 * @param apiKey - Anthropic API key
 * @param options - Optional additional configuration
 * @returns Configured Claude provider instance
 */
export declare function createClaudeProvider(apiKey: string, options?: Partial<Omit<ClaudeConfig, 'apiKey'>>): ClaudeProvider;
/**
 * Create an OpenAI provider with simplified configuration
 * @param apiKey - OpenAI API key
 * @param options - Optional additional configuration
 * @returns Configured OpenAI provider instance
 */
export declare function createOpenAIProvider(apiKey: string, options?: Partial<Omit<OpenAIConfig, 'apiKey'>>): OpenAIProvider;
/**
 * Create a Gemini provider with simplified configuration
 * @param apiKey - Google AI API key
 * @param options - Optional additional configuration
 * @returns Configured Gemini provider instance
 */
export declare function createGeminiProvider(apiKey: string, options?: Partial<Omit<GeminiConfig, 'apiKey'>>): GeminiProvider;
/**
 * Create an OpenWebUI provider instance
 */
export declare function createOpenWebUIProvider(config: OpenWebUIConfig): OpenWebUIProvider;
/**
 * Provider registry for dynamic provider creation
 */
export declare class ProviderRegistry {
    private static providers;
    /**
     * Register a new provider type
     * @param name - Name of the provider
     * @param providerClass - Provider class constructor
     */
    static register(name: string, providerClass: new (config: AIProviderConfig) => BaseAIProvider): void;
    /**
     * Create a provider by name
     * @param name - Name of the provider
     * @param config - Configuration for the provider
     * @returns Provider instance
     */
    static create(name: string, config: AIProviderConfig): BaseAIProvider;
    /**
     * Get list of registered provider names
     * @returns Array of registered provider names
     */
    static getRegisteredProviders(): string[];
    /**
     * Check if a provider is registered
     * @param name - Name of the provider
     * @returns True if provider is registered
     */
    static isRegistered(name: string): boolean;
}
/**
 * Registry of all available providers
 */
export declare const PROVIDER_REGISTRY: {
    readonly claude: typeof ClaudeProvider;
    readonly openai: typeof OpenAIProvider;
    readonly gemini: typeof GeminiProvider;
    readonly openwebui: typeof OpenWebUIProvider;
};
