Spaces:
Sleeping
Sleeping
| import json | |
| from fastapi import APIRouter, Depends, HTTPException, Request, Response | |
| from fastapi.responses import StreamingResponse | |
| from api.auth import verify_app_secret | |
| from api.config import ALLOWED_MODELS | |
| from api.models import ChatRequest | |
| from api.utils import process_non_streaming_response, process_streaming_response | |
| from api.logger import setup_logger | |
| logger = setup_logger(__name__) | |
| router = APIRouter() | |
| 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", | |
| }, | |
| ) | |
| async def list_models(): | |
| return {"object": "list", "data": ALLOWED_MODELS} | |
| async def chat_completions( | |
| request: ChatRequest, app_secret: str = Depends(verify_app_secret) | |
| ): | |
| logger.info("Entering chat_completions route") | |
| logger.info(f"Received request: {request}") | |
| logger.info(f"App secret: {app_secret}") | |
| logger.info(f"Received chat completion request for model: {request.model}") | |
| 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. Allowed models are: {', '.join(model['id'] for model in ALLOWED_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") | |
| return await process_non_streaming_response(request) | |
| def health_check(request: Request): | |
| return Response(content=json.dumps({"status": "ok"}), media_type="application/json") | |