Skip to content

Commit 281eee1

Browse files
author
SidQin-cyber
committed
fix(agents): extend Gemini 3.1 forward-compat to google provider
The forward-compat path for gemini-3.1-pro-preview and gemini-3.1-flash-lite-preview only covered the google-gemini-cli provider. Users configuring these models with the google provider (Gemini API key auth) got "Unknown model" errors and silently fell back to Anthropic. Extend resolveGoogleGemini31ForwardCompatModel to accept both google-gemini-cli and google providers by using a provider set. Also add bare-ID normalization for gemini-3.1-pro, gemini-3.1-flash, and gemini-3.1-flash-lite in normalizeGoogleModelId(). Closes #36134 Closes #36111
1 parent 06ff25c commit 281eee1

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

src/agents/model-forward-compat.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,15 +168,19 @@ function resolveAnthropicSonnet46ForwardCompatModel(
168168
});
169169
}
170170

171+
const GOOGLE_GEMINI_31_ELIGIBLE_PROVIDERS = new Set(["google-gemini-cli", "google"]);
172+
171173
// gemini-3.1-pro-preview / gemini-3.1-flash-preview are not present in pi-ai's built-in
172-
// google-gemini-cli catalog yet. Clone the nearest gemini-3 template so users don't get
173-
// "Unknown model" errors when Google Gemini CLI gains new minor-version models.
174-
function resolveGoogleGeminiCli31ForwardCompatModel(
174+
// catalog yet. Clone the nearest gemini-3 template so users don't get "Unknown model"
175+
// errors when Google releases a new minor version. Applies to both the google-gemini-cli
176+
// provider (CLI tool-use key) and the google provider (Gemini API key).
177+
function resolveGoogleGemini31ForwardCompatModel(
175178
provider: string,
176179
modelId: string,
177180
modelRegistry: ModelRegistry,
178181
): Model<Api> | undefined {
179-
if (normalizeProviderId(provider) !== "google-gemini-cli") {
182+
const normalizedProvider = normalizeProviderId(provider);
183+
if (!GOOGLE_GEMINI_31_ELIGIBLE_PROVIDERS.has(normalizedProvider)) {
180184
return undefined;
181185
}
182186
const trimmed = modelId.trim();
@@ -192,7 +196,7 @@ function resolveGoogleGeminiCli31ForwardCompatModel(
192196
}
193197

194198
return cloneFirstTemplateModel({
195-
normalizedProvider: "google-gemini-cli",
199+
normalizedProvider,
196200
trimmedModelId: trimmed,
197201
templateIds: [...templateIds],
198202
modelRegistry,
@@ -252,6 +256,6 @@ export function resolveForwardCompatModel(
252256
resolveAnthropicOpus46ForwardCompatModel(provider, modelId, modelRegistry) ??
253257
resolveAnthropicSonnet46ForwardCompatModel(provider, modelId, modelRegistry) ??
254258
resolveZaiGlm5ForwardCompatModel(provider, modelId, modelRegistry) ??
255-
resolveGoogleGeminiCli31ForwardCompatModel(provider, modelId, modelRegistry)
259+
resolveGoogleGemini31ForwardCompatModel(provider, modelId, modelRegistry)
256260
);
257261
}

src/agents/models-config.providers.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,15 @@ export function normalizeGoogleModelId(id: string): string {
444444
if (id === "gemini-3-flash") {
445445
return "gemini-3-flash-preview";
446446
}
447+
if (id === "gemini-3.1-pro" || id === "gemini-3-1-pro") {
448+
return "gemini-3.1-pro-preview";
449+
}
450+
if (id === "gemini-3.1-flash" || id === "gemini-3-1-flash") {
451+
return "gemini-3.1-flash-preview";
452+
}
453+
if (id === "gemini-3.1-flash-lite" || id === "gemini-3-1-flash-lite") {
454+
return "gemini-3.1-flash-lite-preview";
455+
}
447456
return id;
448457
}
449458

0 commit comments

Comments
 (0)