BerriAI/litellm · error · HTTPException
Budget enforcement unavailable: the budget reservation could
Error message
Budget enforcement unavailable: the budget reservation could not be written to the spend counter backend, and fail_closed_budget_enforcement is enabled, so the request was rejected to avoid exceeding the configured budget. Retry shortly.
What it means
Error "Budget enforcement unavailable: the budget reservation could not be written to the spend counter backend, and fail_closed_budget_enforcement is enabled, so the request was rejected to avoid exceeding the configured budget. Retry shortly." thrown in BerriAI/litellm.
Source
Thrown at litellm/proxy/spend_tracking/budget_reservation.py:71
class _CounterReservationUnavailable(Exception):
def __init__(
self,
touched_counter: bool = False,
counter_invalidated: bool = False,
) -> None:
self.touched_counter = touched_counter
self.counter_invalidated = counter_invalidated
super().__init__("Counter reservation unavailable")
def _raise_reservation_unavailable(counter_key: str) -> NoReturn:
verbose_proxy_logger.warning(
"fail_closed_budget_enforcement: rejecting request — budget reservation for %s could not be written",
counter_key,
)
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail=(
"Budget enforcement unavailable: the budget reservation could not "
"be written to the spend counter backend, and "
"fail_closed_budget_enforcement is enabled, so the request was "
"rejected to avoid exceeding the configured budget. Retry shortly."
),
)
def get_reserved_counter_keys(budget_reservation: dict | None) -> set:
if not budget_reservation:
return set()
entries: Final = budget_reservation.get("entries") or []
return {
entry["counter_key"] for entry in entries if isinstance(entry, dict) and entry.get("counter_key") is not None
}
View on GitHub (pinned to 77b7c6c40c)
Solutions
- Check the spend counter backend (Redis/DB) connectivity; retry shortly once reservations can be written.
- If fail-closed behavior is not desired, disable fail_closed_budget_enforcement in config.
When it happens
Trigger: Thrown at litellm/proxy/spend_tracking/budget_reservation.py:71 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/d69b1171b71ecdac.
Report an issue: GitHub.