sgl-project/sglang · error · ValueError
tar material header requires integer offset_data and size
Error message
tar material header requires integer offset_data and size
What it means
The tar header's offset_data and size fields must be present and convertible to int. Missing keys (KeyError), null/wrong types (TypeError), or non-numeric strings (ValueError) are all re-raised as this single message, since without valid integers the tar member byte range cannot be located.
Source
Thrown at python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/minimax_h3/material_io.py:183
try:
header = json.loads(
base64.b64decode(
padded.encode("ascii"), altchars=b"-_", validate=True
).decode("utf-8")
)
except Exception as exc:
raise ValueError("tar material URI has an invalid encoded header") from exc
if not isinstance(header, dict):
raise ValueError("tar material URI header must be a JSON object")
if header.get("schema") != "sglang.tar_member_ref/v1":
raise ValueError(
f"unsupported tar material header schema: {header.get('schema')!r}"
)
try:
offset = int(header["offset_data"])
size = int(header["size"])
except (KeyError, TypeError, ValueError) as exc:
raise ValueError(
"tar material header requires integer offset_data and size"
) from exc
if offset < 0 or size < 0:
raise ValueError("tar material offset_data and size must be non-negative")
return (
Path(tar_path).expanduser(),
offset,
size,
str(header.get("member") or "") or None,
)
def _safe_suffix(value: str | None) -> str | None:
if not value:
return None
suffix = Path(urllib.parse.urlsplit(value).path).suffix.lower()
if suffix and len(suffix) <= 10 and suffix[1:].isalnum():
return suffixView on GitHub (pinned to 0132848349)
Solutions
- Use integer fields named exactly offset_data and size
- Coerce on the producer side: int(member.offset_data), int(member.size) before serializing
- Add a producer-side schema check (pydantic/jsonschema) matching the expected keys
Example fix
// before
header = {"schema": "sglang.tar_member_ref/v1", "offset": off, "length": sz}
// after
header = {"schema": "sglang.tar_member_ref/v1", "offset_data": int(off), "size": int(sz)} Defensive patterns
Strategy: try-catch
Validate before calling
try:
int(header['offset_data']); int(header['size'])
except (KeyError, TypeError, ValueError):
raise ValueError('tar header lacks integer offset_data/size') Type guard
def header_offsets_valid(header) -> bool:
try:
return int(header['offset_data']) >= 0 and int(header['size']) >= 0
except (KeyError, TypeError, ValueError):
return False Try / catch
try:
stream = _stream_tar_member_material(uri)
except ValueError as e:
if 'offset_data and size' in str(e):
uri = rebuild_tar_uri(source_tar, member) # re-emit with correct integer fields
stream = _stream_tar_member_material(uri)
else:
raise Prevention
- Coerce to int on the producer side
- Use exact field names offset_data and size
When it happens
Trigger: A header JSON like {"schema": "...", "offset": 100} (wrong key name), {"offset_data": "abc", ...}, or {"offset_data": null, ...}.
Common situations: Field renaming between versions (offset vs offset_data), headers written by external tooling with string numerics, or hand-authored headers in tests.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- unsupported tar material URI
- tar material URI must contain '<tar_path>:<encoded_header>'
- tar material URI encoded header is too large
- tar material URI has an invalid encoded header
- tar material URI header must be a JSON object
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/7050414d1bdd81f7.
Report an issue: GitHub.