From 6010ec97a862d1cb30c9d5890c373e671a3d7652 Mon Sep 17 00:00:00 2001 From: hobokenchicken Date: Thu, 5 Mar 2026 15:32:53 +0000 Subject: [PATCH] fix(gemini): resolve 404 by defaulting Gemini 3+ to v1 endpoint - Update get_base_url to prefer v1 for Gemini 3.0+ models even if they contain 'preview'. - Add tracing::debug logs for the final API URLs used in both streaming and non-streaming requests. --- src/providers/gemini.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/providers/gemini.rs b/src/providers/gemini.rs index 088ade05..791377f8 100644 --- a/src/providers/gemini.rs +++ b/src/providers/gemini.rs @@ -439,9 +439,11 @@ impl GeminiProvider { } /// Determine the appropriate base URL for the model. - /// "preview" models often require the v1beta endpoint. + /// "preview" models often require the v1beta endpoint, but newer promoted ones may be on v1. fn get_base_url(&self, model: &str) -> String { - if model.contains("preview") || model.contains("thinking") { + // Only use v1beta for older preview models or specific "thinking" experimental models. + // Gemini 3.0+ models are typically released on v1 even in preview. + if (model.contains("preview") && !model.contains("gemini-3")) || model.contains("thinking") { self.config.base_url.replace("/v1", "/v1beta") } else { self.config.base_url.clone() @@ -512,6 +514,7 @@ impl super::Provider for GeminiProvider { let base_url = self.get_base_url(&model); let url = format!("{}/models/{}:generateContent", base_url, model); + tracing::debug!("Calling Gemini API: {}", url); let response = self .client @@ -657,6 +660,7 @@ impl super::Provider for GeminiProvider { "{}/models/{}:streamGenerateContent?alt=sse", base_url, model, ); + tracing::debug!("Calling Gemini Stream API: {}", url); // (no fallback_request needed here)