/**
 * @license
 * Copyright 2025 OElite Platform
 * SPDX-License-Identifier: Apache-2.0
 */
/**
 * Supported AI providers for Arc CLI
 */
export declare enum ProviderType {
    ANTHROPIC = "anthropic",
    OPENAI = "openai",
    GOOGLE = "google",
    AZURE = "azure",
    AWS_BEDROCK = "aws-bedrock",
    DASHSCOPE = "dashscope",
    OPENROUTER = "openrouter",
    OLLAMA = "ollama",
    CUSTOM = "custom"
}
/**
 * Authentication method for a provider
 */
export declare enum AuthMethod {
    API_KEY = "api-key",
    OAUTH = "oauth",
    AWS_CREDENTIALS = "aws-credentials",
    GOOGLE_CLOUD = "google-cloud",
    AZURE_AD = "azure-ad",
    NONE = "none"
}
/**
 * Model capabilities
 */
export interface ModelCapabilities {
    supportsVision?: boolean;
    supportsStreaming?: boolean;
    supportsFunctionCalling?: boolean;
    supportsJsonMode?: boolean;
    supportsThinking?: boolean;
    maxTokens?: number;
    contextWindow?: number;
}
/**
 * Model pricing information (per 1M tokens)
 */
export interface ModelPricing {
    inputPrice?: number;
    outputPrice?: number;
    currency?: string;
}
/**
 * Model metadata
 */
export interface ModelInfo {
    id: string;
    name: string;
    provider: ProviderType;
    description?: string;
    capabilities: ModelCapabilities;
    pricing?: ModelPricing;
    deprecated?: boolean;
    releaseDate?: string;
}
/**
 * Provider configuration
 */
export interface ProviderConfig {
    type: ProviderType;
    name: string;
    enabled: boolean;
    authMethod: AuthMethod;
    apiKey?: string;
    baseUrl?: string;
    region?: string;
    projectId?: string;
    customHeaders?: Record<string, string>;
    timeout?: number;
    maxRetries?: number;
    models?: string[];
}
/**
 * Provider health status
 */
export interface ProviderHealth {
    provider: ProviderType;
    isHealthy: boolean;
    lastChecked: Date;
    error?: string;
    latency?: number;
}
/**
 * Provider initialization result
 */
export interface ProviderInitResult {
    success: boolean;
    provider: ProviderType;
    error?: string;
    availableModels?: string[];
}
/**
 * Model selection criteria
 */
export interface ModelSelectionCriteria {
    requiresVision?: boolean;
    requiresThinking?: boolean;
    maxCost?: number;
    minContextWindow?: number;
    preferredProviders?: ProviderType[];
    excludedProviders?: ProviderType[];
}
/**
 * Provider interface that all providers must implement
 */
export interface IProvider {
    readonly type: ProviderType;
    readonly name: string;
    readonly config: ProviderConfig;
    /**
     * Initialize the provider
     */
    initialize(): Promise<ProviderInitResult>;
    /**
     * Check if the provider is properly configured
     */
    isConfigured(): boolean;
    /**
     * Get list of available models from this provider
     */
    getAvailableModels(): Promise<ModelInfo[]>;
    /**
     * Check provider health
     */
    checkHealth(): Promise<ProviderHealth>;
    /**
     * Get a specific model by ID
     */
    getModel(modelId: string): Promise<ModelInfo | null>;
    /**
     * Create a completion request
     */
    createCompletion(model: string, messages: any[], options?: any): Promise<any>;
    /**
     * Create a streaming completion request
     */
    createStreamingCompletion(model: string, messages: any[], options?: any): AsyncIterable<any>;
}
/**
 * Provider factory function type
 */
export type ProviderFactory = (config: ProviderConfig) => IProvider;
/**
 * Environment variable mapping for provider configuration
 */
export interface ProviderEnvVars {
    apiKey?: string[];
    baseUrl?: string[];
    region?: string[];
    projectId?: string[];
}
/**
 * Provider metadata
 */
export interface ProviderMetadata {
    type: ProviderType;
    name: string;
    description: string;
    website: string;
    docsUrl: string;
    defaultAuthMethod: AuthMethod;
    envVars: ProviderEnvVars;
    supportsCustomEndpoint: boolean;
}
