sgl-project/sglang · error · ValueError

{cpath}.start_time_seconds is only allowed for video or vide

Error message

{cpath}.start_time_seconds is only allowed for video or video_audio references

What it means

Raised by MiniMax-H3 request validation when a condition supplies `start_time_seconds` but its `type` is not 'video' or 'video_audio'. The field denotes a temporal offset into a video reference, so it is meaningless for image/audio-only conditions and the normalizer rejects it to keep the canonical request unambiguous.

Source

Thrown at python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/minimax_h3/request_validation.py:242

                )
            if resolved in seen_frame_indices:
                raise ValueError(
                    f"{cpath}.frame_index resolves to {resolved}, already "
                    f"bound by conditions[{seen_frame_indices[resolved]}]"
                )
            seen_frame_indices[resolved] = index
            # Preserve the request-level semantic index.  In particular, -1 is
            # the canonical last-frame sentinel; the resolved pixel frame is
            # carried separately by MiniMaxH3ResolvedPlan.
            entry["frame_index"] = frame_index
        elif cond.get("frame_index") is not None:
            raise ValueError(f"{cpath}.frame_index is not allowed for role={role!r}")
        start_time_seconds = _optional_nonnegative_finite_float(
            cond.get("start_time_seconds"), f"{cpath}.start_time_seconds"
        )
        if start_time_seconds is not None:
            if cond_type not in {"video", "video_audio"}:
                raise ValueError(
                    f"{cpath}.start_time_seconds is only allowed for video "
                    "or video_audio references"
                )
            entry["start_time_seconds"] = start_time_seconds
        normalized.append(entry)
    return normalized


def _validate_keyframe_conditions(
    conditions: Sequence[Mapping[str, Any]], *, task: str
) -> None:
    """Enforce the shared first/last-frame contract after schema validation."""

    keyframes = [
        condition
        for condition in conditions
        if condition["role"] == MINIMAX_H3_CONDITION_ROLE_KEYFRAME
    ]

View on GitHub (pinned to 0132848349)

Solutions

  1. Remove start_time_seconds from image/audio conditions; it only applies to video/video_audio references
  2. If you meant to seek into a video, set the condition type to 'video' or 'video_audio'
  3. Re-run validation to confirm the canonical request builds

Example fix

// before
{"role":"reference","type":"image","uri":"...","start_time_seconds":2.0}
// after
{"role":"reference","type":"image","uri":"..."}
Defensive patterns

Strategy: validation

Validate before calling

def ok(c):
    if c.get("start_time_seconds") is not None and c.get("type") not in {"video","video_audio"}:
        return False
    return True

Type guard

null

Try / catch

null

Prevention

When it happens

Trigger: Calling minimax_h3_validate_canonical_request (directly or via build_request_extra) with a conditions[] entry that has start_time_seconds set while cond_type is 'image', 'audio', or any non-video type.

Common situations: Copy-pasting a video condition template and changing type to 'image' without removing start_time_seconds; or treating start_time_seconds as a generic scheduling timestamp for audio conditions.

Related errors


AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28). Data as JSON: /api/errors/61436fb549bb944f. Report an issue: GitHub.