"""Main application entry point.""" from contextlib import asynccontextmanager from fastapi import FastAPI from src.middlewares.logging import configure_logging, get_logger from src.middlewares.cors import add_cors_middleware from src.middlewares.rate_limit import limiter, _rate_limit_exceeded_handler from slowapi.errors import RateLimitExceeded from src.api.v1.document import router as document_router from src.api.v1.chat import router as chat_router from src.api.v1.room import router as room_router from src.api.v1.users import router as users_router from src.api.v1.db_client import router as db_client_router from src.api.v1.data_catalog import router as data_catalog_router from src.db.postgres.init_db import init_db import os import uvicorn # Configure logging configure_logging() logger = get_logger("main") @asynccontextmanager async def lifespan(app: FastAPI): logger.info("Starting application...") if os.getenv("SKIP_INIT_DB", "false").lower() != "true": await init_db() logger.info("Database initialized") else: logger.info("Skipping database initialization (SKIP_INIT_DB=true)") yield # Create FastAPI app app = FastAPI( title="DataEyond Agentic Service", description="Multi-agent AI backend with RAG capabilities", version="0.1.0", lifespan=lifespan, ) # Add middleware add_cors_middleware(app) app.state.limiter = limiter app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler) # Include routers app.include_router(users_router) app.include_router(document_router) app.include_router(room_router) app.include_router(chat_router) app.include_router(db_client_router) app.include_router(data_catalog_router) @app.get("/") async def root(): """Root endpoint.""" return { "status": "ok", "service": "DataEyond Agentic Service", "version": "0.1.0" } @app.get("/health") async def health_check(): """Health check endpoint.""" return {"status": "healthy"} if __name__ == "__main__": uvicorn.run( "main:app", host="0.0.0.0", port=7860, reload=True )