import { z } from "zod";
/**
 * Model configuration schema for validation
 */
declare const ModelConfigSchema: z.ZodObject<{
    id: z.ZodString;
    displayName: z.ZodString;
    capabilities: z.ZodArray<z.ZodString, "many">;
    deprecated: z.ZodBoolean;
    pricing: z.ZodObject<{
        input: z.ZodNumber;
        output: z.ZodNumber;
    }, "strip", z.ZodTypeAny, {
        input: number;
        output: number;
    }, {
        input: number;
        output: number;
    }>;
    contextWindow: z.ZodNumber;
    releaseDate: z.ZodString;
}, "strip", z.ZodTypeAny, {
    id: string;
    displayName: string;
    capabilities: string[];
    deprecated: boolean;
    pricing: {
        input: number;
        output: number;
    };
    contextWindow: number;
    releaseDate: string;
}, {
    id: string;
    displayName: string;
    capabilities: string[];
    deprecated: boolean;
    pricing: {
        input: number;
        output: number;
    };
    contextWindow: number;
    releaseDate: string;
}>;
declare const ModelRegistrySchema: z.ZodObject<{
    version: z.ZodString;
    lastUpdated: z.ZodString;
    models: z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{
        id: z.ZodString;
        displayName: z.ZodString;
        capabilities: z.ZodArray<z.ZodString, "many">;
        deprecated: z.ZodBoolean;
        pricing: z.ZodObject<{
            input: z.ZodNumber;
            output: z.ZodNumber;
        }, "strip", z.ZodTypeAny, {
            input: number;
            output: number;
        }, {
            input: number;
            output: number;
        }>;
        contextWindow: z.ZodNumber;
        releaseDate: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
        displayName: string;
        capabilities: string[];
        deprecated: boolean;
        pricing: {
            input: number;
            output: number;
        };
        contextWindow: number;
        releaseDate: string;
    }, {
        id: string;
        displayName: string;
        capabilities: string[];
        deprecated: boolean;
        pricing: {
            input: number;
            output: number;
        };
        contextWindow: number;
        releaseDate: string;
    }>>>;
    aliases: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    defaults: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
}, "strip", z.ZodTypeAny, {
    version: string;
    models: Record<string, Record<string, {
        id: string;
        displayName: string;
        capabilities: string[];
        deprecated: boolean;
        pricing: {
            input: number;
            output: number;
        };
        contextWindow: number;
        releaseDate: string;
    }>>;
    lastUpdated: string;
    aliases?: Record<string, string> | undefined;
    defaults?: Record<string, string> | undefined;
}, {
    version: string;
    models: Record<string, Record<string, {
        id: string;
        displayName: string;
        capabilities: string[];
        deprecated: boolean;
        pricing: {
            input: number;
            output: number;
        };
        contextWindow: number;
        releaseDate: string;
    }>>;
    lastUpdated: string;
    aliases?: Record<string, string> | undefined;
    defaults?: Record<string, string> | undefined;
}>;
export type ModelConfig = z.infer<typeof ModelConfigSchema>;
export type ModelRegistry = z.infer<typeof ModelRegistrySchema>;
/**
 * Dynamic Model Provider
 * Loads and manages model configurations from external sources
 */
export declare class DynamicModelProvider {
    private static instance;
    private modelRegistry;
    private lastFetch;
    private readonly CACHE_DURATION;
    private constructor();
    static getInstance(): DynamicModelProvider;
    /**
     * Initialize the model registry from multiple sources
     */
    initialize(): Promise<void>;
    /**
     * Load configuration from a source (URL or file path)
     */
    private loadFromSource;
    /**
     * Get all available models for a provider
     */
    getModelsForProvider(provider: string): Record<string, ModelConfig>;
    /**
     * Resolve a model by provider and model hint
     */
    resolveModel(provider: string, modelHint?: string): ModelConfig | null;
    /**
     * Search models by capabilities
     */
    searchByCapability(capability: string, options?: {
        provider?: string;
        maxPrice?: number;
        excludeDeprecated?: boolean;
    }): Array<{
        provider: string;
        model: string;
        config: ModelConfig;
    }>;
    /**
     * Get the best model for a specific use case
     */
    getBestModelFor(useCase: "coding" | "analysis" | "vision" | "fastest" | "cheapest"): {
        provider: string;
        model: string;
        config: ModelConfig;
    } | null;
    /**
     * Get all models across all providers
     */
    getAllModels(): Array<{
        provider: string;
        model: string;
        config: ModelConfig;
    }>;
    /**
     * Get total number of models
     */
    getTotalModelCount(): number;
    /**
     * Check if cache needs refresh
     */
    needsRefresh(): boolean;
    /**
     * Force refresh the model registry
     */
    refresh(): Promise<void>;
    /**
     * Ensure the registry is initialized
     */
    private ensureInitialized;
    /**
     * Get registry metadata
     */
    getMetadata(): {
        version: string;
        lastUpdated: string;
        modelCount: number;
    } | null;
}
export declare const dynamicModelProvider: DynamicModelProvider;
export {};
