from fastapi import FastAPI, Form, Request from fastapi.responses import HTMLResponse from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates from src.monitoring import generate_drift_report import os from src.model import SentimentModel from contextlib import asynccontextmanager model_container = {} @asynccontextmanager async def lifespan(app: FastAPI): """ Gestisce il ciclo di vita dell'applicazione. Carica il modello in memoria solo dopo l'avvio del server, evitando blocchi. """ print("[LIFESPAN] Avvio del server in corso... Inizializzazione del modello Sentiment.") # Inizializza il modello in modo sicuro all'interno del contesto dell'applicazione model_container["model"] = SentimentModel() print("[LIFESPAN SUCCESS] Modello caricato correttamente in memoria. Server pronto.") yield # Logica opzionale di pulizia allo spegnimento model_container.clear() app = FastAPI(title="MachineInnovators - Reputation Monitor", lifespan=lifespan) # Monta la cartella static per il file HTML app.mount("/static", StaticFiles(directory="static"), name="static") # Configura Jinja2 per leggere il file HTML nella cartella static templates = Jinja2Templates(directory="static") @app.get("/", response_class=HTMLResponse) async def home(request: Request): """ Serve la pagina HTML iniziale. """ return templates.TemplateResponse( request=request, name="home.html", context={} ) @app.get("/report", response_class=HTMLResponse) def view_monitoring_report(): """ Genera il report aggiornato attraverso i dati da Supabase e restituisce la pagina HTML interattiva di Evidently. """ # Calcola il report aggiornato generate_drift_report() report_path = "static/drift_report.html" # Se il calcolo fallisce o non ci sono dati, rimanda un avviso if not os.path.exists(report_path): return HTMLResponse( content="