/**
 * @license
 * Copyright 2025 OElite Platform
 * SPDX-License-Identifier: Apache-2.0
 */
import type { IProvider, ProviderConfig, ProviderInitResult, ProviderHealth, ModelInfo } from './types.js';
import type { ProviderType } from './types.js';
/**
 * Base provider class with common functionality
 */
export declare abstract class BaseProvider implements IProvider {
    readonly type: ProviderType;
    readonly name: string;
    readonly config: ProviderConfig;
    protected initialized: boolean;
    constructor(config: ProviderConfig);
    /**
     * Initialize the provider
     */
    initialize(): Promise<ProviderInitResult>;
    /**
     * Provider-specific initialization logic
     */
    protected abstract doInitialize(): Promise<void>;
    /**
     * Check if the provider is properly configured
     */
    isConfigured(): boolean;
    /**
     * Get API key from environment variables
     */
    protected getApiKeyFromEnv(): string | undefined;
    /**
     * Get base URL from environment variables
     */
    protected getBaseUrlFromEnv(): string | undefined;
    /**
     * Get effective API key (from config or environment)
     */
    protected getEffectiveApiKey(): string | undefined;
    /**
     * Get effective base URL (from config or environment)
     */
    protected getEffectiveBaseUrl(): string | undefined;
    /**
     * Get list of available models from this provider
     */
    abstract getAvailableModels(): Promise<ModelInfo[]>;
    /**
     * Check provider health
     */
    checkHealth(): Promise<ProviderHealth>;
    /**
     * Provider-specific health check
     */
    protected abstract doHealthCheck(): Promise<void>;
    /**
     * Get a specific model by ID
     */
    getModel(modelId: string): Promise<ModelInfo | null>;
    /**
     * Create a completion request
     */
    abstract createCompletion(model: string, messages: any[], options?: any): Promise<any>;
    /**
     * Create a streaming completion request
     */
    abstract createStreamingCompletion(model: string, messages: any[], options?: any): AsyncIterable<any>;
    /**
     * Validate model ID for this provider
     */
    protected validateModel(modelId: string): Promise<void>;
}
