Spaces:
Runtime error
Runtime error
| """ | |
| Sentiment Analysis Node - Emotion detection using DistilBERT | |
| Analyzes user input sentiment for tone-aware response generation | |
| """ | |
| from transformers import pipeline | |
| from orchestration.state import ConversationState | |
| from typing import Dict, Any | |
| # Global model cache | |
| _sentiment_model = None | |
| def get_sentiment_model(): | |
| """Load model once and cache""" | |
| global _sentiment_model | |
| if _sentiment_model is None: | |
| _sentiment_model = pipeline( | |
| "sentiment-analysis", | |
| model="distilbert-base-uncased-finetuned-sst-2-english" | |
| ) | |
| return _sentiment_model | |
| def sentiment_analysis_node(state: ConversationState) -> Dict[str, Any]: | |
| """ | |
| Analyze sentiment of user input using DistilBERT | |
| Returns: | |
| state update with sentiment field populated: | |
| {"sentiment": {"label": "POSITIVE|NEGATIVE|NEUTRAL", "score": float}} | |
| """ | |
| try: | |
| # Use cached model | |
| sentiment_pipeline = get_sentiment_model() | |
| # Analyze ONLY user input | |
| result = sentiment_pipeline(state['user_input'])[0] | |
| sentiment = { | |
| "label": result['label'].upper(), # POSITIVE, NEGATIVE, or NEUTRAL | |
| "score": result['score'] | |
| } | |
| return {"sentiment": sentiment} | |
| except Exception as e: | |
| # Default to neutral on error | |
| return {"sentiment": {"label": "NEUTRAL", "score": 0.5}} | |