unslothai/unsloth · error · ValueError
Family '{fam.name}' has no native sd.cpp asset mapping.
Error message
Family '{fam.name}' has no native sd.cpp asset mapping. What it means
ValueError raised when the family was detected but that family has no native sd.cpp asset mapping — the engine knows the family yet has no GGUF/text-encoder/VAE asset spec for it, so a native load is impossible.
Source
Thrown at studio/backend/core/inference/sd_cpp_backend.py:1201
gpu_ordinal = (
resolve_selected_cuda_ordinal(gpu_ids)
if gpu_ids and resolve_diffusion_device_target().device == "cuda"
else None
)
if not gguf_filename:
raise ValueError(
"gguf_filename is required: the native engine loads single-file GGUF checkpoints only."
)
# Filename-fallback detector (as the route validated) so a local .gguf whose family keyword lives only in the basename still loads.
fam = detect_family_for_pick(repo_id, gguf_filename, family_override)
if fam is None:
raise ValueError(
f"'{repo_id}' is not a supported diffusion image model. Supported families: "
f"{', '.join(supported_family_names())}. If this is a variant of one of them, "
f"pass family_override with that family name."
)
if not family_sd_cpp_supported(fam):
raise ValueError(f"Family '{fam.name}' has no native sd.cpp asset mapping.")
base = resolve_base_repo(fam, base_repo)
# Offline-only here, and deliberately so. begin_load returns at once by contract -- the
# route thread answers the UI with a status and the pull happens on the worker -- so it
# cannot afford the range request's bound, let alone hold _lock across it and stall
# status()/unload() for the same span. Memo or on-disk header or nothing. This value only
# seeds the delete-cached guard's repo list below; the worker re-asks WITH the network and
# refreshes that list, so the guard converges within one round trip of the load starting.
inner_dim = self._flux2_inner_dim(
repo_id, gguf_filename, fam, hf_token, allow_network = False
)
# Same link the diffusers resolver records, so the delete guard protects a native pick's
# companions too -- and here that means the repos _asset_specs actually FETCHES. The
# native engine does not read the diffusers base: FLUX.2 takes its VAE from
# unsloth/FLUX.2-VAE and its encoders from another repo again, so recording only the base
# left every repo the pick really depends on outside the guard, and an unloaded model's
# encoder could be deleted while its GGUF stayed installed. Best-effort bookkeeping;
# never fails a load.View on GitHub (pinned to 203007d190)
Solutions
- Run the load on the diffusers (GPU) engine for that family instead.
- Pick a different GGUF checkpoint from a family that does have a native mapping (see the supported native families).
- If you expected native support, check the backend version — the mapping may have been added later.
Defensive patterns
Strategy: fallback
Validate before calling
from core.inference.diffusion_families import detect_family_for_pick
fam = detect_family_for_pick(repo_id, gguf_filename, family_override)
if fam is None or not family_sd_cpp_supported(fam):
route_to_diffusers_engine(repo_id) # no native mapping for this family Try / catch
try:
backend.begin_load(repo_id=r, gguf_filename=f)
except ValueError as e:
if 'no native sd.cpp asset mapping' in str(e):
return diffusers_backend.load(r)
raise Prevention
- Check family_sd_cpp_supported(fam) before choosing the native engine.
- Maintain an engine-selection matrix: family x engine, so unsupported native picks never reach begin_load.
When it happens
Trigger: begin_load selecting a family that is supported on diffusers but has no sd.cpp mapping (family_sd_cpp_supported(fam) is False).
Common situations: Switching a working diffusers model to the native engine because a CPU/low-VRAM host was chosen; family_override forcing a family whose native mapping does not exist.
Related errors
- '{'repo_id'}' has no native sd.cpp asset mapping.
- gguf_filename is required: the native engine loads single-fi
- '{'repo_id'}' is not a supported diffusion image model. Supp
- img2img / inpaint / reference / upscale are not yet supporte
- Batched prompt/seed lists are not supported on the native sd
AI-assisted analysis of unslothai/unsloth@203007d190 (2026-08-15).
Data as JSON: /api/errors/aa3ee83e12912746.
Report an issue: GitHub.