File size: 1,388 Bytes
66a0795
 
 
 
ce01c10
 
 
 
 
 
819c5ca
ce01c10
 
 
 
819c5ca
ce01c10
 
 
 
 
819c5ca
ce01c10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0c0fc2e
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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)
@app.get("/")
def health_check():
    return {"status": "online", "message": "Motor de inferencia operativo"}

#Endpoint principal de predicción
@app.post("/api/v1/predict")
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    
}