mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-30 15:59:09 +08:00
fix: ensure numeric settings are always stored and sent as numbers, not strings
Co-authored-by: DeJeune <67425183+DeJeune@users.noreply.github.com>
This commit is contained in:
parent
18d5f74f36
commit
ba76919fe0
@ -54,7 +54,8 @@ export function getTemperature(assistant: Assistant, model: Model): number | und
|
||||
|
||||
// FIXME: assistant.settings.enableTemperature should be always a boolean value.
|
||||
const enableTemperature = assistantSettings?.enableTemperature ?? DEFAULT_ASSISTANT_SETTINGS.enableTemperature
|
||||
return enableTemperature ? temperature : undefined
|
||||
// Ensure temperature is always returned as a number (not a string)
|
||||
return enableTemperature && temperature !== undefined ? Number(temperature) : undefined
|
||||
}
|
||||
|
||||
/**
|
||||
@ -78,7 +79,9 @@ export function getTopP(assistant: Assistant, model: Model): number | undefined
|
||||
const assistantSettings = getAssistantSettings(assistant)
|
||||
// FIXME: assistant.settings.enableTopP should be always a boolean value.
|
||||
const enableTopP = assistantSettings.enableTopP ?? DEFAULT_ASSISTANT_SETTINGS.enableTopP
|
||||
return enableTopP ? assistantSettings?.topP : undefined
|
||||
const topP = assistantSettings?.topP
|
||||
// Ensure topP is always returned as a number (not a string)
|
||||
return enableTopP && topP !== undefined ? Number(topP) : undefined
|
||||
}
|
||||
|
||||
/**
|
||||
@ -103,6 +106,9 @@ export function getMaxTokens(assistant: Assistant, model: Model): number | undef
|
||||
return undefined
|
||||
}
|
||||
|
||||
// Ensure maxTokens is a number
|
||||
maxTokens = Number(maxTokens)
|
||||
|
||||
const provider = getProviderByModel(model)
|
||||
if (isSupportedThinkingTokenClaudeModel(model) && ['anthropic', 'aws-bedrock'].includes(provider.type)) {
|
||||
const { reasoning_effort: reasoningEffort } = assistantSettings
|
||||
|
||||
@ -702,6 +702,13 @@ export function getCustomParameters(assistant: Assistant): Record<string, any> {
|
||||
return { ...acc, [param.name]: value }
|
||||
}
|
||||
}
|
||||
// Ensure number type parameters are always numbers (not strings)
|
||||
if (param.type === 'number') {
|
||||
return {
|
||||
...acc,
|
||||
[param.name]: Number(param.value)
|
||||
}
|
||||
}
|
||||
return {
|
||||
...acc,
|
||||
[param.name]: param.value
|
||||
|
||||
@ -134,19 +134,19 @@ const SettingsTab: FC<Props> = (props) => {
|
||||
|
||||
const onTemperatureChange = (value) => {
|
||||
if (!isNaN(value as number)) {
|
||||
onUpdateAssistantSettings({ temperature: value })
|
||||
onUpdateAssistantSettings({ temperature: Number(value) })
|
||||
}
|
||||
}
|
||||
|
||||
const onContextCountChange = (value) => {
|
||||
if (!isNaN(value as number)) {
|
||||
onUpdateAssistantSettings({ contextCount: value })
|
||||
onUpdateAssistantSettings({ contextCount: Number(value) })
|
||||
}
|
||||
}
|
||||
|
||||
const onMaxTokensChange = (value) => {
|
||||
if (!isNaN(value as number)) {
|
||||
onUpdateAssistantSettings({ maxTokens: value })
|
||||
onUpdateAssistantSettings({ maxTokens: Number(value) })
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -52,19 +52,19 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
|
||||
|
||||
const onTemperatureChange = (value) => {
|
||||
if (!isNaN(value as number)) {
|
||||
updateAssistantSettings({ temperature: value })
|
||||
updateAssistantSettings({ temperature: Number(value) })
|
||||
}
|
||||
}
|
||||
|
||||
const onContextCountChange = (value) => {
|
||||
if (!isNaN(value as number)) {
|
||||
updateAssistantSettings({ contextCount: value })
|
||||
updateAssistantSettings({ contextCount: Number(value) })
|
||||
}
|
||||
}
|
||||
|
||||
const onTopPChange = (value) => {
|
||||
if (!isNaN(value as number)) {
|
||||
updateAssistantSettings({ topP: value })
|
||||
updateAssistantSettings({ topP: Number(value) })
|
||||
}
|
||||
}
|
||||
|
||||
@ -114,7 +114,7 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
|
||||
<InputNumber
|
||||
style={{ width: '100%' }}
|
||||
value={param.value as number}
|
||||
onChange={(value) => onUpdateCustomParameter(index, 'value', value || 0)}
|
||||
onChange={(value) => onUpdateCustomParameter(index, 'value', Number(value) || 0)}
|
||||
step={0.01}
|
||||
/>
|
||||
)
|
||||
@ -278,7 +278,7 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
|
||||
onChange={(value) => {
|
||||
if (!isNull(value)) {
|
||||
setTemperature(value)
|
||||
setTimeoutTimer('temperature_onChange', () => updateAssistantSettings({ temperature: value }), 500)
|
||||
setTimeoutTimer('temperature_onChange', () => updateAssistantSettings({ temperature: Number(value) }), 500)
|
||||
}
|
||||
}}
|
||||
style={{ width: '100%' }}
|
||||
@ -326,7 +326,7 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
|
||||
onChange={(value) => {
|
||||
if (!isNull(value)) {
|
||||
setTopP(value)
|
||||
setTimeoutTimer('topP_onChange', () => updateAssistantSettings({ topP: value }), 500)
|
||||
setTimeoutTimer('topP_onChange', () => updateAssistantSettings({ topP: Number(value) }), 500)
|
||||
}
|
||||
}}
|
||||
style={{ width: '100%' }}
|
||||
@ -355,7 +355,7 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
|
||||
onChange={(value) => {
|
||||
if (!isNull(value)) {
|
||||
setContextCount(value)
|
||||
setTimeoutTimer('contextCount_onChange', () => updateAssistantSettings({ contextCount: value }), 500)
|
||||
setTimeoutTimer('contextCount_onChange', () => updateAssistantSettings({ contextCount: Number(value) }), 500)
|
||||
}
|
||||
}}
|
||||
formatter={(value) => (value === MAX_CONTEXT_COUNT ? t('chat.settings.max') : (value ?? ''))}
|
||||
@ -417,7 +417,7 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
|
||||
onChange={(value) => {
|
||||
if (!isNull(value)) {
|
||||
setMaxTokens(value)
|
||||
setTimeoutTimer('maxTokens_onChange', () => updateAssistantSettings({ maxTokens: value }), 1000)
|
||||
setTimeoutTimer('maxTokens_onChange', () => updateAssistantSettings({ maxTokens: Number(value) }), 1000)
|
||||
}
|
||||
}}
|
||||
style={{ width: '100%' }}
|
||||
|
||||
@ -55,7 +55,7 @@ const AssistantSettings: FC = () => {
|
||||
(setter: Dispatch<SetStateAction<number>>, updater: (value: number) => void) => (value: number | null) => {
|
||||
if (value !== null) {
|
||||
setter(value)
|
||||
updater(value)
|
||||
updater(Number(value))
|
||||
}
|
||||
}
|
||||
const onTemperatureChange = handleChange(setTemperature, (value) => onUpdateAssistantSettings({ temperature: value }))
|
||||
|
||||
Loading…
Reference in New Issue
Block a user