From 19808dd44c20ceda0efb01ced6840aec2a9449d9 Mon Sep 17 00:00:00 2001 From: Phillip Tarrant Date: Wed, 26 Nov 2025 10:02:30 -0600 Subject: [PATCH] docs: update rate limit values to match config-based system MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update USAGE_TRACKING.md with new tier limits (50, 200, 1000, unlimited) - Update AI_INTEGRATION.md with new tier limits - Add note that limits are loaded from config (ai_calls_per_day) - Document GET /api/v1/usage endpoint - Update examples to show is_unlimited field - Fix test examples with correct limit values 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- api/docs/AI_INTEGRATION.md | 12 ++++++--- api/docs/USAGE_TRACKING.md | 50 +++++++++++++++++++++++++++----------- 2 files changed, 44 insertions(+), 18 deletions(-) diff --git a/api/docs/AI_INTEGRATION.md b/api/docs/AI_INTEGRATION.md index 77b27b3..4986814 100644 --- a/api/docs/AI_INTEGRATION.md +++ b/api/docs/AI_INTEGRATION.md @@ -473,14 +473,18 @@ monthly = tracker.get_monthly_cost("user_123", 2025, 11) Tier-based daily limits enforced via `app/services/rate_limiter_service.py`. +Limits are loaded from config (`rate_limiting.tiers.{tier}.ai_calls_per_day`). + ### AI Calls (Turns) | Tier | Daily Limit | |------|------------| -| FREE | 20 turns | -| BASIC | 50 turns | -| PREMIUM | 100 turns | -| ELITE | 200 turns | +| FREE | 50 turns | +| BASIC | 200 turns | +| PREMIUM | 1000 turns | +| ELITE | Unlimited | + +A value of `-1` in config means unlimited. ### Custom Actions diff --git a/api/docs/USAGE_TRACKING.md b/api/docs/USAGE_TRACKING.md index fe2fec2..9166709 100644 --- a/api/docs/USAGE_TRACKING.md +++ b/api/docs/USAGE_TRACKING.md @@ -270,14 +270,33 @@ class MonthlyUsageSummary: ### Daily Turn Limits +Limits are loaded from config (`rate_limiting.tiers.{tier}.ai_calls_per_day`): + | Tier | Limit | Cost Level | |------|-------|------------| -| FREE | 20 turns/day | Zero | -| BASIC | 50 turns/day | Low | -| PREMIUM | 100 turns/day | Medium | -| ELITE | 200 turns/day | High | +| FREE | 50 turns/day | Zero | +| BASIC | 200 turns/day | Low | +| PREMIUM | 1000 turns/day | Medium | +| ELITE | Unlimited | High | -Counters reset at midnight UTC. +Counters reset at midnight UTC. A value of `-1` in config means unlimited. + +### Usage API Endpoint + +Get current usage info via `GET /api/v1/usage`: + +```json +{ + "user_id": "user_123", + "user_tier": "free", + "current_usage": 15, + "daily_limit": 50, + "remaining": 35, + "reset_time": "2025-11-27T00:00:00+00:00", + "is_limited": false, + "is_unlimited": false +} +``` ### Custom Action Limits @@ -342,14 +361,15 @@ info = limiter.get_usage_info("user_123", UserTier.PREMIUM) # "user_id": "user_123", # "user_tier": "premium", # "current_usage": 45, -# "daily_limit": 100, -# "remaining": 55, +# "daily_limit": 1000, +# "remaining": 955, # "reset_time": "2025-11-22T00:00:00+00:00", -# "is_limited": False +# "is_limited": False, +# "is_unlimited": False # } -# Get limit for tier -limit = limiter.get_limit_for_tier(UserTier.ELITE) # 200 +# Get limit for tier (-1 means unlimited) +limit = limiter.get_limit_for_tier(UserTier.ELITE) # -1 (unlimited) ``` ### Admin Functions @@ -539,9 +559,11 @@ When rate limited, prompt upgrades: ```python if e.user_tier == UserTier.FREE: - message = "Upgrade to Basic for 50 turns/day!" + message = "Upgrade to Basic for 200 turns/day!" elif e.user_tier == UserTier.BASIC: - message = "Upgrade to Premium for 100 turns/day!" + message = "Upgrade to Premium for 1000 turns/day!" +elif e.user_tier == UserTier.PREMIUM: + message = "Upgrade to Elite for unlimited turns!" ``` --- @@ -585,8 +607,8 @@ def test_log_usage(): def test_rate_limit_exceeded(): limiter = RateLimiterService() - # Exceed free tier limit - for _ in range(20): + # Exceed free tier limit (50 from config) + for _ in range(50): limiter.increment_usage("test_user") with pytest.raises(RateLimitExceeded):