{"record":{"id":"25c24f16b9f1a583","repo":"sgl-project/sglang","slug":"target-duration-seconds-is-required-or-exactly-on","errorCode":null,"errorMessage":"target.duration_seconds is required, or exactly one audio reference to derive duration from (including video/video_audio soundtracks; task {profile.task!r})","messagePattern":"target\\.duration_seconds is required, or exactly one audio reference to derive duration from \\(including video/video_audio soundtracks; task (.+?)\\)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/minimax_h3/request_validation.py","lineNumber":343,"sourceCode":"    # one first/last keyframe signature. Type admission is handled by the task\n    # profile; temporal ambiguity is validated later when target duration is\n    # omitted.\n    if not profile.video_reference_supported:\n        for index, cond in enumerate(normalized_conditions):\n            if cond[\"type\"] in (\"video\", \"video_audio\"):\n                raise ValueError(\n                    f\"conditions[{index}]: video references are not supported \"\n                    f\"in v1 for task {profile.task!r} (image/audio only)\"\n                )\n    if normalized_target.get(\"duration_seconds\") is None:\n        # Only reachable for duration_from_audio_reference profiles.\n        duration_sources = [\n            cond\n            for cond in normalized_conditions\n            if cond[\"type\"] in (\"audio\", \"video\", \"video_audio\")\n        ]\n        if not duration_sources:\n            raise ValueError(\n                \"target.duration_seconds is required, or exactly one \"\n                \"audio reference to derive duration from (including \"\n                f\"video/video_audio soundtracks; task {profile.task!r})\"\n            )\n        if len(duration_sources) > 1:\n            raise ValueError(\n                \"target.duration_seconds is required when multiple \"\n                \"audio-bearing references are provided\"\n            )\n\n    canonical: dict[str, Any] = {\n        \"schema\": MINIMAX_H3_REQUEST_SCHEMA,\n        \"task\": task_name,\n        \"prompt\": prompt_text,\n        \"conditions\": normalized_conditions,\n        \"target\": normalized_target,\n    }\n    normalized_flow_shift = _optional_positive_finite_float(flow_shift, \"flow_shift\")","sourceCodeStart":325,"sourceCodeEnd":361,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/minimax_h3/request_validation.py#L325-L361","documentation":"For duration-from-audio-reference task profiles, when target.duration_seconds is omitted the request must contain exactly one audio-bearing condition (type audio, video, or video_audio) to derive the output duration from. This error fires when there are zero such sources.","triggerScenarios":"Calling minimax_h3_validate_canonical_request with target.duration_seconds unset and all conditions of type 'image' (no audio/video/video_audio entry).","commonSituations":"Building an image-only fl2va request and forgetting duration; assuming the model infers duration from keyframes alone.","solutions":["Set an explicit target.duration_seconds (within the released 4–15s range)","Or include exactly one audio-bearing reference (type 'audio', 'video', or 'video_audio') to derive duration from"],"exampleFix":"// before\n{\"target\":{}}\n// after\n{\"target\":{\"duration_seconds\":8}}","handlingStrategy":"validation","validationCode":"def duration_ok(target, conditions):\n    if target.get(\"duration_seconds\") is not None: return True\n    n = sum(c.get(\"type\") in (\"audio\",\"video\",\"video_audio\") for c in conditions)\n    return n == 1","typeGuard":"null","tryCatchPattern":"null","preventionTips":["Always set target.duration_seconds for image-only requests"],"tags":["minimax-h3","duration","target","request-validation"],"backgroundTag":"missing-required-field","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}