from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from core.schemas import HealthResponse from logger import logger from middlewares.exception_handlers import catch_exception_middleware from routes.ask_question import router as ask_router from routes.load_hf_datasets import router as hf_router from routes.upload_pdfs import router as upload_router @asynccontextmanager async def lifespan(app: FastAPI): logger.info("CureMind API starting") yield logger.info("CureMind API stopped") app = FastAPI( title="CureMind API", description=( "AI-powered medical information assistant. " "Combines Retrieval-Augmented Generation with curated medical datasets " "(PubMedQA, USMLE, mental health) and user-uploaded documents." ), version="1.0.0", lifespan=lifespan, ) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"], ) app.middleware("http")(catch_exception_middleware) @app.get("/health", response_model=HealthResponse, tags=["System"]) async def health_check(): return HealthResponse(status="healthy") app.include_router(upload_router, tags=["Documents"]) app.include_router(ask_router, tags=["Chat"]) app.include_router(hf_router, tags=["Datasets"])