wandb/openui · error · HTTPException

Invalid model

Error message

Invalid model

What it means

This is the fallback error in OpenUI's chat_completions endpoint: if the requested model name matches none of the known prefixes (openai, groq/, litellm/, ollama, etc.) and is not the 'dummy' generator, the endpoint raises HTTP 404 'Invalid model'. It means the model string could not be routed to any backend.

Source

Thrown at backend/openui/server.py:208

                    **data,
                )
                gen = await ollama_stream_generator(response, data)
            else:
                response: AsyncStream[
                    ChatCompletionChunk
                ] = await ollama_openai.chat.completions.create(
                    **data,
                )

                def gen():
                    return openai_stream_generator(response, input_tokens, user_id, 0)

            return StreamingResponse(gen(), media_type="text/event-stream")
        elif data.get("model").startswith("dummy"):
            return StreamingResponse(
                DummyStreamGenerator(data), media_type="text/event-stream"
            )
        raise HTTPException(status=404, detail="Invalid model")
    except (ResponseError, APIStatusError) as e:
        traceback.print_exc()
        logger.exception("Known Error: %s", str(e))
        msg = str(e)
        if hasattr(e, "message"):
            msg = e.message
        raise HTTPException(status_code=e.status_code, detail=msg)


@app.exception_handler(RequestValidationError)
@app.exception_handler(ValidationError)
async def validation_exception_handler(
    request: Request, exc: RequestValidationError | ValidationError
):
    body = hasattr(exc, "body") and exc.body or None
    logger.exception("Validation Error: %s", exc)
    traceback.print_exc()
    return JSONResponse(

View on GitHub (pinned to 42d7ab4ab6)

Solutions

  1. Prefix the model with a supported backend identifier, e.g. 'openai/gpt-4o', 'groq/llama3-70b-8192', or 'litellm/<model>'.
  2. Check the exact spelling of the prefix against the elif chain in backend/openui/server.py chat_completions.
  3. If you need an unlisted provider, add a routing branch in chat_completions or run it behind LiteLLM and use the litellm/ prefix.
  4. Guard the client payload so model is always a non-empty routed string before calling the endpoint.

Example fix

// before
{"model": "llama3-70b-8192"}
// after
{"model": "groq/llama3-70b-8192"}
Defensive patterns

Strategy: validation

Validate before calling

SUPPORTED_PREFIXES = ("openai/", "groq/", "litellm/", "ollama/", "dummy")
def validate_model(model: str) -> str:
    if not model or not model.startswith(SUPPORTED_PREFIXES):
        raise ValueError(f"Model '{model}' lacks a supported routing prefix")
    return model

Type guard

def is_routed_model(model) -> bool:
    return isinstance(model, str) and model.startswith(("openai/", "groq/", "litellm/", "ollama/", "dummy"))

Prevention

When it happens

Trigger: POSTing to /chat/completions with a model value that lacks a recognized prefix (e.g. model='claude-3' with no 'groq/' or 'litellm/' prefix, or a misspelled prefix like 'groc/llama3'), or model missing/None so startswith never matches.

Common situations: Pasting a raw model id from another provider without the required routing prefix, typos in the prefix, upgrading OpenUI and using a model family the installed version doesn't route, or clients sending model=null.

Related errors


AI-assisted analysis of wandb/openui@42d7ab4ab6 (2026-09-01). Data as JSON: /api/errors/1d2d110b301ec1f6. Report an issue: GitHub.