From 9972b635f702a0bf98cfc98db01baebd42992e13 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Wed, 30 Jul 2025 15:59:09 +0000 Subject: [PATCH 1/3] Add support for deepseek-r1-0528 model MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Added deepseek-r1-0528 to MODEL_CONFIG with 130k token limit - Added to all pricing plan tiers (excluded from Free/Starter, included in Pro/Max/Team) - Following same pattern as existing deepseek-r1-70b model 🤖 Generated with [Claude Code](https://claude.ai/code) Co-authored-by: Anthony --- frontend/src/components/ModelSelector.tsx | 6 ++++++ frontend/src/config/pricingConfig.tsx | 17 +++++++++++++++++ frontend/src/routes/_auth.chat.$chatId.tsx | 20 +++++++++++--------- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/frontend/src/components/ModelSelector.tsx b/frontend/src/components/ModelSelector.tsx index 8628ef5c..7659d620 100644 --- a/frontend/src/components/ModelSelector.tsx +++ b/frontend/src/components/ModelSelector.tsx @@ -51,6 +51,12 @@ export const MODEL_CONFIG: Record = { requiresPro: true, tokenLimit: 64000 }, + "deepseek-r1-0528": { + displayName: "DeepSeek R1 0528", + badge: "Pro", + requiresPro: true, + tokenLimit: 130000 + }, "mistral-small-3-1-24b": { displayName: "Mistral Small 3.1 24B", badge: "Pro", diff --git a/frontend/src/config/pricingConfig.tsx b/frontend/src/config/pricingConfig.tsx index c33254bf..4582bfbc 100644 --- a/frontend/src/config/pricingConfig.tsx +++ b/frontend/src/config/pricingConfig.tsx @@ -44,6 +44,7 @@ export const PRICING_PLANS: PricingPlan[] = [ { text: "Rename Chats", included: true, icon: }, { text: "Image Upload", included: false, icon: }, { text: "DeepSeek R1 70B", included: false, icon: }, + { text: "DeepSeek R1 0528", included: false, icon: }, { text: "Gemma 3 27B", included: false, icon: }, { text: "Mistral Small 3.1 24B", @@ -76,6 +77,7 @@ export const PRICING_PLANS: PricingPlan[] = [ }, { text: "Gemma 3 27B", included: true, icon: }, { text: "DeepSeek R1 70B", included: false, icon: }, + { text: "DeepSeek R1 0528", included: false, icon: }, { text: "Mistral Small 3.1 24B", included: false, @@ -107,6 +109,11 @@ export const PRICING_PLANS: PricingPlan[] = [ included: true, icon: }, + { + text: "DeepSeek R1 0528", + included: true, + icon: + }, { text: "Gemma 3 27B", included: true, icon: }, { text: "Mistral Small 3.1 24B", @@ -153,6 +160,11 @@ export const PRICING_PLANS: PricingPlan[] = [ included: true, icon: }, + { + text: "DeepSeek R1 0528", + included: true, + icon: + }, { text: "Gemma 3 27B", included: true, icon: }, { text: "Mistral Small 3.1 24B", @@ -208,6 +220,11 @@ export const PRICING_PLANS: PricingPlan[] = [ included: true, icon: }, + { + text: "DeepSeek R1 0528", + included: true, + icon: + }, { text: "Gemma 3 27B", included: true, icon: }, { text: "Mistral Small 3.1 24B", diff --git a/frontend/src/routes/_auth.chat.$chatId.tsx b/frontend/src/routes/_auth.chat.$chatId.tsx index 7edd3a4d..3ca03827 100644 --- a/frontend/src/routes/_auth.chat.$chatId.tsx +++ b/frontend/src/routes/_auth.chat.$chatId.tsx @@ -233,16 +233,18 @@ function ChatComponent() { setUserImages([]); // Send message with system prompt as separate parameter - appendUserMessage(prompt, images, undefined, undefined, sysPrompt || undefined).catch((error) => { - // Only reset if it wasn't an abort - if (!(error instanceof Error) || error.message !== "Stream aborted") { - console.error("[ChatComponent] Failed to append message:", error); - setUserPrompt(prompt); - setSystemPrompt(sysPrompt); - setUserImages(images); - initialPromptProcessedRef.current = false; + appendUserMessage(prompt, images, undefined, undefined, sysPrompt || undefined).catch( + (error) => { + // Only reset if it wasn't an abort + if (!(error instanceof Error) || error.message !== "Stream aborted") { + console.error("[ChatComponent] Failed to append message:", error); + setUserPrompt(prompt); + setSystemPrompt(sysPrompt); + setUserImages(images); + initialPromptProcessedRef.current = false; + } } - }); + ); } }, [ userPrompt, From 4dd6ce4c97b92e6b326b5e97667222df1b294635 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Thu, 31 Jul 2025 18:09:16 +0000 Subject: [PATCH 2/3] Update DeepSeek R1 0528 model name to include 671B - Updated displayName in ModelSelector.tsx from 'DeepSeek R1 0528' to 'DeepSeek R1 0528 671B' - Updated all pricing config references to match the new model name Co-authored-by: Anthony --- frontend/src/components/ModelSelector.tsx | 2 +- frontend/src/config/pricingConfig.tsx | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/ModelSelector.tsx b/frontend/src/components/ModelSelector.tsx index 7659d620..1308fa1e 100644 --- a/frontend/src/components/ModelSelector.tsx +++ b/frontend/src/components/ModelSelector.tsx @@ -52,7 +52,7 @@ export const MODEL_CONFIG: Record = { tokenLimit: 64000 }, "deepseek-r1-0528": { - displayName: "DeepSeek R1 0528", + displayName: "DeepSeek R1 0528 671B", badge: "Pro", requiresPro: true, tokenLimit: 130000 diff --git a/frontend/src/config/pricingConfig.tsx b/frontend/src/config/pricingConfig.tsx index 4582bfbc..3ed2397b 100644 --- a/frontend/src/config/pricingConfig.tsx +++ b/frontend/src/config/pricingConfig.tsx @@ -44,7 +44,11 @@ export const PRICING_PLANS: PricingPlan[] = [ { text: "Rename Chats", included: true, icon: }, { text: "Image Upload", included: false, icon: }, { text: "DeepSeek R1 70B", included: false, icon: }, - { text: "DeepSeek R1 0528", included: false, icon: }, + { + text: "DeepSeek R1 0528 671B", + included: false, + icon: + }, { text: "Gemma 3 27B", included: false, icon: }, { text: "Mistral Small 3.1 24B", @@ -77,7 +81,11 @@ export const PRICING_PLANS: PricingPlan[] = [ }, { text: "Gemma 3 27B", included: true, icon: }, { text: "DeepSeek R1 70B", included: false, icon: }, - { text: "DeepSeek R1 0528", included: false, icon: }, + { + text: "DeepSeek R1 0528 671B", + included: false, + icon: + }, { text: "Mistral Small 3.1 24B", included: false, @@ -110,7 +118,7 @@ export const PRICING_PLANS: PricingPlan[] = [ icon: }, { - text: "DeepSeek R1 0528", + text: "DeepSeek R1 0528 671B", included: true, icon: }, @@ -161,7 +169,7 @@ export const PRICING_PLANS: PricingPlan[] = [ icon: }, { - text: "DeepSeek R1 0528", + text: "DeepSeek R1 0528 671B", included: true, icon: }, @@ -221,7 +229,7 @@ export const PRICING_PLANS: PricingPlan[] = [ icon: }, { - text: "DeepSeek R1 0528", + text: "DeepSeek R1 0528 671B", included: true, icon: }, From 97547f24b1876626f4c3693c4328db79387a265d Mon Sep 17 00:00:00 2001 From: Tony Giorgio Date: Thu, 31 Jul 2025 18:59:02 -0500 Subject: [PATCH 3/3] Refactor model badges to support multiple tags and add Beta tag to DeepSeek R1 671B MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Changed badge property from string to string array for all models - Added Beta tag to DeepSeek R1 0528 671B model alongside Pro tag - Added yellow-orange gradient styling for Beta badges - Increased model selector dropdown width from w-64 to w-72 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- frontend/src/components/ModelSelector.tsx | 56 ++++++++++++----------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/frontend/src/components/ModelSelector.tsx b/frontend/src/components/ModelSelector.tsx index 1308fa1e..cc86ac6a 100644 --- a/frontend/src/components/ModelSelector.tsx +++ b/frontend/src/components/ModelSelector.tsx @@ -15,7 +15,7 @@ import type { Model } from "openai/resources/models.js"; // Model configuration for display names, badges, and token limits type ModelCfg = { displayName: string; - badge?: string; + badges?: string[]; disabled?: boolean; requiresPro?: boolean; requiresStarter?: boolean; @@ -34,39 +34,39 @@ export const MODEL_CONFIG: Record = { }, "google/gemma-3-27b-it": { displayName: "Gemma 3 27B", - badge: "Starter", + badges: ["Starter"], requiresStarter: true, tokenLimit: 70000 }, "leon-se/gemma-3-27b-it-fp8-dynamic": { displayName: "Gemma 3 27B", - badge: "Starter", + badges: ["Starter"], requiresStarter: true, supportsVision: true, tokenLimit: 70000 }, "deepseek-r1-70b": { displayName: "DeepSeek R1 70B", - badge: "Pro", + badges: ["Pro"], requiresPro: true, tokenLimit: 64000 }, "deepseek-r1-0528": { displayName: "DeepSeek R1 0528 671B", - badge: "Pro", + badges: ["Pro", "Beta"], requiresPro: true, tokenLimit: 130000 }, "mistral-small-3-1-24b": { displayName: "Mistral Small 3.1 24B", - badge: "Pro", + badges: ["Pro"], requiresPro: true, supportsVision: true, tokenLimit: 128000 }, "qwen2-5-72b": { displayName: "Qwen 2.5 72B", - badge: "Pro", + badges: ["Pro"], requiresPro: true, tokenLimit: 128000 } @@ -203,24 +203,28 @@ export function ModelSelector({ if (config) { elements.push(config.displayName); - if (config.badge) { - let badgeClass = "text-[10px] px-1.5 py-0.5 rounded-sm font-medium"; - - if (config.badge === "Coming Soon") { - badgeClass += " bg-gray-500/10 text-gray-600"; - } else if (config.badge === "Pro") { - badgeClass += " bg-gradient-to-r from-purple-500/10 to-blue-500/10 text-purple-600"; - } else if (config.badge === "Starter") { - badgeClass += " bg-gradient-to-r from-green-500/10 to-emerald-500/10 text-green-600"; - } else { - badgeClass += " bg-purple-500/10 text-purple-600"; - } - - elements.push( - - {config.badge} - - ); + if (config.badges && config.badges.length > 0) { + config.badges.forEach((badge, index) => { + let badgeClass = "text-[10px] px-1.5 py-0.5 rounded-sm font-medium"; + + if (badge === "Coming Soon") { + badgeClass += " bg-gray-500/10 text-gray-600"; + } else if (badge === "Pro") { + badgeClass += " bg-gradient-to-r from-purple-500/10 to-blue-500/10 text-purple-600"; + } else if (badge === "Starter") { + badgeClass += " bg-gradient-to-r from-green-500/10 to-emerald-500/10 text-green-600"; + } else if (badge === "Beta") { + badgeClass += " bg-gradient-to-r from-yellow-500/10 to-orange-500/10 text-yellow-600"; + } else { + badgeClass += " bg-purple-500/10 text-purple-600"; + } + + elements.push( + + {badge} + + ); + }); } if ( @@ -269,7 +273,7 @@ export function ModelSelector({ - + {availableModels && Array.isArray(availableModels) && // Sort models: vision-capable first (if images present), then available, then restricted, then disabled