From 0bbbd388deddec48e47f284d03b3145da7aea51d Mon Sep 17 00:00:00 2001 From: wanglinian Date: Thu, 8 Jan 2026 06:06:40 +0000 Subject: [PATCH] =?UTF-8?q?perf(chat=5Futils):=20use=20.media=20instead=20?= =?UTF-8?q?of=20.original=5Fbytes=20to=20avoid=20redundant=20bytes?= =?UTF-8?q?=E2=86=92PIL=20conversion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When processing vision_chunk items, pass the already-decoded PIL.Image via .media instead of .original_bytes. This avoids an unnecessary bytes→PIL.Image conversion in media_processor since the image was already decoded in load_bytes(). Signed-off-by: wanglinian --- vllm/entrypoints/chat_utils.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/vllm/entrypoints/chat_utils.py b/vllm/entrypoints/chat_utils.py index ad6e7eec0ce..614825a7002 100644 --- a/vllm/entrypoints/chat_utils.py +++ b/vllm/entrypoints/chat_utils.py @@ -973,11 +973,13 @@ class AsyncMultiModalItemTracker(BaseMultiModalItemTracker[Awaitable[object]]): if inner_modality == "image": # Cast data to proper type for image - if hasattr(data, "original_bytes"): - image_bytes = data.original_bytes # type: ignore[union-attr] + # Use .media (PIL.Image) directly to avoid redundant + # bytes→PIL conversion in media_processor + if hasattr(data, "media"): + image_data = data.media # type: ignore[union-attr] processed_chunks.append( VisionChunkImage( - type="image", image=image_bytes, uuid=uuid_val + type="image", image=image_data, uuid=uuid_val ) ) else: