sgl-project/sglang · error · TypeError
serialized_named_tensors entries must be base64 strings or b
Error message
serialized_named_tensors entries must be base64 strings or bytes-like payloads, got {type(data).__name__} What it means
Deserialization of serialized_named_tensors requires each entry to be a base64 string or bytes-like payload; anything else (int, None, dict, non-str/bytes object) raises TypeError. The decoder first tries strict pybase64 decode and falls back to raw bytes only for str/bytes-like inputs.
Source
Thrown at python/sglang/srt/utils/common.py:2949
def _looks_like_pickle_payload(data: bytes) -> bool:
return len(data) >= 2 and data[0] == 0x80 and data[1] <= pickle.HIGHEST_PROTOCOL
def normalize_serialized_named_tensor_payload(data: SerializedTensorPayload) -> bytes:
"""Normalize a serialized tensor payload to raw MultiprocessingSerializer bytes."""
if isinstance(data, str):
return pybase64.b64decode(data, validate=True)
if isinstance(data, (bytes, bytearray, memoryview)):
data = bytes(data)
if _looks_like_pickle_payload(data):
return data
try:
return pybase64.b64decode(data, validate=True)
except (binascii.Error, ValueError):
return data
raise TypeError(
"serialized_named_tensors entries must be base64 strings or bytes-like "
f"payloads, got {type(data).__name__}"
)
def normalize_serialized_named_tensor_payloads(
payloads: List[SerializedTensorPayload],
) -> List[bytes]:
return [normalize_serialized_named_tensor_payload(data) for data in payloads]
class SafeUnpickler(pickle.Unpickler):
ALLOWED_MODULE_PREFIXES = {
# --- Python types ---
"builtins.",
"collections.",
"copyreg.",
"functools.",View on GitHub (pinned to 0132848349)
Solutions
- Ensure producer serializes every tensor entry as base64 str or bytes
- Validate/normalize with normalize_serialized_named_tensor_payloads before decoding
- Reject the payload early at the RPC boundary if types are wrong
Example fix
// before tensors = deserialize_named_tensors(raw) # raw has int entries // after raw = normalize_serialized_named_tensor_payloads(raw) tensors = deserialize_named_tensors(raw)
Defensive patterns
Strategy: type-guard
Validate before calling
assert all(isinstance(v, (str, bytes, bytearray, memoryview)) for v in payload.values())
Type guard
def is_valid_payloads(d) -> bool:
return isinstance(d, dict) and all(isinstance(v, (str, bytes, bytearray, memoryview)) for v in d.values()) Prevention
- Normalize with normalize_serialized_named_tensor_payloads before decoding
- Never JSON-round-trip tensor payloads without re-encoding to base64
When it happens
Trigger: Passing a dict of named tensors where values are not str/bytes — e.g. already-decoded objects, numbers, or JSON nulls.
Common situations: Inter-process tensor transfer where one side double-encodes or passes JSON-decoded structures with null values; schema drift between producer and consumer versions.
Related errors
- Expected base64-encoded bytes
- Cannot put argument inside a f-string. This is not compatibl
- No base64 image data found
- No image data in response
- Unsupported dtype: {obj.dtype}
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/1f0e04fb18775d09.
Report an issue: GitHub.