sgl-project/sglang · error · ValueError

target.duration_seconds is required when multiple audio-bear

Error message

target.duration_seconds is required when multiple audio-bearing references are provided

What it means

When target.duration_seconds is omitted, MiniMax-H3 requires exactly one audio-bearing reference to derive duration from. Multiple audio/video/video_audio conditions make the duration source ambiguous, so validation fails closed and demands an explicit duration.

Source

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

                raise ValueError(
                    f"conditions[{index}]: video references are not supported "
                    f"in v1 for task {profile.task!r} (image/audio only)"
                )
    if normalized_target.get("duration_seconds") is None:
        # Only reachable for duration_from_audio_reference profiles.
        duration_sources = [
            cond
            for cond in normalized_conditions
            if cond["type"] in ("audio", "video", "video_audio")
        ]
        if not duration_sources:
            raise ValueError(
                "target.duration_seconds is required, or exactly one "
                "audio reference to derive duration from (including "
                f"video/video_audio soundtracks; task {profile.task!r})"
            )
        if len(duration_sources) > 1:
            raise ValueError(
                "target.duration_seconds is required when multiple "
                "audio-bearing references are provided"
            )

    canonical: dict[str, Any] = {
        "schema": MINIMAX_H3_REQUEST_SCHEMA,
        "task": task_name,
        "prompt": prompt_text,
        "conditions": normalized_conditions,
        "target": normalized_target,
    }
    normalized_flow_shift = _optional_positive_finite_float(flow_shift, "flow_shift")
    normalized_audio_flow_shift = _optional_positive_finite_float(
        audio_flow_shift, "audio_flow_shift"
    )
    if normalized_flow_shift is not None:
        canonical["flow_shift"] = normalized_flow_shift
    if normalized_audio_flow_shift is not None:

View on GitHub (pinned to 0132848349)

Solutions

  1. Set target.duration_seconds explicitly to disambiguate
  2. Or reduce to exactly one audio-bearing condition

Example fix

// before
{"conditions":[{"type":"audio","uri":"a.wav"},{"type":"audio","uri":"b.wav"}],"target":{}}
// after
{"conditions":[{"type":"audio","uri":"a.wav"},{"type":"audio","uri":"b.wav"}],"target":{"duration_seconds":10}}
Defensive patterns

Strategy: validation

Validate before calling

def duration_ok(target, conditions):
    if target.get("duration_seconds") is not None: return True
    n = sum(c.get("type") in ("audio","video","video_audio") for c in conditions)
    return n == 1

Type guard

null

Try / catch

null

Prevention

When it happens

Trigger: Calling minimax_h3_validate_canonical_request with target.duration_seconds unset and two or more conditions whose type is 'audio', 'video', or 'video_audio'.

Common situations: Supplying a reference video plus a separate audio track; combining two audio references for style prompting without pinning duration.

Related errors


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