invoke-ai/InvokeAI · error · ValueError
Unexpected submodel requested for LLaVA OneVision model.
Error message
Unexpected submodel requested for LLaVA OneVision model.
What it means
The SigLIP (LLaVA OneVision) loader loads a complete vision model and supports no submodels. If _load_model is called with a non-None submodel_type, it raises this ValueError immediately. It protects against callers assuming the SigLIP checkpoint is a multi-component pipeline.
Source
Thrown at invokeai/backend/model_manager/load/model_loaders/sig_lip.py:22
from transformers import SiglipVisionModel
from invokeai.backend.model_manager.configs.factory import AnyModelConfig
from invokeai.backend.model_manager.load.load_default import ModelLoader
from invokeai.backend.model_manager.load.model_loader_registry import ModelLoaderRegistry
from invokeai.backend.model_manager.taxonomy import AnyModel, BaseModelType, ModelFormat, ModelType, SubModelType
@ModelLoaderRegistry.register(base=BaseModelType.Any, type=ModelType.SigLIP, format=ModelFormat.Diffusers)
class SigLIPModelLoader(ModelLoader):
"""Class for loading SigLIP models."""
def _load_model(
self,
config: AnyModelConfig,
submodel_type: Optional[SubModelType] = None,
) -> AnyModel:
if submodel_type is not None:
raise ValueError("Unexpected submodel requested for LLaVA OneVision model.")
model_path = Path(config.path)
model = SiglipVisionModel.from_pretrained(model_path, local_files_only=True, torch_dtype=self._torch_dtype)
return model
View on GitHub (pinned to 0b6a024f2f)
Solutions
- Call load_model for SigLIP models without a submodel_type (pass None).
- Load the vision encoder as a whole model; get text generation parts from the parent LLaVA model's own loader.
- Check model type in your dispatch code before passing submodel_type.
Example fix
// before model = loader.load_model(config, submodel_type=SubModelType.TextEncoder) // after model = loader.load_model(config, submodel_type=None)
Defensive patterns
Strategy: validation
Validate before calling
if model_type is ModelType.SigLIP and submodel_type is not None:
raise ValueError("SigLIP models take no submodel_type") Type guard
def takes_submodel(model_type: ModelType) -> bool:
return model_type in {ModelType.Main, ModelType.ONNX} Try / catch
try:
model = loader.load_model(config, submodel_type=None)
except ValueError as e:
logger.error("SigLIP load failed: %s", e)
raise Prevention
- Always pass submodel_type=None for whole-model types (SigLIP, Spandrel, TI, TextLLM).
- Centralize loader dispatch so submodel handling is type-aware.
- Read the loader's _load_model contract before generic calls.
When it happens
Trigger: Requesting any SubModelType (e.g. TextEncoder, Tokenizer) when loading a LLaVA OneVision / SigLIP model via ModelLoaderRegistry.
Common situations: Code written for main-pipeline models (which use submodel_type) reused against a SigLIP model; a pipeline submodel dispatcher routing a request to the wrong loader.
Related errors
- Unexpected submodel requested for TextLLM model.
- There are no submodels in a LoRA model.
- Only Tokenizer and TextEncoder submodels are supported. Rece
- A submodel type must be provided when loading onnx pipelines
- Unexpected submodel requested for PiD decoder.
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/e909604e497f542e.
Report an issue: GitHub.