Unverified Commit 3443aaf8 authored by h-avsha's avatar h-avsha Committed by GitHub
Browse files

Move to a faster base64 implementation (#19984)


Signed-off-by: default avatarh-avsha <avshalom.manevich@hcompany.ai>
parent 2273ec32
...@@ -44,3 +44,4 @@ watchfiles # required for http server to monitor the updates of TLS files ...@@ -44,3 +44,4 @@ watchfiles # required for http server to monitor the updates of TLS files
python-json-logger # Used by logging as per examples/others/logging_configuration.md python-json-logger # Used by logging as per examples/others/logging_configuration.md
scipy # Required for phi-4-multimodal-instruct scipy # Required for phi-4-multimodal-instruct
ninja # Required for xgrammar, rocm, tpu, xpu ninja # Required for xgrammar, rocm, tpu, xpu
pybase64 # fast base64 implementation
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
import base64
from io import BytesIO from io import BytesIO
from pathlib import Path from pathlib import Path
import pybase64
import torch import torch
from PIL import Image from PIL import Image
...@@ -55,7 +55,7 @@ class ImageMediaIO(MediaIO[Image.Image]): ...@@ -55,7 +55,7 @@ class ImageMediaIO(MediaIO[Image.Image]):
return convert_image_mode(image, self.image_mode) return convert_image_mode(image, self.image_mode)
def load_base64(self, media_type: str, data: str) -> Image.Image: def load_base64(self, media_type: str, data: str) -> Image.Image:
return self.load_bytes(base64.b64decode(data)) return self.load_bytes(pybase64.b64decode(data, validate=True))
def load_file(self, filepath: Path) -> Image.Image: def load_file(self, filepath: Path) -> Image.Image:
image = Image.open(filepath) image = Image.open(filepath)
...@@ -75,7 +75,7 @@ class ImageMediaIO(MediaIO[Image.Image]): ...@@ -75,7 +75,7 @@ class ImageMediaIO(MediaIO[Image.Image]):
image.save(buffer, image_format) image.save(buffer, image_format)
data = buffer.getvalue() data = buffer.getvalue()
return base64.b64encode(data).decode('utf-8') return pybase64.b64encode(data).decode('utf-8')
class ImageEmbeddingMediaIO(MediaIO[torch.Tensor]): class ImageEmbeddingMediaIO(MediaIO[torch.Tensor]):
...@@ -88,10 +88,10 @@ class ImageEmbeddingMediaIO(MediaIO[torch.Tensor]): ...@@ -88,10 +88,10 @@ class ImageEmbeddingMediaIO(MediaIO[torch.Tensor]):
return torch.load(buffer, weights_only=True) return torch.load(buffer, weights_only=True)
def load_base64(self, media_type: str, data: str) -> torch.Tensor: def load_base64(self, media_type: str, data: str) -> torch.Tensor:
return self.load_bytes(base64.b64decode(data)) return self.load_bytes(pybase64.b64decode(data, validate=True))
def load_file(self, filepath: Path) -> torch.Tensor: def load_file(self, filepath: Path) -> torch.Tensor:
return torch.load(filepath, weights_only=True) return torch.load(filepath, weights_only=True)
def encode_base64(self, media: torch.Tensor) -> str: def encode_base64(self, media: torch.Tensor) -> str:
return base64.b64encode(media.numpy()).decode('utf-8') return pybase64.b64encode(media.numpy()).decode('utf-8')
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment