diff --git a/web/src/i18n/en.ts b/web/src/i18n/en.ts index 2a7534c4..3a03fbc6 100644 --- a/web/src/i18n/en.ts +++ b/web/src/i18n/en.ts @@ -1538,6 +1538,7 @@ export const en = { json_output: 'Support JSON formatted output', thinking_budget_tokens: 'thinking budget tokens', thinking_budget_tokens_max_error: "Cannot exceed the max tokens limit ({{max}})", + thinking_budget_tokens_min_error: "Cannot be less than {{min}}", logSearchPlaceholder: 'Search log content', }, userMemory: { diff --git a/web/src/i18n/zh.ts b/web/src/i18n/zh.ts index 6989cf3f..c7b24eb4 100644 --- a/web/src/i18n/zh.ts +++ b/web/src/i18n/zh.ts @@ -868,6 +868,7 @@ export const zh = { json_output: '支持JSON格式化输出', thinking_budget_tokens: '深度思考预算Token数', thinking_budget_tokens_max_error: "不能超过 最大令牌数 ({{max}})", + thinking_budget_tokens_min_error: "不能小于 {{min}}", logSearchPlaceholder: '搜索日志内容', }, table: { diff --git a/web/src/views/ApplicationConfig/components/ModelConfigModal.tsx b/web/src/views/ApplicationConfig/components/ModelConfigModal.tsx index bda18571..d63e5b17 100644 --- a/web/src/views/ApplicationConfig/components/ModelConfigModal.tsx +++ b/web/src/views/ApplicationConfig/components/ModelConfigModal.tsx @@ -49,6 +49,8 @@ const configFields = [ { key: 'n', max: 10, min: 1, step: 1, defaultValue: 1 }, ] +const minThinkingBudgetTokens = 128; +const defaultThinkingBudgetTokens = 1000; const ModelConfigModal = forwardRef(({ refresh, data, @@ -108,7 +110,7 @@ const ModelConfigModal = forwardRef( const newValues: ModelConfig = { capability: (option as Model).capability, deep_thinking: false, - thinking_budget_tokens: undefined, + thinking_budget_tokens: defaultThinkingBudgetTokens, json_output: false, } if (source === 'chat') { @@ -128,6 +130,12 @@ const ModelConfigModal = forwardRef( form.setFieldsValue({ ...rest }) }, [data?.default_model_config_id]) + useEffect(() => { + if (values?.deep_thinking && !values?.thinking_budget_tokens) { + form.setFieldValue('thinking_budget_tokens', defaultThinkingBudgetTokens) + } + }, [values?.deep_thinking]) + const handleReset = () => { if (!id) return resetAppModelConfig(id).then((res) => { @@ -178,15 +186,20 @@ const ModelConfigModal = forwardRef( name="thinking_budget_tokens" label={t('application.thinking_budget_tokens')} hidden={!['model', 'chat'].includes(source) || !(values?.deep_thinking || values?.capability?.includes('thinking'))} - extra={<>{t('application.range')}: [{0}, {t(`application.max_tokens`)}: {values?.max_tokens}]} + extra={<>{t('application.range')}: [{minThinkingBudgetTokens}, {t(`application.max_tokens`)}: {values?.max_tokens}]} rules={[ { required: values?.deep_thinking, message: t('common.pleaseEnter') }, { validator: (_, value) => { const maxTokens = values?.max_tokens const deep_thinking = values?.deep_thinking; - if (deep_thinking && value !== undefined && maxTokens !== undefined && value > maxTokens) { - return Promise.reject(t('application.thinking_budget_tokens_max_error', { max: maxTokens })) + if (deep_thinking && value !== undefined) { + if (value < minThinkingBudgetTokens) { + return Promise.reject(t('application.thinking_budget_tokens_min_error', { min: minThinkingBudgetTokens })) + } + if (maxTokens !== undefined && value > maxTokens) { + return Promise.reject(t('application.thinking_budget_tokens_max_error', { max: maxTokens })) + } } return Promise.resolve() } @@ -195,7 +208,7 @@ const ModelConfigModal = forwardRef( >