export interface ProviderMessage {
    role: string;
    content: any;
}
export interface ProviderCapabilities {
    [key: string]: boolean | number | string | undefined;
}
export type ProviderConfig = Record<string, any>;
export type ProviderResult = Record<string, any>;
export type ProviderModelDescriptor = string | Record<string, any>;
export declare class BaseProvider {
    [key: string]: any;
    config: ProviderConfig;
    modelConfig: ProviderConfig | null;
    capabilities: ProviderCapabilities;
    constructor(config: ProviderConfig);
    /**
     * Returns the name of the provider.
     * @returns {string} The provider's name (e.g., 'openai', 'azure').
     */
    getName(): void;
    /**
     * Checks if the provider is available and configured correctly.
     * @returns {boolean} True if the provider is available, false otherwise.
     */
    isAvailable(): boolean;
    /**
     * Generates a completion from the AI model.
     * @param {Array<object>} messages - The array of messages for the conversation.
     * @param {object} options - Additional options for the completion (e.g., max_tokens).
     * @returns {Promise<object>} The AI's response.
     */
    generateCompletion(_messages: ProviderMessage[], _options?: ProviderConfig): Promise<ProviderResult>;
    /**
     * Recommends a model based on the commit details.
     * @param {object} commitDetails - Details about the commit (e.g., files changed, lines changed).
     * @returns {object} The recommended model and reason.
     */
    getModelRecommendation(_commitDetails: ProviderConfig): ProviderResult;
    /**
     * Selects optimal model based on analysis
     * @param {object} commitInfo - Commit analysis information
     * @returns {Promise<object>} Optimal model selection
     */
    selectOptimalModel(commitInfo: ProviderConfig): Promise<ProviderResult>;
    /**
     * Validates if a specific model is available for the provider.
     * @param {string} modelName - The name of the model to validate.
     * @returns {Promise<object>} An object indicating availability and capabilities.
     */
    validateModelAvailability(_modelName: string): Promise<ProviderResult>;
    /**
     * Tests the connection to the provider's API.
     * @returns {Promise<object>} An object indicating success or failure.
     */
    testConnection(): Promise<ProviderResult>;
    /**
     * Gets the capabilities of the provider or a specific model.
     * @param {string} [modelName] - Optional model name to get specific capabilities.
     * @returns {object} An object listing the provider's capabilities.
     */
    getCapabilities(_modelName?: string): ProviderCapabilities;
    /**
     * Gets available models for this provider
     * @returns {Promise<Array>} List of available models
     */
    getAvailableModels(): ProviderModelDescriptor[] | Promise<ProviderModelDescriptor[]>;
    /**
     * Gets the default model for this provider
     * @returns {string} Default model name
     */
    getDefaultModel(): string;
    /**
     * Gets provider configuration
     * @returns {object} Provider configuration
     */
    getConfiguration(): ProviderConfig;
    /**
     * Gets required environment variables for this provider
     * @returns {Array<string>} List of required env vars
     */
    getRequiredEnvVars(): string[];
    /**
     * Gets provider information for display purposes.
     * @returns {string} Provider information string.
     */
    getProviderInfo(): string | ProviderConfig;
    /**
     * Test a specific model
     * @param {string} modelName - Model to test
     * @returns {Promise<object>} Test result
     */
    testModel(modelName: string): Promise<ProviderResult>;
    /**
     * Gets provider-specific configuration for the model config system
     * @returns {object} Provider model configuration
     */
    getProviderModelConfig(): ProviderConfig;
    /**
     * Gets provider configuration for client initialization
     * @returns {object} Provider configuration
     */
    getProviderConfig(): ProviderConfig;
    buildClientOptions(extraDefaults?: ProviderConfig): ProviderConfig;
    handleProviderError(error: Error, operation: string, context?: ProviderConfig): ProviderResult;
}
export default BaseProvider;
