fix(desktop): persist MoA preset add/delete/set-default immediately (#53290)

The desktop MoA settings 'Add preset', 'Set default', and 'Delete' buttons
mutated local React state only and never called the save endpoint, so a newly
constructed preset vanished on refresh. Each now builds the next config and
calls saveMoa() so the change is written to config.yaml via PUT /api/model/moa.
This commit is contained in:
Teknium 2026-06-26 15:06:18 -07:00 committed by GitHub
parent 7e101e553b
commit 391090083c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -772,9 +772,13 @@ export function ModelSettings({ onMainModelChanged }: ModelSettingsProps) {
</Select>
<Button
disabled={applying}
onClick={() =>
setMoa(prev => prev && { ...prev, default_preset: selectedMoaPreset || prev.default_preset })
}
onClick={() => {
const next: MoaConfigResponse = {
...moa,
default_preset: selectedMoaPreset || moa.default_preset
}
void saveMoa(next)
}}
size="sm"
variant="text"
>
@ -783,23 +787,21 @@ export function ModelSettings({ onMainModelChanged }: ModelSettingsProps) {
<Button
disabled={Object.keys(moa.presets).length <= 1 || applying}
onClick={() => {
setMoa(prev => {
if (!prev || Object.keys(prev.presets).length <= 1) {
return prev
}
if (Object.keys(moa.presets).length <= 1) {
return
}
const next = { ...prev.presets }
delete next[selectedMoaPreset]
const fallback = Object.keys(next)[0]
return {
...prev,
presets: next,
default_preset: prev.default_preset === selectedMoaPreset ? fallback : prev.default_preset,
active_preset: prev.active_preset === selectedMoaPreset ? '' : prev.active_preset
}
})
const presets = { ...moa.presets }
delete presets[selectedMoaPreset]
const fallback = Object.keys(presets)[0]
const next: MoaConfigResponse = {
...moa,
presets,
default_preset: moa.default_preset === selectedMoaPreset ? fallback : moa.default_preset,
active_preset: moa.active_preset === selectedMoaPreset ? '' : moa.active_preset
}
setSelectedMoaPreset(Object.keys(moa.presets).find(name => name !== selectedMoaPreset) || '')
void saveMoa(next)
}}
size="sm"
variant="ghost"
@ -816,18 +818,16 @@ export function ModelSettings({ onMainModelChanged }: ModelSettingsProps) {
disabled={!newMoaPresetName.trim() || !!moa.presets[newMoaPresetName.trim()] || applying}
onClick={() => {
const name = newMoaPresetName.trim()
setMoa(
prev =>
prev && {
...prev,
presets: {
...prev.presets,
[name]: { ...currentMoaPreset, reference_models: [...currentMoaPreset.reference_models] }
}
}
)
const next: MoaConfigResponse = {
...moa,
presets: {
...moa.presets,
[name]: { ...currentMoaPreset, reference_models: [...currentMoaPreset.reference_models] }
}
}
setSelectedMoaPreset(name)
setNewMoaPresetName('')
void saveMoa(next)
}}
size="sm"
variant="textStrong"