VcRlAgent commited on
Commit
4d9cf76
·
1 Parent(s): 04e44eb

Refactor for Headshort and Scene Generation using Instant-ID model hosted in Replicate

Browse files
Files changed (1) hide show
  1. rate_limiter.py +15 -10
rate_limiter.py CHANGED
@@ -8,10 +8,10 @@ import hashlib
8
 
9
 
10
  class RateLimiter:
11
- def __init__(self, session_file: str, daily_limit: int, dev_daily_limit: int):
12
  self.session_file = Path(session_file)
13
  self.daily_limit = daily_limit
14
- self.dev_daily_limit = dev_daily_limit
15
  self.is_dev_mode = os.getenv("DEV_MODE", "false").lower() == "true"
16
 
17
  # Create session file if doesn't exist
@@ -31,11 +31,16 @@ class RateLimiter:
31
  with open(self.session_file, 'w') as f:
32
  json.dump(data, f, indent=2)
33
 
34
- def _get_device_id(self, request: dict) -> str:
35
  """Generate consistent device ID from request headers"""
36
- # Use IP + User-Agent for fingerprinting
37
- ip = request.get("client", {}).get("host", "unknown")
38
- user_agent = request.get("headers", {}).get("user-agent", "unknown")
 
 
 
 
 
39
 
40
  # Hash to create stable ID
41
  fingerprint = f"{ip}:{user_agent}"
@@ -59,7 +64,7 @@ class RateLimiter:
59
 
60
  return cleaned
61
 
62
- def check_limit(self, request: dict) -> Tuple[bool, int, datetime]:
63
  """
64
  Check if device has exceeded rate limit
65
 
@@ -70,7 +75,7 @@ class RateLimiter:
70
  data = self._load_data()
71
  data = self._cleanup_expired(data)
72
 
73
- limit = self.dev_daily_limit if self.is_dev_mode else self.daily_limit
74
  now = datetime.now(timezone.utc)
75
 
76
  if device_id not in data:
@@ -97,7 +102,7 @@ class RateLimiter:
97
 
98
  return allowed, remaining, reset_time
99
 
100
- def increment(self, request: dict):
101
  """Increment usage count for device"""
102
  device_id = self._get_device_id(request)
103
  data = self._load_data()
@@ -109,7 +114,7 @@ class RateLimiter:
109
  def get_limit_message(self, remaining: int, reset_time: datetime) -> str:
110
  """Generate user-friendly limit message"""
111
  mode = "DEV" if self.is_dev_mode else "Standard"
112
- limit = self.dev_daily_limit if self.is_dev_mode else self.daily_limit
113
 
114
  if remaining > 0:
115
  return f"✅ {remaining}/{limit} generations remaining today ({mode} mode)"
 
8
 
9
 
10
  class RateLimiter:
11
+ def __init__(self, session_file: str, daily_limit: int, dev_limit: int):
12
  self.session_file = Path(session_file)
13
  self.daily_limit = daily_limit
14
+ self.dev_limit = dev_limit
15
  self.is_dev_mode = os.getenv("DEV_MODE", "false").lower() == "true"
16
 
17
  # Create session file if doesn't exist
 
31
  with open(self.session_file, 'w') as f:
32
  json.dump(data, f, indent=2)
33
 
34
+ def _get_device_id(self, request) -> str:
35
  """Generate consistent device ID from request headers"""
36
+ # Handle Gradio Request object
37
+ try:
38
+ ip = getattr(request, 'client', {}).get('host', 'unknown') if hasattr(request, 'client') else 'unknown'
39
+ headers = getattr(request, 'headers', {}) if hasattr(request, 'headers') else {}
40
+ user_agent = headers.get('user-agent', 'unknown') if isinstance(headers, dict) else 'unknown'
41
+ except:
42
+ ip = 'unknown'
43
+ user_agent = 'unknown'
44
 
45
  # Hash to create stable ID
46
  fingerprint = f"{ip}:{user_agent}"
 
64
 
65
  return cleaned
66
 
67
+ def check_limit(self, request) -> Tuple[bool, int, datetime]:
68
  """
69
  Check if device has exceeded rate limit
70
 
 
75
  data = self._load_data()
76
  data = self._cleanup_expired(data)
77
 
78
+ limit = self.dev_limit if self.is_dev_mode else self.daily_limit
79
  now = datetime.now(timezone.utc)
80
 
81
  if device_id not in data:
 
102
 
103
  return allowed, remaining, reset_time
104
 
105
+ def increment(self, request):
106
  """Increment usage count for device"""
107
  device_id = self._get_device_id(request)
108
  data = self._load_data()
 
114
  def get_limit_message(self, remaining: int, reset_time: datetime) -> str:
115
  """Generate user-friendly limit message"""
116
  mode = "DEV" if self.is_dev_mode else "Standard"
117
+ limit = self.dev_limit if self.is_dev_mode else self.daily_limit
118
 
119
  if remaining > 0:
120
  return f"✅ {remaining}/{limit} generations remaining today ({mode} mode)"