from fastapi import APIRouter, Depends, HTTPException, Request from fastapi.responses import JSONResponse from sqlalchemy.orm import Session from ..database import get_db from .. import models from ..proxy_handler import handle_messages_request router = APIRouter(tags=["Proxy Endpoint"]) def _get_proxy(token: str, db: Session) -> models.ProxyConfig: proxy = db.query(models.ProxyConfig).filter( models.ProxyConfig.proxy_token == token ).first() if not proxy: raise HTTPException(status_code=404, detail="Invalid proxy token") return proxy @router.post("/{token}/v1/messages") async def messages( token: str, request: Request, db: Session = Depends(get_db), ): proxy = _get_proxy(token, db) try: body = await request.json() except Exception: raise HTTPException(status_code=400, detail="Invalid JSON body") result = await handle_messages_request(body, proxy) if isinstance(result, dict): return JSONResponse(content=result) return result @router.get("/{token}/v1/models") def models_list(token: str, db: Session = Depends(get_db)): _get_proxy(token, db) return JSONResponse(content={ "object": "list", "data": [ {"id": "claude-3-opus-20240229", "object": "model"}, {"id": "claude-3-sonnet-20240229", "object": "model"}, {"id": "claude-3-haiku-20240307", "object": "model"}, {"id": "claude-3-5-sonnet-20240620","object": "model"}, ], })