import { Label } from '@/components/ui/label'; import { Badge } from '@/components/ui/badge'; import { Checkbox } from '@/components/ui/checkbox'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { cn } from '@/lib/utils'; import type { CodexModelId } from '@automaker/types'; import { OpenAIIcon } from '@/components/ui/provider-icon'; interface CodexModelConfigurationProps { enabledCodexModels: CodexModelId[]; codexDefaultModel: CodexModelId; isSaving: boolean; onDefaultModelChange: (model: CodexModelId) => void; onModelToggle: (model: CodexModelId, enabled: boolean) => void; } interface CodexModelInfo { id: CodexModelId; label: string; description: string; } const CODEX_MODEL_INFO: Record = { 'codex-gpt-5.3-codex': { id: 'codex-gpt-5.3-codex', label: 'GPT-5.3-Codex', description: 'Latest frontier agentic coding model', }, 'codex-gpt-5.2-codex': { id: 'codex-gpt-5.2-codex', label: 'GPT-5.2-Codex', description: 'Frontier agentic coding model', }, 'codex-gpt-5.1-codex-max': { id: 'codex-gpt-5.1-codex-max', label: 'GPT-5.1-Codex-Max', description: 'Codex-optimized flagship for deep and fast reasoning', }, 'codex-gpt-5.1-codex-mini': { id: 'codex-gpt-5.1-codex-mini', label: 'GPT-5.1-Codex-Mini', description: 'Optimized for codex. Cheaper, faster, but less capable', }, 'codex-gpt-5.2': { id: 'codex-gpt-5.2', label: 'GPT-5.2', description: 'Latest frontier model with improvements across knowledge, reasoning and coding', }, 'codex-gpt-5.1': { id: 'codex-gpt-5.1', label: 'GPT-5.1', description: 'Great for coding and agentic tasks across domains', }, }; export function CodexModelConfiguration({ enabledCodexModels, codexDefaultModel, isSaving, onDefaultModelChange, onModelToggle, }: CodexModelConfigurationProps) { const availableModels = Object.values(CODEX_MODEL_INFO); return (

Model Configuration

Configure which Codex models are available in the feature modal

{availableModels.map((model) => { const isEnabled = enabledCodexModels.includes(model.id); const isDefault = model.id === codexDefaultModel; return (
onModelToggle(model.id, !!checked)} disabled={isSaving || isDefault} />
{model.label} {supportsReasoningEffort(model.id) && ( Thinking )} {isDefault && ( Default )}

{model.description}

); })}
); } function supportsReasoningEffort(modelId: string): boolean { const reasoningModels = [ 'codex-gpt-5.3-codex', 'codex-gpt-5.2-codex', 'codex-gpt-5.1-codex-max', 'codex-gpt-5.2', 'codex-gpt-5.1', ]; return reasoningModels.includes(modelId); }