main
py 27 lines 1015 Bytes
Raw
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3 """Encode/decode utilities for multimodal tensors and field metadata
4 over JSON/HTTP, used by the disaggregated generate endpoint."""
5
6 from __future__ import annotations
7
8 import pybase64
9
10 from vllm.multimodal.inputs import MultiModalKwargsItem
11 from vllm.v1.serial_utils import MsgpackDecoder, MsgpackEncoder
12
13 _encoder = MsgpackEncoder(size_threshold=2**62) # force all tensors inline
14 _decoder = MsgpackDecoder(t=MultiModalKwargsItem)
15
16
17 def encode_mm_kwargs_item(item: MultiModalKwargsItem) -> str:
18 """Serialize a MultiModalKwargsItem to a base64 string."""
19 bufs = _encoder.encode(item)
20 assert len(bufs) == 1, "All tensors should be inline"
21 return pybase64.b64encode(bufs[0]).decode("ascii")
22
23
24 def decode_mm_kwargs_item(data: str) -> MultiModalKwargsItem:
25 """Deserialize a base64 string back to a MultiModalKwargsItem."""
26 raw = pybase64.b64decode(data)
27 return _decoder.decode(raw)