refactor: slider onChange event

This commit is contained in:
kangfenmao 2024-08-12 21:48:59 +08:00
parent 52af23b931
commit 145d7ee748
2 changed files with 34 additions and 50 deletions

View File

@ -8,8 +8,7 @@ import { useAppDispatch } from '@renderer/store'
import { setMessageFont, setShowInputEstimatedTokens, setShowMessageDivider } from '@renderer/store/settings' import { setMessageFont, setShowInputEstimatedTokens, setShowMessageDivider } from '@renderer/store/settings'
import { Assistant, AssistantSettings } from '@renderer/types' import { Assistant, AssistantSettings } from '@renderer/types'
import { Col, Row, Select, Slider, Switch, Tooltip } from 'antd' import { Col, Row, Select, Slider, Switch, Tooltip } from 'antd'
import { debounce } from 'lodash' import { FC, useEffect, useState } from 'react'
import { FC, useCallback, useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import styled from 'styled-components' import styled from 'styled-components'
@ -30,39 +29,29 @@ const SettingsTab: FC<Props> = (props) => {
const { showMessageDivider, messageFont, showInputEstimatedTokens, sendMessageShortcut, setSendMessageShortcut } = const { showMessageDivider, messageFont, showInputEstimatedTokens, sendMessageShortcut, setSendMessageShortcut } =
useSettings() useSettings()
const onUpdateAssistantSettings = useCallback( const onUpdateAssistantSettings = (settings: Partial<AssistantSettings>) => {
debounce( updateAssistantSettings({
(settings: Partial<AssistantSettings>) => { temperature: settings.temperature ?? temperature,
updateAssistantSettings({ contextCount: settings.contextCount ?? contextCount,
temperature: settings.temperature ?? temperature, enableMaxTokens: settings.enableMaxTokens ?? enableMaxTokens,
contextCount: settings.contextCount ?? contextCount, maxTokens: settings.maxTokens ?? maxTokens
enableMaxTokens: settings.enableMaxTokens ?? enableMaxTokens, })
maxTokens: settings.maxTokens ?? maxTokens }
})
},
1000,
{ leading: true, trailing: false }
),
[temperature, contextCount, enableMaxTokens, maxTokens]
)
const onTemperatureChange = (value) => { const onTemperatureChange = (value) => {
if (!isNaN(value as number)) { if (!isNaN(value as number)) {
setTemperature(value)
onUpdateAssistantSettings({ temperature: value }) onUpdateAssistantSettings({ temperature: value })
} }
} }
const onConextCountChange = (value) => { const onConextCountChange = (value) => {
if (!isNaN(value as number)) { if (!isNaN(value as number)) {
setConextCount(value)
onUpdateAssistantSettings({ contextCount: value }) onUpdateAssistantSettings({ contextCount: value })
} }
} }
const onMaxTokensChange = (value) => { const onMaxTokensChange = (value) => {
if (!isNaN(value as number)) { if (!isNaN(value as number)) {
setMaxTokens(value)
onUpdateAssistantSettings({ maxTokens: value }) onUpdateAssistantSettings({ maxTokens: value })
} }
} }
@ -109,7 +98,8 @@ const SettingsTab: FC<Props> = (props) => {
<Slider <Slider
min={0} min={0}
max={1.2} max={1.2}
onChange={onTemperatureChange} onChange={setTemperature}
onChangeComplete={onTemperatureChange}
value={typeof temperature === 'number' ? temperature : 0} value={typeof temperature === 'number' ? temperature : 0}
step={0.1} step={0.1}
/> />
@ -126,7 +116,8 @@ const SettingsTab: FC<Props> = (props) => {
<Slider <Slider
min={0} min={0}
max={20} max={20}
onChange={onConextCountChange} onChange={setConextCount}
onChangeComplete={onConextCountChange}
value={typeof contextCount === 'number' ? contextCount : 0} value={typeof contextCount === 'number' ? contextCount : 0}
step={1} step={1}
/> />
@ -154,7 +145,8 @@ const SettingsTab: FC<Props> = (props) => {
<Slider <Slider
min={0} min={0}
max={32000} max={32000}
onChange={onMaxTokensChange} onChange={setMaxTokens}
onChangeComplete={onMaxTokensChange}
value={typeof maxTokens === 'number' ? maxTokens : 0} value={typeof maxTokens === 'number' ? maxTokens : 0}
step={100} step={100}
/> />

View File

@ -5,8 +5,7 @@ import { useDefaultAssistant } from '@renderer/hooks/useAssistant'
import { AssistantSettings as AssistantSettingsType } from '@renderer/types' import { AssistantSettings as AssistantSettingsType } from '@renderer/types'
import { Button, Col, Input, InputNumber, Row, Slider, Switch, Tooltip } from 'antd' import { Button, Col, Input, InputNumber, Row, Slider, Switch, Tooltip } from 'antd'
import TextArea from 'antd/es/input/TextArea' import TextArea from 'antd/es/input/TextArea'
import { debounce } from 'lodash' import { FC, useState } from 'react'
import { FC, useCallback, useState } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import styled from 'styled-components' import styled from 'styled-components'
@ -21,43 +20,33 @@ const AssistantSettings: FC = () => {
const { t } = useTranslation() const { t } = useTranslation()
const onUpdateAssistantSettings = useCallback( const onUpdateAssistantSettings = (settings: Partial<AssistantSettingsType>) => {
debounce( updateDefaultAssistant({
(settings: Partial<AssistantSettingsType>) => { ...defaultAssistant,
updateDefaultAssistant({ settings: {
...defaultAssistant, ...defaultAssistant.settings,
settings: { temperature: settings.temperature ?? temperature,
...defaultAssistant.settings, contextCount: settings.contextCount ?? contextCount,
temperature: settings.temperature ?? temperature, enableMaxTokens: settings.enableMaxTokens ?? enableMaxTokens,
contextCount: settings.contextCount ?? contextCount, maxTokens: settings.maxTokens ?? maxTokens
enableMaxTokens: settings.enableMaxTokens ?? enableMaxTokens, }
maxTokens: settings.maxTokens ?? maxTokens })
} }
})
},
1000,
{ leading: false, trailing: true }
),
[temperature, contextCount, enableMaxTokens, maxTokens]
)
const onTemperatureChange = (value) => { const onTemperatureChange = (value) => {
if (!isNaN(value as number)) { if (!isNaN(value as number)) {
setTemperature(value)
onUpdateAssistantSettings({ temperature: value }) onUpdateAssistantSettings({ temperature: value })
} }
} }
const onConextCountChange = (value) => { const onConextCountChange = (value) => {
if (!isNaN(value as number)) { if (!isNaN(value as number)) {
setConextCount(value)
onUpdateAssistantSettings({ contextCount: value }) onUpdateAssistantSettings({ contextCount: value })
} }
} }
const onMaxTokensChange = (value) => { const onMaxTokensChange = (value) => {
if (!isNaN(value as number)) { if (!isNaN(value as number)) {
setMaxTokens(value)
onUpdateAssistantSettings({ maxTokens: value }) onUpdateAssistantSettings({ maxTokens: value })
} }
} }
@ -121,7 +110,8 @@ const AssistantSettings: FC = () => {
<Slider <Slider
min={0} min={0}
max={1.2} max={1.2}
onChange={onTemperatureChange} onChange={setTemperature}
onChangeComplete={onTemperatureChange}
value={typeof temperature === 'number' ? temperature : 0} value={typeof temperature === 'number' ? temperature : 0}
marks={{ 0: '0', 0.7: '0.7', 1: '1', 1.2: '1.2' }} marks={{ 0: '0', 0.7: '0.7', 1: '1', 1.2: '1.2' }}
step={0.1} step={0.1}
@ -150,7 +140,8 @@ const AssistantSettings: FC = () => {
min={0} min={0}
max={20} max={20}
marks={{ 0: '0', 5: '5', 10: '10', 15: '15', 20: t('chat.settings.max') }} marks={{ 0: '0', 5: '5', 10: '10', 15: '15', 20: t('chat.settings.max') }}
onChange={onConextCountChange} onChange={setConextCount}
onChangeComplete={onConextCountChange}
value={typeof contextCount === 'number' ? contextCount : 0} value={typeof contextCount === 'number' ? contextCount : 0}
step={1} step={1}
/> />
@ -188,7 +179,8 @@ const AssistantSettings: FC = () => {
<Slider <Slider
min={0} min={0}
max={32000} max={32000}
onChange={onMaxTokensChange} onChange={setMaxTokens}
onChangeComplete={onMaxTokensChange}
value={typeof maxTokens === 'number' ? maxTokens : 0} value={typeof maxTokens === 'number' ? maxTokens : 0}
step={100} step={100}
marks={{ marks={{