{"record":{"id":"795f16e6bc5ddb94","repo":"sgl-project/sglang","slug":"kimi-expert-pack-index-is-truncated","errorCode":null,"errorMessage":"Kimi expert-pack index is truncated","messagePattern":"Kimi expert-pack index is truncated","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"critical","filePath":"python/sglang/srt/layers/moe/expert_pack.py","lineNumber":817,"sourceCode":"            if len(raw_header) != GGML_PACK_HEADER.size:\n                raise ValueError(\"Kimi expert-pack header is truncated\")\n            index_digest.update(raw_header)\n            magic, version, header_size, index_count, data_start = (\n                GGML_PACK_HEADER.unpack(raw_header)\n            )\n            if (\n                magic != GGML_PACK_MAGIC\n                or version != 1\n                or header_size != GGML_PACK_HEADER.size\n                or index_count != expected_entry_count\n                or data_start != int(pack_manifest[\"data_start\"])\n            ):\n                raise ValueError(\"Kimi expert-pack header does not match its manifest\")\n\n            for index in range(index_count):\n                raw_entry = stream.read(GGML_PACK_ENTRY.size)\n                if len(raw_entry) != GGML_PACK_ENTRY.size:\n                    raise ValueError(\"Kimi expert-pack index is truncated\")\n                index_digest.update(raw_entry)\n                name_raw, expert, reserved, offset, nbytes = GGML_PACK_ENTRY.unpack(\n                    raw_entry\n                )\n                object_index, physical_role_id = divmod(index, len(KIMI_PHYSICAL_ROLES))\n                layer_index, expected_expert = divmod(object_index, expected_experts)\n                layer = active_layers[layer_index]\n                physical_role = KIMI_PHYSICAL_ROLES[physical_role_id]\n                name = _fixed_string(name_raw)\n                match = KIMI_EXPERT_RE.fullmatch(name)\n                if (\n                    match is None\n                    or int(match.group(\"layer\")) != layer\n                    or match.group(\"role\") != physical_role\n                    or expert != expected_expert\n                    or reserved != 0\n                ):\n                    raise ValueError(","sourceCodeStart":799,"sourceCodeEnd":835,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/layers/moe/expert_pack.py#L799-L835","documentation":"While iterating the index entries (index_count of them from the header), a read of GGML_PACK_ENTRY.size bytes came back short — the index region is truncated relative to the declared entry count. The file ends before the full index.","triggerScenarios":"File truncated mid-index (partial download), or header index_count inflated relative to actual entries; also follows from a data_start/size mismatch upstream.","commonSituations":"See trigger scenarios.","solutions":["Re-download/rebuild the pack; verify full file size and SHA-256 against the manifest before loading","If self-produced, re-run packing ensuring all 92 layers x experts x roles entries were written"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"min_size = data_start + index_count * ENTRY_SIZE\nassert pack_path.stat().st_size >= min_size, 'index region truncated'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate total file size covers header + index + payload before loading"],"tags":["kimi","moe","expert-pack","truncated-index"],"backgroundTag":"truncated-file-read","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}