{"record":{"id":"04ab244935bc0422","repo":"sgl-project/sglang","slug":"could-not-resolve-a-transformer-directory-from-p","errorCode":null,"errorMessage":"Could not resolve a transformer directory from: {path}","messagePattern":"Could not resolve a transformer directory from: (.+?)","errorType":"exception","errorClass":"FileNotFoundError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/tools/build_modelopt_fp8_transformer.py","lineNumber":219,"sourceCode":"DEFAULT_QWEN_IMAGE_KEEP_BF16_PATTERNS = [\n    r\"^img_in$\",\n    r\"^txt_in$\",\n    r\"^time_text_embed\\.timestep_embedder\\.linear_[12]$\",\n    r\"^norm_out\\.linear$\",\n    r\"^proj_out$\",\n    r\"^transformer_blocks\\.\\d+\\.img_mlp\\.net\\.2$\",\n    r\"^transformer_blocks\\.\\d+\\.(img_mod|txt_mod)$\",\n]\n\n\ndef _resolve_transformer_dir(path: str) -> str:\n    candidate = Path(path).expanduser().resolve()\n    if (candidate / \"config.json\").is_file():\n        return str(candidate)\n    transformer_dir = candidate / \"transformer\"\n    if (transformer_dir / \"config.json\").is_file():\n        return str(transformer_dir)\n    raise FileNotFoundError(f\"Could not resolve a transformer directory from: {path}\")\n\n\ndef _resolve_backbone_ckpt(path: str) -> str:\n    candidate = Path(path).expanduser().resolve()\n    if candidate.is_file():\n        return str(candidate)\n    backbone_path = candidate / \"backbone.pt\"\n    if backbone_path.is_file():\n        return str(backbone_path)\n    raise FileNotFoundError(f\"Could not resolve backbone.pt from: {path}\")\n\n\ndef _find_index_file(model_dir: str) -> str | None:\n    for filename in INDEX_FILENAMES:\n        candidate = os.path.join(model_dir, filename)\n        if os.path.isfile(candidate):\n            return filename\n","sourceCodeStart":201,"sourceCodeEnd":237,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/tools/build_modelopt_fp8_transformer.py#L201-L237","documentation":"_resolve_transformer_dir accepts either a directory that directly contains config.json or one containing a transformer/ subdirectory with config.json; when neither matches it gives up with this FileNotFoundError.","triggerScenarios":"Passing --source-dir that is a raw checkpoint folder without config.json and without a transformer/ child; pointing at a file or nonexistent path.","commonSituations":"Export layouts that nest the transformer elsewhere (e.g. 'transformer_blocks/' or locale-specific names); passing the diffusers root instead of the transformer folder.","solutions":["Verify config.json location in your export and pass that exact directory","If the export nests it, pass the parent so <parent>/transformer/config.json resolves","Rename/restructure the directory so config.json sits at the expected spot"],"exampleFix":"# before\n--source-dir /data/export   # no config.json\n# after\n--source-dir /data/export/transformer","handlingStrategy":"validation","validationCode":"from pathlib import Path\n\ndef resolves(p: str) -> bool:\n    c = Path(p).expanduser().resolve()\n    return (c / \"config.json\").is_file() or (c / \"transformer\" / \"config.json\").is_file()","typeGuard":null,"tryCatchPattern":"try:\n    d = _resolve_transformer_dir(path)\nexcept FileNotFoundError as e:\n    logger.error(\"bad source dir: %s\", e)\n    raise","preventionTips":["Standardize export layout to include transformer/config.json","Assert layout in download/prep scripts"],"tags":["modelopt","fp8","path-resolution"],"backgroundTag":"path-not-found","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}