{"record":{"id":"04b20194177fe662","repo":"unslothai/unsloth","slug":"fam-name-loads-only-as-a-full-diffusers-pipeli","errorCode":null,"errorMessage":"'{fam.name}' loads only as a full diffusers pipeline (it assembles multiple transformers), not from a single-file or GGUF checkpoint; select the pipeline repo.","messagePattern":"'(.+?)' loads only as a full diffusers pipeline \\(it assembles multiple transformers\\), not from a single-file or GGUF checkpoint; select the pipeline repo\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"studio/backend/core/inference/diffusion.py","lineNumber":1650,"sourceCode":"                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):\n            raise ValueError(\n                f\"base_repo is restricted to unsloth/* repos (or a local path); got '{base_repo}'.\"\n            )\n        # A local base_repo loads as a full pipeline; reject a non-pipeline one before eviction.\n        _assert_local_base_is_pipeline(base_repo)\n        # Reject a bad LOCAL pick before the route evicts chat: a path-shaped repo_id must be on disk.","sourceCodeStart":1632,"sourceCodeEnd":1668,"githubUrl":"https://github.com/unslothai/unsloth/blob/203007d19051dcd2ae33876786d117c99f6b0368/studio/backend/core/inference/diffusion.py#L1632-L1668","documentation":"Raised when the load kind is 'gguf' or 'single_file' but the detected family has pipeline_only set - multi-denoiser families (the comment names Ideogram 4) assemble multiple transformers and have no transformer-only load path at all. Like the sibling checks it runs pre-eviction so the resident GPU model is not lost to a doomed load.","triggerScenarios":"Calling the load validation with model_kind in ('gguf','single_file') (explicitly, or via a gguf_filename) for a pipeline_only family such as a multi-denoiser model.","commonSituations":"User tries to save VRAM by loading only the transformer of a model that needs all of its denoisers; saved preset from another family carries a single-file/gguf mode into a pipeline-only pick; model listing mixes single-file and pipeline-only families without labelling the difference.","solutions":["Select the full pipeline repo for this family and drop gguf_filename / single-file mode.","To reduce memory use on a pipeline-only family, use memory_mode / offload settings instead of transformer-only loading.","If a single-file path is a hard requirement, choose a family that supports it."],"exampleFix":"# before: transformer-only load of a pipeline-only family\nmanager.validate_load_request(repo_id=\"org/Ideogram-4\",\n    model_kind=\"gguf\", gguf_filename=\"t-Q8.gguf\")\n# ValueError: ... loads only as a full diffusers pipeline ...\n\n# after: select the pipeline repo\nmanager.validate_load_request(repo_id=\"org/Ideogram-4\", model_kind=\"pipeline\")","handlingStrategy":"validation","validationCode":"fam = manager.detect_family_for_pick(repo_id)\nif fam is not None and fam.pipeline_only:\n    assert not gguf_filename and model_kind not in (\"gguf\", \"single_file\")","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 \"loads only as a full diffusers pipeline\" in str(e):\n        retry_with_pipeline_repo(r)\n    else:\n        raise","preventionTips":["For multi-denoiser families, expose only memory_mode/offload controls - there is no transformer-only path to offer.","Validate kind against the family's flags before submitting so the UI never sends an impossible combination.","Do not treat this as retriable: the family structure, not the environment, is the blocker."],"tags":["model-validation","pipeline-only","gguf","single-file","diffusion"],"backgroundTag":null,"analyzedSha":"203007d19051dcd2ae33876786d117c99f6b0368","analyzedAt":"2026-08-15T02:48:39.846Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}