import { CODEX_REASONING_EFFORT_OPTIONS, DEFAULT_MODEL_BY_PROVIDER, MODEL_OPTIONS_BY_PROVIDER, MODEL_SLUG_ALIASES_BY_PROVIDER, type CodexReasoningEffort, type ModelSlug, type ProviderKind, } from "@t3tools/contracts"; type CatalogProvider = keyof typeof MODEL_OPTIONS_BY_PROVIDER; const MODEL_SLUG_SET_BY_PROVIDER: Record> = { codex: new Set(MODEL_OPTIONS_BY_PROVIDER.codex.map((option) => option.slug)), }; export function getModelOptions(provider: ProviderKind = "codex") { return MODEL_OPTIONS_BY_PROVIDER[provider]; } export function getDefaultModel(provider: ProviderKind = "codex"): ModelSlug { return DEFAULT_MODEL_BY_PROVIDER[provider]; } export function normalizeModelSlug( model: string | null | undefined, provider: ProviderKind = "codex", ): ModelSlug | null { if (typeof model !== "string") { return null; } const trimmed = model.trim(); if (!trimmed) { return null; } const aliases = MODEL_SLUG_ALIASES_BY_PROVIDER[provider] as Record; const aliased = aliases[trimmed]; return typeof aliased === "string" ? aliased : (trimmed as ModelSlug); } export function resolveModelSlug( model: string | null | undefined, provider: ProviderKind = "codex", ): ModelSlug { const normalized = normalizeModelSlug(model, provider); if (!normalized) { return getDefaultModel(provider); } return MODEL_SLUG_SET_BY_PROVIDER[provider].has(normalized) ? normalized : getDefaultModel(provider); } export function resolveModelSlugForProvider( provider: ProviderKind, model: string | null | undefined, ): ModelSlug { return resolveModelSlug(model, provider); } export function getReasoningEffortOptions( provider: ProviderKind = "codex", ): ReadonlyArray { return provider === "codex" ? CODEX_REASONING_EFFORT_OPTIONS : []; } export function getDefaultReasoningEffort(provider: "codex"): CodexReasoningEffort; export function getDefaultReasoningEffort(provider: ProviderKind): CodexReasoningEffort | null; export function getDefaultReasoningEffort( provider: ProviderKind = "codex", ): CodexReasoningEffort | null { return provider === "codex" ? "high" : null; } export { CODEX_REASONING_EFFORT_OPTIONS };