lexguard-backend / app /main.py
Dar4devil's picture
LexGuard backend
c34b339
Raw
History Blame Contribute Delete
1.68 kB
import logging
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app import __version__
from app.config import get_settings
from app.routers import analyze, compare, negotiate, stream
from app.schemas import HealthResponse
from app.services import retrieval
logger = logging.getLogger("lexguard")
@asynccontextmanager
async def lifespan(app: FastAPI):
settings = get_settings()
logging.basicConfig(level=settings.log_level.upper())
logger.info("LexGuard backend starting — model=%s (vertex=%s)", settings.active_model, settings.use_vertex)
retrieval.warmup()
yield
logger.info("LexGuard backend shutting down")
app = FastAPI(
title="LexGuard API",
version=__version__,
description="Multi-agent contract intelligence — Vertex AI Gemini 2.0 Flash",
lifespan=lifespan,
)
settings = get_settings()
app.add_middleware(
CORSMiddleware,
allow_origins=settings.cors_origin_list,
allow_credentials=False,
allow_methods=["GET", "POST", "OPTIONS"],
allow_headers=["*"],
)
app.include_router(analyze.router, prefix="/api")
app.include_router(stream.router, prefix="/api")
app.include_router(negotiate.router, prefix="/api")
app.include_router(compare.router, prefix="/api")
@app.get("/api/health", response_model=HealthResponse)
def health() -> HealthResponse:
return HealthResponse(status="ok", version=__version__, model=settings.active_model)
@app.get("/")
def root() -> dict[str, str]:
return {
"name": "LexGuard API",
"version": __version__,
"docs": "/docs",
"health": "/api/health",
}