feat: Implement LLM provider deletion and refactor ConfigManager to preserve unknown payload sections.

This commit is contained in:
2026-03-14 09:19:08 +03:00
parent feb07bf366
commit 3928455189
9 changed files with 256 additions and 9 deletions

View File

@@ -31,6 +31,7 @@
let testStatus = $state({ type: "", message: "" });
let isTesting = $state(false);
let togglingProviderIds = $state(new Set());
let deletingProviderIds = $state(new Set());
function isMultimodalModel(modelName) {
const token = (modelName || "").toLowerCase();
@@ -155,6 +156,38 @@
onSave();
}
}
async function handleDelete(provider) {
if (deletingProviderIds.has(provider.id)) return;
if (
!confirm(
$t.llm.delete_confirm.replace("{name}", provider.name || provider.id),
)
) {
return;
}
deletingProviderIds.add(provider.id);
deletingProviderIds = new Set(deletingProviderIds);
try {
await requestApi(`/llm/providers/${provider.id}`, "DELETE");
providers = providers.filter(({ id }) => id !== provider.id);
addToast($t.llm.delete_success.replace("{name}", provider.name), "success");
onSave();
} catch (err) {
addToast(
$t.llm.delete_failed.replace(
"{error}",
err?.message || $t.common.error,
),
"error",
);
} finally {
deletingProviderIds.delete(provider.id);
deletingProviderIds = new Set(deletingProviderIds);
}
}
</script>
<div class="p-4">
@@ -345,11 +378,23 @@
>
{$t.common.edit}
</button>
<button
type="button"
class="text-sm text-red-600 hover:underline"
onclick={() => handleDelete(provider)}
disabled={deletingProviderIds.has(provider.id)}
>
{#if deletingProviderIds.has(provider.id)}
...
{:else}
{$t.common.delete}
{/if}
</button>
<button
type="button"
class={`text-sm ${provider.is_active ? "text-orange-600" : "text-green-600"} hover:underline`}
onclick={() => toggleActive(provider)}
disabled={togglingProviderIds.has(provider.id)}
disabled={togglingProviderIds.has(provider.id) || deletingProviderIds.has(provider.id)}
>
{#if togglingProviderIds.has(provider.id)}
...