{"record":{"id":"aa3ee83e12912746","repo":"unslothai/unsloth","slug":"family-fam-name-has-no-native-sd-cpp-asset-map","errorCode":null,"errorMessage":"Family '{fam.name}' has no native sd.cpp asset mapping.","messagePattern":"Family '(.+?)' has no native sd\\.cpp asset mapping\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"studio/backend/core/inference/sd_cpp_backend.py","lineNumber":1201,"sourceCode":"            gpu_ordinal = (\n                resolve_selected_cuda_ordinal(gpu_ids)\n                if gpu_ids and resolve_diffusion_device_target().device == \"cuda\"\n                else None\n            )\n        if not gguf_filename:\n            raise ValueError(\n                \"gguf_filename is required: the native engine loads single-file GGUF checkpoints only.\"\n            )\n        # Filename-fallback detector (as the route validated) so a local .gguf whose family keyword lives only in the basename still loads.\n        fam = detect_family_for_pick(repo_id, gguf_filename, family_override)\n        if fam is None:\n            raise ValueError(\n                f\"'{repo_id}' is not a supported diffusion image model. Supported families: \"\n                f\"{', '.join(supported_family_names())}. If this is a variant of one of them, \"\n                f\"pass family_override with that family name.\"\n            )\n        if not family_sd_cpp_supported(fam):\n            raise ValueError(f\"Family '{fam.name}' has no native sd.cpp asset mapping.\")\n\n        base = resolve_base_repo(fam, base_repo)\n        # Offline-only here, and deliberately so. begin_load returns at once by contract -- the\n        # route thread answers the UI with a status and the pull happens on the worker -- so it\n        # cannot afford the range request's bound, let alone hold _lock across it and stall\n        # status()/unload() for the same span. Memo or on-disk header or nothing. This value only\n        # seeds the delete-cached guard's repo list below; the worker re-asks WITH the network and\n        # refreshes that list, so the guard converges within one round trip of the load starting.\n        inner_dim = self._flux2_inner_dim(\n            repo_id, gguf_filename, fam, hf_token, allow_network = False\n        )\n        # Same link the diffusers resolver records, so the delete guard protects a native pick's\n        # companions too -- and here that means the repos _asset_specs actually FETCHES. The\n        # native engine does not read the diffusers base: FLUX.2 takes its VAE from\n        # unsloth/FLUX.2-VAE and its encoders from another repo again, so recording only the base\n        # left every repo the pick really depends on outside the guard, and an unloaded model's\n        # encoder could be deleted while its GGUF stayed installed. Best-effort bookkeeping;\n        # never fails a load.","sourceCodeStart":1183,"sourceCodeEnd":1219,"githubUrl":"https://github.com/unslothai/unsloth/blob/203007d19051dcd2ae33876786d117c99f6b0368/studio/backend/core/inference/sd_cpp_backend.py#L1183-L1219","documentation":"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.","triggerScenarios":"begin_load selecting a family that is supported on diffusers but has no sd.cpp mapping (family_sd_cpp_supported(fam) is False).","commonSituations":"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.","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."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"from core.inference.diffusion_families import detect_family_for_pick\n\nfam = detect_family_for_pick(repo_id, gguf_filename, family_override)\nif fam is None or not family_sd_cpp_supported(fam):\n    route_to_diffusers_engine(repo_id)  # no native mapping for this family","typeGuard":null,"tryCatchPattern":"try:\n    backend.begin_load(repo_id=r, gguf_filename=f)\nexcept ValueError as e:\n    if 'no native sd.cpp asset mapping' in str(e):\n        return diffusers_backend.load(r)\n    raise","preventionTips":["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."],"tags":["model-support","sd-cpp","validation"],"backgroundTag":null,"analyzedSha":"203007d19051dcd2ae33876786d117c99f6b0368","analyzedAt":"2026-08-15T02:48:39.846Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}