Niansuh commited on
Commit
715c358
·
verified ·
1 Parent(s): b106901

Update api/routes.py

Browse files
Files changed (1) hide show
  1. api/routes.py +17 -40
api/routes.py CHANGED
@@ -1,31 +1,15 @@
1
  import json
2
  from fastapi import APIRouter, Depends, HTTPException, Request, Response
3
  from fastapi.responses import StreamingResponse
4
- from slowapi import Limiter
5
- from slowapi.util import get_remote_address
6
- from slowapi.errors import RateLimitExceeded
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
- from api.rpmlimits import check_rate_limit
13
 
14
- # Set up logging
15
  logger = setup_logger(__name__)
16
 
17
- # Initialize the router and limiter
18
  router = APIRouter()
19
- limiter = Limiter(key_func=get_remote_address)
20
-
21
- # Rate limit exception handler
22
- @router.exception_handler(RateLimitExceeded)
23
- async def rate_limit_exceeded_handler(request: Request, exc: RateLimitExceeded):
24
- return Response(
25
- status_code=429,
26
- content=json.dumps({"error": {"message": "Rate limit exceeded. Please wait and try again.", "type": "rate_limit"}}),
27
- media_type="application/json"
28
- )
29
 
30
  @router.options("/v1/chat/completions")
31
  @router.options("/api/v1/chat/completions")
@@ -46,40 +30,33 @@ async def list_models():
46
 
47
  @router.post("/v1/chat/completions")
48
  @router.post("/api/v1/chat/completions")
49
- @limiter.limit("10/minute") # Limit to 10 requests per minute per IP
50
  async def chat_completions(
51
- request: Request,
52
- app_secret: str = Depends(verify_app_secret)
53
  ):
54
  logger.info("Entering chat_completions route")
55
-
56
- # Parse the JSON body as ChatRequest data
57
- request_body = await request.json()
58
- chat_request = ChatRequest(**request_body)
59
 
60
- logger.info(f"Processing chat completion request for model: {chat_request.model}")
61
-
62
- if chat_request.model not in [model["id"] for model in ALLOWED_MODELS]:
63
  raise HTTPException(
64
  status_code=400,
65
- detail=f"Model {chat_request.model} is not allowed. Allowed models are: {', '.join(model['id'] for model in ALLOWED_MODELS)}",
66
  )
67
 
68
- if chat_request.stream:
69
  logger.info("Streaming response")
70
- return StreamingResponse(
71
- process_streaming_response(chat_request, request),
72
- media_type="text/event-stream"
73
- )
74
  else:
75
  logger.info("Non-streaming response")
76
- return await process_non_streaming_response(chat_request, request)
 
77
 
78
- @router.route('/')
79
- @router.route('/healthz')
80
- @router.route('/ready')
81
- @router.route('/alive')
82
- @router.route('/status')
83
  @router.get("/health")
84
- def health_check(request: Request):
85
- return Response(content=json.dumps({"status": "ok"}), media_type="application/json")
 
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")
 
30
 
31
  @router.post("/v1/chat/completions")
32
  @router.post("/api/v1/chat/completions")
 
33
  async def chat_completions(
34
+ request: ChatRequest, app_secret: str = Depends(verify_app_secret)
 
35
  ):
36
  logger.info("Entering chat_completions route")
37
+ logger.info(f"Received request: {request}")
38
+ logger.info(f"App secret: {app_secret}")
39
+ logger.info(f"Received chat completion request for model: {request.model}")
 
40
 
41
+ if request.model not in [model["id"] for model in ALLOWED_MODELS]:
 
 
42
  raise HTTPException(
43
  status_code=400,
44
+ detail=f"Model {request.model} is not allowed. Allowed models are: {', '.join(model['id'] for model in ALLOWED_MODELS)}",
45
  )
46
 
47
+ if request.stream:
48
  logger.info("Streaming response")
49
+ return StreamingResponse(process_streaming_response(request), media_type="text/event-stream")
 
 
 
50
  else:
51
  logger.info("Non-streaming response")
52
+ return await process_non_streaming_response(request)
53
+
54
 
55
+ @router.route('/')
56
+ @router.route('/healthz')
57
+ @router.route('/ready')
58
+ @router.route('/alive')
59
+ @router.route('/status')
60
  @router.get("/health")
61
+ def health_check(request: Request):
62
+ return Response(content=json.dumps({"status": "ok"}), media_type="application/json")