{"record":{"id":"a41ca2aeae765780","repo":"sgl-project/sglang","slug":"target-duration-seconds-is-required-when-multiple","errorCode":null,"errorMessage":"target.duration_seconds is required when multiple audio-bearing references are provided","messagePattern":"target\\.duration_seconds is required when multiple audio-bearing references are provided","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":349,"sourceCode":"                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\")\n    normalized_audio_flow_shift = _optional_positive_finite_float(\n        audio_flow_shift, \"audio_flow_shift\"\n    )\n    if normalized_flow_shift is not None:\n        canonical[\"flow_shift\"] = normalized_flow_shift\n    if normalized_audio_flow_shift is not None:","sourceCodeStart":331,"sourceCodeEnd":367,"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#L331-L367","documentation":"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.","triggerScenarios":"Calling minimax_h3_validate_canonical_request with target.duration_seconds unset and two or more conditions whose type is 'audio', 'video', or 'video_audio'.","commonSituations":"Supplying a reference video plus a separate audio track; combining two audio references for style prompting without pinning duration.","solutions":["Set target.duration_seconds explicitly to disambiguate","Or reduce to exactly one audio-bearing condition"],"exampleFix":"// before\n{\"conditions\":[{\"type\":\"audio\",\"uri\":\"a.wav\"},{\"type\":\"audio\",\"uri\":\"b.wav\"}],\"target\":{}}\n// after\n{\"conditions\":[{\"type\":\"audio\",\"uri\":\"a.wav\"},{\"type\":\"audio\",\"uri\":\"b.wav\"}],\"target\":{\"duration_seconds\":10}}","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":["Pin duration_seconds whenever supplying multiple audio-bearing references"],"tags":["minimax-h3","duration","ambiguous-source","request-validation"],"backgroundTag":"ambiguous-request-field","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}