{"record":{"id":"ca24af5d52f6c21a","repo":"BerriAI/litellm","slug":"rate-limit-exceeded-for-descriptor-key-descrip","errorCode":null,"errorMessage":"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}","messagePattern":"Rate limit exceeded for (.+?): (.+?)\\. Limit type: (.+?)\\. Current limit: (.+?), Remaining: (.+?)\\. Limit resets at: (.+?)","errorType":"http","errorClass":"ProxyRateLimitError","httpStatus":429,"severity":"error","filePath":"litellm/proxy/hooks/parallel_request_limiter_v3.py","lineNumber":2469,"sourceCode":"                descriptor_value = matching_descriptor[\"value\"] if matching_descriptor is not None else \"unknown\"\n\n                now = self._get_current_time().timestamp()\n                reset_time = now + self.window_size\n                reset_time_formatted = datetime.fromtimestamp(reset_time).strftime(\"%Y-%m-%d %H:%M:%S UTC\")\n\n                remaining_display = max(0, status[\"limit_remaining\"])\n                rate_limit_type = status[\"rate_limit_type\"]\n                current_limit = status[\"current_limit\"]\n\n                detail = (\n                    f\"Rate limit exceeded for {descriptor_key}: {descriptor_value}. \"\n                    f\"Limit type: {rate_limit_type}. \"\n                    f\"Current limit: {current_limit}, Remaining: {remaining_display}. \"\n                    f\"Limit resets at: {reset_time_formatted}\"\n                )\n\n                resolved_model, llm_provider = resolve_llm_provider_for_rate_limit(requested_model)\n                raise ProxyRateLimitError(\n                    detail=detail,\n                    headers={\n                        \"retry-after\": str(self.window_size),\n                        \"rate_limit_type\": str(status[\"rate_limit_type\"]),\n                        \"reset_at\": reset_time_formatted,\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\n    async def async_pre_call_hook(\n        self,\n        user_api_key_dict: UserAPIKeyAuth,\n        cache: DualCache,\n        data: dict,\n        call_type: str,\n    ):","sourceCodeStart":2451,"sourceCodeEnd":2487,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/hooks/parallel_request_limiter_v3.py#L2451-L2487","documentation":"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.","triggerScenarios":"Thrown at litellm/proxy/hooks/parallel_request_limiter_v3.py:2469 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Reduce request rate for the limited descriptor and retry after the reset time.","Request a higher limit for the key/user/team from the admin."],"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-14T05:17:10.506Z"}