sgl-project/sglang · critical · ValueError
queued MiniMax H3 jobs require pre-queue resolved temporal d
Error message
queued MiniMax H3 jobs require pre-queue resolved temporal dimensions
What it means
Companion invariant to the geometry check: the pre-queue plan for a queued MiniMax H3 job must carry a resolved frame_count. Temporal dimensions (duration, fps, frame count) are resolved before queueing so downstream validation knows exactly how many frames the output must contain; a None frame_count means temporal resolution never happened.
Source
Thrown at python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/minimax_h3/video_adapter.py:289
if not isinstance(canonical, dict) or not all(
key in canonical
for key in ("schema", "task", "prompt", "conditions", "target")
):
return None
from sglang.multimodal_gen.runtime.pipelines_core.stages.model_specific_stages.minimax_h3.resolved_plan import (
minimax_h3_plan_from_batch,
)
plan = minimax_h3_plan_from_batch(batch)
if plan is None:
return None
shape = plan.shape
if str(shape.get("geometry") or "") != "resolved_v2":
raise ValueError(
"queued MiniMax H3 jobs require pre-queue resolved_v2 geometry"
)
if shape.get("frame_count") is None:
raise ValueError(
"queued MiniMax H3 jobs require pre-queue resolved temporal dimensions"
)
return shape
def project_queued_job_fields(self, batch: Req) -> dict[str, str]:
shape = self._resolved_shape(batch)
if shape is None:
return {}
fields: dict[str, str] = {}
if shape.get("width") is not None and shape.get("height") is not None:
fields["size"] = f"{int(shape['width'])}x{int(shape['height'])}"
queued_frame_count = shape.get("frame_count")
if queued_frame_count is not None:
fields["seconds"] = _format_video_seconds(
int(queued_frame_count) / float(shape["fps"])
)
quality = getattr(batch.sampling_params, "quality", None)
explicit_fields = getattr(batch.sampling_params, "_explicit_fields", ())View on GitHub (pinned to 0132848349)
Solutions
- Run the request through the MiniMax H3 prequeue stage that resolves duration/frame_count
- Specify explicit duration/fps in the request so temporal resolution succeeds
- Log the full plan.shape to identify which temporal keys are missing
Defensive patterns
Strategy: try-catch
Validate before calling
shape = plan.shape
assert shape.get("geometry") == "resolved_v2" and shape.get("frame_count") is not None Try / catch
try:
adapter.project_queued_job_fields(batch)
except ValueError as e:
if "temporal dimensions" in str(e):
batch = rerun_temporal_resolution(batch)
else:
raise Prevention
- Give explicit duration/fps in requests so temporal resolution never fails
- Validate plan.shape keys in unit tests for the prequeue stage
When it happens
Trigger: project_queued_job_fields or validate_final_outputs_sync reads a plan where shape['frame_count'] is None (resolution fields present but temporal fields unresolved).
Common situations: Requests that skip the prequeue temporal resolution stage (e.g. image-only or malformed video specs); partial plan objects built by older code or 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
- queued MiniMax H3 jobs require pre-queue resolved_v2 geometr
- keyframe payload requires an integer frame_count
- keyframe payload frame_count must be greater than one
- fl2va requires first_frame, last_frame, or both
- ref2va requires at least one of reference_image, reference_v
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/4696008254473722.
Report an issue: GitHub.