Update api/routes.py
Browse files- 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,
|
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),
|
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:
|