Spaces:
Running
Running
| # main.py — MERGED VERSION | |
| # Source backend routers (analyze, chat, doctor_upload) + scaffold routers (nutrition, exercise) | |
| import os | |
| from dotenv import load_dotenv | |
| load_dotenv() # Load .env file before anything else | |
| from fastapi import FastAPI | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from contextlib import asynccontextmanager | |
| from app.routers import analyze, chat, doctor_upload, nutrition, exercise | |
| async def lifespan(app: FastAPI): | |
| # Load ML models on startup (if available) | |
| print("Starting ReportRaahat backend...") | |
| try: | |
| from app.ml.model import load_model | |
| load_model() | |
| print("Model loading complete.") | |
| except Exception as e: | |
| print(f"Startup info — models not fully loaded: {e}") | |
| print("Mock endpoints will work for testing.") | |
| yield | |
| print("Shutting down ReportRaahat backend.") | |
| app = FastAPI( | |
| title="ReportRaahat API", | |
| description="AI-powered medical report simplifier for rural India", | |
| version="2.0.0", | |
| lifespan=lifespan | |
| ) | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=[ | |
| "http://localhost:3000", | |
| "http://localhost:7860", | |
| "https://reportraahat.vercel.app", | |
| "https://*.vercel.app", | |
| "https://*.hf.space", | |
| "https://huggingface.co", | |
| ], | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| # ML teammate's routes | |
| app.include_router(analyze.router, tags=["Report Analysis"]) | |
| app.include_router(chat.router, tags=["Doctor Chat"]) | |
| app.include_router(doctor_upload.router, tags=["Human Dialogue"]) | |
| # Member 4's routes | |
| app.include_router(nutrition.router, prefix="/nutrition", tags=["Nutrition"]) | |
| app.include_router(exercise.router, prefix="/exercise", tags=["Exercise"]) | |
| async def root(): | |
| return { | |
| "name": "ReportRaahat API", | |
| "version": "2.0.0", | |
| "status": "running", | |
| "endpoints": { | |
| "analyze": "POST /analyze", | |
| "upload_and_chat": "POST /upload_and_chat (RECOMMENDED - starts dialogue immediately)", | |
| "chat": "POST /chat", | |
| "nutrition": "POST /nutrition", | |
| "exercise": "POST /exercise", | |
| "docs": "/docs" | |
| } | |
| } | |
| async def health(): | |
| return {"status": "healthy"} | |