huggingface/transformers · error · ValueError

Invalid kernel repo string {repo_str!r} for layer {layer_nam

Error message

Invalid kernel repo string {repo_str!r} for layer {layer_name!r}

What it means

After normalizing a kernel_mapping entry, transformers splits the repo string on the first ':' expecting 'repo_id:layer_name_in_repo' (e.g. 'kernels-community/llama-attention:llama_attention'). If either side is empty — missing colon, leading colon, or trailing colon — this ValueError is raised before constructing LayerRepository/LocalLayerRepository.

Source

Thrown at src/transformers/integrations/hub_kernels.py:899

        # Infer metadata (revision/version/trust_remote_code)
        if isinstance(hub_repo, tuple):
            repo_str, metadata = hub_repo

            revision = metadata.get("revision", None)
            version = metadata.get("version", None)
            trust_remote_code = metadata.get("trust_remote_code", False) or ALLOW_ALL_KERNELS
            metadata = {"version": version} if version is not None else {"revision": revision}
            metadata |= {"trust_remote_code": trust_remote_code}

            final_repo = (repo_str, metadata)
        else:
            repo_str = hub_repo
            metadata = {"version": 1, "trust_remote_code": ALLOW_ALL_KERNELS}
            final_repo = (repo_str, metadata)

        repo_id, _, layer_name_in_repo = repo_str.partition(":")
        if not repo_id or not layer_name_in_repo:
            raise ValueError(f"Invalid kernel repo string {repo_str!r} for layer {layer_name!r}")

        if kernel_config.use_local_kernel:
            repo = LocalLayerRepository(
                repo_path=Path(repo_id),
                layer_name=layer_name_in_repo,
            )
        else:
            repo = LayerRepository(
                repo_id=repo_id,
                layer_name=layer_name_in_repo,
                **metadata,
            )

        kernel_cls = repo.load()

        if kernel_cls is None:
            raise ValueError(f"Could not load kernel class from hub_repo={hub_repo!r}")

View on GitHub (pinned to a597f97485)

Solutions

  1. Rewrite the repo string as '<repo_id>:<layer_name>', e.g. 'kernels-community/llama-blk:llama_blk'.
  2. For local kernels, use '<local_path>:<layer_name_in_repo>' (path, colon, exported layer name).
  3. Confirm the layer name segment matches the name exported by the kernel repo.

Example fix

// before
"kernels-community/foo"

// after
"kernels-community/foo:foo_layer"
Defensive patterns

Strategy: validation

Validate before calling

def validate_repo_string(repo_str: str) -> bool:
    repo_id, _, layer = repo_str.partition(":")
    return bool(repo_id) and bool(layer)

Try / catch

try:
    model = AutoModel.from_pretrained(name, kernels=kernel_config)
except ValueError as e:
    if "Invalid kernel repo string" in str(e):
        log_config_error_and_abort(kernel_config)
    else:
        raise

Prevention

When it happens

Trigger: A kernel_mapping value like 'kernels-community/foo' (no ':layer'), ':layer' (empty repo id), or 'kernels-community/foo:' (empty layer name); when use_local_kernel is true, a local path lacking the ':layer_name' suffix also triggers it.

Common situations: Authoring a custom kernel repo string and forgetting the layer name segment; copying a hub repo id alone into the mapping; typos when editing local-kernel paths in the config.

Related errors


AI-assisted analysis of huggingface/transformers@a597f97485 (2026-08-14). Data as JSON: /api/errors/2f9f2b73cf22df79. Report an issue: GitHub.