From 75fbe44839f3801f4790820f8983fb296c3372be Mon Sep 17 00:00:00 2001 From: zhaoying Date: Tue, 28 Apr 2026 16:17:31 +0800 Subject: [PATCH] fix(web): add min validator --- web/src/i18n/en.ts | 1 + web/src/i18n/zh.ts | 1 + .../components/ModelConfigModal.tsx | 21 ++++++++++++------- 3 files changed, 15 insertions(+), 8 deletions(-) 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 a9c94a34..d63e5b17 100644 --- a/web/src/views/ApplicationConfig/components/ModelConfigModal.tsx +++ b/web/src/views/ApplicationConfig/components/ModelConfigModal.tsx @@ -49,8 +49,8 @@ const configFields = [ { key: 'n', max: 10, min: 1, step: 1, defaultValue: 1 }, ] -const min_thinking_budget_tokens = 128; -const default_thinking_budget_tokens = 1000; +const minThinkingBudgetTokens = 128; +const defaultThinkingBudgetTokens = 1000; const ModelConfigModal = forwardRef(({ refresh, data, @@ -110,7 +110,7 @@ const ModelConfigModal = forwardRef( const newValues: ModelConfig = { capability: (option as Model).capability, deep_thinking: false, - thinking_budget_tokens: default_thinking_budget_tokens, + thinking_budget_tokens: defaultThinkingBudgetTokens, json_output: false, } if (source === 'chat') { @@ -132,7 +132,7 @@ const ModelConfigModal = forwardRef( useEffect(() => { if (values?.deep_thinking && !values?.thinking_budget_tokens) { - form.setFieldValue('thinking_budget_tokens', default_thinking_budget_tokens) + form.setFieldValue('thinking_budget_tokens', defaultThinkingBudgetTokens) } }, [values?.deep_thinking]) @@ -186,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')}: [{min_thinking_budget_tokens}, {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() } @@ -203,7 +208,7 @@ const ModelConfigModal = forwardRef( >