Spaces:
Running
Running
skip import restrict usage
Browse files
app.py
CHANGED
|
@@ -40,7 +40,33 @@ embeddings="intfloat/e5-base-v2"
|
|
| 40 |
vectorstore = FAISS.load_local("./index", embeddings, allow_dangerous_deserialization=True)
|
| 41 |
|
| 42 |
#%% Include a rate limiter
|
| 43 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
limiter = RateLimiter(max_requests=10, window_minutes=60)
|
| 45 |
|
| 46 |
#%% setup chatbot
|
|
|
|
| 40 |
vectorstore = FAISS.load_local("./index", embeddings, allow_dangerous_deserialization=True)
|
| 41 |
|
| 42 |
#%% Include a rate limiter
|
| 43 |
+
class RateLimiter:
|
| 44 |
+
def __init__(self, max_requests=10, window_minutes=60):
|
| 45 |
+
self.max_requests = max_requests
|
| 46 |
+
self.window = timedelta(minutes=window_minutes)
|
| 47 |
+
self.requests = defaultdict(list)
|
| 48 |
+
|
| 49 |
+
def is_allowed(self, identifier):
|
| 50 |
+
now = datetime.now()
|
| 51 |
+
# Clean old requests
|
| 52 |
+
self.requests[identifier] = [
|
| 53 |
+
req_time for req_time in self.requests[identifier]
|
| 54 |
+
if now - req_time < self.window
|
| 55 |
+
]
|
| 56 |
+
|
| 57 |
+
if len(self.requests[identifier]) < self.max_requests:
|
| 58 |
+
self.requests[identifier].append(now)
|
| 59 |
+
return True
|
| 60 |
+
return False
|
| 61 |
+
|
| 62 |
+
def get_remaining(self, identifier):
|
| 63 |
+
now = datetime.now()
|
| 64 |
+
self.requests[identifier] = [
|
| 65 |
+
req_time for req_time in self.requests[identifier]
|
| 66 |
+
if now - req_time < self.window
|
| 67 |
+
]
|
| 68 |
+
return self.max_requests - len(self.requests[identifier])
|
| 69 |
+
|
| 70 |
limiter = RateLimiter(max_requests=10, window_minutes=60)
|
| 71 |
|
| 72 |
#%% setup chatbot
|