mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-21 22:52:19 +03:00
fix(model-sync): skip replace when auto-sync returns empty model list
Prevent auto-sync from wiping manually-imported models when the upstream /models endpoint fails, times out, or returns an empty list. Added `allowEmpty` option (default false) to replaceCustomModels — callers that intentionally clear all models (DELETE ?all=true) pass `allowEmpty: true`. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -258,7 +258,7 @@ export async function DELETE(request) {
|
||||
// DELETE /api/provider-models?provider=<id>&all=true — clear all models
|
||||
const all = searchParams.get("all");
|
||||
if (all === "true") {
|
||||
await replaceCustomModels(provider, []);
|
||||
await replaceCustomModels(provider, [], { allowEmpty: true });
|
||||
return Response.json({ cleared: true });
|
||||
}
|
||||
|
||||
|
||||
@@ -383,7 +383,8 @@ export async function replaceCustomModels(
|
||||
source?: string;
|
||||
apiFormat?: string;
|
||||
supportedEndpoints?: string[];
|
||||
}>
|
||||
}>,
|
||||
{ allowEmpty = false }: { allowEmpty?: boolean } = {}
|
||||
) {
|
||||
const db = getDbInstance();
|
||||
const existing = await getCustomModels(providerId);
|
||||
@@ -420,6 +421,12 @@ export async function replaceCustomModels(
|
||||
});
|
||||
|
||||
if (merged.length === 0) {
|
||||
// Guard: skip destructive clear when the caller hasn't explicitly opted in.
|
||||
// This prevents auto-sync from wiping manually-imported models when the
|
||||
// upstream /models endpoint fails, times out, or returns an empty list.
|
||||
if (!allowEmpty) {
|
||||
return Array.isArray(existing) ? existing : [];
|
||||
}
|
||||
db.prepare("DELETE FROM key_value WHERE namespace = 'customModels' AND key = ?").run(
|
||||
providerId
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user