mirror of
https://github.com/aljazceru/goose.git
synced 2026-02-09 16:44:24 +01:00
fix: Pass Google AI API key in HTTP header, not query param (#3192)
This commit is contained in:
@@ -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<Option<Vec<String>>, 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
|
||||
|
||||
Reference in New Issue
Block a user