Spaces:
Sleeping
Sleeping
| 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") | |
| 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") | |
| def health() -> HealthResponse: | |
| return HealthResponse(status="ok", version=__version__, model=settings.active_model) | |
| def root() -> dict[str, str]: | |
| return { | |
| "name": "LexGuard API", | |
| "version": __version__, | |
| "docs": "/docs", | |
| "health": "/api/health", | |
| } | |