From e9b1a3078ced00bf3d7cb810ec0b717e95c48514 Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Thu, 30 Apr 2026 16:56:45 -0300 Subject: [PATCH] fix: claude client should not duplicate /v1/messages in URL --- botserver/src/llm/claude.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/botserver/src/llm/claude.rs b/botserver/src/llm/claude.rs index bec15736..0c7c145e 100644 --- a/botserver/src/llm/claude.rs +++ b/botserver/src/llm/claude.rs @@ -382,7 +382,11 @@ impl ClaudeClient { tx: mpsc::Sender, model_name: &str, ) -> Result<(), Box> { - let url = format!("{}/v1/messages", self.base_url.trim_end_matches('/')); + let url = if self.base_url.contains("/v1/messages") || self.base_url.contains("/messages") { + self.base_url.clone() + } else { + format!("{}/v1/messages", self.base_url.trim_end_matches('/')) + }; let start_time = Instant::now(); trace!( @@ -659,7 +663,11 @@ impl LLMProvider for ClaudeClient { trace!("CLAUDE request: model={}, body_len={}", model_name, body.len()); let start = Instant::now(); - let url = format!("{}/v1/messages", self.base_url.trim_end_matches('/')); + let url = if self.base_url.contains("/v1/messages") || self.base_url.contains("/messages") { + self.base_url.clone() + } else { + format!("{}/v1/messages", self.base_url.trim_end_matches('/')) + }; // Use reqwest for non-streaming let client = reqwest::Client::builder()