{"record":{"id":"592c295165bf66f8","repo":"unslothai/unsloth","slug":"fam-name-checkpoints-are-whole-pipeline-single","errorCode":null,"errorMessage":"'{fam.name}' checkpoints are whole-pipeline single files and have no GGUF transformer variant; load the .safetensors pipeline instead of a GGUF.","messagePattern":"'(.+?)' checkpoints are whole-pipeline single files and have no GGUF transformer variant; load the \\.safetensors pipeline instead of a GGUF\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"studio/backend/core/inference/diffusion.py","lineNumber":1644,"sourceCode":"            excluded = excluded_model_reason(repo_id)\n            if excluded:\n                raise ValueError(f\"'{repo_id}' cannot be loaded: {excluded}\")\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. (Video models and image models \"\n                f\"whose diffusers transformer has no single-file loader are not supported.)\"\n            )\n        # Refuse a too-old diffusers here, not deep in the load, but only when this load builds the diffusers pipeline: a\n        # GGUF this host routes to native sd.cpp never instantiates the class. The picker gate reads the same predicate.\n        # Imported here, not at module import, because the router imports this module's siblings.\n        from .diffusion_engine_router import family_buildable_here\n\n        if not family_buildable_here(fam, model_kind = kind):\n            assert_pipeline_class_available(fam.pipeline_class, fam.name)\n        # Families whose single file IS the whole pipeline have no GGUF path; reject before eviction.\n        if kind == \"gguf\" and fam.single_file_is_pipeline:\n            raise ValueError(\n                f\"'{fam.name}' checkpoints are whole-pipeline single files and have no GGUF \"\n                f\"transformer variant; load the .safetensors pipeline instead of a GGUF.\"\n            )\n        # A multi-denoiser family (Ideogram 4) has no transformer-only path; reject before eviction.\n        if kind in (\"gguf\", \"single_file\") and fam.pipeline_only:\n            raise ValueError(\n                f\"'{fam.name}' loads only as a full diffusers pipeline (it assembles \"\n                f\"multiple transformers), not from a single-file or GGUF checkpoint; \"\n                f\"select the pipeline repo.\"\n            )\n        # Non-GGUF loads fetch + deserialise weights, so gate to unsloth/ or a local path.\n        if kind != \"gguf\" and not _is_trusted_diffusion_repo(repo_id):\n            raise ValueError(\n                f\"Non-GGUF diffusion loads are restricted to unsloth/* repos (or a local \"\n                f\"path); got '{repo_id}'. Pass a gguf_filename to load a GGUF instead.\"\n            )\n        # The companion base repo also loads via from_pretrained, so it must clear the same trust bar.\n        if base_repo and base_repo.strip() and not _is_trusted_diffusion_repo(base_repo):","sourceCodeStart":1626,"sourceCodeEnd":1662,"githubUrl":"https://github.com/unslothai/unsloth/blob/203007d19051dcd2ae33876786d117c99f6b0368/studio/backend/core/inference/diffusion.py#L1626-L1662","documentation":"Raised before any GPU handoff when the requested load kind is 'gguf' but the detected family has single_file_is_pipeline set - its checkpoints are whole-pipeline .safetensors single files (no separate GGUF transformer variant exists). The check runs in the cheap validation phase specifically so the failure happens before the resident chat model is evicted.","triggerScenarios":"Calling validate_load_request / load with model_kind='gguf' (or a gguf_filename that resolves kind to gguf) for a family flagged single_file_is_pipeline, e.g. attempting a GGUF transformer load of a family that only ships complete pipeline files.","commonSituations":"User sees a family supported in the picker and assumes GGUF quantizations exist for it like they do for other families; a UI default or saved preset sets model_kind='gguf'; mixing up a family's single-file .safetensors format with the GGUF ecosystem.","solutions":["Load the family's .safetensors pipeline single file instead: pass model_kind='single_file' (or unset) with the .safetensors filename.","Pick the full pipeline repo for that family and drop the gguf parameters entirely.","If you need a quantized transformer, choose a different family that does ship GGUF transformer variants."],"exampleFix":"# before: no GGUF variant exists for this family\nmanager.validate_load_request(repo_id=\"org/Family\",\n    model_kind=\"gguf\", gguf_filename=\"transformer-Q4.gguf\")\n\n# after: load the whole-pipeline single file\nmanager.validate_load_request(repo_id=\"org/Family\",\n    model_kind=\"single_file\", gguf_filename=\"family-full.safetensors\")","handlingStrategy":"validation","validationCode":"fam = manager.detect_family_for_pick(repo_id)\nif fam is not None and fam.single_file_is_pipeline:\n    allowed_kinds = {\"single_file\", \"pipeline\"}  # no gguf for this family","typeGuard":null,"tryCatchPattern":"try:\n    fam = manager.validate_load_request(repo_id=r, model_kind=k, gguf_filename=f)\nexcept ValueError as e:\n    if \"no GGUF transformer variant\" in str(e):\n        retry_as_single_file_safetensors(r)\n    else:\n        raise","preventionTips":["Read the family's flags (single_file_is_pipeline) from the model metadata before offering a GGUF option.","Never default model_kind to 'gguf' globally - default per family based on what it actually ships.","Keep this preflight in the request path: it is what prevents the chat-model eviction before an impossible load."],"tags":["gguf","model-validation","single-file","diffusion","load-kinds"],"backgroundTag":null,"analyzedSha":"203007d19051dcd2ae33876786d117c99f6b0368","analyzedAt":"2026-08-15T02:48:39.846Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}