""" main.py — FastAPI application entry point for the RAG API. """ from __future__ import annotations import logging import sys from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from core.database import create_pool, close_pool from core.settings import Settings from routers import search, chat, documents, index, meta # Global settings instance (imported by routers via dependency) app_settings = Settings() def setup_logging(level: str) -> None: logging.basicConfig( level=getattr(logging, level.upper(), logging.INFO), format='%(asctime)s [%(levelname)s] %(name)s: %(message)s', datefmt='%Y-%m-%dT%H:%M:%S', stream=sys.stdout, ) @asynccontextmanager async def lifespan(app: FastAPI): setup_logging(app_settings.log_level) logging.getLogger('rag-api').info('Starting RAG API v%s', app_settings.app_version) await create_pool(app_settings) yield await close_pool() app = FastAPI( title=app_settings.app_title, version=app_settings.app_version, lifespan=lifespan, ) app.add_middleware( CORSMiddleware, allow_origins=app_settings.cors_origins_list, allow_credentials=True, allow_methods=['*'], allow_headers=['*'], ) # Register routers app.include_router(search.router, prefix='/api/v1') app.include_router(chat.router, prefix='/api/v1') app.include_router(documents.router, prefix='/api/v1') app.include_router(index.router, prefix='/api/v1') app.include_router(meta.router, prefix='/api/v1')