BrianIsaac's picture
fix: implement fixed window rate limiting and resolve analysis history persistence
84b71cf
raw
history blame
1.67 kB
"""Rate limiting module for Portfolio Intelligence Platform.
Provides comprehensive rate limiting capabilities:
- Thread-safe and async token bucket implementations
- Redis-backed distributed rate limiting with in-memory fallback
- Multi-tier rate limiting (anonymous, authenticated, premium)
- Gradio-specific middleware for easy integration
Example usage:
from backend.rate_limiting import (
TieredRateLimiter,
GradioRateLimitMiddleware,
UserTier
)
from backend.config import settings
# Create tiered limiter
limiter = TieredRateLimiter(
tier_limits={
UserTier.ANONYMOUS: (10, 0.1), # 10 requests, refill at 0.1/sec
UserTier.AUTHENTICATED: (50, 0.5),
UserTier.PREMIUM: (200, 2.0),
},
redis_url=settings.redis_url
)
# Create middleware
middleware = GradioRateLimitMiddleware(limiter)
# In Gradio handler
def analysis_handler(portfolio_text: str, request: gr.Request):
middleware.enforce(request) # Raises gr.Error if limit exceeded
# ... rest of handler
"""
from backend.rate_limiting.limiter import (
ThreadSafeTokenBucket,
AsyncTokenBucket,
HybridRateLimiter,
TieredRateLimiter,
GradioRateLimitMiddleware,
UserTier,
RateLimitInfo,
)
from backend.rate_limiting.fixed_window import (
FixedWindowRateLimiter,
TieredFixedWindowLimiter,
)
__all__ = [
"ThreadSafeTokenBucket",
"AsyncTokenBucket",
"HybridRateLimiter",
"TieredRateLimiter",
"GradioRateLimitMiddleware",
"UserTier",
"RateLimitInfo",
"FixedWindowRateLimiter",
"TieredFixedWindowLimiter",
]