Niansuh commited on
Commit
ce1db71
·
verified ·
1 Parent(s): 8c22121

Update api/routes.py

Browse files
Files changed (1) hide show
  1. api/routes.py +20 -2
api/routes.py CHANGED
@@ -1,16 +1,33 @@
1
  import json
2
  from fastapi import APIRouter, Depends, HTTPException, Request, Response
3
  from fastapi.responses import StreamingResponse
 
 
 
4
  from api.auth import verify_app_secret
5
  from api.config import ALLOWED_MODELS
6
  from api.models import ChatRequest
7
  from api.utils import process_non_streaming_response, process_streaming_response
8
  from api.logger import setup_logger
9
 
 
10
  logger = setup_logger(__name__)
11
 
 
12
  router = APIRouter()
13
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  @router.options("/v1/chat/completions")
15
  @router.options("/api/v1/chat/completions")
16
  async def chat_completions_options():
@@ -30,8 +47,9 @@ async def list_models():
30
 
31
  @router.post("/v1/chat/completions")
32
  @router.post("/api/v1/chat/completions")
 
33
  async def chat_completions(
34
- request: Request, # Add Request to capture the HTTP request object
35
  app_secret: str = Depends(verify_app_secret)
36
  ):
37
  logger.info("Entering chat_completions route")
@@ -51,7 +69,7 @@ async def chat_completions(
51
  if chat_request.stream:
52
  logger.info("Streaming response")
53
  return StreamingResponse(
54
- process_streaming_response(chat_request, request), # Pass request as request_obj
55
  media_type="text/event-stream"
56
  )
57
  else:
 
1
  import json
2
  from fastapi import APIRouter, Depends, HTTPException, Request, Response
3
  from fastapi.responses import StreamingResponse
4
+ from slowapi.util import get_remote_address
5
+ from slowapi.errors import RateLimitExceeded
6
+ from slowapi import Limiter
7
  from api.auth import verify_app_secret
8
  from api.config import ALLOWED_MODELS
9
  from api.models import ChatRequest
10
  from api.utils import process_non_streaming_response, process_streaming_response
11
  from api.logger import setup_logger
12
 
13
+ # Set up logging
14
  logger = setup_logger(__name__)
15
 
16
+ # Initialize the router
17
  router = APIRouter()
18
 
19
+ # Set up limiter for rate limiting
20
+ limiter = Limiter(key_func=get_remote_address)
21
+
22
+ # Rate limit exception handler
23
+ @router.exception_handler(RateLimitExceeded)
24
+ async def rate_limit_exceeded_handler(request: Request, exc: RateLimitExceeded):
25
+ return Response(
26
+ status_code=429,
27
+ content=json.dumps({"error": {"message": "Rate limit exceeded. Please wait and try again.", "type": "rate_limit"}}),
28
+ media_type="application/json"
29
+ )
30
+
31
  @router.options("/v1/chat/completions")
32
  @router.options("/api/v1/chat/completions")
33
  async def chat_completions_options():
 
47
 
48
  @router.post("/v1/chat/completions")
49
  @router.post("/api/v1/chat/completions")
50
+ @limiter.limit("10/minute") # Limit to 10 requests per minute per IP
51
  async def chat_completions(
52
+ request: Request,
53
  app_secret: str = Depends(verify_app_secret)
54
  ):
55
  logger.info("Entering chat_completions route")
 
69
  if chat_request.stream:
70
  logger.info("Streaming response")
71
  return StreamingResponse(
72
+ process_streaming_response(chat_request, request),
73
  media_type="text/event-stream"
74
  )
75
  else: