import type { ModelAlias } from '@/store/app-store'; import type { ModelProvider, ThinkingLevel, ReasoningEffort } from '@automaker/types'; import { CURSOR_MODEL_MAP, CODEX_MODEL_MAP } from '@automaker/types'; import { Brain, Zap, Scale, Cpu, Rocket, Sparkles } from 'lucide-react'; export type ModelOption = { id: string; // Claude models use ModelAlias, Cursor models use "cursor-{id}" label: string; description: string; badge?: string; provider: ModelProvider; hasThinking?: boolean; }; export const CLAUDE_MODELS: ModelOption[] = [ { id: 'haiku', label: 'Claude Haiku', description: 'Fast and efficient for simple tasks.', badge: 'Speed', provider: 'claude', }, { id: 'sonnet', label: 'Claude Sonnet', description: 'Balanced performance with strong reasoning.', badge: 'Balanced', provider: 'claude', }, { id: 'opus', label: 'Claude Opus', description: 'Most capable model for complex work.', badge: 'Premium', provider: 'claude', }, ]; /** * Cursor models derived from CURSOR_MODEL_MAP * ID is prefixed with "cursor-" for ProviderFactory routing */ export const CURSOR_MODELS: ModelOption[] = Object.entries(CURSOR_MODEL_MAP).map( ([id, config]) => ({ id: `cursor-${id}`, label: config.label, description: config.description, provider: 'cursor' as ModelProvider, hasThinking: config.hasThinking, }) ); /** * Codex/OpenAI models * Official models from https://developers.openai.com/codex/models/ */ export const CODEX_MODELS: ModelOption[] = [ { id: CODEX_MODEL_MAP.gpt52Codex, label: 'GPT-5.2-Codex', description: 'Most advanced agentic coding model (default for ChatGPT users).', badge: 'Premium', provider: 'codex', hasThinking: true, }, { id: CODEX_MODEL_MAP.gpt5Codex, label: 'GPT-5-Codex', description: 'Purpose-built for Codex CLI (default for CLI users).', badge: 'Balanced', provider: 'codex', hasThinking: true, }, { id: CODEX_MODEL_MAP.gpt5CodexMini, label: 'GPT-5-Codex-Mini', description: 'Faster workflows for code Q&A and editing.', badge: 'Speed', provider: 'codex', hasThinking: false, }, { id: CODEX_MODEL_MAP.codex1, label: 'Codex-1', description: 'o3-based model optimized for software engineering.', badge: 'Premium', provider: 'codex', hasThinking: true, }, { id: CODEX_MODEL_MAP.codexMiniLatest, label: 'Codex-Mini-Latest', description: 'o4-mini-based model for faster workflows.', badge: 'Balanced', provider: 'codex', hasThinking: false, }, { id: CODEX_MODEL_MAP.gpt5, label: 'GPT-5', description: 'GPT-5 base flagship model.', badge: 'Balanced', provider: 'codex', hasThinking: true, }, ]; /** * All available models (Claude + Cursor + Codex) */ export const ALL_MODELS: ModelOption[] = [...CLAUDE_MODELS, ...CURSOR_MODELS, ...CODEX_MODELS]; export const THINKING_LEVELS: ThinkingLevel[] = ['none', 'low', 'medium', 'high', 'ultrathink']; export const THINKING_LEVEL_LABELS: Record = { none: 'None', low: 'Low', medium: 'Med', high: 'High', ultrathink: 'Ultra', }; /** * Reasoning effort levels for Codex/OpenAI models * All models support reasoning effort levels */ export const REASONING_EFFORT_LEVELS: ReasoningEffort[] = [ 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', ]; export const REASONING_EFFORT_LABELS: Record = { none: 'None', minimal: 'Min', low: 'Low', medium: 'Med', high: 'High', xhigh: 'XHigh', }; // Profile icon mapping export const PROFILE_ICONS: Record> = { Brain, Zap, Scale, Cpu, Rocket, Sparkles, };