{"record":{"id":"42f8dbb14b6e63f6","repo":"BerriAI/litellm","slug":"key-user-api-key-dict-api-key-over-available-tpm","errorCode":null,"errorMessage":"Key={user_api_key_dict.api_key} over available TPM={available_tpm}. Model TPM={model_tpm}, Active keys={active_projects}","messagePattern":"Key=(.+?) over available TPM=(.+?)\\. Model TPM=(.+?), Active keys=(.+?)","errorType":"http","errorClass":"ProxyRateLimitError","httpStatus":429,"severity":"error","filePath":"litellm/proxy/hooks/dynamic_rate_limiter.py","lineNumber":208,"sourceCode":"    ):  # raise exception if invalid, return a str for the user to receive - if rejected, or return a modified dictionary for passing into litellm\n        \"\"\"\n        - For a model group\n        - Check if tpm/rpm available\n        - Raise RateLimitError if no tpm/rpm available\n        \"\"\"\n        if \"model\" in data:\n            key_priority: Final[str | None] = user_api_key_dict.metadata.get(\"priority\", None)\n            (\n                available_tpm,\n                available_rpm,\n                model_tpm,\n                model_rpm,\n                active_projects,\n            ) = await self.check_available_usage(model=data[\"model\"], priority=key_priority)\n            ### CHECK TPM ###\n            if available_tpm is not None and available_tpm == 0:\n                resolved_model, llm_provider = resolve_llm_provider_for_rate_limit(data.get(\"model\"))\n                raise ProxyRateLimitError(\n                    detail={\n                        \"error\": f\"Key={user_api_key_dict.api_key} over available TPM={available_tpm}. Model TPM={model_tpm}, Active keys={active_projects}\"\n                    },\n                    rate_limit_type=RateLimitType.TOKENS,\n                    model=resolved_model,\n                    llm_provider=llm_provider,\n                )\n            ### CHECK RPM ###\n            elif available_rpm is not None and available_rpm == 0:\n                resolved_model, llm_provider = resolve_llm_provider_for_rate_limit(data.get(\"model\"))\n                raise ProxyRateLimitError(\n                    detail={\n                        \"error\": f\"Key={user_api_key_dict.api_key} over available RPM={available_rpm}. Model RPM={model_rpm}, Active keys={active_projects}\"\n                    },\n                    rate_limit_type=RateLimitType.REQUESTS,\n                    model=resolved_model,\n                    llm_provider=llm_provider,\n                )","sourceCodeStart":190,"sourceCodeEnd":226,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/hooks/dynamic_rate_limiter.py#L190-L226","documentation":"Error \"Key={user_api_key_dict.api_key} over available TPM={available_tpm}. Model TPM={model_tpm}, Active keys={active_projects}\" thrown in BerriAI/litellm.","triggerScenarios":"Thrown at litellm/proxy/hooks/dynamic_rate_limiter.py:208 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Reduce request token throughput for this key.","Wait for other active keys' usage to subside so TPM frees up.","Request a higher TPM allocation for the model."],"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"}