Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI, HTTPException | |
| from pydantic import BaseModel | |
| from transformers import pipeline | |
| #Inicializamos la aplicación FastAPI | |
| app = FastAPI( | |
| title="ToxicFilterAI API", | |
| description="Microservicio de inferencia para detección de toxicidad en comentarios", | |
| version="1.0.0" | |
| ) | |
| #Cargamos el modelo al arrancar el contenedor | |
| print("⏳ Descargando y montando modelo desde Hugging Face Hub...") | |
| clasificador = pipeline("text-classification", modelo="ToxicFilterAI/distilbert-toxicidad") | |
| print("✅ Modelo cargado en memoria.") | |
| #Definimos el contrato de datos (Lo que esperamos recibir) | |
| class PeticionComentario(BaseModel): | |
| texto: str | |
| #Endpoint de Health Check (Buenas prácticas de infraestructura) | |
| def health_check(): | |
| return {"status": "online", "message": "Motor de inferencia operativo"} | |
| #Endpoint principal de predicción | |
| def predecir_toxicidad(peticion: PeticionComentario): | |
| if not peticion.texto.strip(): | |
| raise HTTPException(status_code=400, detail="El texto no puede estar vacío") | |
| resultado = clasificador(peticion.texto)[0] | |
| return { | |
| "texto_analizado": peticion.texto, | |
| "etiqueta_modelo": resultado['label'], | |
| "score_confianza": round(float(resultado['score']), 4), | |
| "es_toxico": True if resultado['label'] in ["Toxic", "NEGATIVE"] else False | |
| } |