From 83f242fa4ddc25d07d155fe179e823675bfdbba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A2=A8=E6=9E=97ObsidianGrove?= Date: Fri, 15 May 2026 01:39:31 +0800 Subject: [PATCH] fix: clear synced provider models on delete all Ensure provider-level delete all removes synced available model lists so imported models do not reappear after clearing managed models. Co-Authored-By: Claude Opus 4.7 --- src/app/api/provider-models/route.ts | 4 ++++ src/lib/db/models.ts | 16 ++++++++++++++++ src/lib/localDb.ts | 1 + 3 files changed, 21 insertions(+) diff --git a/src/app/api/provider-models/route.ts b/src/app/api/provider-models/route.ts index 40c81a687b..4956aaf962 100644 --- a/src/app/api/provider-models/route.ts +++ b/src/app/api/provider-models/route.ts @@ -4,6 +4,7 @@ import { addCustomModel, removeCustomModel, replaceCustomModels, + deleteSyncedAvailableModelsForProvider, updateCustomModel, getModelCompatOverrides, mergeModelCompatOverride, @@ -369,9 +370,12 @@ export async function DELETE(request) { const all = searchParams.get("all"); if (all === "true") { await replaceCustomModels(provider, [], { allowEmpty: true }); + const syncedAvailableModelListsRemoved = + await deleteSyncedAvailableModelsForProvider(provider); const removedAliases = await deleteManagedAvailableModelAliasesForProvider(provider); return Response.json({ cleared: true, + syncedAvailableModelListsRemoved, aliasChanges: { removed: removedAliases, assigned: [] }, }); } diff --git a/src/lib/db/models.ts b/src/lib/db/models.ts index f749a4ffc8..2520ada8fa 100644 --- a/src/lib/db/models.ts +++ b/src/lib/db/models.ts @@ -707,6 +707,22 @@ export async function deleteSyncedAvailableModelsForConnection( return getSyncedAvailableModels(providerId); } +/** + * Delete all synced models for every connection belonging to a provider. + * Returns the number of connection-scoped synced model lists removed. + */ +export async function deleteSyncedAvailableModelsForProvider(providerId: string): Promise { + const db = getDbInstance(); + const keyPrefix = `${providerId}:`; + const result = db + .prepare( + "DELETE FROM key_value WHERE namespace = 'syncedAvailableModels' AND substr(key, 1, ?) = ?" + ) + .run(keyPrefix.length, keyPrefix); + backupDbFile("pre-write"); + return Number(result.changes || 0); +} + export async function updateCustomModel( providerId: string, modelId: string, diff --git a/src/lib/localDb.ts b/src/lib/localDb.ts index f3af94bc83..65a5681e08 100755 --- a/src/lib/localDb.ts +++ b/src/lib/localDb.ts @@ -65,6 +65,7 @@ export { getAllSyncedAvailableModels, replaceSyncedAvailableModelsForConnection, deleteSyncedAvailableModelsForConnection, + deleteSyncedAvailableModelsForProvider, } from "./db/models"; export type { ModelCompatPerProtocol, ModelCompatPatch, SyncedAvailableModel } from "./db/models";