""" FastAPI application entry point for InnerVoice backend. """ import os from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from dotenv import load_dotenv load_dotenv() from models.database import init_db from routes.analyze import router as analyze_router from routes.entries import router as entries_router from routes.trends import router as trends_router from routes.alerts import router as alerts_router from routes.chat import router as chat_router from routes.auth import router as auth_router from routes.weekly_report import router as weekly_report_router from routes.prompts import router as prompts_router from routes.trusted_circle import router as trusted_circle_router app = FastAPI( title="InnerVoice API", description="AI-powered emotional wellness tracker backend", version="1.0.0", ) # CORS origins = os.getenv("CORS_ORIGINS", "http://localhost:3000").split(",") app.add_middleware( CORSMiddleware, allow_origins=origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Init DB & Preload Models on startup @app.on_event("startup") def startup(): init_db() print("[InnerVoice] Database initialized.") # Pre-load AI models to prevent latency during the first user request from services.text_emotion import _load_model as load_text_model from services.emotion_analyzer import _load_model as load_audio_model from services.transcriber import _load_model as load_whisper print("[InnerVoice] Preloading AI models (Wav2Vec2, RoBERTa, Whisper)...") load_text_model() load_audio_model() load_whisper() print("[InnerVoice] All models loaded and cached!") # Register routers app.include_router(analyze_router, prefix="/api") app.include_router(entries_router, prefix="/api") app.include_router(trends_router, prefix="/api") app.include_router(alerts_router, prefix="/api") app.include_router(chat_router, prefix="/api") app.include_router(auth_router, prefix="/api") app.include_router(weekly_report_router, prefix="/api") app.include_router(prompts_router, prefix="/api") app.include_router(trusted_circle_router, prefix="/api") @app.get("/api/health") def health(): return {"status": "ok", "service": "InnerVoice API"}