Spaces:
Sleeping
Sleeping
File size: 1,740 Bytes
d91bbbb 088c0d9 d91bbbb 088c0d9 d91bbbb 088c0d9 d91bbbb 088c0d9 d91bbbb 088c0d9 | 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 | import os
import traceback
from contextlib import asynccontextmanager
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse, JSONResponse
from .database import engine, Base
from .routers import auth_router, proxy_config_router, proxy_endpoint_router
@asynccontextmanager
async def lifespan(app: FastAPI):
Base.metadata.create_all(bind=engine)
yield
app = FastAPI(
title="Anthropic ↔ OpenAI Proxy",
description="Converts Anthropic API calls to OpenAI-compatible backend calls via LiteLLM",
version="1.0.0",
lifespan=lifespan,
)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Global exception handler — 500 errors ka actual reason dikhayega
@app.exception_handler(Exception)
async def global_exception_handler(request: Request, exc: Exception):
return JSONResponse(
status_code=500,
content={
"detail": str(exc),
"type": type(exc).__name__,
"trace": traceback.format_exc().splitlines()[-5:], # last 5 lines
},
)
app.include_router(auth_router.router)
app.include_router(proxy_config_router.router)
app.include_router(proxy_endpoint_router.router)
_static_dir = os.path.join(os.path.dirname(__file__), "static")
app.mount("/static", StaticFiles(directory=_static_dir), name="static")
@app.get("/", include_in_schema=False)
def serve_ui():
return FileResponse(os.path.join(_static_dir, "index.html"))
@app.get("/health")
def health():
return {
"status": "ok",
"db": str(engine.url),
} |