File size: 2,296 Bytes
0019848
 
6b3b956
0019848
3dbe7a0
 
0019848
 
 
 
 
 
9c47c14
c2d251e
3dbe7a0
0019848
 
 
 
 
 
 
 
 
9c47c14
c2d251e
3dbe7a0
 
0019848
9c47c14
c2d251e
3dbe7a0
6b3b956
0019848
3dbe7a0
6b3b956
 
 
 
 
0019848
6b3b956
0019848
 
6b3b956
0019848
 
6b3b956
 
 
0019848
6b3b956
aaa9136
0019848
 
6b3b956
 
0019848
6b3b956
 
 
 
 
0019848
 
6b3b956
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import json
from fastapi import APIRouter, Depends, HTTPException, Request, Response
from fastapi.responses import StreamingResponse, JSONResponse
from api.auth import verify_app_secret
from api.config import ALLOWED_MODELS
from api.utils import process_non_streaming_response, process_streaming_response
from api.logger import setup_logger

logger = setup_logger(__name__)

router = APIRouter()

@router.options("/v1/chat/completions")
@router.options("/api/v1/chat/completions")
async def chat_completions_options():
    return Response(
        status_code=200,
        headers={
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Methods": "POST, OPTIONS",
            "Access-Control-Allow-Headers": "Content-Type, Authorization",
        },
    )

@router.get("/v1/models")
@router.get("/api/v1/models")
async def list_models():
    return {"object": "list", "data": ALLOWED_MODELS}

@router.post("/v1/chat/completions")
@router.post("/api/v1/chat/completions")
async def chat_completions(
    request: Request, app_secret: str = Depends(verify_app_secret)
):
    logger.info("Entering chat_completions route")
    request_data = await request.json()
    model = request_data.get('model')
    if not model:
        raise HTTPException(status_code=400, detail="Model is required")
    logger.info(f"Processing chat completion request for model: {model}")

    if model not in [model_dict["id"] for model_dict in ALLOWED_MODELS]:
        raise HTTPException(
            status_code=400,
            detail=f"Model {model} is not allowed. Allowed models are: {', '.join(model['id'] for model in ALLOWED_MODELS)}",
        )

    stream = request_data.get('stream', False)

    if stream:
        logger.info("Streaming response")
        response = await process_streaming_response(request_data)
        return StreamingResponse(response, media_type="text/event-stream")
    else:
        logger.info("Non-streaming response")
        response = await process_non_streaming_response(request_data)
        return JSONResponse(content=response)

@router.get('/')
@router.get('/healthz')
@router.get('/ready')
@router.get('/alive')
@router.get('/status')
@router.get("/health")
def health_check(request: Request):
    return JSONResponse(content={"status": "ok"})