From 6a70b236b6d2ed4a46d7853e46640fb1cdee9464 Mon Sep 17 00:00:00 2001 From: gaoziman <2942894660@qq.com> Date: Sat, 27 Dec 2025 15:02:04 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E7=BB=84=E4=BB=B6):=20=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E5=99=A8=E6=94=AF=E6=8C=81=20Gemini=20?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 Gemini 图片模型卡片配置 - 添加 gemini 模型类型检测逻辑 - 实现 Gemini 模型选择和高亮显示 - 添加模型类型切换提示信息 --- src/components/ui/ModelCardSelector.tsx | 97 ++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 1 deletion(-) diff --git a/src/components/ui/ModelCardSelector.tsx b/src/components/ui/ModelCardSelector.tsx index 29b62bb..4480a56 100644 --- a/src/components/ui/ModelCardSelector.tsx +++ b/src/components/ui/ModelCardSelector.tsx @@ -48,8 +48,18 @@ const CODEX_MODEL_CARDS = [ }, ]; +// Gemini 图片模型卡片配置 +const GEMINI_MODEL_CARDS = [ + { + id: 'gemini-3-pro-image-preview', + name: 'Gemini 图片', + description: '文生图', + modelIdPattern: 'gemini', + }, +]; + // 模型类型 -type ModelType = 'claude' | 'codex'; +type ModelType = 'claude' | 'codex' | 'gemini'; interface ModelCardSelectorProps { value: string; @@ -73,6 +83,9 @@ export function ModelCardSelector({ if (modelId.startsWith('gpt-') && modelId.includes('codex')) { return 'codex'; } + if (modelId.includes('gemini') || modelId.includes('imagen')) { + return 'gemini'; + } return 'claude'; }; @@ -107,9 +120,22 @@ export function ModelCardSelector({ return model?.modelId || cardId; }; + // 根据当前选中的模型ID判断选中的卡片(Gemini) + const getSelectedGeminiCard = (modelId: string): string | null => { + const matchedCard = GEMINI_MODEL_CARDS.find((card) => modelId.includes(card.modelIdPattern)); + return matchedCard?.id || null; + }; + + // 根据卡片类型找到对应的实际模型ID(Gemini) + const findGeminiModelIdByCard = (cardId: string): string => { + const model = models.find((m) => m.modelId === cardId); + return model?.modelId || cardId; + }; + const currentModelType = getModelType(value); const selectedClaudeCard = getSelectedClaudeCard(value); const selectedCodexCard = getSelectedCodexCard(value); + const selectedGeminiCard = getSelectedGeminiCard(value); // 处理模型选择 const handleModelSelect = (modelId: string, modelType: ModelType) => { @@ -137,6 +163,9 @@ export function ModelCardSelector({ // 检查是否有 Codex 模型可用 const hasCodexModels = models.some(m => m.modelType === 'codex' || (m.modelId.startsWith('gpt-') && m.modelId.includes('codex'))); + // 检查是否有 Gemini 模型可用 + const hasGeminiModels = models.some(m => m.modelType === 'gemini' || m.modelId.includes('gemini') || m.modelId.includes('imagen')); + return (
{currentModelType === 'codex' ? 'Codex 模型不支持思考模式(Thinking),但支持工具调用。' + : currentModelType === 'gemini' + ? 'Gemini 图片模型专注于图片生成,不支持思考模式和工具调用。' : 'Claude 模型支持思考模式和工具调用。'}