{"record":{"id":"9aa8f7659555a459","repo":"unslothai/unsloth","slug":"fam-name-is-a-dual-expert-model-a-single-kin","errorCode":null,"errorMessage":"'{fam.name}' is a dual-expert model: a single {kind} file covers only one of its two transformers. Load the diffusers pipeline repo ('{fam.base_repo}') instead.","messagePattern":"'(.+?)' is a dual-expert model: a single (.+?) file covers only one of its two transformers\\. Load the diffusers pipeline repo \\('(.+?)'\\) instead\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"studio/backend/core/inference/video.py","lineNumber":1201,"sourceCode":"            raise ValueError(\n                f\"Non-GGUF video loads are limited to unsloth/* repos, the official \"\n                f\"family base repos, and local paths; '{repo_id}' is neither.\"\n            )\n        # Companions load with from_pretrained, so a base repo is held to the non-GGUF bar: a GGUF pick must not smuggle in a remote base.\n        if base_repo and (base_repo or \"\").strip() and not _is_trusted_video_repo(base_repo):\n            raise ValueError(\n                f\"base_repo is limited to unsloth/* repos, the official family base \"\n                f\"repos, and local paths; '{base_repo}' is neither.\"\n            )\n        # A local base_repo loads as a full pipeline (needs model_index.json); reject a non-pipeline one here, before the load.\n        from core.inference.diffusion import _assert_local_base_is_pipeline\n\n        _assert_local_base_is_pipeline(base_repo)\n        if kind in (\"gguf\", \"single_file\") and not gguf_filename:\n            raise ValueError(\"A gguf/single_file load needs the checkpoint filename.\")\n        if kind in (\"gguf\", \"single_file\") and fam.is_moe:\n            # A single checkpoint carries one expert; the other would load dense bf16, off-plan.\n            raise ValueError(\n                f\"'{fam.name}' is a dual-expert model: a single {kind} file covers only \"\n                f\"one of its two transformers. Load the diffusers pipeline repo \"\n                f\"('{fam.base_repo}') instead.\"\n            )\n        # A missing local checkpoint must fail HERE, before the route evicts a resident model.\n        if kind in (\"gguf\", \"single_file\"):\n            # Fail a kind/extension mismatch before the GPU handoff: gguf needs .gguf, single_file needs .safetensors.\n            is_gguf_name = (gguf_filename or \"\").lower().endswith(\".gguf\")\n            if kind == \"gguf\" and not is_gguf_name:\n                raise ValueError(\"a 'gguf' load requires a .gguf checkpoint name.\")\n            if kind == \"single_file\" and is_gguf_name:\n                raise ValueError(\"a .gguf checkpoint needs model_kind 'gguf', not 'single_file'.\")\n            if kind == \"single_file\" and not (gguf_filename or \"\").lower().endswith(\".safetensors\"):\n                raise ValueError(\n                    f\"'{gguf_filename}' is not a loadable single-file checkpoint \"\n                    f\"(expected a .safetensors name; use a .gguf name for a GGUF load).\"\n                )\n            root = Path(repo_id).expanduser()","sourceCodeStart":1183,"sourceCodeEnd":1219,"githubUrl":"https://github.com/unslothai/unsloth/blob/203007d19051dcd2ae33876786d117c99f6b0368/studio/backend/core/inference/video.py#L1183-L1219","documentation":"Raised when a dual-expert (fam.is_moe) family — one with two transformers, e.g. MiniMax-H3's video+audio experts — is loaded via model_kind 'gguf' or 'single_file'. A single checkpoint file carries only one of the two experts; the other would silently load dense bf16, defeating the quantization plan, so the loader refuses and points at the full diffusers pipeline repo (fam.base_repo).","triggerScenarios":"Calling load with model_kind='gguf' or 'single_file' on a family whose is_moe flag is set (a dual-expert model), regardless of filename validity.","commonSituations":"Applying the GGUF workflow习惯 from single-transformer families (Wan etc.) to a MoE family; a quantized single-file checkpoint of one expert circulating in the community and pasted into a config; UI not disabling the GGUF picker for MoE families.","solutions":["Load the diffusers pipeline repo named in the message (fam.base_repo) with model_kind='pipeline'.","For quantization on that pipeline, use transformer_quant with a hosted pre-quantized scheme instead of a GGUF file.","UI: hide/disable gguf/single_file options for families flagged is_moe."],"exampleFix":"# before\nload(repo_id='minimax-h3', model_kind='gguf', gguf_filename='h3-video-Q4.gguf')\n\n# after\nload(repo_id=fam.base_repo, model_kind='pipeline', transformer_quant='fp8')","handlingStrategy":"validation","validationCode":"if fam.is_moe and model_kind in ('gguf', 'single_file'):\n    model_kind, gguf_filename = 'pipeline', None  # or reject up front","typeGuard":"def kind_allowed_for_family(fam, kind: str) -> bool:\n    return kind not in ('gguf', 'single_file') or not fam.is_moe","tryCatchPattern":"try:\n    load(...)\nexcept ValueError as e:\n    if 'dual-expert' in str(e):\n        load(repo_id=fam.base_repo, model_kind='pipeline', ...)\n    else:\n        raise","preventionTips":["Check fam.is_moe before offering gguf/single_file options.","For MoE quantization, plan around hosted prequant schemes (transformer_quant), not GGUF files."],"tags":["video","moe","gguf","validation","minimax-h3"],"backgroundTag":null,"analyzedSha":"203007d19051dcd2ae33876786d117c99f6b0368","analyzedAt":"2026-08-15T02:48:39.846Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}