InnerVoice / backend /main.py
E5K7's picture
feat: Connect Trusted Circle invites to real Brevo transactional email sender
9a86182
"""
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"}