fix: improved input validation and debouncing for assistant settings updates

This commit is contained in:
kangfenmao 2025-01-14 13:18:34 +08:00
parent 2b4cfe7cb1
commit 56761d6f69

View File

@ -6,6 +6,7 @@ import { DEFAULT_CONTEXTCOUNT, DEFAULT_TEMPERATURE } from '@renderer/config/cons
import { SettingRow } from '@renderer/pages/settings' import { SettingRow } from '@renderer/pages/settings'
import { Assistant, AssistantSettingCustomParameters, AssistantSettings } from '@renderer/types' import { Assistant, AssistantSettingCustomParameters, AssistantSettings } from '@renderer/types'
import { Button, Col, Divider, Input, InputNumber, Row, Select, Slider, Switch, Tooltip } from 'antd' import { Button, Col, Divider, Input, InputNumber, Row, Select, Slider, Switch, Tooltip } from 'antd'
import { isNull } from 'lodash'
import { FC, useEffect, useRef, useState } from 'react' import { FC, useEffect, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import styled from 'styled-components' import styled from 'styled-components'
@ -36,6 +37,7 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
const { t } = useTranslation() const { t } = useTranslation()
const onTemperatureChange = (value) => { const onTemperatureChange = (value) => {
console.debug('[onTemperatureChange]', value)
if (!isNaN(value as number)) { if (!isNaN(value as number)) {
updateAssistantSettings({ temperature: value }) updateAssistantSettings({ temperature: value })
} }
@ -206,7 +208,7 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
value={autoResetModel} value={autoResetModel}
onChange={(checked) => { onChange={(checked) => {
setAutoResetModel(checked) setAutoResetModel(checked)
updateAssistantSettings({ autoResetModel: checked }) setTimeout(() => updateAssistantSettings({ autoResetModel: checked }), 500)
}} }}
/> />
</SettingRow> </SettingRow>
@ -218,7 +220,7 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
</Tooltip> </Tooltip>
</Row> </Row>
<Row align="middle" gutter={20}> <Row align="middle" gutter={20}>
<Col span={21}> <Col span={20}>
<Slider <Slider
min={0} min={0}
max={2} max={2}
@ -229,13 +231,19 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
step={0.01} step={0.01}
/> />
</Col> </Col>
<Col span={3}> <Col span={4}>
<InputNumber <InputNumber
min={0} min={0}
max={2} max={2}
step={0.01} step={0.01}
value={temperature} value={temperature}
onChange={onTemperatureChange} changeOnBlur
onChange={(value) => {
if (!isNull(value)) {
setTemperature(value)
setTimeout(() => updateAssistantSettings({ temperature: value }), 500)
}
}}
style={{ width: '100%' }} style={{ width: '100%' }}
/> />
</Col> </Col>
@ -247,7 +255,7 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
</Tooltip> </Tooltip>
</Row> </Row>
<Row align="middle" gutter={20}> <Row align="middle" gutter={20}>
<Col span={21}> <Col span={20}>
<Slider <Slider
min={0} min={0}
max={1} max={1}
@ -258,8 +266,21 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
step={0.01} step={0.01}
/> />
</Col> </Col>
<Col span={3}> <Col span={4}>
<InputNumber min={0} max={1} step={0.01} value={topP} onChange={onTopPChange} style={{ width: '100%' }} /> <InputNumber
min={0}
max={1}
step={0.01}
value={topP}
changeOnBlur
onChange={(value) => {
if (!isNull(value)) {
setTopP(value)
setTimeout(() => updateAssistantSettings({ topP: value }), 500)
}
}}
style={{ width: '100%' }}
/>
</Col> </Col>
</Row> </Row>
<Row align="middle"> <Row align="middle">
@ -271,7 +292,7 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
</Label> </Label>
</Row> </Row>
<Row align="middle" gutter={20}> <Row align="middle" gutter={20}>
<Col span={21}> <Col span={20}>
<Slider <Slider
min={0} min={0}
max={20} max={20}
@ -282,13 +303,19 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
step={1} step={1}
/> />
</Col> </Col>
<Col span={3}> <Col span={4}>
<InputNumber <InputNumber
min={0} min={0}
max={20} max={20}
step={1} step={1}
value={contextCount} value={contextCount}
onChange={onContextCountChange} changeOnBlur
onChange={(value) => {
if (!isNull(value)) {
setContextCount(value)
setTimeout(() => updateAssistantSettings({ contextCount: value }), 500)
}
}}
style={{ width: '100%' }} style={{ width: '100%' }}
/> />
</Col> </Col>
@ -311,7 +338,7 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
</SettingRow> </SettingRow>
{enableMaxTokens && ( {enableMaxTokens && (
<Row align="middle" gutter={20}> <Row align="middle" gutter={20}>
<Col span={21}> <Col span={20}>
<Slider <Slider
disabled={!enableMaxTokens} disabled={!enableMaxTokens}
min={0} min={0}
@ -319,21 +346,27 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
onChange={setMaxTokens} onChange={setMaxTokens}
onChangeComplete={onMaxTokensChange} onChangeComplete={onMaxTokensChange}
value={typeof maxTokens === 'number' ? maxTokens : 0} value={typeof maxTokens === 'number' ? maxTokens : 0}
step={100} step={50}
marks={{ marks={{
0: '0', 0: '0',
32000: t('chat.settings.max') 32000: t('chat.settings.max')
}} }}
/> />
</Col> </Col>
<Col span={3}> <Col span={4}>
<InputNumber <InputNumber
disabled={!enableMaxTokens} disabled={!enableMaxTokens}
min={0} min={0}
max={32000} max={32000}
step={100} step={100}
value={maxTokens} value={maxTokens}
onChange={onMaxTokensChange} changeOnBlur
onChange={(value) => {
if (!isNull(value)) {
setMaxTokens(value)
setTimeout(() => updateAssistantSettings({ maxTokens: value }), 1000)
}
}}
style={{ width: '100%' }} style={{ width: '100%' }}
/> />
</Col> </Col>