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 { Cpu } from 'lucide-react'; import { cn } from '@/lib/utils'; import type { CodexModelId } from '@automaker/types'; import { CODEX_MODEL_MAP } 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.2-codex': { id: 'codex-gpt-5.2-codex', label: 'GPT-5.2-Codex', description: 'Most advanced agentic coding model for complex software engineering', }, 'codex-gpt-5.1-codex-max': { id: 'codex-gpt-5.1-codex-max', label: 'GPT-5.1-Codex-Max', description: 'Optimized for long-horizon, agentic coding tasks in Codex', }, 'codex-gpt-5.1-codex-mini': { id: 'codex-gpt-5.1-codex-mini', label: 'GPT-5.1-Codex-Mini', description: 'Smaller, more cost-effective version for faster workflows', }, 'codex-gpt-5.2': { id: 'codex-gpt-5.2', label: 'GPT-5.2', description: 'Best general agentic model for tasks across industries and domains', }, '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 getModelDisplayName(modelId: string): string { const displayNames: Record = { 'codex-gpt-5.2-codex': 'GPT-5.2-Codex', 'codex-gpt-5.1-codex-max': 'GPT-5.1-Codex-Max', 'codex-gpt-5.1-codex-mini': 'GPT-5.1-Codex-Mini', 'codex-gpt-5.2': 'GPT-5.2', 'codex-gpt-5.1': 'GPT-5.1', }; return displayNames[modelId] || modelId; } function supportsReasoningEffort(modelId: string): boolean { const reasoningModels = [ 'codex-gpt-5.2-codex', 'codex-gpt-5.1-codex-max', 'codex-gpt-5.2', 'codex-gpt-5.1', ]; return reasoningModels.includes(modelId); }