diff --git a/src/renderer/src/components/ChatConfig.vue b/src/renderer/src/components/ChatConfig.vue index 3c9fbfa82..7d163ef7b 100644 --- a/src/renderer/src/components/ChatConfig.vue +++ b/src/renderer/src/components/ChatConfig.vue @@ -93,11 +93,17 @@ const formatSize = (size: number): string => { return `${size}` } -// 是否显示思考预算配置 - 只对 Gemini 2.5 系列显示 +// 是否显示思考预算配置 - 支持 Gemini 2.5 系列和 Qwen3 系列 const showThinkingBudget = computed(() => { + // Gemini 2.5 系列 const isGemini = props.providerId === 'gemini' const isGemini25 = props.modelId?.includes('gemini-2.5') - return isGemini && isGemini25 + + // Qwen3 系列 + const isDashscope = props.providerId === 'dashscope' + const isQwen3 = props.modelId?.includes('qwen3') + + return (isGemini && isGemini25) || (isDashscope && isQwen3) }) const isGPT5Model = computed(() => { @@ -134,6 +140,136 @@ const handleDynamicThinkingToggle = (enabled: boolean) => { emit('update:thinkingBudget', 1024) } } + +// 获取 Qwen3 模型的最大思考预算 +const getQwen3MaxBudget = (): number => { + const modelId = props.modelId?.toLowerCase() || '' + + // 根据不同的 Qwen3 模型返回不同的最大值 + if (modelId.includes('qwen3-235b-a22b') || modelId.includes('qwen3-30b-a3b')) { + return 81920 + } else if ( + modelId.includes('qwen3-32b') || + modelId.includes('qwen3-14b') || + modelId.includes('qwen3-8b') || + modelId.includes('qwen3-4b') + ) { + return 38912 + } else if (modelId.includes('qwen3-1.7b') || modelId.includes('qwen3-0.6b')) { + return 20000 + } + + // 默认值 + return 81920 +} + +// 获取 Gemini 模型的思考预算配置范围 +const getGeminiThinkingBudgetRange = () => { + const modelId = props.modelId?.toLowerCase() || '' + + if (modelId.includes('gemini-2.5-pro')) { + return { + min: 128, + max: 32768, + defaultValue: -1, + canDisable: false + } + } else if (modelId.includes('gemini-2.5-flash-lite')) { + return { + min: 0, + max: 24576, + defaultValue: 0, + canDisable: true + } + } else if (modelId.includes('gemini-2.5-flash')) { + return { + min: 0, + max: 24576, + defaultValue: -1, + canDisable: true + } + } + + // 默认配置 + return { + min: 128, + max: 32768, + defaultValue: -1, + canDisable: false + } +} + +// Gemini 思考预算验证错误 +const geminiThinkingBudgetError = computed(() => { + if (props.providerId !== 'gemini' || !props.modelId?.includes('gemini-2.5')) return '' + + const value = props.thinkingBudget + const range = getGeminiThinkingBudgetRange() + + if (value === undefined || value === null) return '' + + // -1 是有效值(动态思维) + if (value === -1) return '' + + // 检查是否可以禁用(设置为 0) + if (value === 0 && !range.canDisable) { + if (props.modelId?.includes('pro')) { + return t('settings.model.modelConfig.thinkingBudget.gemini.warnings.proCannotDisable') + } else { + return t('settings.model.modelConfig.thinkingBudget.gemini.warnings.modelCannotDisable') + } + } + + if (value < range.min && value !== 0) { + // 对于 Flash-Lite,0 是有效值(停用思考),但其他值不能小于 512 + if (props.modelId?.includes('flash-lite') && value > 0 && value < 512) { + return t('settings.model.modelConfig.thinkingBudget.gemini.warnings.flashLiteMinValue') + } + + let hint = '' + if (range.canDisable && range.min === 0) { + hint = t('settings.model.modelConfig.thinkingBudget.gemini.hints.withZeroAndDynamic') + } else if (range.canDisable) { + hint = t('settings.model.modelConfig.thinkingBudget.gemini.hints.withDynamic') + } else { + hint = t('settings.model.modelConfig.thinkingBudget.gemini.hints.withDynamic') + } + return t('settings.model.modelConfig.thinkingBudget.gemini.warnings.belowMin', { + min: range.min, + hint + }) + } + + if (value > range.max) { + return t('settings.model.modelConfig.thinkingBudget.gemini.warnings.aboveMax', { + max: range.max + }) + } + + return '' +}) + +// Qwen3 思考预算验证错误 +const qwen3ThinkingBudgetError = computed(() => { + if (props.providerId !== 'dashscope' || !props.modelId?.includes('qwen3')) return '' + + const value = props.thinkingBudget + const maxBudget = getQwen3MaxBudget() + + if (value === undefined || value === null) { + return '' + } + if (value < 1) { + return t('settings.model.modelConfig.thinkingBudget.qwen3.validation.minValue') + } + if (value > maxBudget) { + return t('settings.model.modelConfig.thinkingBudget.qwen3.validation.maxValue', { + max: maxBudget + }) + } + + return '' +})