Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion langfuse/media.py
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,10 @@ def _parse_base64_data_uri(
if not content_type:
raise ValueError("Content type is empty")

return base64.b64decode(actual_data), cast(MediaContentType, content_type)
translation_table = str.maketrans("-_", "+/")
decoded_data = base64.b64decode(actual_data.translate(translation_table))

return decoded_data, cast(MediaContentType, content_type)

except Exception as e:
logger.error("Error parsing base64 data URI", exc_info=e)
Expand Down
13 changes: 13 additions & 0 deletions tests/unit/test_media.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,3 +262,16 @@ def test_resolve_media_references_uses_configured_httpx_client():
httpx_client.get.assert_called_once_with(
"https://example.com/test.jpg", timeout=fetch_timeout_seconds
)

def test_init_with_urlsafe_base64_data_uri():
original_bytes = b"\xfb\xff"
urlsafe_base64 = base64.urlsafe_b64encode(original_bytes).decode()

media = LangfuseMedia(
base64_data_uri=f"data:application/octet-stream;base64,{urlsafe_base64}"
)

assert media._source == "base64_data_uri"
assert media._content_type == "application/octet-stream"
assert media._content_bytes == original_bytes