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
- Rewrite the repo string as '<repo_id>:<layer_name>', e.g. 'kernels-community/llama-blk:llama_blk'.
- For local kernels, use '<local_path>:<layer_name_in_repo>' (path, colon, exported layer name).
- 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
- Always author repo strings as 'repo_id:layer_name' with exactly one colon separating two non-empty parts.
- Add a lint check in CI for kernel config files validating the colon format.
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
- Invalid hub repo {hub_repo!r} for layer {layer_name!r}
- All patterns for a fused kernel must share the same parent m
- PUSH_TO_HUB_TOKEN is not set, cannot push results to the Hub
- reference must be greater than zero
- min_value must be greater than zero
AI-assisted analysis of huggingface/transformers@a597f97485 (2026-08-14).
Data as JSON: /api/errors/2f9f2b73cf22df79.
Report an issue: GitHub.