mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-01 04:42:10 +03:00
fix(providers): drop retired Gemini AI Studio models, align catalog to live API (#5337)
Integrated into release/v3.8.41. Drops retired Gemini AI Studio models + gemma-4 deprecation alias.
This commit is contained in:
@@ -205,7 +205,10 @@ export const EMBEDDING_PROVIDERS: Record<string, EmbeddingProvider> = {
|
||||
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": {
|
||||
|
||||
@@ -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" },
|
||||
|
||||
@@ -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 },
|
||||
],
|
||||
};
|
||||
|
||||
@@ -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" },
|
||||
],
|
||||
};
|
||||
|
||||
@@ -18,8 +18,12 @@ const BUILT_IN_ALIASES: Record<string, string> = {
|
||||
"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",
|
||||
|
||||
@@ -15,7 +15,7 @@ const BATCH_SUPPORTED = ["openai", "anthropic", "gemini"];
|
||||
const MODEL_DEFAULTS: Record<string, string[]> = {
|
||||
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<string, string> = {
|
||||
openai: "OpenAI",
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
@@ -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", () => {
|
||||
|
||||
@@ -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`);
|
||||
}
|
||||
|
||||
@@ -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", () => {
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
Reference in New Issue
Block a user