invoke-ai/InvokeAI · error · ValueError
There are no submodels in an IP-Adapter model.
Error message
There are no submodels in an IP-Adapter model.
What it means
IP-Adapter models are single-artifact raw models with no decomposable submodels, unlike main pipelines. The loader therefore inverts the usual contract: it raises if a submodel_type is provided (rather than requiring one), then loads the whole IP-Adapter checkpoint via build_ip_adapter.
Source
Thrown at invokeai/backend/model_manager/load/model_loaders/ip_adapter.py:27
from invokeai.backend.ip_adapter.ip_adapter import build_ip_adapter
from invokeai.backend.model_manager.configs.factory import AnyModelConfig
from invokeai.backend.model_manager.load import ModelLoader, ModelLoaderRegistry
from invokeai.backend.model_manager.taxonomy import AnyModel, BaseModelType, ModelFormat, ModelType, SubModelType
from invokeai.backend.raw_model import RawModel
@ModelLoaderRegistry.register(base=BaseModelType.Any, type=ModelType.IPAdapter, format=ModelFormat.InvokeAI)
@ModelLoaderRegistry.register(base=BaseModelType.Any, type=ModelType.IPAdapter, format=ModelFormat.Checkpoint)
class IPAdapterInvokeAILoader(ModelLoader):
"""Class to load IP Adapter diffusers models."""
def _load_model(
self,
config: AnyModelConfig,
submodel_type: Optional[SubModelType] = None,
) -> AnyModel:
if submodel_type is not None:
raise ValueError("There are no submodels in an IP-Adapter model.")
model_path = Path(config.path)
model: RawModel = build_ip_adapter(
ip_adapter_ckpt_path=model_path,
device=torch.device("cpu"),
dtype=self._torch_dtype,
)
return model
View on GitHub (pinned to 0b6a024f2f)
Solutions
- Call _load_model with submodel_type=None (the default) for IP-Adapter models.
- Update generic load helpers to skip submodel_type for ModelType.IPAdapter records.
- Access specific IP-Adapter internals from the returned model object instead of requesting submodels.
Example fix
// before adapter = loader._load_model(cfg, SubModelType.Transformer) // after adapter = loader._load_model(cfg, None)
Defensive patterns
Strategy: type-guard
Validate before calling
from invokeai.backend.model_manager import ModelType
if config.type == ModelType.IPAdapter and submodel_type is not None:
raise ValueError("IP-Adapter models take no submodel_type") Type guard
def ip_adapter_accepts(submodel_type) -> bool:
return submodel_type is None Try / catch
try:
adapter = loader._load_model(cfg, submodel_type)
except ValueError as e:
if "no submodels in an IP-Adapter" in str(e):
adapter = loader._load_model(cfg, None)
else:
raise Prevention
- Branch on ModelType before calling loaders: pass submodel_type only for Main models.
- Encapsulate per-model-type calling conventions in a single dispatch helper.
- Test generic loading loops against every ModelType.
When it happens
Trigger: Calling _load_model with any non-None submodel_type (Transformer, VAE, etc.) for an IP-Adapter model.
Common situations: Generic loading loops that always pass a submodel_type for ModelType records; copying pipeline-loading code and applying it to IP-Adapter loads.
Related errors
- A submodel type must be provided when loading Ideogram 4 mai
- Unsupported submodel for Ideogram 4: {submodel_type.value if
- Only TextEncoder and Tokenizer submodels are supported. Rece
- Admin privileges required
- Expected LlavaOnevisionForConditionalGeneration, got {type(m
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/ee6cf1f85a591f6b.
Report an issue: GitHub.