From a7fa34c2fcecfe71bdde16e935f4731d4fa803b1 Mon Sep 17 00:00:00 2001 From: "R.D." Date: Thu, 2 Apr 2026 05:27:54 -0400 Subject: [PATCH] feat(github): add gemini-3.1-pro-preview --- README.md | 2 +- docs/USER_GUIDE.md | 2 +- open-sse/config/providerRegistry.ts | 5 ++++- open-sse/services/model.ts | 3 ++- tests/unit/t28-model-catalog-updates.test.mjs | 14 ++++++++++++++ 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4500a337..e4810526 100644 --- a/README.md +++ b/README.md @@ -1635,7 +1635,7 @@ Dashboard → Providers → Connect GitHub Models: gh/gpt-5 gh/claude-4.5-sonnet - gh/gemini-3-pro + gh/gemini-3.1-pro-preview ``` diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 859a428f..220243a3 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -164,7 +164,7 @@ Dashboard → Providers → Connect GitHub Models: gh/gpt-5 gh/claude-4.5-sonnet - gh/gemini-3-pro + gh/gemini-3.1-pro-preview ``` ### 💰 Cheap Providers diff --git a/open-sse/config/providerRegistry.ts b/open-sse/config/providerRegistry.ts index c9cb25c0..092e48d9 100644 --- a/open-sse/config/providerRegistry.ts +++ b/open-sse/config/providerRegistry.ts @@ -439,6 +439,7 @@ export const REGISTRY: Record = { { id: "claude-opus-4-5-20251101", name: "Claude Opus 4.5 (Full ID)" }, { id: "claude-sonnet-4", name: "Claude Sonnet 4" }, { id: "claude-sonnet-4.5", name: "Claude Sonnet 4.5" }, + { id: "gemini-3.1-pro-preview", name: "Gemini 3.1 Pro Preview" }, { id: "gemini-2.5-pro", name: "Gemini 2.5 Pro" }, { id: "gemini-2.5-flash", name: "Gemini 2.5 Flash" }, { id: "grok-code-fast-1", name: "Grok Code Fast 1" }, @@ -1556,7 +1557,9 @@ const _passthroughProviderIds: Set | null = (() => { if (entry.passthroughModels) ids.add(entry.id); } return ids; - } catch { return null; } + } catch { + return null; + } })(); export function getPassthroughProviders(): Set { diff --git a/open-sse/services/model.ts b/open-sse/services/model.ts index c27aeb8b..91ad9495 100644 --- a/open-sse/services/model.ts +++ b/open-sse/services/model.ts @@ -19,7 +19,8 @@ const PROVIDER_MODEL_ALIASES = { github: { "claude-4.5-opus": "claude-opus-4-5-20251101", "claude-opus-4.5": "claude-opus-4-5-20251101", - "gemini-3-pro": "gemini-3-pro-preview", + "gemini-3-pro": "gemini-3.1-pro-preview", + "gemini-3-pro-preview": "gemini-3.1-pro-preview", "gemini-3-flash": "gemini-3-flash-preview", "raptor-mini": "oswe-vscode-prime", }, diff --git a/tests/unit/t28-model-catalog-updates.test.mjs b/tests/unit/t28-model-catalog-updates.test.mjs index 8291c897..a1d3440b 100644 --- a/tests/unit/t28-model-catalog-updates.test.mjs +++ b/tests/unit/t28-model-catalog-updates.test.mjs @@ -25,6 +25,20 @@ test("T28: antigravity static catalog exposes current Gemini 3.1 model IDs", () assert.ok(!staticIds.includes("gemini-3-pro-low")); }); +test("T28: github registry exposes Gemini 3.1 Pro Preview and keeps legacy alias compatibility", async () => { + const githubIds = REGISTRY.github.models.map((m) => m.id); + + assert.ok(githubIds.includes("gemini-3.1-pro-preview")); + + const canonical = await getModelInfoCore("gh/gemini-3.1-pro-preview", {}); + assert.equal(canonical.provider, "github"); + assert.equal(canonical.model, "gemini-3.1-pro-preview"); + + const legacy = await getModelInfoCore("gh/gemini-3-pro", {}); + assert.equal(legacy.provider, "github"); + assert.equal(legacy.model, "gemini-3.1-pro-preview"); +}); + test("T28: qwen registry uses native chat.qwen.ai base URL", () => { assert.equal( REGISTRY.qwen.baseUrl,