From efa0f4cbdbb0a5a61d0ca5f7f09f3cc4cf730b2e Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Wed, 20 Nov 2024 17:38:10 +0800 Subject: [PATCH] Revert "feat: remove model settings from settings tab" This reverts commit a9aa5a8da001fe1715697001c083331a904aec0e. # Conflicts: # src/renderer/src/pages/home/Tabs/Settings.tsx --- src/renderer/src/pages/home/Tabs/Settings.tsx | 541 ++++++++++++------ src/renderer/src/pages/home/Tabs/index.tsx | 2 +- 2 files changed, 365 insertions(+), 178 deletions(-) diff --git a/src/renderer/src/pages/home/Tabs/Settings.tsx b/src/renderer/src/pages/home/Tabs/Settings.tsx index 92ce0356..ec953b6f 100644 --- a/src/renderer/src/pages/home/Tabs/Settings.tsx +++ b/src/renderer/src/pages/home/Tabs/Settings.tsx @@ -1,6 +1,9 @@ -import { CheckOutlined } from '@ant-design/icons' +import { CheckOutlined, QuestionCircleOutlined, ReloadOutlined } from '@ant-design/icons' +import { HStack } from '@renderer/components/Layout' import Scrollbar from '@renderer/components/Scrollbar' +import { DEFAULT_CONTEXTCOUNT, DEFAULT_MAX_TOKENS, DEFAULT_TEMPERATURE } from '@renderer/config/constant' import { codeThemes } from '@renderer/context/SyntaxHighlighterProvider' +import { useAssistant } from '@renderer/hooks/useAssistant' import { useSettings } from '@renderer/hooks/useSettings' import { SettingDivider, SettingRow, SettingRowTitle, SettingSubtitle } from '@renderer/pages/settings' import { useAppDispatch } from '@renderer/store' @@ -19,14 +22,26 @@ import { setShowMessageDivider, setShowTopicTime } from '@renderer/store/settings' -import { Col, Row, Select, Slider, Switch } from 'antd' +import { Assistant, AssistantSettings, ThemeMode } from '@renderer/types' +import { Col, Row, Select, Slider, Switch, Tooltip } from 'antd' import { FC, useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' -const SettingsTab: FC = () => { +interface Props { + assistant: Assistant +} + +const SettingsTab: FC = (props) => { + const { assistant, updateAssistantSettings, updateAssistant } = useAssistant(props.assistant.id) const { messageStyle, codeStyle, fontSize } = useSettings() + + const [temperature, setTemperature] = useState(assistant?.settings?.temperature ?? DEFAULT_TEMPERATURE) + const [contextCount, setContextCount] = useState(assistant?.settings?.contextCount ?? DEFAULT_CONTEXTCOUNT) + const [enableMaxTokens, setEnableMaxTokens] = useState(assistant?.settings?.enableMaxTokens ?? false) + const [maxTokens, setMaxTokens] = useState(assistant?.settings?.maxTokens ?? 0) const [fontSizeValue, setFontSizeValue] = useState(fontSize) + const [streamOutput, setStreamOutput] = useState(assistant?.settings?.streamOutput ?? true) const { t } = useTranslation() const dispatch = useAppDispatch() @@ -48,183 +63,336 @@ const SettingsTab: FC = () => { setTopicPosition } = useSettings() + const onUpdateAssistantSettings = (settings: Partial) => { + updateAssistantSettings(settings) + } + + const onTemperatureChange = (value) => { + if (!isNaN(value as number)) { + onUpdateAssistantSettings({ temperature: value }) + } + } + + const onContextCountChange = (value) => { + if (!isNaN(value as number)) { + onUpdateAssistantSettings({ contextCount: value }) + } + } + + const onMaxTokensChange = (value) => { + if (!isNaN(value as number)) { + onUpdateAssistantSettings({ maxTokens: value }) + } + } + + const onReset = () => { + setTemperature(DEFAULT_TEMPERATURE) + setContextCount(DEFAULT_CONTEXTCOUNT) + updateAssistant({ + ...assistant, + settings: { + ...assistant.settings, + temperature: DEFAULT_TEMPERATURE, + contextCount: DEFAULT_CONTEXTCOUNT, + enableMaxTokens: false, + maxTokens: DEFAULT_MAX_TOKENS, + streamOutput: true, + hideMessages: false, + autoResetModel: false + } + }) + } + useEffect(() => { - setFontSizeValue(fontSize) - }, [fontSize]) + setTemperature(assistant?.settings?.temperature ?? DEFAULT_TEMPERATURE) + setContextCount(assistant?.settings?.contextCount ?? DEFAULT_CONTEXTCOUNT) + setEnableMaxTokens(assistant?.settings?.enableMaxTokens ?? false) + setMaxTokens(assistant?.settings?.maxTokens ?? DEFAULT_MAX_TOKENS) + setStreamOutput(assistant?.settings?.streamOutput ?? true) + }, [assistant]) return ( - {t('settings.messages.title')} - - - {t('settings.messages.divider')} - dispatch(setShowMessageDivider(checked))} - /> - - - - {t('settings.messages.use_serif_font')} - dispatch(setMessageFont(checked ? 'serif' : 'system'))} - /> - - - - {t('chat.settings.show_line_numbers')} - dispatch(setCodeShowLineNumbers(checked))} - /> - - - - {t('chat.settings.code_collapsible')} - dispatch(setCodeCollapsible(checked))} /> - - - - {t('message.message.style')} - - - - - {t('message.message.code_style')} - - - - - {t('settings.messages.math_engine')} - - - - - {t('settings.font_size.title')} - - - - setFontSizeValue(value)} - onChangeComplete={(value) => dispatch(setFontSize(value))} - min={12} - max={22} - step={1} - marks={{ - 12: A, - 14: {t('common.default')}, - 22: A + + + {t('settings.messages.model.title')}{' '} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {t('model.stream_output')} + { + setStreamOutput(checked) + onUpdateAssistantSettings({ streamOutput: checked }) }} /> - - - {t('settings.messages.input.title')} - - - {t('settings.messages.input.show_estimated_tokens')} - dispatch(setShowInputEstimatedTokens(checked))} - /> - - - - {t('settings.messages.input.paste_long_text_as_file')} - dispatch(setPasteLongTextAsFile(checked))} - /> - - - - {t('settings.messages.markdown_rendering_input_message')} - dispatch(setRenderInputMessageAsMarkdown(checked))} - /> - - - - {t('settings.messages.input.send_shortcuts')} - - - - {topicPosition === 'left' && ( - <> - - {t('settings.advanced.auto_switch_to_topics')} - dispatch(setClickAssistantToShowTopic(checked))} + + + + + + + + + + { + setEnableMaxTokens(enabled) + onUpdateAssistantSettings({ enableMaxTokens: enabled }) + }} + /> + + + + - - - - )} - - {t('settings.topic.show.time')} - dispatch(setShowTopicTime(checked))} /> - - + + + + + {t('settings.messages.title')} + + + {t('settings.messages.divider')} + dispatch(setShowMessageDivider(checked))} + /> + + + + {t('settings.messages.use_serif_font')} + dispatch(setMessageFont(checked ? 'serif' : 'system'))} + /> + + + + {t('chat.settings.show_line_numbers')} + dispatch(setCodeShowLineNumbers(checked))} + /> + + + + {t('chat.settings.code_collapsible')} + dispatch(setCodeCollapsible(checked))} + /> + + + + {t('message.message.code_style')} + + + + + {t('message.message.style')} + + + + + {t('message.message.code_style')} + + + + + {t('settings.messages.math_engine')} + + + + + {t('settings.font_size.title')} + + + + setFontSizeValue(value)} + onChangeComplete={(value) => dispatch(setFontSize(value))} + min={12} + max={22} + step={1} + marks={{ + 12: A, + 14: {t('common.default')}, + 22: A + }} + /> + + + + + {t('settings.messages.input.title')} + + + {t('settings.messages.input.show_estimated_tokens')} + dispatch(setShowInputEstimatedTokens(checked))} + /> + + + + {t('settings.messages.input.paste_long_text_as_file')} + dispatch(setPasteLongTextAsFile(checked))} + /> + + + + {t('settings.messages.markdown_rendering_input_message')} + dispatch(setRenderInputMessageAsMarkdown(checked))} + /> + + + + {t('settings.messages.input.send_shortcuts')} + + + + {topicPosition === 'left' && ( + <> + + {t('settings.advanced.auto_switch_to_topics')} + dispatch(setClickAssistantToShowTopic(checked))} + /> + + + + )} + + {t('settings.topic.show.time')} + dispatch(setShowTopicTime(checked))} /> + + + ) } @@ -233,14 +401,33 @@ const Container = styled(Scrollbar)` display: flex; flex: 1; flex-direction: column; - padding-bottom: 10px; - padding: 10px 15px; - margin-bottom: 10px; - padding-top: 0; + padding: 0 10px; + padding-right: 5px; +` + +const Label = styled.p` + margin: 0; + font-size: 12px; + margin-right: 5px; +` + +const QuestionIcon = styled(QuestionCircleOutlined)` + font-size: 12px; + cursor: pointer; + color: var(--color-text-3); ` const SettingRowTitleSmall = styled(SettingRowTitle)` font-size: 13px; ` +export const SettingGroup = styled.div<{ theme?: ThemeMode }>` + padding: 10px; + width: 100%; + margin-top: 0; + border-radius: 8px; + margin-bottom: 10px; + background: var(--color-background-soft); +` + export default SettingsTab diff --git a/src/renderer/src/pages/home/Tabs/index.tsx b/src/renderer/src/pages/home/Tabs/index.tsx index e21d99a9..a83b1b31 100644 --- a/src/renderer/src/pages/home/Tabs/index.tsx +++ b/src/renderer/src/pages/home/Tabs/index.tsx @@ -137,7 +137,7 @@ const HomeTabs: FC = ({ activeAssistant, activeTopic, setActiveAssistant, {tab === 'topic' && ( )} - {tab === 'settings' && } + {tab === 'settings' && } )