diff --git a/migrations/0010_openrouter_only.sql b/migrations/0010_openrouter_only.sql new file mode 100644 index 0000000..21de841 --- /dev/null +++ b/migrations/0010_openrouter_only.sql @@ -0,0 +1,18 @@ +-- 0010_openrouter_only.sql +-- Migrer alle direkte Gemini-kall til OpenRouter. +-- All trafikk skal gå via OpenRouter for enhetlig kostnadssporing og routing. + +BEGIN; + +-- Oppdater gemini/ providers til openrouter/google/ ekvivalenter +UPDATE ai_model_providers +SET litellm_model = CASE + WHEN litellm_model = 'gemini/gemini-2.5-flash-lite' THEN 'openrouter/google/gemini-2.5-flash-lite-preview' + WHEN litellm_model = 'gemini/gemini-2.5-flash' THEN 'openrouter/google/gemini-2.5-flash-preview' + ELSE REPLACE(litellm_model, 'gemini/', 'openrouter/google/') + END, + api_key_env = 'OPENROUTER_API_KEY', + updated_at = now() +WHERE litellm_model LIKE 'gemini/%'; + +COMMIT; diff --git a/web/src/routes/server-admin/ai/+page.svelte b/web/src/routes/server-admin/ai/+page.svelte index 077b9fe..4003da5 100644 --- a/web/src/routes/server-admin/ai/+page.svelte +++ b/web/src/routes/server-admin/ai/+page.svelte @@ -103,7 +103,7 @@ let newProvider = $state<{ alias_id: string; litellm_model: string; api_key_env: string }>({ alias_id: '', litellm_model: '', - api_key_env: 'GEMINI_API_KEY' + api_key_env: 'OPENROUTER_API_KEY' }); // Ny alias-form @@ -416,7 +416,7 @@ if (!res.ok) throw new Error('Feil ved opprettelse'); const row = await res.json(); providers = [...providers, row]; - newProvider = { alias_id: '', litellm_model: '', api_key_env: 'GEMINI_API_KEY' }; + newProvider = { alias_id: '', litellm_model: '', api_key_env: 'OPENROUTER_API_KEY' }; } catch { errorMsg = 'Kunne ikke legge til provider'; } @@ -667,6 +667,7 @@ {#each sortedAliases as alias (alias.id)} {@const ap = providersForAlias(alias.id)} + {@const primaryModel = ap.find(p => p.is_active)?.litellm_model} {#if editingAlias === alias.id}
@@ -689,6 +690,9 @@ onclick={() => (expandedAlias = expandedAlias === alias.id ? null : alias.id)} > {alias.alias} + {#if primaryModel} + {primaryModel.replace('openrouter/', '')} + {/if} {alias.description ?? '\u2014'} {ap.length} @@ -1209,6 +1213,16 @@ white-space: nowrap; } + .alias-model { + display: block; + font-size: 0.75em; + color: #8b92a5; + font-weight: normal; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .clickable { cursor: pointer; text-decoration: underline;