{"record":{"id":"031393dc9ef30988","repo":"BerriAI/litellm","slug":"model-capacity-reached-for-model-priority-pri","errorCode":null,"errorMessage":"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']}","messagePattern":"Model capacity reached for (.+?)\\. Priority: (.+?), Rate limit type: (.+?), Model TPM: (.+?), Model RPM: (.+?), Remaining: (.+?)","errorType":"http","errorClass":"ProxyRateLimitError","httpStatus":429,"severity":"error","filePath":"litellm/proxy/hooks/dynamic_rate_limiter_v3.py","lineNumber":466,"sourceCode":"            \"requests\": 1,\n            \"tokens\": 0,\n        }\n        atomic_response: Final = await self.v3_limiter.atomic_check_and_increment_by_n(\n            descriptors=enforced_descriptors,\n            increments=[per_request_increment for _ in enforced_descriptors],\n            parent_otel_span=user_api_key_dict.parent_otel_span,\n        )\n\n        verbose_proxy_logger.debug(\"Atomic check+increment response: %s\", json.dumps(atomic_response, indent=2))\n\n        if atomic_response[\"overall_code\"] == \"OVER_LIMIT\":\n            resolved_model, llm_provider = resolve_llm_provider_for_rate_limit(model)\n            for status in atomic_response[\"statuses\"]:\n                if status[\"code\"] != \"OVER_LIMIT\":\n                    continue\n                descriptor_key = status[\"descriptor_key\"]\n                if descriptor_key == \"model_saturation_check\":\n                    raise ProxyRateLimitError(\n                        detail={\n                            \"error\": f\"Model capacity reached for {model}. \"\n                            f\"Priority: {priority}, \"\n                            f\"Rate limit type: {status['rate_limit_type']}, \"\n                            f\"Model TPM: {model_group_info.tpm if model_group_info.tpm is not None else 'not configured'}, \"\n                            f\"Model RPM: {model_group_info.rpm if model_group_info.rpm is not None else 'not configured'}, \"\n                            f\"Remaining: {status['limit_remaining']}\"\n                        },\n                        headers={\n                            \"retry-after\": str(self.v3_limiter.window_size),\n                            \"rate_limit_type\": str(status[\"rate_limit_type\"]),\n                            \"x-litellm-priority\": priority or \"default\",\n                        },\n                        rate_limit_type=map_v3_rate_limit_type(status[\"rate_limit_type\"]),\n                        model=resolved_model,\n                        llm_provider=llm_provider,\n                    )\n                if descriptor_key == \"priority_model\":","sourceCodeStart":448,"sourceCodeEnd":484,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/hooks/dynamic_rate_limiter_v3.py#L448-L484","documentation":"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.","triggerScenarios":"Thrown at litellm/proxy/hooks/dynamic_rate_limiter_v3.py:466 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry after capacity frees up or the limit window resets.","Route traffic to another deployment of the model with available capacity.","Request higher TPM/RPM limits for the model group."],"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-14T00:17:10.932Z"}