{"record":{"id":"deaf74d6d32867e9","repo":"sgl-project/sglang","slug":"path-must-contain-non-empty-strings","errorCode":null,"errorMessage":"{path} must contain non-empty strings","messagePattern":"(.+?) must contain non-empty strings","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"critical","filePath":"python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/minimax_h3/release_metadata.py","lineNumber":39,"sourceCode":"\n_MINIMAX_H3_QUALITY_WORKLOAD = {\n    \"task\": \"t2va\",\n    \"width\": 1344,\n    \"height\": 768,\n    \"fps\": 24,\n    \"frame_count\": 124,\n    \"num_inference_steps\": 50,\n    \"flow_shift\": 12.0,\n    \"audio_flow_shift\": 3.0,\n}\n\n\ndef _string_list(value: Any, path: str) -> tuple[str, ...]:\n    if not isinstance(value, list) or not value:\n        raise ValueError(f\"{path} must be a non-empty list\")\n    values = tuple(value)\n    if any(not isinstance(item, str) or not item for item in values):\n        raise ValueError(f\"{path} must contain non-empty strings\")\n    if len(set(values)) != len(values):\n        raise ValueError(f\"{path} must not contain duplicates\")\n    return values\n\n\n@dataclass(frozen=True)\nclass MiniMaxH3ReleaseMetadata:\n    schema_version: int\n    partition: str\n    tasks: tuple[str, ...]\n    task_aliases: Mapping[str, str]\n    video_sigma_shift: float\n    audio_sigma_shift: float\n\n    @classmethod\n    def from_model_index(\n        cls, model_index: Mapping[str, Any]\n    ) -> MiniMaxH3ReleaseMetadata:","sourceCodeStart":21,"sourceCodeEnd":57,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/minimax_h3/release_metadata.py#L21-L57","documentation":"_string_list rejects list fields in model_index.json that contain non-string or empty-string entries — every element must be a non-empty string. Typically hit on _minimax_h3.tasks or alias-related lists.","triggerScenarios":"tasks containing values like null, 42, or \"\" in model_index.json during from_model_index/_load_config.","commonSituations":"JSON produced by a script that inserted Python None or ints, or trailing commas/blank entries from hand editing.","solutions":["Inspect every element of the offending list in model_index.json and normalize to non-empty strings","Regenerate the file with the release tooling","Add a JSON-schema check to your packaging CI"],"exampleFix":"// before\n\"tasks\": [\"ref2v\", null, \"\"]\n\n// after\n\"tasks\": [\"ref2v\"]","handlingStrategy":"validation","validationCode":"def all_nonempty_strings(v) -> bool:\n    return isinstance(v, list) and all(isinstance(s, str) and s for s in v)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Generate config JSON programmatically, not by string surgery","Add a CI JSON-schema check for model_index.json"],"tags":["minimax-h3","model-index","config-validation"],"backgroundTag":"config-schema-validation-failed","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}