refactor: remove extended context settings and related logic

* Removed EXTENDED_CONTEXT_LIMIT and EXTENDED_CONTEXT_STEP constants from the configuration.
* Eliminated enableMaxContexts state and associated logic from settings components.
* Updated contextCount handling to accommodate a maximum of 100, with a special case for 100 to represent an unlimited context.
* Cleaned up related translations for max contexts in multiple languages.
This commit is contained in:
kangfenmao 2025-05-15 20:56:00 +08:00
parent 1577dbefae
commit fd76989c7e
13 changed files with 29 additions and 119 deletions

View File

@ -1,7 +1,5 @@
export const DEFAULT_TEMPERATURE = 1.0
export const DEFAULT_CONTEXTCOUNT = 5
export const EXTENDED_CONTEXT_LIMIT = 100
export const EXTENDED_CONTEXT_STEP = 1
export const DEFAULT_MAX_TOKENS = 4096
export const DEFAULT_KNOWLEDGE_DOCUMENT_COUNT = 6
export const DEFAULT_KNOWLEDGE_THRESHOLD = 0.0

View File

@ -208,7 +208,6 @@
"settings.context_count": "Context",
"settings.context_count.tip": "The number of previous messages to keep in the context.",
"settings.max": "Max",
"settings.max_contexts": "More Contexts Length",
"settings.max_tokens": "Enable max tokens limit",
"settings.max_tokens.confirm": "Enable max tokens limit",
"settings.max_tokens.confirm_content": "Enable max tokens limit, affects the length of the result. Need to consider the context limit of the model, otherwise an error will be reported",

View File

@ -208,7 +208,6 @@
"settings.context_count": "コンテキスト",
"settings.context_count.tip": "コンテキストに保持する以前のメッセージの数",
"settings.max": "最大",
"settings.max_contexts": "より長いコンテキスト制限",
"settings.max_tokens": "最大トークン制限を有効にする",
"settings.max_tokens.confirm": "最大トークン制限を有効にする",
"settings.max_tokens.confirm_content": "最大トークン制限を有効にすると、モデルが生成できる最大トークン数が制限されます。これにより、返される結果の長さに影響が出る可能性があります。モデルのコンテキスト制限に基づいて設定する必要があります。そうしないとエラーが発生します",

View File

@ -208,7 +208,6 @@
"settings.context_count": "Контекст",
"settings.context_count.tip": "Количество предыдущих сообщений, которые нужно сохранить в контексте.",
"settings.max": "Максимум",
"settings.max_contexts": "Более длительные ограничения контекста",
"settings.max_tokens": "Включить лимит максимальных токенов",
"settings.max_tokens.confirm": "Включить лимит максимальных токенов",
"settings.max_tokens.confirm_content": "Включить лимит максимальных токенов, влияет на длину результата. Нужно учитывать контекст модели, иначе будет ошибка",

View File

@ -222,7 +222,6 @@
"settings.context_count": "上下文数",
"settings.context_count.tip": "要保留在上下文中的消息数量,数值越大,上下文越长,消耗的 token 越多。普通聊天建议 5-10",
"settings.max": "不限",
"settings.max_contexts": "更多上下文长度限制",
"settings.max_tokens": "开启消息长度限制",
"settings.max_tokens.confirm": "开启消息长度限制",
"settings.max_tokens.confirm_content": "开启消息长度限制后,单次交互所用的最大 Token 数, 会影响返回结果的长度。要根据模型上下文限制来设置,否则会报错",

View File

@ -208,7 +208,6 @@
"settings.context_count": "上下文",
"settings.context_count.tip": "在上下文中保留的前幾則訊息。",
"settings.max": "最大",
"settings.max_contexts": "更多上下文長度限制",
"settings.max_tokens": "啟用最大 Token 限制",
"settings.max_tokens.confirm": "啟用訊息長度限制",
"settings.max_tokens.confirm_content": "啟用訊息長度限制後,單次互動所用的最大 Token 數,會影響返回結果的長度。要根據模型上下文限制來設定,否則會發生錯誤。",

View File

@ -22,6 +22,18 @@ const TokenCount: FC<Props> = ({ estimateTokenCount, inputTokenCount, contextCou
}
const formatMaxCount = (max: number) => {
if (max == 100) {
return (
<span
style={{
fontSize: '16px',
position: 'relative',
top: '1px'
}}>
</span>
)
}
return max.toString()
}
@ -31,7 +43,7 @@ const TokenCount: FC<Props> = ({ estimateTokenCount, inputTokenCount, contextCou
<HStack justifyContent="space-between" w="100%">
<Text>{t('chat.input.context_count.tip')}</Text>
<Text>
{contextCount.current} / {contextCount.max}
{contextCount.current} / {contextCount.max == 20 ? '∞' : contextCount.max}
</Text>
</HStack>
<Divider style={{ margin: '5px 0' }} />

View File

@ -5,8 +5,6 @@ import {
DEFAULT_CONTEXTCOUNT,
DEFAULT_MAX_TOKENS,
DEFAULT_TEMPERATURE,
EXTENDED_CONTEXT_LIMIT,
EXTENDED_CONTEXT_STEP,
isMac,
isWindows
} from '@renderer/config/constant'
@ -15,7 +13,6 @@ import { useAssistant } from '@renderer/hooks/useAssistant'
import { useSettings } from '@renderer/hooks/useSettings'
import { SettingDivider, SettingRow, SettingRowTitle, SettingSubtitle } from '@renderer/pages/settings'
import AssistantSettingsPopup from '@renderer/pages/settings/AssistantSettings'
import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService'
import { useAppDispatch } from '@renderer/store'
import {
SendMessageShortcut,
@ -54,7 +51,7 @@ import {
TranslateLanguageVarious
} from '@renderer/types'
import { modalConfirm } from '@renderer/utils'
import { Button, Col, Divider, InputNumber, Row, Select, Slider, Switch, Tooltip } from 'antd'
import { Button, Col, InputNumber, Row, Select, Slider, Switch, Tooltip } from 'antd'
import { CircleHelp, RotateCcw, Settings2 } from 'lucide-react'
import { FC, useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
@ -70,7 +67,6 @@ const SettingsTab: FC<Props> = (props) => {
const [temperature, setTemperature] = useState(assistant?.settings?.temperature ?? DEFAULT_TEMPERATURE)
const [contextCount, setContextCount] = useState(assistant?.settings?.contextCount ?? DEFAULT_CONTEXTCOUNT)
const [enableMaxContexts, setEnableMaxContexts] = useState(assistant?.settings?.enableMaxContexts ?? false)
const [enableMaxTokens, setEnableMaxTokens] = useState(assistant?.settings?.enableMaxTokens ?? false)
const [maxTokens, setMaxTokens] = useState(assistant?.settings?.maxTokens ?? 0)
const [fontSizeValue, setFontSizeValue] = useState(fontSize)
@ -157,20 +153,7 @@ const SettingsTab: FC<Props> = (props) => {
setStreamOutput(assistant?.settings?.streamOutput ?? true)
}, [assistant])
const formatSliderTooltip = (value?: number) => {
if (value === undefined) return ''
return value.toString()
}
const validAndChangeContextCount = (contextCount, enableMaxContexts, EXTENDED_CONTEXT_LIMIT) => {
if ((typeof contextCount === 'number' ? contextCount : 0) > (enableMaxContexts ? EXTENDED_CONTEXT_LIMIT : 10)) {
return enableMaxContexts ? EXTENDED_CONTEXT_LIMIT : 10
} else {
return typeof contextCount === 'number' ? contextCount : 0
}
}
const container = (
return (
<Container className="settings-tab">
<SettingGroup style={{ marginTop: 10 }}>
<SettingSubtitle style={{ marginTop: 0, display: 'flex', justifyContent: 'space-between' }}>
@ -216,31 +199,14 @@ const SettingsTab: FC<Props> = (props) => {
<Col span={24}>
<Slider
min={0}
max={!enableMaxContexts ? 10 : EXTENDED_CONTEXT_LIMIT}
max={20}
onChange={setContextCount}
onChangeComplete={onContextCountChange}
value={validAndChangeContextCount(contextCount, enableMaxContexts, EXTENDED_CONTEXT_LIMIT)}
step={!enableMaxContexts ? 1 : EXTENDED_CONTEXT_STEP}
tooltip={{ formatter: formatSliderTooltip }}
value={typeof contextCount === 'number' ? contextCount : 0}
step={1}
/>
</Col>
</Row>
<SettingRow>
<SettingRowTitleSmall>{t('chat.settings.max_contexts')}</SettingRowTitleSmall>
<Switch
size="small"
checked={enableMaxContexts}
onChange={(checked) => {
setEnableMaxContexts(checked)
updateAssistantSettings({ enableMaxContexts: checked })
if (!checked && contextCount > 10) {
setContextCount(10)
onUpdateAssistantSettings({ contextCount: 10 })
}
}}
/>
</SettingRow>
<Divider style={{ margin: '10px 0' }} />
<SettingRow>
<SettingRowTitleSmall>{t('models.stream_output')}</SettingRowTitleSmall>
<Switch
@ -655,22 +621,6 @@ const SettingsTab: FC<Props> = (props) => {
</SettingGroup>
</Container>
)
EventEmitter.on(EVENT_NAMES.MAX_CONTEXTS_CHANGED, ({ check, context }): any => {
setEnableMaxContexts(check)
updateAssistantSettings({ enableMaxContexts: check })
// Ensure contextCount is within the new valid range
let newContextCount = context
if (!check && newContextCount > 10) {
newContextCount = 10
} else if (check && newContextCount > EXTENDED_CONTEXT_LIMIT) {
newContextCount = EXTENDED_CONTEXT_LIMIT
}
setContextCount(newContextCount)
onUpdateAssistantSettings({ contextCount: newContextCount })
})
return container
}
const Container = styled(Scrollbar)`

View File

@ -2,14 +2,8 @@ import { DeleteOutlined, PlusOutlined, QuestionCircleOutlined } from '@ant-desig
import ModelAvatar from '@renderer/components/Avatar/ModelAvatar'
import { HStack } from '@renderer/components/Layout'
import SelectModelPopup from '@renderer/components/Popups/SelectModelPopup'
import {
DEFAULT_CONTEXTCOUNT,
DEFAULT_TEMPERATURE,
EXTENDED_CONTEXT_LIMIT,
EXTENDED_CONTEXT_STEP
} from '@renderer/config/constant'
import { DEFAULT_CONTEXTCOUNT, DEFAULT_TEMPERATURE } from '@renderer/config/constant'
import { SettingRow } from '@renderer/pages/settings'
import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService'
import { Assistant, AssistantSettingCustomParameters, AssistantSettings } from '@renderer/types'
import { modalConfirm } from '@renderer/utils'
import { Button, Col, Divider, Input, InputNumber, Row, Select, Slider, Switch, Tooltip } from 'antd'
@ -27,7 +21,6 @@ interface Props {
const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateAssistantSettings }) => {
const [temperature, setTemperature] = useState(assistant?.settings?.temperature ?? DEFAULT_TEMPERATURE)
const [contextCount, setContextCount] = useState(assistant?.settings?.contextCount ?? DEFAULT_CONTEXTCOUNT)
const [enableMaxContexts, setEnableMaxContexts] = useState(assistant?.settings?.enableMaxContexts ?? false)
const [enableMaxTokens, setEnableMaxTokens] = useState(assistant?.settings?.enableMaxTokens ?? false)
const [maxTokens, setMaxTokens] = useState(assistant?.settings?.maxTokens ?? 0)
const [streamOutput, setStreamOutput] = useState(assistant?.settings?.streamOutput ?? true)
@ -38,10 +31,6 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
assistant?.settings?.customParameters ?? []
)
const onUpdateAssistantSettings = (settings: Partial<AssistantSettings>) => {
updateAssistantSettings(settings)
}
const customParametersRef = useRef(customParameters)
customParametersRef.current = customParameters
@ -195,14 +184,6 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
return value.toString()
}
const validAndChangeContextCount = (contextCount, enableMaxContexts, EXTENDED_CONTEXT_LIMIT) => {
if ((typeof contextCount === 'number' ? contextCount : 0) > (enableMaxContexts ? EXTENDED_CONTEXT_LIMIT : 10)) {
return enableMaxContexts ? EXTENDED_CONTEXT_LIMIT : 10
} else {
return typeof contextCount === 'number' ? contextCount : 0
}
}
return (
<Container>
<Row align="middle" style={{ marginBottom: 10 }}>
@ -311,28 +292,26 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
<Col span={20}>
<Slider
min={0}
max={!enableMaxContexts ? 10 : EXTENDED_CONTEXT_LIMIT}
max={100}
onChange={setContextCount}
onChangeComplete={onContextCountChange}
value={validAndChangeContextCount(contextCount, enableMaxContexts, EXTENDED_CONTEXT_LIMIT)}
step={!enableMaxContexts ? 1 : EXTENDED_CONTEXT_STEP}
value={typeof contextCount === 'number' ? contextCount : 0}
marks={{ 0: '0', 25: '25', 50: '50', 75: '75', 100: t('chat.settings.max') }}
step={1}
tooltip={{ formatter: formatSliderTooltip }}
/>
</Col>
<Col span={4}>
<InputNumber
min={0}
max={!enableMaxContexts ? 10 : EXTENDED_CONTEXT_LIMIT}
step={!enableMaxContexts ? 1 : EXTENDED_CONTEXT_STEP}
max={20}
step={1}
value={contextCount}
changeOnBlur
onChange={(value) => {
if (!isNull(value)) {
setContextCount(value)
setTimeout(() => {
updateAssistantSettings({ contextCount: value })
onUpdateAssistantSettings({ contextCount: value })
}, 500)
setTimeout(() => updateAssistantSettings({ contextCount: value }), 500)
}
}}
style={{ width: '100%' }}
@ -340,27 +319,6 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
</Col>
</Row>
<Divider style={{ margin: '10px 0' }} />
<SettingRow style={{ minHeight: 30 }}>
<HStack alignItems="center">
<Label>{t('chat.settings.max_contexts')}</Label>
</HStack>
<Switch
checked={enableMaxContexts}
onChange={(checked) => {
setEnableMaxContexts(checked)
updateAssistantSettings({ enableMaxContexts: checked })
if (!checked && contextCount > 10) {
setContextCount(10)
onUpdateAssistantSettings({ contextCount: 10 })
}
EventEmitter.emit(EVENT_NAMES.MAX_CONTEXTS_CHANGED, {
check: checked,
context: contextCount
})
}}
/>
</SettingRow>
<Divider style={{ margin: '10px 0' }} />
<SettingRow style={{ minHeight: 30 }}>
<HStack alignItems="center">
<Label>{t('chat.settings.max_tokens')}</Label>

View File

@ -102,8 +102,7 @@ export const getAssistantSettings = (assistant: Assistant): AssistantSettings =>
}
return {
enableMaxContexts: assistant?.settings?.enableMaxContexts ?? false,
contextCount: contextCount,
contextCount: contextCount === 100 ? 100000 : contextCount,
temperature: assistant?.settings?.temperature ?? DEFAULT_TEMPERATURE,
topP: assistant?.settings?.topP ?? 1,
enableMaxTokens: assistant?.settings?.enableMaxTokens ?? false,

View File

@ -26,6 +26,5 @@ export const EVENT_NAMES = {
ADD_NEW_TOPIC: 'ADD_NEW_TOPIC',
RESEND_MESSAGE: 'RESEND_MESSAGE',
SHOW_MODEL_SELECTOR: 'SHOW_MODEL_SELECTOR',
QUOTE_TEXT: 'QUOTE_TEXT',
MAX_CONTEXTS_CHANGED: 'MAX_CONTEXTS_CHANGED'
QUOTE_TEXT: 'QUOTE_TEXT'
}

View File

@ -41,7 +41,7 @@ export {
export function getContextCount(assistant: Assistant, messages: Message[]) {
const rawContextCount = assistant?.settings?.contextCount ?? DEFAULT_CONTEXTCOUNT
const maxContextCount = rawContextCount
const maxContextCount = rawContextCount === 100 ? 100000 : rawContextCount
const _messages = takeRight(messages, maxContextCount)

View File

@ -51,7 +51,6 @@ export const EFFORT_RATIO: EffortRatio = {
export type AssistantSettings = {
contextCount: number
enableMaxContexts: boolean
temperature: number
topP: number
maxTokens: number | undefined