Spaces:
Running
on
Zero
Running
on
Zero
| """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", | |
| ] | |