diff --git a/frontend/src/components/Marketing.tsx b/frontend/src/components/Marketing.tsx index f0358b13..08c8f459 100644 --- a/frontend/src/components/Marketing.tsx +++ b/frontend/src/components/Marketing.tsx @@ -30,9 +30,9 @@ const AI_MODELS = [ { src: "/badge-kimi-logo.png", alt: "Moonshot", - labels: ["Kimi K2"] + labels: ["Kimi K2", "Kimi K2.5"] }, - { src: "/badge-qwen-logo.png", alt: "Qwen", labels: ["Qwen3 Coder", "Qwen3-VL"] }, + { src: "/badge-qwen-logo.png", alt: "Qwen", labels: ["Qwen3-VL"] }, { src: "/badge-meta-logo.png", alt: "Meta", labels: ["Meta Llama"] } ]; diff --git a/frontend/src/components/ModelSelector.tsx b/frontend/src/components/ModelSelector.tsx index 29dfd15f..92194ab9 100644 --- a/frontend/src/components/ModelSelector.tsx +++ b/frontend/src/components/ModelSelector.tsx @@ -71,10 +71,18 @@ export const MODEL_CONFIG: Record = { "kimi-k2-thinking": { displayName: "Kimi K2 Thinking", shortName: "Kimi K2", - badges: ["Pro", "Reasoning", "New"], + badges: ["Pro", "Reasoning"], requiresPro: true, tokenLimit: 256000 }, + "kimi-k2-5": { + displayName: "Kimi K2.5", + shortName: "Kimi K2.5", + badges: ["Pro", "New"], + requiresPro: true, + supportsVision: true, + tokenLimit: 256000 + }, "gpt-oss-120b": { displayName: "OpenAI GPT-OSS 120B", shortName: "GPT-OSS", @@ -82,17 +90,9 @@ export const MODEL_CONFIG: Record = { requiresPro: true, tokenLimit: 128000 }, - "qwen3-coder-480b": { - displayName: "Qwen3 Coder 480B", - shortName: "Qwen3 Coder", - badges: ["Pro"], - requiresPro: true, - tokenLimit: 128000 - }, "qwen3-vl-30b": { displayName: "Qwen3-VL 30B", shortName: "Qwen3-VL", - badges: ["New"], requiresStarter: true, supportsVision: true, tokenLimit: 256000 @@ -115,7 +115,7 @@ export const CATEGORY_MODELS = { quick: "gpt-oss-120b", reasoning_on: "kimi-k2-thinking", // Kimi K2 with thinking reasoning_off: "deepseek-r1-0528", // DeepSeek R1 without thinking - math: "qwen3-coder-480b", + math: "kimi-k2-5", image: "qwen3-vl-30b" // Qwen3-VL for image analysis }; diff --git a/frontend/src/state/LocalStateContext.tsx b/frontend/src/state/LocalStateContext.tsx index 3ab82d97..af558c43 100644 --- a/frontend/src/state/LocalStateContext.tsx +++ b/frontend/src/state/LocalStateContext.tsx @@ -25,7 +25,7 @@ function getInitialModel(): string { // Priority 1: Check local storage for last used model const selectedModel = localStorage.getItem("selectedModel"); if (selectedModel) { - return selectedModel; + return aliasModelName(selectedModel); } // Priority 2: Check cached billing status for pro/max/team users @@ -76,9 +76,10 @@ export const LocalStateProvider = ({ children }: { children: React.ReactNode }) async function persistChat(chat: Chat) { const chatToSave = { + ...chat, + /** If a model is missing, assume the default Llama and write it now */ - model: aliasModelName(chat.model) || DEFAULT_MODEL_ID, - ...chat + model: aliasModelName(chat.model) || DEFAULT_MODEL_ID }; console.log("Persisting chat:", chatToSave); diff --git a/frontend/src/utils/utils.ts b/frontend/src/utils/utils.ts index 3ff75e0c..7703da1a 100644 --- a/frontend/src/utils/utils.ts +++ b/frontend/src/utils/utils.ts @@ -89,5 +89,9 @@ export function aliasModelName(modelName: string | undefined): string { return "llama-3.3-70b"; } + if (modelName === "qwen3-coder-480b") { + return "kimi-k2-5"; + } + return modelName; }