{"record":{"id":"1669d20dd645c424","repo":"invoke-ai/InvokeAI","slug":"checkpointconfigbase-is-not-implemented-for-the-kr","errorCode":null,"errorMessage":"CheckpointConfigBase is not implemented for the Krea-2 diffusers loader.","messagePattern":"CheckpointConfigBase is not implemented for the Krea-2 diffusers loader\\.","errorType":"validation","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"invokeai/backend/model_manager/load/model_loaders/krea2.py","lineNumber":264,"sourceCode":"\n\n@ModelLoaderRegistry.register(base=BaseModelType.Krea2, type=ModelType.Main, format=ModelFormat.Diffusers)\nclass Krea2DiffusersModel(GenericDiffusersLoader):\n    \"\"\"Class to load Krea-2 main models (Krea-2-Turbo) in diffusers format.\n\n    Loads every submodel (transformer, vae, text_encoder, tokenizer, scheduler) from the diffusers\n    pipeline folder via the class names declared in model_index.json. The transformer resolves to\n    diffusers' ``Krea2Transformer2DModel`` (only available in diffusers main / >=0.39); the VAE to\n    ``AutoencoderKLQwenImage`` and the text encoder to ``Qwen3VLModel``.\n    \"\"\"\n\n    def _load_model(\n        self,\n        config: AnyModelConfig,\n        submodel_type: Optional[SubModelType] = None,\n    ) -> AnyModel:\n        if isinstance(config, Checkpoint_Config_Base):\n            raise NotImplementedError(\"CheckpointConfigBase is not implemented for the Krea-2 diffusers loader.\")\n\n        if submodel_type is None:\n            raise Exception(\"A submodel type must be provided when loading main pipelines.\")\n\n        model_path = Path(config.path)\n\n        # model_index.json declares the tokenizer as the slow `Qwen2Tokenizer`, which requires\n        # vocab.json/merges.txt. Krea-2 ships only a fast tokenizer.json, so load via AutoTokenizer\n        # (which resolves to Qwen2TokenizerFast from tokenizer.json).\n        #\n        # Krea-2's tokenizer_config.json stores `extra_special_tokens` as a list (the special tokens\n        # are already baked into tokenizer.json as added tokens). Newer transformers expects a dict and\n        # crashes on the list, so override it with an empty dict — the special tokens are still\n        # recognized from tokenizer.json.\n        if submodel_type is SubModelType.Tokenizer:\n            return AutoTokenizer.from_pretrained(\n                model_path / submodel_type.value, local_files_only=True, extra_special_tokens={}\n            )","sourceCodeStart":246,"sourceCodeEnd":282,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/backend/model_manager/load/model_loaders/krea2.py#L246-L282","documentation":"The Krea-2 loader only supports diffusers-format directories, not legacy single-file checkpoint configs (Checkpoint_Config_Base subclasses, i.e. .safetensors/.ckpt singles). If handed such a config, it raises NotImplementedError because there is no single-file weight-conversion path implemented for this loader.","triggerScenarios":"Calling _load_model (or registering/loading a model through the manager) with a config whose type is a Checkpoint_Config_Base subclass while it dispatches to the Krea-2 loader.","commonSituations":"Users downloading a single-file Krea-2 checkpoint (.safetensors) instead of the diffusers repo; legacy model records stored as checkpoint format then routed to the new diffusers loader.","solutions":["Convert the single-file checkpoint to a diffusers directory layout and re-register the model with the diffusers config type.","Download the official diffusers-format repository instead of the single-file checkpoint.","Use a different loader/legacy path that supports Checkpoint configs for this model family.","Implement a single-file conversion path in the loader if supporting checkpoint configs is required."],"exampleFix":"// before\nloader._load_model(Checkpoint_Config_File(path=\"krea2.safetensors\"), SubModelType.Transformer)\n// after\ncfg = Main_Diffusers_Krea2_Config(path=\"krea2_diffusers/\")\nloader._load_model(cfg, SubModelType.Transformer)","handlingStrategy":"type-guard","validationCode":"from invokeai.backend.model_manager.configs.base import Checkpoint_Config_Base\nif isinstance(config, Checkpoint_Config_Base):\n    raise TypeError(\"use a diffusers-format config for the Krea-2 loader\")","typeGuard":"def is_diffusers_config(config) -> bool:\n    from invokeai.backend.model_manager.configs.base import Checkpoint_Config_Base\n    return not isinstance(config, Checkpoint_Config_Base)","tryCatchPattern":"try:\n    model = loader._load_model(config, submodel_type)\nexcept NotImplementedError as e:\n    if \"Krea-2 diffusers loader\" in str(e):\n        config = convert_checkpoint_to_diffusers_config(config)\n        model = loader._load_model(config, submodel_type)\n    else:\n        raise","preventionTips":["Prefer diffusers-directory downloads over single-file checkpoints for Krea-2 models.","Convert legacy Checkpoint configs once at registration time, not at load time.","Dispatch loaders based on model format so checkpoint files go to a compatible loader."],"tags":["unsupported-format","checkpoint","model-loading"],"backgroundTag":"unsupported-model-format","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}