{"record":{"id":"05ccd6fcbf77c0a7","repo":"BerriAI/litellm","slug":"bad-request-either-model-or-completion-respon","errorCode":null,"errorMessage":"Bad Request - Either 'model' or 'completion_response' must be provided","messagePattern":"Bad Request - Either 'model' or 'completion_response' must be provided","errorType":"http","errorClass":"HTTPException","httpStatus":400,"severity":"error","filePath":"litellm/proxy/spend_tracking/spend_management_endpoints.py","lineNumber":2149,"sourceCode":"                output_cost_per_token: Final = _litellm_params.get(\"output_cost_per_token\")\n                if input_cost_per_token is not None or output_cost_per_token is not None:\n                    cost_per_token = CostPerToken(\n                        input_cost_per_token=input_cost_per_token,\n                        output_cost_per_token=output_cost_per_token,\n                    )\n\n                _cost = completion_cost(\n                    model=_litellm_model_name,\n                    messages=request.messages,\n                    custom_cost_per_token=cost_per_token,\n                )\n            else:\n                _cost = completion_cost(model=request.model, messages=request.messages)\n        elif request.completion_response is not None:\n            _completion_response: Final = litellm.ModelResponse(**request.completion_response)\n            _cost = completion_cost(completion_response=_completion_response)\n        else:\n            raise HTTPException(\n                status_code=400,\n                detail=\"Bad Request - Either 'model' or 'completion_response' must be provided\",\n            )\n        return {\"cost\": _cost}\n    except Exception as e:\n        if isinstance(e, HTTPException):\n            raise ProxyException(\n                message=getattr(e, \"detail\", str(e)),\n                type=getattr(e, \"type\", \"None\"),\n                param=getattr(e, \"param\", \"None\"),\n                code=getattr(e, \"status_code\", status.HTTP_400_BAD_REQUEST),\n            )\n        error_msg: Final = f\"{e}\"\n        raise ProxyException(\n            message=getattr(e, \"message\", error_msg),\n            type=getattr(e, \"type\", \"None\"),\n            param=getattr(e, \"param\", \"None\"),\n            code=getattr(e, \"status_code\", 500),","sourceCodeStart":2131,"sourceCodeEnd":2167,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/spend_tracking/spend_management_endpoints.py#L2131-L2167","documentation":"Error \"Bad Request - Either 'model' or 'completion_response' must be provided\" thrown in BerriAI/litellm.","triggerScenarios":"Thrown at litellm/proxy/spend_tracking/spend_management_endpoints.py:2149 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Provide either 'model' (with messages) or 'completion_response' in the spend calculation request."],"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"}