{"record":{"id":"884bf124c54d3fc3","repo":"BerriAI/litellm","slug":"bad-request-messages-must-be-provided-if-model","errorCode":null,"errorMessage":"Bad Request - messages must be provided if 'model' is provided","messagePattern":"Bad Request - messages must be provided if 'model' is provided","errorType":"http","errorClass":"HTTPException","httpStatus":400,"severity":"error","filePath":"litellm/proxy/spend_tracking/spend_management_endpoints.py","lineNumber":2096,"sourceCode":"            }]\n            \"usage\": {\n                \"prompt_tokens\": 9,\n                \"completion_tokens\": 12,\n                \"total_tokens\": 21\n            }\n        }\n    }'\n    ```\n    \"\"\"\n    try:\n        from litellm import completion_cost\n        from litellm.cost_calculator import CostPerToken\n        from litellm.proxy.proxy_server import llm_router\n\n        _cost = None\n        if request.model is not None:\n            if request.messages is None:\n                raise HTTPException(\n                    status_code=400,\n                    detail=\"Bad Request - messages must be provided if 'model' is provided\",\n                )\n\n            # check if model in llm_router\n            _model_in_llm_router = None\n            cost_per_token: CostPerToken | None = None\n            if llm_router is not None:\n                if llm_router.model_group_alias is not None and request.model in llm_router.model_group_alias:\n                    # lookup alias in llm_router\n                    _model_group_name: Final = llm_router.model_group_alias[request.model]\n                    for model in llm_router.model_list:\n                        if model.get(\"model_name\") == _model_group_name:\n                            _model_in_llm_router = model\n\n                else:\n                    # no model_group aliases set -> try finding model in llm_router\n                    # find model in llm_router","sourceCodeStart":2078,"sourceCodeEnd":2114,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/spend_tracking/spend_management_endpoints.py#L2078-L2114","documentation":"Error \"Bad Request - messages must be provided if 'model' is provided\" thrown in BerriAI/litellm.","triggerScenarios":"Thrown at litellm/proxy/spend_tracking/spend_management_endpoints.py:2096 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Include a messages array when providing a model for cost calculation, or provide completion_response instead."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}