From d039f3f6f32175c2de768b904767cfcdf7907ed1 Mon Sep 17 00:00:00 2001 From: Adrian Cole <64215+codefromthecrypt@users.noreply.github.com> Date: Fri, 6 Feb 2026 18:25:30 +0800 Subject: [PATCH] fix(providers): Azure OpenAI model listing 404 during configure (#7034) Signed-off-by: Adrian Cole --- crates/goose/src/providers/azure.rs | 7 ++----- crates/goose/src/providers/openai_compatible.rs | 16 +++++++++++++--- crates/goose/src/providers/xai.rs | 1 + 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/crates/goose/src/providers/azure.rs b/crates/goose/src/providers/azure.rs index 160ab71f35..cef3f20c17 100644 --- a/crates/goose/src/providers/azure.rs +++ b/crates/goose/src/providers/azure.rs @@ -82,11 +82,7 @@ impl ProviderDef for AzureProvider { })?; let auth_provider = AzureAuthProvider { auth }; - let host = format!( - "{}/openai/deployments/{}", - endpoint.trim_end_matches('/'), - deployment_name - ); + let host = format!("{}/openai", endpoint.trim_end_matches('/')); let api_client = ApiClient::new(host, AuthMethod::Custom(Box::new(auth_provider)))? .with_query(vec![("api-version".to_string(), api_version)]); @@ -94,6 +90,7 @@ impl ProviderDef for AzureProvider { AZURE_PROVIDER_NAME.to_string(), api_client, model, + format!("deployments/{}/", deployment_name), )) }) } diff --git a/crates/goose/src/providers/openai_compatible.rs b/crates/goose/src/providers/openai_compatible.rs index daa1f685d0..2b77d09b52 100644 --- a/crates/goose/src/providers/openai_compatible.rs +++ b/crates/goose/src/providers/openai_compatible.rs @@ -25,14 +25,22 @@ pub struct OpenAiCompatibleProvider { /// Client targeted at the base URL (e.g. `https://api.x.ai/v1`) api_client: ApiClient, model: ModelConfig, + /// Path prefix prepended to `chat/completions` (e.g. `"deployments/{name}/"` for Azure). + completions_prefix: String, } impl OpenAiCompatibleProvider { - pub fn new(name: String, api_client: ApiClient, model: ModelConfig) -> Self { + pub fn new( + name: String, + api_client: ApiClient, + model: ModelConfig, + completions_prefix: String, + ) -> Self { Self { name, api_client, model, + completions_prefix, } } @@ -81,11 +89,12 @@ impl Provider for OpenAiCompatibleProvider { let payload = self.build_request(model_config, system, messages, tools, false)?; let mut log = RequestLog::start(model_config, &payload)?; + let completions_path = format!("{}chat/completions", self.completions_prefix); let response = self .with_retry(|| async { let resp = self .api_client - .response_post(session_id, "chat/completions", &payload) + .response_post(session_id, &completions_path, &payload) .await?; handle_response_openai_compat(resp).await }) @@ -147,11 +156,12 @@ impl Provider for OpenAiCompatibleProvider { let payload = self.build_request(&self.model, system, messages, tools, true)?; let mut log = RequestLog::start(&self.model, &payload)?; + let completions_path = format!("{}chat/completions", self.completions_prefix); let response = self .with_retry(|| async { let resp = self .api_client - .response_post(Some(session_id), "chat/completions", &payload) + .response_post(Some(session_id), &completions_path, &payload) .await?; handle_status_openai_compat(resp).await }) diff --git a/crates/goose/src/providers/xai.rs b/crates/goose/src/providers/xai.rs index c3cfcc8152..49a6389e3b 100644 --- a/crates/goose/src/providers/xai.rs +++ b/crates/goose/src/providers/xai.rs @@ -65,6 +65,7 @@ impl ProviderDef for XaiProvider { XAI_PROVIDER_NAME.to_string(), api_client, model, + String::new(), )) }) }