[Bugfix] Emit a valid media type from encode_{audio,image,video}_url (#49056)

Signed-off-by: Vineeth Sai <vineethsai4444@gmail.com>
This commit is contained in:
Vineeth Sai Varikuntla
2026-08-03 19:02:23 +00:00
committed by GitHub
parent 8f50685c48
commit 7f2e78ba4d
2 changed files with 21 additions and 4 deletions
+16 -1
View File
@@ -2,6 +2,7 @@
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
import pytest
import torch
from PIL import Image
from vllm.multimodal.inputs import (
MultiModalBatchedField,
@@ -10,7 +11,11 @@ from vllm.multimodal.inputs import (
MultiModalSharedField,
PlaceholderRange,
)
from vllm.multimodal.utils import argsort_mm_positions, group_and_batch_mm_items
from vllm.multimodal.utils import (
argsort_mm_positions,
encode_image_url,
group_and_batch_mm_items,
)
@pytest.mark.parametrize(
@@ -224,6 +229,16 @@ def test_group_and_batch_mm_items_splits_shared_data_by_dtype():
assert [num_items for num_items, _ in res] == [1, 1, 1]
def test_encode_image_url_uncommon_format_has_valid_mimetype():
"""A format missing from mimetypes.types_map must still produce a
well-formed type/subtype media type, not a bare 'image'."""
# ".tga" is not registered in mimetypes.types_map, so it exercises the
# fallback path; Pillow can still encode it.
url = encode_image_url(Image.new("RGB", (2, 2)), format="TGA")
mimetype = url.removeprefix("data:").split(";", 1)[0]
assert mimetype == "image/tga"
def test_group_and_batch_mm_items_split_by_shared_data():
elem1 = MultiModalFieldElem(
data=torch.zeros(1, dtype=torch.uint8),
+5 -3
View File
@@ -57,7 +57,7 @@ def encode_audio_url(
) -> str:
"""Encode audio as a data URL."""
audio_b64 = encode_audio_base64(audio, sampling_rate, format=format)
mimetype = mimetypes.types_map.get("." + format.lower(), "audio")
mimetype = mimetypes.types_map.get("." + format.lower(), f"audio/{format.lower()}")
return f"data:{mimetype};base64,{audio_b64}"
@@ -90,7 +90,7 @@ def encode_image_url(
Pass `image_mode=None` to keep the original image mode.
"""
image_b64 = encode_image_base64(image, image_mode=image_mode, format=format)
mimetype = mimetypes.types_map.get("." + format.lower(), "image")
mimetype = mimetypes.types_map.get("." + format.lower(), f"image/{format.lower()}")
return f"data:{mimetype};base64,{image_b64}"
@@ -114,7 +114,9 @@ def encode_video_url(
if format.lower() == "jpeg":
mimetype = "video/jpeg"
else:
mimetype = mimetypes.types_map.get("." + format.lower(), "video")
mimetype = mimetypes.types_map.get(
"." + format.lower(), f"video/{format.lower()}"
)
return f"data:{mimetype};base64,{video_b64}"