/**
 * Model Registry - Stores and retrieves model capabilities
 * Avoids repeated external lookups by caching model info locally
 */
interface ModelCapabilities {
    modelId: string;
    maxPositionEmbeddings: number;
    contextWindow: number;
    supportsExtendedContext: boolean;
    ropeScaling?: {
        type: string;
        factor: number;
        originalMaxPositionEmbeddings: number;
    };
    typicalOutputTokens: number;
    source: "huggingface" | "lmstudio" | "manual" | "default";
    fetchedAt: string;
}
declare class ModelRegistry {
    private registryPath;
    private data;
    private readonly CACHE_TTL_DAYS;
    constructor(memoryDir: string);
    private loadRegistry;
    private saveRegistry;
    private isCacheExpired;
    private normalizeModelId;
    /**
     * Get capabilities for a model, using cache if available
     */
    getCapabilities(modelId: string): ModelCapabilities;
    /**
     * Store capabilities for a model
     */
    setCapabilities(modelId: string, capabilities: Omit<ModelCapabilities, "modelId" | "fetchedAt">): void;
    /**
     * Calculate optimal input/output sizes for a model
     * @param maxContextOverride - Optional override for max context (e.g., if LLM server defaults to smaller window)
     */
    calculateContextSizes(modelId: string, maxContextOverride?: number): {
        maxInputChars: number;
        maxOutputTokens: number;
        description: string;
    };
    /**
     * Fetch capabilities from Hugging Face (if available)
     * Returns true if successful
     */
    fetchFromHuggingFace(modelId: string): Promise<boolean>;
    /**
     * List all cached models
     */
    listCached(): string[];
    /**
     * Clear expired cache entries
     */
    cleanExpired(): number;
}

export { type ModelCapabilities, ModelRegistry };
