|
from fastapi import FastAPI, Depends, HTTPException, Request, Response |
|
from fastapi.responses import JSONResponse, StreamingResponse |
|
from api.auth import verify_app_secret |
|
from api.config import ALLOWED_MODELS |
|
from api.models import ChatRequest |
|
from api.utils import process_response |
|
from api.logger import setup_logger |
|
|
|
logger = setup_logger(__name__) |
|
|
|
app = FastAPI( |
|
title="Your API", |
|
docs_url=None, |
|
redoc_url=None, |
|
openapi_url=None, |
|
) |
|
|
|
|
|
|
|
|
|
@app.post("/v1/chat/completions") |
|
async def chat_completions( |
|
request: ChatRequest, app_secret: str = Depends(verify_app_secret) |
|
): |
|
logger.info("Processing chat completion request") |
|
if request.model not in [model["id"] for model in ALLOWED_MODELS]: |
|
raise HTTPException( |
|
status_code=400, |
|
detail=f"Model {request.model} is not allowed." |
|
) |
|
|
|
|
|
if request.stream: |
|
|
|
generator = process_response(request, stream=True) |
|
return StreamingResponse(generator, media_type="text/event-stream") |
|
else: |
|
|
|
response_data = await process_response(request) |
|
return JSONResponse(content=response_data) |
|
|
|
|
|
@app.get("/") |
|
@app.get("/healthz") |
|
@app.get("/ready") |
|
@app.get("/alive") |
|
@app.get("/status") |
|
@app.get("/health") |
|
def health_check(request: Request): |
|
return Response(content='{"status": "ok"}', media_type="application/json") |
|
|