BerriAI/litellm · error · HTTPException

completion: Invalid model name passed in model={model}

Error message

completion: Invalid model name passed in model={model}

What it means

Validation in the assistant passthrough completion route: the request's 'model' is neither a recognized router model, a configured deployment name, nor covered by wildcard/default routes, so the proxy has no deployment to send the adapter_completion call to.

Source

Thrown at litellm/proxy/pass_through_endpoints/pass_through_endpoints.py:251

        # skip router if user passed their key
        if "api_key" in data:
            llm_response = asyncio.create_task(litellm.aadapter_completion(**data))
        elif llm_router is not None and llm_router.is_recognized_model(data["model"]):
            llm_response = asyncio.create_task(llm_router.aadapter_completion(**data))
        elif (
            llm_router is not None
            and data["model"] not in router_model_names
            and (llm_router.default_deployment is not None or len(llm_router.pattern_router.patterns) > 0)
        ):  # check for wildcard routes or default deployment before checking deployment_names
            llm_response = asyncio.create_task(llm_router.aadapter_completion(**data))
        elif (
            llm_router is not None and data["model"] in llm_router.deployment_names
        ):  # model in router deployments, calling a specific deployment on the router (lowest priority)
            llm_response = asyncio.create_task(llm_router.aadapter_completion(**data, specific_deployment=True))
        elif user_model is not None:  # `litellm --model <your-model-name>`
            llm_response = asyncio.create_task(litellm.aadapter_completion(**data))
        else:
            raise HTTPException(
                status_code=status.HTTP_400_BAD_REQUEST,
                detail={"error": "completion: Invalid model name passed in model=" + data.get("model", "")},
            )

        # Await the llm_response task
        response: Final = await llm_response

        hidden_params: Final = getattr(response, "_hidden_params", {}) or {}
        model_id: Final = hidden_params.get("model_id", None) or ""
        cache_key: Final = hidden_params.get("cache_key", None) or ""
        api_base: Final = hidden_params.get("api_base", None) or ""
        response_cost: Final = hidden_params.get("response_cost", None) or ""

        ### ALERTING ###
        asyncio.create_task(
            proxy_logging_obj.update_request_status(litellm_call_id=data.get("litellm_call_id", ""), status="success")
        )

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Use a model name configured on the proxy; call GET /v1/models to list available models for your key.
  2. Fix typos in the model parameter of the request body.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at litellm/proxy/pass_through_endpoints/pass_through_endpoints.py:251 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18). Data as JSON: /api/errors/2d1b18f55b987fa8. Report an issue: GitHub.