From 12e8bc61c6d72ab904d9857c47a38be32ef8411f Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 2 Apr 2025 20:41:05 +1100 Subject: [PATCH 1/2] fix(ollama): respect ollama URL and port --- crates/goose/src/providers/ollama.rs | 19 ++++++++++++------- crates/goose/src/providers/toolshim.rs | 7 ++++++- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/crates/goose/src/providers/ollama.rs b/crates/goose/src/providers/ollama.rs index eb255ed4cedd..d24b4c97834b 100644 --- a/crates/goose/src/providers/ollama.rs +++ b/crates/goose/src/providers/ollama.rs @@ -64,13 +64,18 @@ impl OllamaProvider { let mut base_url = Url::parse(&base) .map_err(|e| ProviderError::RequestFailed(format!("Invalid base URL: {e}")))?; - // Set the default port if missing - let explicit_default_port = self.host.ends_with(":80") || self.host.ends_with(":443"); - if base_url.port().is_none() && !explicit_default_port { - base_url.set_port(Some(OLLAMA_DEFAULT_PORT)).map_err(|_| { - ProviderError::RequestFailed("Failed to set default port".to_string()) - })?; - } + // Set the default port if missing + // Don't add default port if: + // 1. URL explicitly ends with standard ports (:80 or :443) + // 2. URL uses HTTPS (which implicitly uses port 443) + let explicit_default_port = self.host.ends_with(":80") || self.host.ends_with(":443"); + let is_https = base_url.scheme() == "https"; + + if base_url.port().is_none() && !explicit_default_port && !is_https { + base_url.set_port(Some(OLLAMA_DEFAULT_PORT)).map_err(|_| { + ProviderError::RequestFailed("Failed to set default port".to_string()) + })?; + } Ok(base_url) } diff --git a/crates/goose/src/providers/toolshim.rs b/crates/goose/src/providers/toolshim.rs index c3b6306dc983..eea5bd6e4c6d 100644 --- a/crates/goose/src/providers/toolshim.rs +++ b/crates/goose/src/providers/toolshim.rs @@ -96,8 +96,13 @@ impl OllamaInterpreter { .map_err(|e| ProviderError::RequestFailed(format!("Invalid base URL: {e}")))?; // Set the default port if missing + // Don't add default port if: + // 1. URL explicitly ends with standard ports (:80 or :443) + // 2. URL uses HTTPS (which implicitly uses port 443) let explicit_default_port = host.ends_with(":80") || host.ends_with(":443"); - if base_url.port().is_none() && !explicit_default_port { + let is_https = base_url.scheme() == "https"; + + if base_url.port().is_none() && !explicit_default_port && !is_https { base_url.set_port(Some(OLLAMA_DEFAULT_PORT)).map_err(|_| { ProviderError::RequestFailed("Failed to set default port".to_string()) })?; From 51e8f0c99bda9f2fe0c10833bd62efd26ae863e7 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 2 Apr 2025 20:44:39 +1100 Subject: [PATCH 2/2] fix(ollama): respect ollama URL and port --- crates/goose/src/providers/ollama.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/crates/goose/src/providers/ollama.rs b/crates/goose/src/providers/ollama.rs index d24b4c97834b..169c7c64d655 100644 --- a/crates/goose/src/providers/ollama.rs +++ b/crates/goose/src/providers/ollama.rs @@ -64,18 +64,18 @@ impl OllamaProvider { let mut base_url = Url::parse(&base) .map_err(|e| ProviderError::RequestFailed(format!("Invalid base URL: {e}")))?; - // Set the default port if missing - // Don't add default port if: - // 1. URL explicitly ends with standard ports (:80 or :443) - // 2. URL uses HTTPS (which implicitly uses port 443) - let explicit_default_port = self.host.ends_with(":80") || self.host.ends_with(":443"); - let is_https = base_url.scheme() == "https"; - - if base_url.port().is_none() && !explicit_default_port && !is_https { - base_url.set_port(Some(OLLAMA_DEFAULT_PORT)).map_err(|_| { - ProviderError::RequestFailed("Failed to set default port".to_string()) - })?; - } + // Set the default port if missing + // Don't add default port if: + // 1. URL explicitly ends with standard ports (:80 or :443) + // 2. URL uses HTTPS (which implicitly uses port 443) + let explicit_default_port = self.host.ends_with(":80") || self.host.ends_with(":443"); + let is_https = base_url.scheme() == "https"; + + if base_url.port().is_none() && !explicit_default_port && !is_https { + base_url.set_port(Some(OLLAMA_DEFAULT_PORT)).map_err(|_| { + ProviderError::RequestFailed("Failed to set default port".to_string()) + })?; + } Ok(base_url) }