diff --git a/web/src/components/playground/ParameterControl.jsx b/web/src/components/playground/ParameterControl.jsx index e06c3973..82ab4b77 100644 --- a/web/src/components/playground/ParameterControl.jsx +++ b/web/src/components/playground/ParameterControl.jsx @@ -18,7 +18,14 @@ For commercial licensing, please contact support@quantumnous.com */ import React from 'react'; -import { Input, Slider, Typography, Button, Tag } from '@douyinfe/semi-ui'; +import { + Input, + InputNumber, + Slider, + Typography, + Button, + Tag, +} from '@douyinfe/semi-ui'; import { useTranslation } from 'react-i18next'; import { Hash, @@ -241,15 +248,14 @@ const ParameterControl = ({ disabled={disabled} /> - onInputChange('max_tokens', value)} - className='!rounded-lg' + onNumberChange={(value) => onInputChange('max_tokens', value)} + min={0} + precision={0} + style={{ width: '100%' }} disabled={!parameterEnabled.max_tokens || disabled} /> diff --git a/web/src/components/playground/configStorage.js b/web/src/components/playground/configStorage.js index 86674eb5..d201ed6a 100644 --- a/web/src/components/playground/configStorage.js +++ b/web/src/components/playground/configStorage.js @@ -65,11 +65,15 @@ export const loadConfig = () => { const savedConfig = localStorage.getItem(STORAGE_KEYS.CONFIG); if (savedConfig) { const parsedConfig = JSON.parse(savedConfig); + const parsedMaxTokens = parseInt(parsedConfig?.inputs?.max_tokens, 10); const mergedConfig = { inputs: { ...DEFAULT_CONFIG.inputs, ...parsedConfig.inputs, + max_tokens: Number.isNaN(parsedMaxTokens) + ? parsedConfig?.inputs?.max_tokens + : parsedMaxTokens, }, parameterEnabled: { ...DEFAULT_CONFIG.parameterEnabled, diff --git a/web/src/helpers/api.js b/web/src/helpers/api.js index 9381968e..88122a56 100644 --- a/web/src/helpers/api.js +++ b/web/src/helpers/api.js @@ -150,7 +150,18 @@ export const buildApiPayload = ( const value = inputs[param]; const hasValue = value !== undefined && value !== null; - if (enabled && hasValue) { + if (!enabled) { + return; + } + + if (param === 'max_tokens') { + if (typeof value === 'number') { + payload[param] = value; + } + return; + } + + if (hasValue) { payload[param] = value; } }); diff --git a/web/src/hooks/playground/usePlaygroundState.js b/web/src/hooks/playground/usePlaygroundState.js index 79be1013..130df90d 100644 --- a/web/src/hooks/playground/usePlaygroundState.js +++ b/web/src/hooks/playground/usePlaygroundState.js @@ -167,7 +167,14 @@ export const usePlaygroundState = () => { // 配置导入/重置 const handleConfigImport = useCallback((importedConfig) => { if (importedConfig.inputs) { - setInputs((prev) => ({ ...prev, ...importedConfig.inputs })); + const parsedMaxTokens = parseInt(importedConfig.inputs.max_tokens, 10); + setInputs((prev) => ({ + ...prev, + ...importedConfig.inputs, + max_tokens: Number.isNaN(parsedMaxTokens) + ? importedConfig.inputs.max_tokens + : parsedMaxTokens, + })); } if (importedConfig.parameterEnabled) { setParameterEnabled((prev) => ({