from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.api.documents import router as documents_router from app.api.onboarding import router as onboarding_router from app.api.voice_onboarding import router as voice_router from app.database import models from app.database.database import Base, engine @asynccontextmanager async def lifespan(app: FastAPI): Base.metadata.create_all(bind=engine) yield app = FastAPI( title="AI Patient Onboarding API", description="Multi-Model Voice-First Hospital Patient Onboarding Engine (Sarvam + OpenAI + Claude + Gemini)", version="1.0.0", lifespan=lifespan, ) # Enable CORS for React Web & Mobile clients app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=False, allow_methods=["*"], allow_headers=["*"], ) @app.options("/{full_path:path}") async def options_preflight(full_path: str): from fastapi import Response, status return Response( status_code=status.HTTP_204_NO_CONTENT, headers={ "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS", "Access-Control-Allow-Headers": "*", }, ) app.include_router(onboarding_router) app.include_router(voice_router) app.include_router(documents_router) @app.get("/health") async def health(): return { "success": True, "service": "AI Patient Onboarding", "status": "healthy", "models": { "speech": "Sarvam AI (Indian Languages) / OpenAI Whisper", "conversation": "OpenAI GPT-4o-mini", "validation": "Claude 3.5 Sonnet", "vision_documents": "Gemini 1.5 Flash", }, }