BerriAI/litellm · error · ProxyRateLimitError

Model capacity reached for {model}. Priority: {priority}, Ra

Error message

Model capacity reached for {model}. Priority: {priority}, Rate limit type: {status['rate_limit_type']}, Model TPM: {model_group_info.tpm if model_group_info.tpm is not None else 'not configured'}, Model RPM: {model_group_info.rpm if model_group_info.rpm is not None else 'not configured'}, Remaining: {status['limit_remaining']}

What it means

Error "Model capacity reached for {model}. Priority: {priority}, Rate limit type: {status['rate_limit_type']}, Model TPM: {model_group_info.tpm if model_group_info.tpm is not None else 'not configured'}, Model RPM: {model_group_info.rpm if model_group_info.rpm is not None else 'not configured'}, Remaining: {status['limit_remaining']}" thrown in BerriAI/litellm.

Source

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

            "requests": 1,
            "tokens": 0,
        }
        atomic_response: Final = await self.v3_limiter.atomic_check_and_increment_by_n(
            descriptors=enforced_descriptors,
            increments=[per_request_increment for _ in enforced_descriptors],
            parent_otel_span=user_api_key_dict.parent_otel_span,
        )

        verbose_proxy_logger.debug("Atomic check+increment response: %s", json.dumps(atomic_response, indent=2))

        if atomic_response["overall_code"] == "OVER_LIMIT":
            resolved_model, llm_provider = resolve_llm_provider_for_rate_limit(model)
            for status in atomic_response["statuses"]:
                if status["code"] != "OVER_LIMIT":
                    continue
                descriptor_key = status["descriptor_key"]
                if descriptor_key == "model_saturation_check":
                    raise ProxyRateLimitError(
                        detail={
                            "error": f"Model capacity reached for {model}. "
                            f"Priority: {priority}, "
                            f"Rate limit type: {status['rate_limit_type']}, "
                            f"Model TPM: {model_group_info.tpm if model_group_info.tpm is not None else 'not configured'}, "
                            f"Model RPM: {model_group_info.rpm if model_group_info.rpm is not None else 'not configured'}, "
                            f"Remaining: {status['limit_remaining']}"
                        },
                        headers={
                            "retry-after": str(self.v3_limiter.window_size),
                            "rate_limit_type": str(status["rate_limit_type"]),
                            "x-litellm-priority": priority or "default",
                        },
                        rate_limit_type=map_v3_rate_limit_type(status["rate_limit_type"]),
                        model=resolved_model,
                        llm_provider=llm_provider,
                    )
                if descriptor_key == "priority_model":

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Retry after capacity frees up or the limit window resets.
  2. Route traffic to another deployment of the model with available capacity.
  3. Request higher TPM/RPM limits for the model group.

When it happens

Trigger: Thrown at litellm/proxy/hooks/dynamic_rate_limiter_v3.py:466 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/031393dc9ef30988. Report an issue: GitHub.