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
- Use a model name configured on the proxy; call GET /v1/models to list available models for your key.
- 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.