{"record":{"id":"4ff9bf63ff84c317","repo":"invoke-ai/InvokeAI","slug":"unsupported-model-base-model-identifier-base","errorCode":null,"errorMessage":"Unsupported model base: {model_identifier.base}","messagePattern":"Unsupported model base: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"invokeai/app/util/t5_model_identifier.py","lineNumber":16,"sourceCode":"from invokeai.app.invocations.model import ModelIdentifierField\nfrom invokeai.backend.model_manager.taxonomy import BaseModelType, SubModelType\n\n\ndef preprocess_t5_encoder_model_identifier(model_identifier: ModelIdentifierField) -> ModelIdentifierField:\n    \"\"\"A helper function to normalize a T5 encoder model identifier so that T5 models associated with FLUX\n    or SD3 models can be used interchangeably.\n    \"\"\"\n    if model_identifier.base == BaseModelType.Any:\n        return model_identifier.model_copy(update={\"submodel_type\": SubModelType.TextEncoder2})\n    elif model_identifier.base == BaseModelType.Flux:\n        return model_identifier.model_copy(update={\"submodel_type\": SubModelType.TextEncoder2})\n    elif model_identifier.base == BaseModelType.StableDiffusion3:\n        return model_identifier.model_copy(update={\"submodel_type\": SubModelType.TextEncoder3})\n    else:\n        raise ValueError(f\"Unsupported model base: {model_identifier.base}\")\n\n\ndef preprocess_t5_tokenizer_model_identifier(model_identifier: ModelIdentifierField) -> ModelIdentifierField:\n    \"\"\"A helper function to normalize a T5 tokenizer model identifier so that T5 models associated with FLUX\n    or SD3 models can be used interchangeably.\n    \"\"\"\n    if model_identifier.base == BaseModelType.Any:\n        return model_identifier.model_copy(update={\"submodel_type\": SubModelType.Tokenizer2})\n    elif model_identifier.base == BaseModelType.Flux:\n        return model_identifier.model_copy(update={\"submodel_type\": SubModelType.Tokenizer2})\n    elif model_identifier.base == BaseModelType.StableDiffusion3:\n        return model_identifier.model_copy(update={\"submodel_type\": SubModelType.Tokenizer3})\n    else:\n        raise ValueError(f\"Unsupported model base: {model_identifier.base}\")\n","sourceCodeStart":1,"sourceCodeEnd":31,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/app/util/t5_model_identifier.py#L1-L31","documentation":"preprocess_t5_encoder_model_identifier normalizes a T5 text-encoder model identifier so it points at the right submodel (TextEncoder2 for Flux, TextEncoder3 for StableDiffusion3, TextEncoder for T5-family bases). Bases outside the supported set have no T5 encoder mapping, so ValueError is raised with the offending base value.","triggerScenarios":"Calling invoke with a T5 encoder model whose ModelIdentifierField.base is e.g. StableDiffusion1/2-XL or another non-SD3/Flux/T5 base.","commonSituations":"Selecting an SD1.5 or SDXL checkpoint as the T5 encoder in a Flux/SD3 workflow; misconfigured model identifier stored in a graph after switching model families; stale saved workflows referencing a different base.","solutions":["Use a T5, Flux, or StableDiffusion3 model as the T5 encoder identifier","Update the workflow/graph to reference the correct encoder model for the model family","Fix the model identifier's base/submodel fields if the stored record is stale","Check preprocessing of the tokenizer counterpart (preprocess_t5_tokenizer_model_identifier) uses a matching supported base"],"exampleFix":"// before\nencoder = ModelIdentifierField(base=BaseModelType.StableDiffusion1, ...)  # unsupported\n// after\nencoder = ModelIdentifierField(base=BaseModelType.StableDiffusion3, ..., submodel_type=SubModelType.TextEncoder3)","handlingStrategy":"validation","validationCode":"from invokeai.backend.model_manager.config import BaseModelType\n\nT5_ENCODER_BASES = {BaseModelType.T5Encoder, BaseModelType.Flux, BaseModelType.StableDiffusion3}\n\ndef t5_encoder_ok(model_identifier):\n    return model_identifier.base in T5_ENCODER_BASES","typeGuard":"def is_t5_capable_base(identifier):\n    return getattr(identifier, 'base', None) in (\n        BaseModelType.T5Encoder, BaseModelType.Flux, BaseModelType.StableDiffusion3\n    )","tryCatchPattern":"try:\n    encoder_id = preprocess_t5_encoder_model_identifier(identifier)\nexcept ValueError as e:\n    if 'Unsupported model base' in str(e):\n        raise ValueError(f\"{identifier.base} cannot supply a T5 encoder; use a T5/Flux/SD3 model\") from e\n    raise","preventionTips":["Only assign T5-family/Flux/SD3 models to T5 encoder slots","Validate model identifiers when loading saved workflows","Keep base and submodel_type consistent in ModelIdentifierField"],"tags":["python","valueerror","unsupported-model","model-identifier"],"backgroundTag":"unsupported-base-model","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}