BerriAI/litellm · error · ProxyRateLimitError

Rate limit exceeded for {descriptor_key}: {descriptor_value}

Error message

Rate limit exceeded for {descriptor_key}: {descriptor_value}. Limit type: {rate_limit_type}. Current limit: {current_limit}, Remaining: {remaining_display}. Limit resets at: {reset_time_formatted}

What it means

Error "Rate limit exceeded for {descriptor_key}: {descriptor_value}. Limit type: {rate_limit_type}. Current limit: {current_limit}, Remaining: {remaining_display}. Limit resets at: {reset_time_formatted}" thrown in BerriAI/litellm.

Source

Thrown at litellm/proxy/hooks/parallel_request_limiter_v3.py:2469

                descriptor_value = matching_descriptor["value"] if matching_descriptor is not None else "unknown"

                now = self._get_current_time().timestamp()
                reset_time = now + self.window_size
                reset_time_formatted = datetime.fromtimestamp(reset_time).strftime("%Y-%m-%d %H:%M:%S UTC")

                remaining_display = max(0, status["limit_remaining"])
                rate_limit_type = status["rate_limit_type"]
                current_limit = status["current_limit"]

                detail = (
                    f"Rate limit exceeded for {descriptor_key}: {descriptor_value}. "
                    f"Limit type: {rate_limit_type}. "
                    f"Current limit: {current_limit}, Remaining: {remaining_display}. "
                    f"Limit resets at: {reset_time_formatted}"
                )

                resolved_model, llm_provider = resolve_llm_provider_for_rate_limit(requested_model)
                raise ProxyRateLimitError(
                    detail=detail,
                    headers={
                        "retry-after": str(self.window_size),
                        "rate_limit_type": str(status["rate_limit_type"]),
                        "reset_at": reset_time_formatted,
                    },
                    rate_limit_type=map_v3_rate_limit_type(status["rate_limit_type"]),
                    model=resolved_model,
                    llm_provider=llm_provider,
                )

    async def async_pre_call_hook(
        self,
        user_api_key_dict: UserAPIKeyAuth,
        cache: DualCache,
        data: dict,
        call_type: str,
    ):

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Reduce request rate for the limited descriptor and retry after the reset time.
  2. Request a higher limit for the key/user/team from the admin.

When it happens

Trigger: Thrown at litellm/proxy/hooks/parallel_request_limiter_v3.py:2469 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/ca24af5d52f6c21a. Report an issue: GitHub.