File size: 2,268 Bytes
5901dea
 
0019848
 
5901dea
0019848
5901dea
3dbe7a0
5901dea
0019848
 
 
 
 
 
9c47c14
c2d251e
3dbe7a0
0019848
 
 
 
 
 
 
 
 
9c47c14
c2d251e
3dbe7a0
5901dea
 
0019848
9c47c14
c2d251e
3dbe7a0
5901dea
0019848
3dbe7a0
5901dea
0019848
5901dea
0019848
 
5901dea
0019848
 
5901dea
0019848
5901dea
0019848
 
5901dea
 
 
 
 
 
 
 
0019848
 
5901dea
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
# api/routes.py

import json
from fastapi import APIRouter, Depends, HTTPException, Request, Response
from fastapi.responses import StreamingResponse
from api.auth import verify_app_secret
from api.models import ChatRequest
from api.utils import process_non_streaming_response, process_streaming_response
from api.providers import AmigoChat
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():
    allowed_models = [{"id": model, "name": model} for model in AmigoChat.models]
    return {"object": "list", "data": allowed_models}

@router.post("/v1/chat/completions")
@router.post("/api/v1/chat/completions")
async def chat_completions(
    request: ChatRequest, app_secret: str = Depends(verify_app_secret)
):
    logger.info("Entering chat_completions route")
    logger.info(f"Processing chat completion request for model: {request.model}")

    if request.model not in AmigoChat.models and request.model not in AmigoChat.model_aliases:
        raise HTTPException(
            status_code=400,
            detail=f"Model {request.model} is not allowed. Allowed models are: {', '.join(AmigoChat.models)}",
        )

    if request.stream:
        logger.info("Streaming response")
        return StreamingResponse(process_streaming_response(request), media_type="text/event-stream")
    else:
        logger.info("Non-streaming response")
        response = await process_non_streaming_response(request)
        return Response(content=json.dumps(response), media_type="application/json")

@router.route('/')
@router.route('/healthz')
@router.route('/ready')
@router.route('/alive')
@router.route('/status')
@router.get("/health")
def health_check(request: Request):
    return Response(content=json.dumps({"status": "ok"}), media_type="application/json")