/** * Runtime OpenRouter model capability detection. * * When an OpenRouter model is not in the built-in static list, we look up its * actual capabilities from a cached copy of the OpenRouter model catalog. * * Cache layers (checked in order): * 1. In-memory Map (instant, cleared on process restart) * 2. On-disk JSON file (/cache/openrouter-models.json) * 3. OpenRouter API fetch (populates both layers) * * Model capabilities are assumed stable — the cache has no TTL expiry. * A background refresh is triggered only when a model is not found in * the cache (i.e. a newly added model on OpenRouter). * * Sync callers can read whatever is already cached. Async callers can await a * one-time fetch so the first unknown-model lookup resolves with real * capabilities instead of the text-only fallback. */ export interface OpenRouterModelCapabilities { name: string; input: Array<"text" | "image">; reasoning: boolean; contextWindow: number; maxTokens: number; cost: { input: number; output: number; cacheRead: number; cacheWrite: number; }; } /** * Ensure capabilities for a specific model are available before first use. * * Known cached entries return immediately. Unknown entries wait for at most * one catalog fetch, then leave sync resolution to read from the populated * cache on the same request. */ export declare function loadOpenRouterModelCapabilities(modelId: string): Promise; /** * Synchronously look up model capabilities from the cache. * * If a model is not found but the cache exists, a background refresh is * triggered in case it's a newly added model not yet in the cache. */ export declare function getOpenRouterModelCapabilities(modelId: string): OpenRouterModelCapabilities | undefined;