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({