invoke-ai/InvokeAI · error · HTTPException
Model '{body.model_key}' not found
Error message
Model '{body.model_key}' not found What it means
HTTP 404 raised by the expand_prompt endpoint when UnknownModelException bubbles up from the model manager — no model is registered under body.model_key. The endpoint also emits an llm_task_error event ('Model not found') if a task_id was supplied.
Source
Thrown at invokeai/app/api/routers/utilities.py:210
events = ApiDependencies.invoker.services.events
try:
expanded, seed = await asyncio.to_thread(
_run_expand_prompt,
body.prompt,
body.model_key,
body.max_tokens,
body.system_prompt,
body.seed,
body.task_id,
current_user.user_id,
)
if body.task_id is not None:
events.emit_llm_task_complete(task_id=body.task_id, user_id=current_user.user_id)
return ExpandPromptResponse(expanded_prompt=expanded, seed=seed)
except UnknownModelException:
if body.task_id is not None:
events.emit_llm_task_error(task_id=body.task_id, user_id=current_user.user_id, error="Model not found")
raise HTTPException(status_code=404, detail=f"Model '{body.model_key}' not found")
except ValueError as e:
if body.task_id is not None:
events.emit_llm_task_error(task_id=body.task_id, user_id=current_user.user_id, error=str(e))
raise HTTPException(status_code=422, detail=str(e))
except Exception as e:
if body.task_id is not None:
events.emit_llm_task_error(task_id=body.task_id, user_id=current_user.user_id, error=str(e))
logger.error(f"Error expanding prompt: {e}")
raise HTTPException(status_code=500, detail=str(e))
# --- Image to Prompt ---
class ImageToPromptRequest(BaseModel):
image_name: str
model_key: str
instruction: str = "Describe this image in detail for use as an AI image generation prompt."View on GitHub (pinned to 0b6a024f2f)
Solutions
- Fetch valid keys from the models listing endpoint and use one of those
- Reinstall/re-import the model so it exists in the model store
- Fix the model_key format in the request body or client default
- Verify the server is using the expected models directory/database
Example fix
// before
{"model_key": "llm/my-model"}
// after
{"model_key": "text_llm/my-model@hash"} // key from GET /api/v1/models Defensive patterns
Strategy: try-catch
Validate before calling
const models = await api.listModels();
if (!models.some(m => m.key === body.model_key)) {
throw new Error(`Model ${body.model_key} is not installed; choose from: ${models.map(m => m.key).join(', ')}`);
} Type guard
function isKnownModel(models, key) {
return typeof key === 'string' && models.some(m => m.key === key);
} Try / catch
try {
const res = await api.expandPrompt(body);
} catch (e) {
if (e.status === 404 && e.detail?.startsWith('Model')) {
const fresh = await api.listModels();
console.error(`Model missing. Available: ${fresh.map(m => m.key).join(', ')}`);
} else throw e;
} Prevention
- Always source model_key from a live models listing, not cached config
- Handle llm_task_error events ('Model not found') when using task_id-based async flows
- Re-sync model lists after installing/removing models or switching environments
When it happens
Trigger: POST expand_prompt with body.model_key that model_manager.store.get_model cannot resolve: uninstalled model, malformed key (missing base/type hash components), or key from a different installation.
Common situations: Typo or stale default model_key in client config; model removed by garbage collection; switching between installs/databases where the model key differs; version changes that altered the model key format.
Related errors
- Style preset not found
- Video URLs not found
- Workflow not found
- Unknown lora: {lora.lora.key}!
- Unknown lora: {lora_key}!
AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29).
Data as JSON: /api/errors/177d422238d70f39.
Report an issue: GitHub.