import type { Provider, ThinkingLevel } from "@prestyj/ai";
export interface ModelInfo {
    id: string;
    name: string;
    provider: Provider;
    contextWindow: number;
    /**
     * ChatGPT Codex transport uses product-specific windows that can differ from
     * the public API model window. OpenAI OAuth requests include an accountId and
     * route through `/codex/responses`; API-key requests do not.
     */
    codexContextWindow?: number;
    maxOutputTokens: number;
    supportsThinking: boolean;
    supportsImages: boolean;
    supportsVideo: boolean;
    /**
     * Max video payload (bytes) this model's transport accepts, used to decide
     * when an attached/read video must be compressed before sending. Differs by
     * provider delivery mechanism:
     *   - Moonshot/Kimi: 100 MB (file-service upload cap)
     *   - MiniMax: 50 MB (Anthropic-compatible base64 inline cap)
     *   - Gemini: 20 MB (inlineData per-request cap)
     *   - Xiaomi (MiMo): ~36 MB raw — the API caps the base64 STRING at 50 MB,
     *     and base64 inflates bytes by ~4/3, so 36 MB raw ≈ 48 MB encoded.
     * Only meaningful when `supportsVideo` is true.
     */
    maxVideoBytes?: number;
    costTier: "low" | "medium" | "high";
    /**
     * The top reasoning tier this model genuinely uses. Used when thinking is
     * enabled to pick the strongest setting per model:
     *   - OpenAI GPT-5.5-era: `xhigh`
     *   - OpenAI Pro/Codex/old: clamped to what the model accepts
     *   - Claude Opus 4.8 / 4.7 / 4.6 and Sonnet 4.6: `max`
     *   - Claude Haiku 4.5: `high` (no adaptive `max` tier)
     *   - GLM / Moonshot / Xiaomi / MiniMax / Qwen: `high` — binary-thinking
     *     providers ignore the level on the wire, so the value is cosmetic
     *   - DeepSeek V4: `xhigh` (DeepSeek maps `xhigh` → its internal `max`)
     */
    maxThinkingLevel: ThinkingLevel;
}
export declare const MODELS: ModelInfo[];
export declare function getModel(id: string): ModelInfo | undefined;
export declare function getModelsForProvider(provider: Provider): ModelInfo[];
/** Default video payload cap (bytes) when a video model doesn't declare one. */
export declare const DEFAULT_MAX_VIDEO_BYTES: number;
/**
 * Max video payload (bytes) the given model's transport accepts before the clip
 * must be compressed. Returns `undefined` for models without video support, so
 * callers can skip the native-video path entirely.
 */
export declare function getVideoByteLimit(modelId: string): number | undefined;
export declare function getDefaultModel(provider: Provider): ModelInfo;
export interface ContextWindowOptions {
    provider?: Provider;
    accountId?: string;
}
export declare function usesOpenAICodexTransport(options?: ContextWindowOptions): boolean;
export declare function getContextWindow(modelId: string, options?: ContextWindowOptions): number;
/**
 * The strongest thinking level the given model genuinely uses. Falls back to
 * `"high"` for unknown models since every provider we ship accepts it.
 */
export declare function getMaxThinkingLevel(modelId: string): ThinkingLevel;
/**
 * Get the model to use for compaction summarization.
 * - Anthropic: always Sonnet 4.6
 * - OpenAI: cheapest (Codex Mini)
 * - Gemini: use the current model
 * - GLM: GLM-4.7 Flash (cheap alternative)
 * - Moonshot: use the current model (no cheap alternative)
 */
export declare function getSummaryModel(provider: Provider, currentModelId: string): ModelInfo;
//# sourceMappingURL=model-registry.d.ts.map