mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-11 08:19:01 +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.
|
// FIXME: assistant.settings.enableTemperature should be always a boolean value.
|
||||||
const enableTemperature = assistantSettings?.enableTemperature ?? DEFAULT_ASSISTANT_SETTINGS.enableTemperature
|
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)
|
const assistantSettings = getAssistantSettings(assistant)
|
||||||
// FIXME: assistant.settings.enableTopP should be always a boolean value.
|
// FIXME: assistant.settings.enableTopP should be always a boolean value.
|
||||||
const enableTopP = assistantSettings.enableTopP ?? DEFAULT_ASSISTANT_SETTINGS.enableTopP
|
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
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure maxTokens is a number
|
||||||
|
maxTokens = Number(maxTokens)
|
||||||
|
|
||||||
const provider = getProviderByModel(model)
|
const provider = getProviderByModel(model)
|
||||||
if (isSupportedThinkingTokenClaudeModel(model) && ['anthropic', 'aws-bedrock'].includes(provider.type)) {
|
if (isSupportedThinkingTokenClaudeModel(model) && ['anthropic', 'aws-bedrock'].includes(provider.type)) {
|
||||||
const { reasoning_effort: reasoningEffort } = assistantSettings
|
const { reasoning_effort: reasoningEffort } = assistantSettings
|
||||||
|
|||||||
@ -702,6 +702,13 @@ export function getCustomParameters(assistant: Assistant): Record<string, any> {
|
|||||||
return { ...acc, [param.name]: value }
|
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 {
|
return {
|
||||||
...acc,
|
...acc,
|
||||||
[param.name]: param.value
|
[param.name]: param.value
|
||||||
|
|||||||
@ -134,19 +134,19 @@ const SettingsTab: FC<Props> = (props) => {
|
|||||||
|
|
||||||
const onTemperatureChange = (value) => {
|
const onTemperatureChange = (value) => {
|
||||||
if (!isNaN(value as number)) {
|
if (!isNaN(value as number)) {
|
||||||
onUpdateAssistantSettings({ temperature: value })
|
onUpdateAssistantSettings({ temperature: Number(value) })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const onContextCountChange = (value) => {
|
const onContextCountChange = (value) => {
|
||||||
if (!isNaN(value as number)) {
|
if (!isNaN(value as number)) {
|
||||||
onUpdateAssistantSettings({ contextCount: value })
|
onUpdateAssistantSettings({ contextCount: Number(value) })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const onMaxTokensChange = (value) => {
|
const onMaxTokensChange = (value) => {
|
||||||
if (!isNaN(value as number)) {
|
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) => {
|
const onTemperatureChange = (value) => {
|
||||||
if (!isNaN(value as number)) {
|
if (!isNaN(value as number)) {
|
||||||
updateAssistantSettings({ temperature: value })
|
updateAssistantSettings({ temperature: Number(value) })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const onContextCountChange = (value) => {
|
const onContextCountChange = (value) => {
|
||||||
if (!isNaN(value as number)) {
|
if (!isNaN(value as number)) {
|
||||||
updateAssistantSettings({ contextCount: value })
|
updateAssistantSettings({ contextCount: Number(value) })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const onTopPChange = (value) => {
|
const onTopPChange = (value) => {
|
||||||
if (!isNaN(value as number)) {
|
if (!isNaN(value as number)) {
|
||||||
updateAssistantSettings({ topP: value })
|
updateAssistantSettings({ topP: Number(value) })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,7 +114,7 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
|
|||||||
<InputNumber
|
<InputNumber
|
||||||
style={{ width: '100%' }}
|
style={{ width: '100%' }}
|
||||||
value={param.value as number}
|
value={param.value as number}
|
||||||
onChange={(value) => onUpdateCustomParameter(index, 'value', value || 0)}
|
onChange={(value) => onUpdateCustomParameter(index, 'value', Number(value) || 0)}
|
||||||
step={0.01}
|
step={0.01}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
@ -278,7 +278,7 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
|
|||||||
onChange={(value) => {
|
onChange={(value) => {
|
||||||
if (!isNull(value)) {
|
if (!isNull(value)) {
|
||||||
setTemperature(value)
|
setTemperature(value)
|
||||||
setTimeoutTimer('temperature_onChange', () => updateAssistantSettings({ temperature: value }), 500)
|
setTimeoutTimer('temperature_onChange', () => updateAssistantSettings({ temperature: Number(value) }), 500)
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
style={{ width: '100%' }}
|
style={{ width: '100%' }}
|
||||||
@ -326,7 +326,7 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
|
|||||||
onChange={(value) => {
|
onChange={(value) => {
|
||||||
if (!isNull(value)) {
|
if (!isNull(value)) {
|
||||||
setTopP(value)
|
setTopP(value)
|
||||||
setTimeoutTimer('topP_onChange', () => updateAssistantSettings({ topP: value }), 500)
|
setTimeoutTimer('topP_onChange', () => updateAssistantSettings({ topP: Number(value) }), 500)
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
style={{ width: '100%' }}
|
style={{ width: '100%' }}
|
||||||
@ -355,7 +355,7 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
|
|||||||
onChange={(value) => {
|
onChange={(value) => {
|
||||||
if (!isNull(value)) {
|
if (!isNull(value)) {
|
||||||
setContextCount(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 ?? ''))}
|
formatter={(value) => (value === MAX_CONTEXT_COUNT ? t('chat.settings.max') : (value ?? ''))}
|
||||||
@ -417,7 +417,7 @@ const AssistantModelSettings: FC<Props> = ({ assistant, updateAssistant, updateA
|
|||||||
onChange={(value) => {
|
onChange={(value) => {
|
||||||
if (!isNull(value)) {
|
if (!isNull(value)) {
|
||||||
setMaxTokens(value)
|
setMaxTokens(value)
|
||||||
setTimeoutTimer('maxTokens_onChange', () => updateAssistantSettings({ maxTokens: value }), 1000)
|
setTimeoutTimer('maxTokens_onChange', () => updateAssistantSettings({ maxTokens: Number(value) }), 1000)
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
style={{ width: '100%' }}
|
style={{ width: '100%' }}
|
||||||
|
|||||||
@ -55,7 +55,7 @@ const AssistantSettings: FC = () => {
|
|||||||
(setter: Dispatch<SetStateAction<number>>, updater: (value: number) => void) => (value: number | null) => {
|
(setter: Dispatch<SetStateAction<number>>, updater: (value: number) => void) => (value: number | null) => {
|
||||||
if (value !== null) {
|
if (value !== null) {
|
||||||
setter(value)
|
setter(value)
|
||||||
updater(value)
|
updater(Number(value))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const onTemperatureChange = handleChange(setTemperature, (value) => onUpdateAssistantSettings({ temperature: value }))
|
const onTemperatureChange = handleChange(setTemperature, (value) => onUpdateAssistantSettings({ temperature: value }))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user