From e88f4777dc66639d6a0152aac3ee33a4253e8024 Mon Sep 17 00:00:00 2001 From: Jay-flow Date: Mon, 21 Jul 2025 23:38:35 +0900 Subject: [PATCH 1/3] fix: Add cloud storage specific upload headers Resolve GCS Bad Request error by setting appropriate headers for each cloud storage provider (S3, Azure, GCS). --- langfuse/_task_manager/media_manager.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/langfuse/_task_manager/media_manager.py b/langfuse/_task_manager/media_manager.py index 13fa5f0c6..119f77569 100644 --- a/langfuse/_task_manager/media_manager.py +++ b/langfuse/_task_manager/media_manager.py @@ -246,15 +246,17 @@ def _process_upload_media_job( return + headers = {"Content-Type": data["content_type"]} + + if not "storage.googleapis.com" in upload_url: + headers["x-ms-blob-type"] = "BlockBlob" + headers["x-amz-checksum-sha256"] = data["content_sha256_hash"] + upload_start_time = time.time() upload_response = self._request_with_backoff( requests.put, upload_url, - headers={ - "Content-Type": data["content_type"], - "x-amz-checksum-sha256": data["content_sha256_hash"], - "x-ms-blob-type": "BlockBlob", - }, + headers=headers, data=data["content_bytes"], ) upload_time_ms = int((time.time() - upload_start_time) * 1000) From 014942900f0e815e8319ece47cc46862d1517cff Mon Sep 17 00:00:00 2001 From: Hassieb Pakzad <68423100+hassiebp@users.noreply.github.com> Date: Wed, 27 Aug 2025 17:33:27 +0200 Subject: [PATCH 2/3] add comment --- langfuse/_task_manager/media_manager.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/langfuse/_task_manager/media_manager.py b/langfuse/_task_manager/media_manager.py index 119f77569..16df42b6c 100644 --- a/langfuse/_task_manager/media_manager.py +++ b/langfuse/_task_manager/media_manager.py @@ -247,7 +247,8 @@ def _process_upload_media_job( return headers = {"Content-Type": data["content_type"]} - + + # In self-hosted setups with GCP, do not add unsupported headers that fail the upload if not "storage.googleapis.com" in upload_url: headers["x-ms-blob-type"] = "BlockBlob" headers["x-amz-checksum-sha256"] = data["content_sha256_hash"] From d7c565861939bc1db0a2c572c64355d31a2153e0 Mon Sep 17 00:00:00 2001 From: Hassieb Pakzad <68423100+hassiebp@users.noreply.github.com> Date: Wed, 27 Aug 2025 17:35:29 +0200 Subject: [PATCH 3/3] push --- langfuse/_task_manager/media_manager.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/langfuse/_task_manager/media_manager.py b/langfuse/_task_manager/media_manager.py index 16df42b6c..a36e3b8af 100644 --- a/langfuse/_task_manager/media_manager.py +++ b/langfuse/_task_manager/media_manager.py @@ -249,7 +249,9 @@ def _process_upload_media_job( headers = {"Content-Type": data["content_type"]} # In self-hosted setups with GCP, do not add unsupported headers that fail the upload - if not "storage.googleapis.com" in upload_url: + is_self_hosted_gcs_bucket = "storage.googleapis.com" in upload_url + + if not is_self_hosted_gcs_bucket: headers["x-ms-blob-type"] = "BlockBlob" headers["x-amz-checksum-sha256"] = data["content_sha256_hash"]