{"record":{"id":"b91c086e8506b3c4","repo":"invoke-ai/InvokeAI","slug":"expected-llavaonevisionprocessor-got-type-proces","errorCode":null,"errorMessage":"Expected LlavaOnevisionProcessor, got {type(processor).__name__}","messagePattern":"Expected LlavaOnevisionProcessor, got (.+?)","errorType":"http","errorClass":"TypeError","httpStatus":422,"severity":"error","filePath":"invokeai/app/api/routers/utilities.py","lineNumber":271,"sourceCode":"\n    if task_id is not None:\n        events.emit_llm_task_progress(task_id=task_id, user_id=user_id, phase=\"loading_model\", message=\"Loading model\")\n\n    with _model_load_lock:\n        loaded_model = model_manager.load.load_model(model_config, user_id=user_id)\n\n    # Load the image from InvokeAI's image store\n    image = ApiDependencies.invoker.services.images.get_pil_image(image_name)\n    image = image.convert(\"RGB\")\n\n    with torch.no_grad(), loaded_model.model_on_device() as (_, model):\n        if not isinstance(model, LlavaOnevisionForConditionalGeneration):\n            raise TypeError(f\"Expected LlavaOnevisionForConditionalGeneration, got {type(model).__name__}\")\n\n        model_abs_path = _resolve_model_path(model_config.path)\n        processor = AutoProcessor.from_pretrained(model_abs_path, local_files_only=True)\n        if not isinstance(processor, LlavaOnevisionProcessor):\n            raise TypeError(f\"Expected LlavaOnevisionProcessor, got {type(processor).__name__}\")\n\n        pipeline = LlavaOnevisionPipeline(model, processor)\n        model_device = next(model.parameters()).device\n\n        progress_callback = _make_progress_callback(events, task_id, user_id)\n\n        output = pipeline.run(\n            prompt=instruction,\n            images=[image],\n            device=model_device,\n            dtype=TorchDevice.choose_torch_dtype(),\n            progress_callback=progress_callback,\n        )\n\n    return output\n\n\n@utilities_router.post(","sourceCodeStart":253,"sourceCodeEnd":289,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/app/api/routers/utilities.py#L253-L289","documentation":"After the model passes its type check, AutoProcessor.from_pretrained is called on the model path and the result is asserted to be a LlavaOnevisionProcessor. AutoProcessor returns whatever class the checkpoint's processor_config/preprocessor_config declares; if the checkpoint ships a generic CLIP/OPT processor or an incompatible config, the isinstance check fails and this TypeError is raised before any inference runs.","triggerScenarios":"POST /utilities/image_to_prompt where the LLaVA checkpoint directory lacks a LLaVA OneVision preprocessor_config.json or contains a processor saved by an older/incompatible transformers release, so AutoProcessor instantiates e.g. CLIPImageProcessor+LlamaTokenizer instead of LlavaOnevisionProcessor.","commonSituations":"Incomplete downloads (missing processor config files), checkpoints converted from llava-1.5 checkpoints without re-saving the processor, local_files_only=True hiding a partially-populated directory, mismatched transformers version saving/loading different processor classes.","solutions":["Re-download or re-save the model so its directory contains a valid LlavaOnevision processor config (AutoProcessor.save_pretrained from a correct transformers version)","Verify the files at _resolve_model_path(model_config.path) — check preprocessor_config.json / processor_config.json exist and declare llava_onevision","Confirm the installed transformers version matches the version used to create the checkpoint","Clear the partially-downloaded model cache entry and re-fetch"],"exampleFix":"# before\nprocessor = AutoProcessor.from_pretrained(model_abs_path, local_files_only=True)\npipeline = LlavaOnevisionPipeline(model, processor)\n# after\nprocessor = AutoProcessor.from_pretrained(model_abs_path, local_files_only=True)\nif not isinstance(processor, LlavaOnevisionProcessor):\n    raise TypeError(f\"Expected LlavaOnevisionProcessor, got {type(processor).__name__}\")\npipeline = LlavaOnevisionPipeline(model, processor)","handlingStrategy":"type-guard","validationCode":"from transformers import AutoProcessor\np = AutoProcessor.from_pretrained(model_path, local_files_only=True)\nassert p.__class__.__name__ == \"LlavaOnevisionProcessor\", f\"got {p.__class__.__name__}\"","typeGuard":"def is_llava_onevision_processor(processor) -> bool:\n    from transformers import LlavaOnevisionProcessor\n    return isinstance(processor, LlavaOnevisionProcessor)","tryCatchPattern":"try:\n    resp = requests.post(f\"{base}/utilities/image_to_prompt\", json={...})\n    resp.raise_for_status()\nexcept requests.HTTPError as e:\n    if \"Expected LlavaOnevisionProcessor\" in e.response.text:\n        re_download_model(model_key)","preventionTips":["Verify checkpoint directory contains preprocessor_config.json before use","Re-save processors with the same transformers version used at inference","Avoid mixing processors from llava-1.5 conversions into onevision checkpoints"],"tags":["transformers","processor","type-mismatch","llava"],"backgroundTag":"model-type-mismatch","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}