sgl-project/sglang · error · FileNotFoundError

Could not resolve a transformer directory from: {path}

Error message

Could not resolve a transformer directory from: {path}

What it means

_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.

Source

Thrown at python/sglang/multimodal_gen/tools/build_modelopt_fp8_transformer.py:219

DEFAULT_QWEN_IMAGE_KEEP_BF16_PATTERNS = [
    r"^img_in$",
    r"^txt_in$",
    r"^time_text_embed\.timestep_embedder\.linear_[12]$",
    r"^norm_out\.linear$",
    r"^proj_out$",
    r"^transformer_blocks\.\d+\.img_mlp\.net\.2$",
    r"^transformer_blocks\.\d+\.(img_mod|txt_mod)$",
]


def _resolve_transformer_dir(path: str) -> str:
    candidate = Path(path).expanduser().resolve()
    if (candidate / "config.json").is_file():
        return str(candidate)
    transformer_dir = candidate / "transformer"
    if (transformer_dir / "config.json").is_file():
        return str(transformer_dir)
    raise FileNotFoundError(f"Could not resolve a transformer directory from: {path}")


def _resolve_backbone_ckpt(path: str) -> str:
    candidate = Path(path).expanduser().resolve()
    if candidate.is_file():
        return str(candidate)
    backbone_path = candidate / "backbone.pt"
    if backbone_path.is_file():
        return str(backbone_path)
    raise FileNotFoundError(f"Could not resolve backbone.pt from: {path}")


def _find_index_file(model_dir: str) -> str | None:
    for filename in INDEX_FILENAMES:
        candidate = os.path.join(model_dir, filename)
        if os.path.isfile(candidate):
            return filename

View on GitHub (pinned to 0132848349)

Solutions

  1. Verify config.json location in your export and pass that exact directory
  2. If the export nests it, pass the parent so <parent>/transformer/config.json resolves
  3. Rename/restructure the directory so config.json sits at the expected spot

Example fix

# before
--source-dir /data/export   # no config.json
# after
--source-dir /data/export/transformer
Defensive patterns

Strategy: validation

Validate before calling

from pathlib import Path

def resolves(p: str) -> bool:
    c = Path(p).expanduser().resolve()
    return (c / "config.json").is_file() or (c / "transformer" / "config.json").is_file()

Try / catch

try:
    d = _resolve_transformer_dir(path)
except FileNotFoundError as e:
    logger.error("bad source dir: %s", e)
    raise

Prevention

When it happens

Trigger: Passing --source-dir that is a raw checkpoint folder without config.json and without a transformer/ child; pointing at a file or nonexistent path.

Common situations: Export layouts that nest the transformer elsewhere (e.g. 'transformer_blocks/' or locale-specific names); passing the diffusers root instead of the transformer folder.

Related errors


AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28). Data as JSON: /api/errors/04ab244935bc0422. Report an issue: GitHub.