From 10dbb213809e2a8280f6210dcdfea80b6fb1c50c Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Tue, 14 Apr 2026 13:24:46 +0100 Subject: [PATCH] fix(models): normalize google-vertex flash-lite ids --- extensions/google/api.test.ts | 31 ++++++++++++++++++++++++++++ extensions/google/provider-policy.ts | 19 +++++++++++------ 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/extensions/google/api.test.ts b/extensions/google/api.test.ts index 954c11cb2d0..a53a88f58f6 100644 --- a/extensions/google/api.test.ts +++ b/extensions/google/api.test.ts @@ -4,6 +4,7 @@ import { isGoogleGenerativeAiApi, normalizeGoogleApiBaseUrl, normalizeGoogleGenerativeAiBaseUrl, + normalizeGoogleProviderConfig, parseGeminiAuth, resolveGoogleGenerativeAiHttpRequestConfig, resolveGoogleGenerativeAiApiOrigin, @@ -106,6 +107,36 @@ describe("google generative ai helpers", () => { }); }); + it("normalizes google-vertex model ids without rewriting the OpenAI-compatible baseUrl", () => { + expect( + normalizeGoogleProviderConfig("google-vertex", { + api: "openai-completions", + baseUrl: + "https://aiplatform.googleapis.com/v1/projects/test/locations/us-central1/endpoints/openapi", + models: [ + { + id: "gemini-3.1-flash-lite", + name: "Gemini Flash Lite", + input: ["text"], + reasoning: false, + cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, + contextWindow: 1, + maxTokens: 1, + }, + ], + }), + ).toMatchObject({ + api: "openai-completions", + baseUrl: + "https://aiplatform.googleapis.com/v1/projects/test/locations/us-central1/endpoints/openapi", + models: [ + expect.objectContaining({ + id: "gemini-3.1-flash-lite-preview", + }), + ], + }); + }); + it("derives the Gemini API origin without duplicating /v1beta", () => { expect(resolveGoogleGenerativeAiApiOrigin()).toBe("https://generativelanguage.googleapis.com"); expect(resolveGoogleGenerativeAiApiOrigin("https://generativelanguage.googleapis.com")).toBe( diff --git a/extensions/google/provider-policy.ts b/extensions/google/provider-policy.ts index 5ed20e8dcda..4b1766b0a38 100644 --- a/extensions/google/provider-policy.ts +++ b/extensions/google/provider-policy.ts @@ -152,14 +152,21 @@ export function normalizeGoogleProviderConfig( provider: ModelProviderConfig, ): ModelProviderConfig { let nextProvider = provider; + const shouldNormalizeModelIds = + providerKey === "google-vertex" || + shouldNormalizeGoogleGenerativeAiProviderConfig(providerKey, nextProvider); - if (shouldNormalizeGoogleGenerativeAiProviderConfig(providerKey, nextProvider)) { + if (shouldNormalizeModelIds) { const modelNormalized = normalizeProviderModels(nextProvider, normalizeGoogleModelId); - const normalizedBaseUrl = normalizeGoogleGenerativeAiBaseUrl(modelNormalized.baseUrl); - nextProvider = - normalizedBaseUrl !== modelNormalized.baseUrl - ? { ...modelNormalized, baseUrl: normalizedBaseUrl ?? modelNormalized.baseUrl } - : modelNormalized; + if (shouldNormalizeGoogleGenerativeAiProviderConfig(providerKey, modelNormalized)) { + const normalizedBaseUrl = normalizeGoogleGenerativeAiBaseUrl(modelNormalized.baseUrl); + nextProvider = + normalizedBaseUrl !== modelNormalized.baseUrl + ? { ...modelNormalized, baseUrl: normalizedBaseUrl ?? modelNormalized.baseUrl } + : modelNormalized; + } else { + nextProvider = modelNormalized; + } } if (providerKey === "google-antigravity") {