| import time |
| from abc import ABC, abstractmethod |
|
|
| class BaseAgent(ABC): |
| @abstractmethod |
| def run(self, question: str, file_content: str = "") -> str: |
| """Override this method in your agent implementation""" |
| return "BaseAgent default answer" |
|
|
|
|
| class SimpleRateLimiter: |
| """Simple token rate limiter to avoid Groq overload""" |
| def __init__(self, max_requests_per_minute=30): |
| self.max_requests = max_requests_per_minute |
| self.request_times = [] |
| |
| def wait_if_needed(self): |
| now = time.time() |
| |
| self.request_times = [t for t in self.request_times if now - t < 60] |
| |
| if len(self.request_times) >= self.max_requests: |
| wait_time = 60 - (now - self.request_times[0]) |
| if wait_time > 0: |
| print(f"[RateLimit] Waiting {wait_time:.1f}s...") |
| time.sleep(wait_time) |
| |
| self.request_times.append(time.time()) |
| |