{"record":{"id":"1f0e04fb18775d09","repo":"sgl-project/sglang","slug":"serialized-named-tensors-entries-must-be-base64-st","errorCode":null,"errorMessage":"serialized_named_tensors entries must be base64 strings or bytes-like payloads, got {type(data).__name__}","messagePattern":"serialized_named_tensors entries must be base64 strings or bytes-like payloads, got (.+?)","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/utils/common.py","lineNumber":2949,"sourceCode":"def _looks_like_pickle_payload(data: bytes) -> bool:\n    return len(data) >= 2 and data[0] == 0x80 and data[1] <= pickle.HIGHEST_PROTOCOL\n\n\ndef normalize_serialized_named_tensor_payload(data: SerializedTensorPayload) -> bytes:\n    \"\"\"Normalize a serialized tensor payload to raw MultiprocessingSerializer bytes.\"\"\"\n    if isinstance(data, str):\n        return pybase64.b64decode(data, validate=True)\n\n    if isinstance(data, (bytes, bytearray, memoryview)):\n        data = bytes(data)\n        if _looks_like_pickle_payload(data):\n            return data\n        try:\n            return pybase64.b64decode(data, validate=True)\n        except (binascii.Error, ValueError):\n            return data\n\n    raise TypeError(\n        \"serialized_named_tensors entries must be base64 strings or bytes-like \"\n        f\"payloads, got {type(data).__name__}\"\n    )\n\n\ndef normalize_serialized_named_tensor_payloads(\n    payloads: List[SerializedTensorPayload],\n) -> List[bytes]:\n    return [normalize_serialized_named_tensor_payload(data) for data in payloads]\n\n\nclass SafeUnpickler(pickle.Unpickler):\n    ALLOWED_MODULE_PREFIXES = {\n        # --- Python types ---\n        \"builtins.\",\n        \"collections.\",\n        \"copyreg.\",\n        \"functools.\",","sourceCodeStart":2931,"sourceCodeEnd":2967,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/utils/common.py#L2931-L2967","documentation":"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.","triggerScenarios":"Passing a dict of named tensors where values are not str/bytes — e.g. already-decoded objects, numbers, or JSON nulls.","commonSituations":"Inter-process tensor transfer where one side double-encodes or passes JSON-decoded structures with null values; schema drift between producer and consumer versions.","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"],"exampleFix":"// before\ntensors = deserialize_named_tensors(raw)  # raw has int entries\n// after\nraw = normalize_serialized_named_tensor_payloads(raw)\ntensors = deserialize_named_tensors(raw)","handlingStrategy":"type-guard","validationCode":"assert all(isinstance(v, (str, bytes, bytearray, memoryview)) for v in payload.values())","typeGuard":"def is_valid_payloads(d) -> bool:\n    return isinstance(d, dict) and all(isinstance(v, (str, bytes, bytearray, memoryview)) for v in d.values())","tryCatchPattern":null,"preventionTips":["Normalize with normalize_serialized_named_tensor_payloads before decoding","Never JSON-round-trip tensor payloads without re-encoding to base64"],"tags":["serialization","tensors","base64","typeerror"],"backgroundTag":"payload-schema-validation-failed","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}