diff --git a/crates/goose/src/providers/google.rs b/crates/goose/src/providers/google.rs index a8e8b5647902..dbe9b331d160 100644 --- a/crates/goose/src/providers/google.rs +++ b/crates/goose/src/providers/google.rs @@ -8,6 +8,7 @@ use crate::providers::utils::{ }; use anyhow::Result; use async_trait::async_trait; +use axum::http::HeaderMap; use mcp_core::tool::Tool; use reqwest::Client; use serde_json::Value; @@ -51,7 +52,6 @@ pub struct GoogleProvider { #[serde(skip)] client: Client, host: String, - api_key: String, model: ModelConfig, } @@ -70,14 +70,18 @@ impl GoogleProvider { .get_param("GOOGLE_HOST") .unwrap_or_else(|_| GOOGLE_API_HOST.to_string()); + let mut headers = HeaderMap::new(); + headers.insert("CONTENT_TYPE", "application/json".parse()?); + headers.insert("x-goog-api-key", api_key.parse()?); + let client = Client::builder() .timeout(Duration::from_secs(600)) + .default_headers(headers) .build()?; Ok(Self { client, host, - api_key, model, }) } @@ -88,8 +92,8 @@ impl GoogleProvider { let url = base_url .join(&format!( - "v1beta/models/{}:generateContent?key={}", - self.model.model_name, self.api_key + "v1beta/models/{}:generateContent", + self.model.model_name )) .map_err(|e| { ProviderError::RequestFailed(format!("Failed to construct endpoint URL: {e}")) @@ -103,7 +107,6 @@ impl GoogleProvider { let response = self .client .post(url.clone()) // Clone the URL for each retry - .header("CONTENT_TYPE", "application/json") .json(&payload) .send() .await; @@ -192,7 +195,7 @@ impl Provider for GoogleProvider { /// Fetch supported models from Google Generative Language API; returns Err on failure, Ok(None) if not present async fn fetch_supported_models_async(&self) -> Result>, ProviderError> { // List models via the v1beta/models endpoint - let url = format!("{}/v1beta/models?key={}", self.host, self.api_key); + let url = format!("{}/v1beta/models", self.host); let response = self.client.get(&url).send().await?; let json: serde_json::Value = response.json().await?; // If 'models' field missing, return None