diff --git a/open-sse/config/embeddingRegistry.ts b/open-sse/config/embeddingRegistry.ts index 3063427a21..d7ba0777f5 100644 --- a/open-sse/config/embeddingRegistry.ts +++ b/open-sse/config/embeddingRegistry.ts @@ -205,7 +205,10 @@ export const EMBEDDING_PROVIDERS: Record = { baseUrl: "https://generativelanguage.googleapis.com/v1beta/openai/embeddings", authType: "apikey", authHeader: "bearer", - models: [{ id: "text-embedding-004", name: "Text Embedding 004", dimensions: 768 }], + models: [ + { id: "gemini-embedding-2", name: "Gemini Embedding 2", dimensions: 768 }, + { id: "gemini-embedding-001", name: "Gemini Embedding 001", dimensions: 768 }, + ], }, "voyage-ai": { diff --git a/open-sse/config/freeModelCatalog.data.ts b/open-sse/config/freeModelCatalog.data.ts index 27fb90524f..a25e1e363c 100644 --- a/open-sse/config/freeModelCatalog.data.ts +++ b/open-sse/config/freeModelCatalog.data.ts @@ -167,9 +167,8 @@ export const FREE_MODEL_BUDGETS: FreeModelBudget[] = [ { provider: "gemini", modelId: "gemini-2.5-flash", displayName: "Gemini 2.5 Flash", monthlyTokens: 60000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "gemini-free", tos: "caution" }, { provider: "gemini", modelId: "gemini-2.5-flash-lite", displayName: "Gemini 2.5 Flash-Lite", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "gemini-free", tos: "caution" }, { provider: "gemini", modelId: "gemini-3-flash-preview", displayName: "Gemini 3 Flash Preview", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "gemini-free", tos: "caution" }, - { provider: "gemini", modelId: "gemini-3.1-flash-lite-preview", displayName: "Gemini 3.1 Flash-Lite", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "gemini-free", tos: "caution" }, + { provider: "gemini", modelId: "gemini-3.1-flash-lite", displayName: "Gemini 3.1 Flash-Lite", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "gemini-free", tos: "caution" }, { provider: "gemini", modelId: "gemini-3.5-flash", displayName: "Gemini 3.5 Flash", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "gemini-free", tos: "caution" }, - { provider: "gemini", modelId: "gemma-4", displayName: "Gemma 4 (open model)", monthlyTokens: 0, creditTokens: 0, freeType: "recurring-daily", poolKey: "gemini-free", tos: "caution" }, { provider: "github-models", modelId: "openai/gpt-4.1", displayName: "GPT-4.1 (Free)", monthlyTokens: 18000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "github-models", tos: "caution" }, { provider: "github-models", modelId: "openai/gpt-4o", displayName: "GPT-4o (Free)", monthlyTokens: 18000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "github-models", tos: "caution" }, { provider: "github-models", modelId: "openai/gpt-4o-mini", displayName: "GPT-4o Mini (Free)", monthlyTokens: 18000000, creditTokens: 0, freeType: "recurring-daily", poolKey: "github-models", tos: "caution" }, diff --git a/open-sse/config/providers/registry/gemini/index.ts b/open-sse/config/providers/registry/gemini/index.ts index 1c1f64b343..9f6dbbb70a 100644 --- a/open-sse/config/providers/registry/gemini/index.ts +++ b/open-sse/config/providers/registry/gemini/index.ts @@ -21,13 +21,6 @@ export const geminiProvider: RegistryEntry = { clientSecretDefault: resolvePublicCred("gemini_alt"), }, models: [ - { id: "gemini-2.0-flash", name: "Gemini 2.0 Flash", toolCalling: true, supportsVision: true }, - { - id: "gemini-2.0-flash-lite", - name: "Gemini 2.0 Flash Lite", - toolCalling: true, - supportsVision: true, - }, { id: "gemini-3.1-pro-preview", name: "Gemini 3.1 Pro Preview", @@ -41,14 +34,8 @@ export const geminiProvider: RegistryEntry = { supportsVision: true, }, { - id: "gemini-3-flash-lite-preview", - name: "Gemini 3 Flash Lite Preview", - toolCalling: true, - supportsVision: true, - }, - { - id: "gemini-3.1-flash-lite-preview", - name: "Gemini 3.1 Flash Lite Preview", + id: "gemini-3.1-flash-lite", + name: "Gemini 3.1 Flash Lite", toolCalling: true, supportsVision: true, }, @@ -72,18 +59,5 @@ export const geminiProvider: RegistryEntry = { toolCalling: true, supportsVision: true, }, - { - id: "gemini-2.0-flash-thinking-exp-01-21", - name: "Gemini 2.0 Flash Thinking", - supportsReasoning: true, - }, - { - id: "gemini-2.0-pro-exp-02-05", - name: "Gemini 2.0 Pro Experimental", - toolCalling: true, - supportsVision: true, - }, - { id: "gemini-1.5-pro", name: "Gemini 1.5 Pro", toolCalling: true, supportsVision: true }, - { id: "gemini-1.5-flash", name: "Gemini 1.5 Flash", toolCalling: true, supportsVision: true }, ], }; diff --git a/open-sse/config/providers/registry/gemini/web/index.ts b/open-sse/config/providers/registry/gemini/web/index.ts index 51f2b680dc..9b4ebe7021 100644 --- a/open-sse/config/providers/registry/gemini/web/index.ts +++ b/open-sse/config/providers/registry/gemini/web/index.ts @@ -13,7 +13,5 @@ export const gemini_webProvider: RegistryEntry = { { id: "gemini-2.5-flash", name: "Gemini 2.5 Flash" }, { id: "gemini-2.0-pro", name: "Gemini 2.0 Pro" }, { id: "gemini-2.0-flash", name: "Gemini 2.0 Flash" }, - { id: "gemini-1.5-pro", name: "Gemini 1.5 Pro" }, - { id: "gemini-1.5-flash", name: "Gemini 1.5 Flash" }, ], }; diff --git a/open-sse/services/modelDeprecation.ts b/open-sse/services/modelDeprecation.ts index 25625157cb..b38b76c36f 100644 --- a/open-sse/services/modelDeprecation.ts +++ b/open-sse/services/modelDeprecation.ts @@ -18,8 +18,12 @@ const BUILT_IN_ALIASES: Record = { "gemini-1.5-flash": "gemini-2.5-flash", "gemini-1.0-pro": "gemini-2.5-pro", "gemini-2.0-flash": "gemini-2.5-flash", + "gemini-2.0-flash-lite": "gemini-3.1-flash-lite", + "gemini-3.1-flash-lite-preview": "gemini-3.1-flash-lite", "gemini-3-pro-high": "gemini-3.1-pro-high", "gemini-3-pro-low": "gemini-3.1-pro-low", + // Retired free Gemma (was in the gemini-free pool) → current gemini-free model + "gemma-4": "gemini-3.1-flash-lite", // Claude legacy → current "claude-3-opus-20240229": "claude-opus-4-20250514", diff --git a/src/app/(dashboard)/dashboard/batch/page.tsx b/src/app/(dashboard)/dashboard/batch/page.tsx index b0d12bf5e1..0bf8b23a46 100644 --- a/src/app/(dashboard)/dashboard/batch/page.tsx +++ b/src/app/(dashboard)/dashboard/batch/page.tsx @@ -15,7 +15,7 @@ const BATCH_SUPPORTED = ["openai", "anthropic", "gemini"]; const MODEL_DEFAULTS: Record = { openai: ["gpt-4o-mini", "gpt-4o", "gpt-4-turbo"], anthropic: ["claude-3-5-sonnet-20241022", "claude-3-5-haiku-20241022"], - gemini: ["gemini-1.5-flash", "gemini-1.5-pro"], + gemini: ["gemini-2.5-flash", "gemini-2.5-pro"], }; const PROVIDER_NAMES: Record = { openai: "OpenAI", diff --git a/src/lib/modelAliasSeed.ts b/src/lib/modelAliasSeed.ts index 0723ce894c..287b55ac94 100644 --- a/src/lib/modelAliasSeed.ts +++ b/src/lib/modelAliasSeed.ts @@ -1,14 +1,12 @@ import { getModelAliases, setModelAlias } from "@/lib/db/models"; export const DEFAULT_MODEL_ALIAS_SEED = Object.freeze({ - "gemini-1.5-pro": "gemini/gemini-1.5-pro", - "gemini-1.5-flash": "gemini/gemini-1.5-flash", "gemini-3-pro-high": "agy/gemini-3.1-pro-high", "gemini-3-pro-low": "agy/gemini-3.1-pro-low", "gemini-3-pro-preview": "agy/gemini-pro-agent", "gemini-3.1-pro-preview": "agy/gemini-pro-agent", "gemini-3-flash-preview": "agy/gemini-3.5-flash-medium", - "gemini-3.1-flash-lite-preview": "gemini/gemini-3.1-flash-lite-preview", + "gemini-3.1-flash-lite-preview": "gemini/gemini-3.1-flash-lite", }); type SeedLogger = { diff --git a/tests/unit/embedding-family-guard.test.ts b/tests/unit/embedding-family-guard.test.ts index d68eb2057c..749e767fd2 100644 --- a/tests/unit/embedding-family-guard.test.ts +++ b/tests/unit/embedding-family-guard.test.ts @@ -19,7 +19,7 @@ test("getEmbeddingDimension resolves known dimensions from the registry", () => assert.equal(getEmbeddingDimension("openai/text-embedding-3-small"), 1536); assert.equal(getEmbeddingDimension("openai/text-embedding-3-large"), 3072); assert.equal(getEmbeddingDimension("nebius/Qwen/Qwen3-Embedding-8B"), 4096); - assert.equal(getEmbeddingDimension("gemini/text-embedding-004"), 768); + assert.equal(getEmbeddingDimension("gemini/gemini-embedding-001"), 768); // OpenRouter re-exports OpenAI ids under its own prefix at the same dimension. assert.equal(getEmbeddingDimension("openrouter/openai/text-embedding-3-small"), 1536); }); diff --git a/tests/unit/model-deprecation.test.ts b/tests/unit/model-deprecation.test.ts index da67af3e58..d498cacc72 100644 --- a/tests/unit/model-deprecation.test.ts +++ b/tests/unit/model-deprecation.test.ts @@ -23,6 +23,13 @@ test("resolveModelAlias: resolves deprecated Gemini model", () => { assert.equal(resolveModelAlias("gemini-pro"), "gemini-2.5-pro"); assert.equal(resolveModelAlias("gemini-1.5-pro"), "gemini-2.5-pro"); assert.equal(resolveModelAlias("gemini-1.5-flash"), "gemini-2.5-flash"); + // Retired 2.0 Flash-Lite (Google shutdown 2026-06-01) + renamed flash-lite preview + // both forward to the live GA gemini-3.1-flash-lite. + assert.equal(resolveModelAlias("gemini-2.0-flash-lite"), "gemini-3.1-flash-lite"); + assert.equal(resolveModelAlias("gemini-3.1-flash-lite-preview"), "gemini-3.1-flash-lite"); + // Retired free Gemma (was in the gemini-free pool) forwards to the current + // gemini-free model instead of erroring with model-not-found. + assert.equal(resolveModelAlias("gemma-4"), "gemini-3.1-flash-lite"); }); test("resolveModelAlias: resolves deprecated Claude model", () => { diff --git a/tests/unit/provider-registry-openai-gemini-expanded-models.test.ts b/tests/unit/provider-registry-openai-gemini-expanded-models.test.ts index ed7bf67e57..32981fe1b5 100644 --- a/tests/unit/provider-registry-openai-gemini-expanded-models.test.ts +++ b/tests/unit/provider-registry-openai-gemini-expanded-models.test.ts @@ -28,8 +28,8 @@ const OPENAI_ADDED_IDS = [ ] as const; const GEMINI_ADDED_IDS = [ - "gemini-3-flash-lite-preview", - "gemini-2.0-flash-lite", + "gemini-3.1-flash-lite", + "gemini-2.5-flash-lite", ] as const; test("openai registry exposes gpt-4.1 mini/nano and o3-mini/o4-mini reasoning variants", () => { @@ -69,7 +69,7 @@ test("port did not regress previously curated openai/gemini ids", () => { "gemini-2.5-pro", "gemini-2.5-flash", "gemini-3.1-pro-preview", - "gemini-1.5-pro", + "gemini-3.5-flash", ] as const) { assert.ok(geminiIds.has(id), `existing gemini model ${id} must remain`); } diff --git a/tests/unit/t28-model-catalog-updates.test.ts b/tests/unit/t28-model-catalog-updates.test.ts index eb0e56dec2..6fd9edc69f 100644 --- a/tests/unit/t28-model-catalog-updates.test.ts +++ b/tests/unit/t28-model-catalog-updates.test.ts @@ -12,11 +12,11 @@ test("T28: gemini AI Studio catalog includes current preview models", () => { const geminiIds = REGISTRY.gemini.models.map((m) => m.id); assert.ok(geminiIds.includes("gemini-3.1-pro-preview")); assert.ok(geminiIds.includes("gemini-3-flash-preview")); - assert.ok(geminiIds.includes("gemini-3.1-flash-lite-preview")); + assert.ok(geminiIds.includes("gemini-3.1-flash-lite")); assert.ok(geminiIds.includes("gemini-3.5-flash")); assert.ok(geminiIds.includes("gemini-2.5-flash")); assert.ok(geminiIds.includes("gemini-2.5-pro")); - assert.equal(geminiIds[0], "gemini-2.0-flash", "preserve the existing Gemini default"); + assert.equal(geminiIds[0], "gemini-3.1-pro-preview", "preserve the existing Gemini default"); }); test("T28: antigravity static catalog exposes client-visible Gemini tier IDs", () => { diff --git a/tests/unit/vscode-token-routes.test.ts b/tests/unit/vscode-token-routes.test.ts index adc680eb53..77a0a68c36 100644 --- a/tests/unit/vscode-token-routes.test.ts +++ b/tests/unit/vscode-token-routes.test.ts @@ -643,11 +643,11 @@ test("vscode tokenized models route prefixes the provider without duplicating br new Request(`http://localhost/api/v1/vscode/${encodeURIComponent(key.key)}/models`) ); const body = (await response.json()) as any; - const model = (body.data || []).find((entry: any) => entry.id === "gemini/gemini-1.5-pro"); + const model = (body.data || []).find((entry: any) => entry.id === "gemini/gemini-2.5-pro"); assert.equal(response.status, 200); - assert.ok(model, "missing gemini/gemini-1.5-pro in tokenized VS Code models route"); - assert.equal(model.name, "Gemini 1.5 Pro"); + assert.ok(model, "missing gemini/gemini-2.5-pro in tokenized VS Code models route"); + assert.equal(model.name, "Gemini 2.5 Pro"); }); test("vscode tokenized tags route mirrors the Ollama tags payload", async () => {