diff --git a/.env.example b/.env.example index 24d10a5..c5f26bb 100644 --- a/.env.example +++ b/.env.example @@ -51,8 +51,7 @@ NVIDIA_NIM_INCLUDE_REASONING=true TELEGRAM_API_ID="123456" TELEGRAM_API_HASH="abcdef123456..." ALLOWED_TELEGRAM_USER_ID="YOUR_TELEGRAM_USER_ID" -TELEGRAM_RATE_LIMIT=20 -TELEGRAM_RATE_WINDOW=60 CLAUDE_WORKSPACE="./agent_workspace" ALLOWED_DIR="C:/Users/YourName/projects/myproject" -MAX_CLI_SESSIONS=10 # Maximum parallel Claude CLI instances \ No newline at end of file +MAX_CLI_SESSIONS=10 # Maximum parallel Claude CLI instances +WRAPPER_WS_URL="ws://localhost:8083/ws" \ No newline at end of file diff --git a/api/app.py b/api/app.py index 22ddd8d..f5e0125 100644 --- a/api/app.py +++ b/api/app.py @@ -77,9 +77,7 @@ async def lifespan(app: FastAPI): # Wrap with rate limiter messaging_platform = RateLimitedPlatform( - raw_platform, - rate_limit=settings.telegram_rate_limit, - rate_window=settings.telegram_rate_window, + raw_platform, rps=settings.telegram_rps ) # Create and register message handler diff --git a/config/settings.py b/config/settings.py index 795302f..3c84c40 100644 --- a/config/settings.py +++ b/config/settings.py @@ -64,8 +64,7 @@ class Settings(BaseSettings): telegram_api_id: Optional[str] = None telegram_api_hash: Optional[str] = None allowed_telegram_user_id: Optional[str] = None - telegram_rate_limit: int = 20 - telegram_rate_window: float = 60 + telegram_rps: float = 1.0 claude_workspace: str = "./agent_workspace" allowed_dir: str = "" max_cli_sessions: int = 10 diff --git a/messaging/rate_limited_platform.py b/messaging/rate_limited_platform.py index 48c7097..e14526c 100644 --- a/messaging/rate_limited_platform.py +++ b/messaging/rate_limited_platform.py @@ -14,18 +14,17 @@ class RateLimitedPlatform(MessagingPlatform): are sent according to the global rate limit. """ - def __init__( - self, - platform: MessagingPlatform, - rate_limit: int = 1, - rate_window: float = 1.0, - ): + def __init__(self, platform: MessagingPlatform, rps: float = 1.0): self._platform = platform - self._limiter = GlobalRateLimiter(calls=rate_limit, period=rate_window) + # RateLimitQueue expects calls and period (per). + # For simplicity, we use 1 call per (1/rps) window if rps < 1, + # or int(rps) calls per 1.0s window. + if rps >= 1.0: + self._limiter = GlobalRateLimiter(calls=int(rps), period=1.0) + else: + self._limiter = GlobalRateLimiter(calls=1, period=1.0 / rps) - logger.info( - f"RateLimitedPlatform initialized with {rate_limit} calls per {rate_window}s" - ) + logger.info(f"RateLimitedPlatform initialized with RPS={rps}") @property def name(self) -> str: