cojournalist-data / usage_tracker.py
Tom
Deploy Phi-3-mini with ZeroGPU and 50 req/day limit
c7dcc92
raw
history blame
2.06 kB
"""
Usage tracking module for rate limiting API requests.
This module provides a simple in-memory usage tracker that limits
the number of requests per user per day.
"""
from datetime import datetime
from typing import Dict
class UsageTracker:
"""Track and limit user requests on a daily basis."""
def __init__(self, daily_limit: int = 100):
"""
Initialize the usage tracker.
Args:
daily_limit: Maximum number of requests per user per day
"""
self.daily_limit = daily_limit
self.usage: Dict[datetime.date, Dict[str, int]] = {}
def check_limit(self, user_id: str) -> bool:
"""
Check if user has exceeded their daily limit and increment counter.
Args:
user_id: Unique identifier for the user (typically IP address)
Returns:
True if request is allowed, False if limit exceeded
"""
today = datetime.now().date()
# Clean up old dates to prevent memory growth
if today not in self.usage:
self.usage = {today: {}}
# Get current usage count for this user
user_count = self.usage[today].get(user_id, 0)
# Check if limit exceeded
if user_count >= self.daily_limit:
return False
# Increment counter
self.usage[today][user_id] = user_count + 1
return True
def get_usage(self, user_id: str) -> int:
"""
Get current usage count for a user today.
Args:
user_id: Unique identifier for the user
Returns:
Number of requests made today
"""
today = datetime.now().date()
return self.usage.get(today, {}).get(user_id, 0)
def get_remaining(self, user_id: str) -> int:
"""
Get remaining requests for a user today.
Args:
user_id: Unique identifier for the user
Returns:
Number of requests remaining today
"""
return max(0, self.daily_limit - self.get_usage(user_id))