From 69bf2bfb9ac785ce2c257ed817ff0a8d5887c6b9 Mon Sep 17 00:00:00 2001 From: Sameer Kankute Date: Tue, 14 Apr 2026 21:18:23 +0530 Subject: [PATCH] Fix tests --- litellm/integrations/s3_v2.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/litellm/integrations/s3_v2.py b/litellm/integrations/s3_v2.py index a09a2afe26e..7f7d47b3150 100644 --- a/litellm/integrations/s3_v2.py +++ b/litellm/integrations/s3_v2.py @@ -404,11 +404,14 @@ class S3Logger(CustomBatchLogger, BaseAWSLLM): # Prepare the signed headers signed_headers = dict(aws_request.headers.items()) + # Use prepared URL so path segments match SigV4 canonical request (e.g. %20 for spaces). + request_url = prepped.url or url + # Make the request with retry for transient S3 errors (500/503) max_retries = 3 for attempt in range(max_retries): response = await self.async_httpx_client.put( - url, data=json_string, headers=signed_headers + request_url, data=json_string, headers=signed_headers ) if response.status_code in (500, 503) and attempt < max_retries - 1: wait_time = 2**attempt # 1s, 2s @@ -590,6 +593,9 @@ class S3Logger(CustomBatchLogger, BaseAWSLLM): # Prepare the signed headers signed_headers = dict(aws_request.headers.items()) + # Use prepared URL so path segments match SigV4 canonical request (e.g. %20 for spaces). + request_url = prepped.url or url + httpx_client = _get_httpx_client( params={"ssl_verify": self.s3_verify} if self.s3_verify is not None @@ -599,7 +605,7 @@ class S3Logger(CustomBatchLogger, BaseAWSLLM): max_retries = 3 for attempt in range(max_retries): response = httpx_client.put( - url, data=json_string, headers=signed_headers + request_url, data=json_string, headers=signed_headers ) if response.status_code in (500, 503) and attempt < max_retries - 1: wait_time = 2**attempt # 1s, 2s