{"record":{"id":"e93f379ccd03ca40","repo":"sgl-project/sglang","slug":"flattened-bucket-flattened-tensor-must-be-a-torc","errorCode":null,"errorMessage":"flattened_bucket 'flattened_tensor' must be a torch.Tensor.","messagePattern":"flattened_bucket 'flattened_tensor' must be a torch\\.Tensor\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/post_training/weights_updater.py","lineNumber":790,"sourceCode":"            flattened_tensor = module_payload.get(\"flattened_tensor\")\n            metadata = module_payload.get(\"metadata\")\n            if flattened_tensor is None or metadata is None:\n                raise ValueError(\n                    \"flattened_bucket payload missing 'flattened_tensor' or 'metadata'.\"\n                )\n            return self._reconstruct_from_flattened_bucket(flattened_tensor, metadata)\n\n        if isinstance(module_payload, (list, tuple)):\n            return iter(module_payload)\n\n        raise ValueError(\n            f\"Unsupported module payload type for load_format={load_format}: \"\n            f\"{type(module_payload).__name__}\"\n        )\n\n    def _reconstruct_from_flattened_bucket(self, flattened_tensor: Any, metadata: Any):\n        if not isinstance(flattened_tensor, torch.Tensor):\n            raise ValueError(\n                \"flattened_bucket 'flattened_tensor' must be a torch.Tensor.\"\n            )\n        if not isinstance(metadata, list):\n            raise ValueError(\"flattened_bucket 'metadata' must be a list.\")\n\n        converted_metadata: list[FlattenedTensorMetadata] = []\n        for meta in metadata:\n            converted_metadata.append(\n                FlattenedTensorMetadata(\n                    name=meta.name,\n                    shape=torch.Size(meta.shape),\n                    dtype=self._normalize_torch_dtype(meta.dtype),\n                    start_idx=int(meta.start_idx),\n                    end_idx=int(meta.end_idx),\n                    numel=int(meta.numel),\n                )\n            )\n","sourceCodeStart":772,"sourceCodeEnd":808,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/post_training/weights_updater.py#L772-L808","documentation":"Raised by WeightsUpdater._reconstruct_from_flattened_bucket when the 'flattened_tensor' field of a flattened_bucket payload is not a torch.Tensor. The reconstruction logic slices this tensor using metadata offsets, so it must be a real tensor.","triggerScenarios":"load_format='flattened_bucket' with 'flattened_tensor' holding a numpy array, a list of floats, or a string (e.g. after JSON serialization of the bucket).","commonSituations":"Sending the bucket over a wire protocol (ZMQ/HTTP/JSON) that serializes tensors to lists/bytes without deserializing them back.","solutions":["Convert before sending: torch.tensor(payload['flattened_tensor']) or keep the tensor via a binary-safe channel","On the receiver, wrap deserialized arrays back into torch.Tensor before calling the updater"],"exampleFix":"// before\nbucket[\"flattened_tensor\"] = arr.numpy()  # or list\n// after\nbucket[\"flattened_tensor\"] = torch.from_numpy(arr)","handlingStrategy":"validation","validationCode":"import torch\nif not isinstance(bucket[\"flattened_tensor\"], torch.Tensor):\n    bucket[\"flattened_tensor\"] = torch.as_tensor(bucket[\"flattened_tensor\"])","typeGuard":"def tensor_is_ok(t: Any) -> bool:\n    import torch; return isinstance(t, torch.Tensor)","tryCatchPattern":null,"preventionTips":["Use binary-safe serialization (torch.save / msgpack with tensors) rather than JSON for tensors","Convert on the receiving end before calling the updater"],"tags":["weights-update","flattened-bucket","dtype","multimodal"],"backgroundTag":"invalid-payload-format","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}