/**
 * @license
 * Copyright 2025 OElite Platform
 * SPDX-License-Identifier: Apache-2.0
 */
import type { IProvider, ProviderConfig, ProviderFactory, ProviderHealth, ModelInfo, ModelSelectionCriteria } from './types.js';
import { ProviderType } from './types.js';
/**
 * Provider registry for managing multiple AI providers
 */
export declare class ProviderRegistry {
    private providers;
    private factories;
    private currentProvider?;
    constructor();
    /**
     * Register default provider factories
     */
    private registerDefaultFactories;
    /**
     * Register a provider factory
     */
    registerFactory(type: ProviderType, factory: ProviderFactory): void;
    /**
     * Register a provider instance
     */
    registerProvider(type: ProviderType, config: ProviderConfig): Promise<IProvider>;
    /**
     * Get a registered provider
     */
    getProvider(type: ProviderType): IProvider | undefined;
    /**
     * Get current active provider
     */
    getCurrentProvider(): IProvider | undefined;
    /**
     * Set current provider
     */
    setCurrentProvider(type: ProviderType): void;
    /**
     * Get all registered providers
     */
    getAllProviders(): IProvider[];
    /**
     * Get all configured providers (from environment)
     */
    discoverProvidersFromEnv(): Promise<ProviderType[]>;
    /**
     * Auto-initialize all configured providers from environment
     */
    autoInitializeProviders(): Promise<Map<ProviderType, boolean>>;
    /**
     * Check health of all registered providers
     */
    checkAllProvidersHealth(): Promise<Map<ProviderType, ProviderHealth>>;
    /**
     * Get all available models from all providers
     */
    getAllAvailableModels(): Promise<ModelInfo[]>;
    /**
     * Find best model matching criteria
     */
    findBestModel(criteria: ModelSelectionCriteria): Promise<ModelInfo | null>;
    /**
     * Get provider for a specific model
     */
    getProviderForModel(modelId: string): IProvider | undefined;
    /**
     * Unregister a provider
     */
    unregisterProvider(type: ProviderType): void;
    /**
     * Clear all providers
     */
    clear(): void;
    /**
     * Get provider statistics
     */
    getStatistics(): {
        totalProviders: number;
        configuredProviders: number;
        currentProvider?: string;
        availableProviders: ProviderType[];
    };
}
export declare const providerRegistry: ProviderRegistry;
