from transformers import pipeline import os from typing import Dict # Configuración de entorno para Hugging Face Spaces os.environ["TRANSFORMERS_CACHE"] = "/tmp/transformers" os.environ["HF_HOME"] = "/tmp/huggingface" class SentimentAnalysisService: def __init__(self): try: print("[LOG] Cargando pipeline con modelo BETO...") self.pipeline = pipeline( "sentiment-analysis", model="finiteautomata/beto-sentiment-analysis", top_k=3 # ⬅️ Mostrar las 3 emociones más probables ) print("[LOG] Pipeline cargado correctamente.") except Exception as e: print("[ERROR] Falló la carga del modelo:", e) raise def analyze(self, transcript: str) -> Dict: print("[LOG] Análisis de transcripción recibido.") try: results = self.pipeline(transcript) print("[LOG] Resultado del modelo:", results) # Emoción dominante = la primera (mayor score) dominant = results[0] emotion_mapping = { "POS": "entusiasta", "NEU": "neutro", "NEG": "frustrado" } dominant_emotion = emotion_mapping.get(dominant['label'], "desconocido") confidence = round(dominant['score'], 2) # Crear diccionario de probabilidades mapeadas emotion_probabilities = { emotion_mapping.get(r['label'], r['label']): round(r['score'], 2) for r in results } except Exception as e: print("[ERROR] Falló la predicción:", e) return { "dominant_emotion": "error", "emotion_probabilities": {}, "confidence": 0.0 } return { "dominant_emotion": dominant_emotion, "emotion_probabilities": emotion_probabilities, "confidence": confidence }