{"record":{"id":"553eb4b205d2afc1","repo":"Significant-Gravitas/AutoGPT","slug":"failed-to-reset-usage-553eb4","errorCode":null,"errorMessage":"Failed to reset usage","messagePattern":"Failed to reset usage","errorType":"http","errorClass":"HTTPException","httpStatus":500,"severity":"error","filePath":"autogpt_platform/backend/backend/api/features/admin/rate_limit_admin_routes.py","lineNumber":149,"sourceCode":")\nasync def reset_user_rate_limit(\n    user_id: str = Body(embed=True),\n    reset_weekly: bool = Body(False, embed=True),\n    admin_user_id: str = Security(get_user_id),\n) -> UserRateLimitResponse:\n    \"\"\"Reset a user's daily usage counter (and optionally weekly). Admin-only.\"\"\"\n    logger.info(\n        \"Admin %s resetting rate limit for user %s (reset_weekly=%s)\",\n        admin_user_id,\n        user_id,\n        reset_weekly,\n    )\n\n    try:\n        await reset_user_usage(user_id, reset_weekly=reset_weekly)\n    except Exception as e:\n        logger.exception(\"Failed to reset user usage\")\n        raise HTTPException(status_code=500, detail=\"Failed to reset usage\") from e\n\n    daily_limit, weekly_limit, tier = await get_global_rate_limits(\n        user_id,\n        config.daily_cost_limit_microdollars,\n        config.weekly_cost_limit_microdollars,\n    )\n    usage = await get_usage_status(user_id, daily_limit, weekly_limit, tier=tier)\n    multipliers = await get_tier_multipliers()\n\n    try:\n        resolved_email = await get_user_email_by_id(user_id)\n    except Exception:\n        logger.warning(\"Failed to resolve email for user %s\", user_id, exc_info=True)\n        resolved_email = None\n\n    return UserRateLimitResponse(\n        user_id=user_id,\n        user_email=resolved_email,","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/Significant-Gravitas/AutoGPT/blob/9c8bb5550f446ba5d3046b78896578742495b3cf/autogpt_platform/backend/backend/api/features/admin/rate_limit_admin_routes.py#L131-L167","documentation":"HTTP 500 raised when reset_user_usage(user_id, reset_weekly=...) throws during an admin rate-limit reset. The exception is logged with a traceback (logger.exception) and the response detail is the generic 'Failed to reset usage' — the real cause is only visible server-side. The usage snapshot that follows never runs.","triggerScenarios":"POST to reset a user's usage where the Redis/backend storing usage counters is unreachable, the key schema changed after a version upgrade, or a deserialization error occurs inside reset_user_usage (e.g. unexpected counter value shape).","commonSituations":"Redis down or restarting when the admin clicks 'reset'; auth/ACL mismatch between API and Redis after a config change; schema migration of usage keys not applied; ephemeral Redis in dev losing state mid-operation.","solutions":["Read the 'Failed to reset user usage' traceback in backend logs to identify the root cause","Verify the usage-store (Redis) is reachable and credentials match","Apply/run any pending migrations for usage key schemas, then retry","Retry the reset after fixing the store; the operation is idempotent"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"# Pre-flight: ping the usage/rate-limit store\nassert await redis_client.ping(), \"usage store unreachable; reset will fail\"","typeGuard":null,"tryCatchPattern":"try:\n    resp = await client.post(reset_url)\nexcept httpx.HTTPStatusError as e:\n    if e.response.status_code == 500 and e.response.json()[\"detail\"] == \"Failed to reset usage\":\n        # generic detail: fetch root cause from backend logs (logger.exception)","preventionTips":["Keep Redis highly available for admin operations","Make reset operations idempotent in tooling so retries after 500 are safe","Correlate via logs — the client detail deliberately hides the cause"],"tags":["http-500","rate-limit","redis","admin","usage-reset"],"backgroundTag":null,"analyzedSha":"9c8bb5550f446ba5d3046b78896578742495b3cf","analyzedAt":"2026-08-14T17:17:21.957Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}