From 4c3ad4b5f54561579f909d55300e55198d2c6e26 Mon Sep 17 00:00:00 2001 From: Douwe Osinga Date: Wed, 28 Jan 2026 12:56:13 -0500 Subject: [PATCH] Feat/anthropic custom headers (#6774) Signed-off-by: TR Jordan Co-authored-by: TR Jordan Co-authored-by: Claude Opus 4.5 Co-authored-by: Douwe Osinga --- crates/goose/src/providers/anthropic.rs | 12 +++++++++++- crates/goose/src/providers/ollama.rs | 12 +++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/crates/goose/src/providers/anthropic.rs b/crates/goose/src/providers/anthropic.rs index 9de2060b..82e204a6 100644 --- a/crates/goose/src/providers/anthropic.rs +++ b/crates/goose/src/providers/anthropic.rs @@ -91,9 +91,19 @@ impl AnthropicProvider { key: api_key, }; - let api_client = ApiClient::new(config.base_url, auth)? + let mut api_client = ApiClient::new(config.base_url, auth)? .with_header("anthropic-version", ANTHROPIC_API_VERSION)?; + if let Some(headers) = &config.headers { + let mut header_map = reqwest::header::HeaderMap::new(); + for (key, value) in headers { + let header_name = reqwest::header::HeaderName::from_bytes(key.as_bytes())?; + let header_value = reqwest::header::HeaderValue::from_str(value)?; + header_map.insert(header_name, header_value); + } + api_client = api_client.with_headers(header_map)?; + } + Ok(Self { api_client, model, diff --git a/crates/goose/src/providers/ollama.rs b/crates/goose/src/providers/ollama.rs index 422b1605..02f091e5 100644 --- a/crates/goose/src/providers/ollama.rs +++ b/crates/goose/src/providers/ollama.rs @@ -108,9 +108,19 @@ impl OllamaProvider { .map_err(|_| anyhow::anyhow!("Failed to set default port"))?; } - let api_client = + let mut api_client = ApiClient::with_timeout(base_url.to_string(), AuthMethod::NoAuth, timeout)?; + if let Some(headers) = &config.headers { + let mut header_map = reqwest::header::HeaderMap::new(); + for (key, value) in headers { + let header_name = reqwest::header::HeaderName::from_bytes(key.as_bytes())?; + let header_value = reqwest::header::HeaderValue::from_str(value)?; + header_map.insert(header_name, header_value); + } + api_client = api_client.with_headers(header_map)?; + } + Ok(Self { api_client, model,