From 3ae810a18e2c57cba59f0ce4e6167e0e2b5633ee Mon Sep 17 00:00:00 2001 From: Chris Staley Date: Thu, 2 Apr 2026 14:42:38 -0600 Subject: [PATCH] fix(gemini): log sync errors, optimize synced models query - Replace silent catch blocks with logged errors in catalog and v1beta - Use SQL LIKE filter instead of fetching all rows and filtering in-memory --- src/app/api/v1/models/catalog.ts | 4 ++-- src/app/api/v1beta/models/route.ts | 4 ++-- src/lib/db/models.ts | 7 +++---- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/app/api/v1/models/catalog.ts b/src/app/api/v1/models/catalog.ts index 94ffabd9..2cd0e846 100644 --- a/src/app/api/v1/models/catalog.ts +++ b/src/app/api/v1/models/catalog.ts @@ -349,8 +349,8 @@ export async function getUnifiedModelsResponse( }); } } - } catch { - // No synced models — show nothing for Gemini + } catch (err) { + console.error("[catalog] Error fetching synced Gemini models:", err); } } diff --git a/src/app/api/v1beta/models/route.ts b/src/app/api/v1beta/models/route.ts index 9680a40b..87393213 100644 --- a/src/app/api/v1beta/models/route.ts +++ b/src/app/api/v1beta/models/route.ts @@ -57,8 +57,8 @@ export async function GET() { ...(m.supportsThinking === true ? { thinking: true } : {}), }); } - } catch { - // No synced models — Gemini shows nothing + } catch (err) { + console.error("[v1beta/models] Error fetching synced Gemini models:", err); } // Custom models (use stored metadata from provider APIs) diff --git a/src/lib/db/models.ts b/src/lib/db/models.ts index c340b220..e5545de6 100644 --- a/src/lib/db/models.ts +++ b/src/lib/db/models.ts @@ -528,13 +528,12 @@ export interface SyncedAvailableModel { export async function getSyncedAvailableModels(providerId: string): Promise { const db = getDbInstance(); const rows = db - .prepare("SELECT key, value FROM key_value WHERE namespace = 'syncedAvailableModels'") - .all(); + .prepare("SELECT key, value FROM key_value WHERE namespace = 'syncedAvailableModels' AND key LIKE ?") + .all(`${providerId}:%`); const map = new Map(); - const prefix = `${providerId}:`; for (const row of rows) { const { key, value } = getKeyValue(row); - if (!key || !key.startsWith(prefix) || value === null) continue; + if (!key || value === null) continue; const models: SyncedAvailableModel[] = JSON.parse(value); for (const m of models) { if (m.id) map.set(m.id, m);