From c8bc4d851055b0899f306130971ee2bad6819d02 Mon Sep 17 00:00:00 2001 From: Xubin Ren <52506698+Re-bin@users.noreply.github.com> Date: Fri, 7 Aug 2026 10:47:07 +0800 Subject: [PATCH] fix(webui): make active model presets deletable --- .../src/components/settings/SettingsView.tsx | 33 +++++++-- webui/src/tests/settings-view.test.tsx | 71 ++++++++++++++++++- 2 files changed, 97 insertions(+), 7 deletions(-) diff --git a/webui/src/components/settings/SettingsView.tsx b/webui/src/components/settings/SettingsView.tsx index 237e310b9..00953295f 100644 --- a/webui/src/components/settings/SettingsView.tsx +++ b/webui/src/components/settings/SettingsView.tsx @@ -1467,10 +1467,21 @@ export function SettingsView({ ) { return; } + const presetName = modelPresetPendingDelete.name; + const nextOrder = modelCallOrder.includes(presetName) + ? modelCallOrder.filter((name) => name !== presetName) + : null; + if (nextOrder?.length === 0) return; setSaving(true); try { - const payload = await deleteModelConfiguration(token, modelPresetPendingDelete.name); + if (nextOrder) { + const orderedPayload = await updateModelCallOrder(token, nextOrder); + applyPayload(orderedPayload); + onModelNameChange(orderedPayload.agent.model || null); + } + const payload = await deleteModelConfiguration(token, presetName); applyPayload(payload); + onModelNameChange(payload.agent.model || null); setModelPresetPendingDelete(null); setError(null); } catch (err) { @@ -3371,7 +3382,12 @@ function ModelsSettings({ form.temperature < 0 || form.temperature > 2; const selectedPresetReferenced = Boolean( - selectedPreset && (settings.model_call_order ?? []).includes(selectedPreset.name), + selectedPreset && callOrder.includes(selectedPreset.name), + ); + const selectedPresetOnlyActive = Boolean( + selectedPresetReferenced && + selectedPreset && + !callOrder.some((name) => name !== selectedPreset.name), ); const callOrderBusy = orderSaving || saving; const selectPreset = (preset: SettingsPayload["model_presets"][number]) => { @@ -3437,7 +3453,7 @@ function ModelsSettings({ key={key} id="model-preset-editor" data-testid="model-preset-editor" - className="divide-y divide-border/45 bg-muted/10 motion-reduce:animate-none animate-in fade-in-0 slide-in-from-top-1 duration-200" + className="divide-y divide-border/45 bg-muted/30 motion-reduce:animate-none animate-in fade-in-0 slide-in-from-top-1 duration-200" > {creating ? (
@@ -3564,10 +3580,15 @@ function ModelsSettings({