// models.js — shared model configuration // Used by the frontend dropdown AND the backend router. // // provider values map to individual AI SDK packages: // "anthropic" → @ai-sdk/anthropic (ANTHROPIC_API_KEY) // "openai" → @ai-sdk/openai (OPENAI_API_KEY) // "google" → @ai-sdk/google (GOOGLE_API_KEY) // "ollama" → ollama-ai-provider-v2 (OLLAMA_API_KEY) export const MODELS = [ { id: 'claude-opus-4-7', label: 'Claude Opus 4.7', provider: 'anthropic', creator: 'Anthropic', vision: true, }, { id: 'gpt-4o', label: 'ChatGPT 4o', provider: 'openai', creator: 'OpenAI', vision: true, }, { id: 'gpt-5.4', label: 'GPT-5.4', provider: 'openai', creator: 'OpenAI', vision: true, }, { id: 'gemini-3-flash-preview', label: 'Gemini 3 Flash', provider: 'google', creator: 'Google', vision: true, }, { id: 'gemini-robotics-er-1.6-preview', label: 'Gemini Robotics-ER 1.6', provider: 'google', creator: 'Google DeepMind', vision: true, }, { id: 'gemini-3.1-pro-preview', label: 'Gemini 3.1 Pro', provider: 'google', creator: 'Google DeepMind', vision: true, }, { id: 'gemma-4-31b-it', label: 'Gemma 4 31B IT', provider: 'google', creator: 'Google DeepMind', vision: true, }, { id: 'gemma-4-26b-a4b-it', label: 'Gemma 4 26B A4B IT', provider: 'google', creator: 'Google DeepMind', vision: true, }, { id: 'qwen3.5:397b-cloud', label: 'Qwen 3.5 397B', provider: 'ollama', creator: 'Qwen / Ollama Cloud', vision: true, }, { id: 'qwen3-vl:235b-cloud', label: 'Qwen 3 VL 235B', provider: 'ollama', creator: 'Qwen / Ollama Cloud', vision: true, }, { id: 'kimi-k2.6:cloud', label: 'Kimi K2.6', provider: 'ollama', creator: 'Kimi / Ollama Cloud', vision: true, } ]; export const DEFAULT_MODEL_ID = 'qwen3.5:397b-cloud'; export function findModel(id) { return MODELS.find(m => m.id === id); } export function normalizeModelId(raw) { if (!raw) return raw; // Allow legacy "provider/model" storage (e.g. "anthropic/claude-sonnet-4.6") const noProvider = String(raw).includes('/') ? String(raw).split('/').pop() : String(raw); // Allow legacy dotted Claude naming used in early versions of this repo. if (noProvider === 'claude-sonnet-4.6') return 'claude-sonnet-4-6'; return noProvider; }