From fdc4b59d349cf7aa021f849fa73958b6f68bb08b Mon Sep 17 00:00:00 2001 From: Tuan Dinh Date: Fri, 11 Sep 2026 13:56:38 +0700 Subject: [PATCH] feat(models): add Gemini 3.8 Flash tiers to Antigravity and AGY catalogs --- open-sse/config/antigravityModelAliases.ts | 4 ++ open-sse/config/antigravitySharedModels.ts | 37 +++++++++++++++ src/lib/providerModels/managedModelImport.ts | 2 +- src/shared/constants/modelSpecs.ts | 47 +++++++++++++++++++ .../agy-gemini-3696-tier-passthrough.test.ts | 5 +- tests/unit/antigravity-model-aliases.test.ts | 5 ++ .../antigravity-retired-public-models.test.ts | 4 ++ 7 files changed, 101 insertions(+), 3 deletions(-) diff --git a/open-sse/config/antigravityModelAliases.ts b/open-sse/config/antigravityModelAliases.ts index 30bdd01c47..68d8085b68 100644 --- a/open-sse/config/antigravityModelAliases.ts +++ b/open-sse/config/antigravityModelAliases.ts @@ -15,6 +15,10 @@ export const ANTIGRAVITY_MODEL_ALIASES = Object.freeze({ "gemini-3.7-flash-high": "gemini-3.7-flash-tiered", "gemini-3.7-flash-medium": "gemini-3.7-flash-tiered", "gemini-3.7-flash-low": "gemini-3.7-flash-tiered", + "gemini-3.8-flash": "gemini-3.8-flash-tiered", + "gemini-3.8-flash-high": "gemini-3.8-flash-tiered", + "gemini-3.8-flash-medium": "gemini-3.8-flash-tiered", + "gemini-3.8-flash-low": "gemini-3.8-flash-tiered", "gpt-oss-120b": "gpt-oss-120b-medium", // gemini-3.1-pro-low is not aliased: the upstream accepts it verbatim. // gemini-3.1-pro-high: the discovery slot returns HTTP 400 on v1internal; diff --git a/open-sse/config/antigravitySharedModels.ts b/open-sse/config/antigravitySharedModels.ts index 185472ca8b..27c2ecc260 100644 --- a/open-sse/config/antigravitySharedModels.ts +++ b/open-sse/config/antigravitySharedModels.ts @@ -43,6 +43,43 @@ export const ANTIGRAVITY_SHARED_MODELS = Object.freeze([ supportsVision: true, toolCalling: true, }, + // Gemini 3.8 Flash tiers. + { + id: "gemini-3.8-flash-high", + name: "Gemini 3.8 Flash (High)", + contextLength: 1048576, + maxOutputTokens: 65536, + supportsReasoning: true, + supportsVision: true, + toolCalling: true, + }, + { + id: "gemini-3.8-flash-medium", + name: "Gemini 3.8 Flash (Medium)", + contextLength: 1048576, + maxOutputTokens: 65536, + supportsReasoning: true, + supportsVision: true, + toolCalling: true, + }, + { + id: "gemini-3.8-flash-low", + name: "Gemini 3.8 Flash (Low)", + contextLength: 1048576, + maxOutputTokens: 65536, + supportsReasoning: true, + supportsVision: true, + toolCalling: true, + }, + { + id: "gemini-3.8-flash-tiered", + name: "Gemini 3.8 Flash (Tiered)", + contextLength: 1048576, + maxOutputTokens: 65536, + supportsReasoning: true, + supportsVision: true, + toolCalling: true, + }, // Gemini 3.1 Pro budget tiers. Live streamGenerateContent validation uses // `gemini-pro-agent` for High; the separately advertised `gemini-3.1-pro-high` // discovery slot currently returns HTTP 400 and is intentionally not public. diff --git a/src/lib/providerModels/managedModelImport.ts b/src/lib/providerModels/managedModelImport.ts index 8faff3613d..9327d35152 100644 --- a/src/lib/providerModels/managedModelImport.ts +++ b/src/lib/providerModels/managedModelImport.ts @@ -400,7 +400,7 @@ export async function importManagedModels({ // table already knows only has a safe "-tiered" target to always resolve there, // regardless of what any single connection's discovery reported. for (const [displayId, safeTarget] of Object.entries(ANTIGRAVITY_MODEL_ALIASES)) { - if (safeTarget === "gemini-3.7-flash-tiered") { + if (safeTarget === "gemini-3.7-flash-tiered" || safeTarget === "gemini-3.8-flash-tiered") { mappings[displayId] = `antigravity/${safeTarget}`; } } diff --git a/src/shared/constants/modelSpecs.ts b/src/shared/constants/modelSpecs.ts index f623bc048d..6830c6a7b2 100644 --- a/src/shared/constants/modelSpecs.ts +++ b/src/shared/constants/modelSpecs.ts @@ -283,6 +283,53 @@ export const MODEL_SPECS: Record = { supportsTools: true, supportsVision: true, }, + // ── Gemini 3.8 Flash (current Antigravity/AGY live tiers) ───────── + "gemini-3.8-flash-high": { + maxOutputTokens: 65536, + contextWindow: 1048576, + defaultThinkingBudget: 24576, + thinkingBudgetCap: 24576, + supportsThinking: true, + supportsTools: true, + supportsVision: true, + }, + "gemini-3.8-flash-medium": { + maxOutputTokens: 65536, + contextWindow: 1048576, + defaultThinkingBudget: 8192, + thinkingBudgetCap: 24576, + supportsThinking: true, + supportsTools: true, + supportsVision: true, + }, + "gemini-3.8-flash-low": { + maxOutputTokens: 65536, + contextWindow: 1048576, + defaultThinkingBudget: 1024, + thinkingBudgetCap: 24576, + supportsThinking: true, + supportsTools: true, + supportsVision: true, + }, + "gemini-3.8-flash": { + maxOutputTokens: 65536, + contextWindow: 1048576, + defaultThinkingBudget: 8192, + thinkingBudgetCap: 24576, + supportsThinking: true, + supportsTools: true, + supportsVision: true, + aliases: ["gemini-3.8-flash-tiered"], + }, + "gemini-3.8-flash-tiered": { + maxOutputTokens: 65536, + contextWindow: 1048576, + defaultThinkingBudget: 8192, + thinkingBudgetCap: 24576, + supportsThinking: true, + supportsTools: true, + supportsVision: true, + }, // Provider-neutral compatibility for providers that still serve Gemini 3.6. // Antigravity/AGY availability is governed by their own provider catalogs and diff --git a/tests/unit/agy-gemini-3696-tier-passthrough.test.ts b/tests/unit/agy-gemini-3696-tier-passthrough.test.ts index 0092681808..9ff4049e0c 100644 --- a/tests/unit/agy-gemini-3696-tier-passthrough.test.ts +++ b/tests/unit/agy-gemini-3696-tier-passthrough.test.ts @@ -18,9 +18,10 @@ test("(#3696) non-tiered ANTIGRAVITY_PUBLIC_MODELS entries resolve to distinct u const seen = new Map(); const collisions: string[] = []; for (const model of ANTIGRAVITY_PUBLIC_MODELS) { - // Gemini 3.7 Flash tiers intentionally share the upstream `gemini-3.7-flash-tiered` + // Gemini 3.7 and 3.8 Flash tiers intentionally share their upstream `*-tiered` // endpoint with different reasoning token budgets. - if (model.id.startsWith("gemini-3.7-flash")) continue; + if (model.id.startsWith("gemini-3.7-flash") || model.id.startsWith("gemini-3.8-flash")) + continue; const upstream = resolveAntigravityModelId(model.id); if (seen.has(upstream)) { collisions.push(`${model.id} and ${seen.get(upstream)} both resolve to "${upstream}"`); diff --git a/tests/unit/antigravity-model-aliases.test.ts b/tests/unit/antigravity-model-aliases.test.ts index 5f0ab5c0b4..ef8a2ba685 100644 --- a/tests/unit/antigravity-model-aliases.test.ts +++ b/tests/unit/antigravity-model-aliases.test.ts @@ -62,6 +62,11 @@ test("resolveAntigravityModelId maps the documented Antigravity aliases to upstr } assert.equal(resolveAntigravityModelId("gemini-3.7-flash"), "gemini-3.7-flash-tiered"); assert.equal(resolveAntigravityModelId("gemini-3.7-flash-tiered"), "gemini-3.7-flash-tiered"); + assert.equal(resolveAntigravityModelId("gemini-3.8-flash"), "gemini-3.8-flash-tiered"); + assert.equal(resolveAntigravityModelId("gemini-3.8-flash-high"), "gemini-3.8-flash-tiered"); + assert.equal(resolveAntigravityModelId("gemini-3.8-flash-medium"), "gemini-3.8-flash-tiered"); + assert.equal(resolveAntigravityModelId("gemini-3.8-flash-low"), "gemini-3.8-flash-tiered"); + assert.equal(resolveAntigravityModelId("gemini-3.8-flash-tiered"), "gemini-3.8-flash-tiered"); assert.equal(resolveAntigravityModelId("gpt-oss-120b"), "gpt-oss-120b-medium"); assert.equal(resolveAntigravityModelId("gemini-claude-sonnet-4-5"), "claude-sonnet-4-6"); assert.equal(resolveAntigravityModelId("gemini-claude-sonnet-4-5-thinking"), "claude-sonnet-4-6"); diff --git a/tests/unit/antigravity-retired-public-models.test.ts b/tests/unit/antigravity-retired-public-models.test.ts index 55885e3f2e..78f1fc018f 100644 --- a/tests/unit/antigravity-retired-public-models.test.ts +++ b/tests/unit/antigravity-retired-public-models.test.ts @@ -36,6 +36,10 @@ const EXPECTED_LEADING_MODEL_ORDER = [ "gemini-3.7-flash-medium", "gemini-3.7-flash-low", "gemini-3.7-flash-tiered", + "gemini-3.8-flash-high", + "gemini-3.8-flash-medium", + "gemini-3.8-flash-low", + "gemini-3.8-flash-tiered", "gemini-pro-agent", "gemini-3.1-pro-low", "gemini-3.1-flash-lite",