BerriAI/litellm · error · ProxyRateLimitError

Rate limit exceeded

Error message

Rate limit exceeded

What it means

Error "Rate limit exceeded" thrown in BerriAI/litellm.

Source

Thrown at litellm/proxy/hooks/dynamic_rate_limiter_v3.py:524

                        model=resolved_model,
                        llm_provider=llm_provider,
                    )

            # Fail-closed guard: overall_code says OVER_LIMIT but no status
            # matched a descriptor key we know how to translate into a 429.
            # Refuse the request rather than silently fall through and let an
            # over-limit request proceed to the model. Without this, a future
            # caller wiring an unfamiliar descriptor into enforced_descriptors
            # would silently bypass the rate limit.
            offending: Final = next(
                (s for s in atomic_response["statuses"] if s["code"] == "OVER_LIMIT"),
                None,
            )
            verbose_proxy_logger.error(
                "Dynamic rate limiter: OVER_LIMIT response with unknown descriptor_key(s) — refusing request. response=%s",
                atomic_response,
            )
            raise ProxyRateLimitError(
                detail={
                    "error": "Rate limit exceeded",
                    "descriptor_key": (offending["descriptor_key"] if offending else "unknown"),
                    "rate_limit_type": (str(offending["rate_limit_type"]) if offending else "unknown"),
                },
                rate_limit_type=map_v3_rate_limit_type(offending["rate_limit_type"] if offending else None),
                headers={
                    "retry-after": str(self.v3_limiter.window_size),
                    "x-litellm-priority": priority or "default",
                },
                model=resolved_model,
                llm_provider=llm_provider,
            )

        # If priority is NOT enforced (saturation below threshold) but
        # priority_descriptors exist, increment them for tracking only — no
        # check, no rollback. This matches the prior tracking semantics.
        #

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Reduce request rate and retry after the rate limit window resets.
  2. Review and raise the configured rate limits if the volume is legitimate.

When it happens

Trigger: Thrown at litellm/proxy/hooks/dynamic_rate_limiter_v3.py:524 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/54071d20761fdff0. Report an issue: GitHub.