{"record":{"id":"d78970229380767d","repo":"BerriAI/litellm","slug":"session-budget-exceeded-for-session-session-id","errorCode":null,"errorMessage":"Session budget exceeded for session {session_id}. Current spend: ${current_spend:.4f}, max_budget_per_session: ${max_budget:.2f}.","messagePattern":"Session budget exceeded for session (.+?)\\. Current spend: (.+?), max_budget_per_session: (.+?)\\.","errorType":"http","errorClass":"ProxyRateLimitError","httpStatus":429,"severity":"error","filePath":"litellm/proxy/hooks/max_budget_per_session_limiter.py","lineNumber":115,"sourceCode":"        session_id: Final = self._get_session_id(data)\n\n        if max_budget is None or session_id is None:\n            return None\n\n        max_budget = float(max_budget)\n        cache_key: Final = self._make_cache_key(session_id)\n        current_spend: Final = await self._get_current_spend(cache_key)\n\n        verbose_proxy_logger.debug(\n            \"MaxBudgetPerSessionHandler: session_id=%s, spend=%.4f, max=%.2f\",\n            session_id,\n            current_spend,\n            max_budget,\n        )\n\n        if current_spend >= max_budget:\n            resolved_model, llm_provider = resolve_llm_provider_for_rate_limit(data.get(\"model\") if data else None)\n            raise ProxyRateLimitError(\n                detail=(\n                    f\"Session budget exceeded for session {session_id}. \"\n                    f\"Current spend: ${current_spend:.4f}, \"\n                    f\"max_budget_per_session: ${max_budget:.2f}.\"\n                ),\n                rate_limit_type=RateLimitType.BUDGET,\n                model=resolved_model,\n                llm_provider=llm_provider,\n            )\n\n        return None\n\n    async def async_log_success_event(self, kwargs, response_obj, start_time, end_time):\n        \"\"\"\n        After a successful LLM call, increment the session spend by the response cost.\n        \"\"\"\n        try:\n            litellm_params: Final = kwargs.get(\"litellm_params\") or {}","sourceCodeStart":97,"sourceCodeEnd":133,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/hooks/max_budget_per_session_limiter.py#L97-L133","documentation":"Error \"Session budget exceeded for session {session_id}. Current spend: ${current_spend:.4f}, max_budget_per_session: ${max_budget:.2f}.\" thrown in BerriAI/litellm.","triggerScenarios":"Thrown at litellm/proxy/hooks/max_budget_per_session_limiter.py:115 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Start a new session to reset per-session spend.","Raise max_budget_per_session for the key if the session spend is legitimate."],"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-14T05:17:10.506Z"}