Spaces:
Running on Zero
Running on Zero
| """ | |
| Configuration constants for the audio-only sentiment analysis module. | |
| This file keeps labels, thresholds, and scoring weights in one place so the | |
| classifier, feature extraction code, backend, and dashboard all use consistent | |
| definitions. | |
| """ | |
| from enum import Enum | |
| class EmotionLabel(str, Enum): | |
| """Supported emotion labels used by the sentiment module.""" | |
| ANGER = "anger" | |
| SADNESS = "sadness" | |
| FEAR = "fear" | |
| DISGUST = "disgust" | |
| HAPPY = "happy" | |
| NEUTRAL = "neutral" | |
| UNKNOWN = "unknown" | |
| class OverallSentiment(str, Enum): | |
| """High-level audio sentiment categories.""" | |
| POSITIVE = "Positive" | |
| NEGATIVE = "Negative" | |
| NEUTRAL = "Neutral" | |
| MIXED = "Mixed" | |
| UNKNOWN = "Unknown" | |
| class IntensityLevel(str, Enum): | |
| """Categorical level used for audio features.""" | |
| LOW = "Low" | |
| MEDIUM = "Medium" | |
| HIGH = "High" | |
| UNKNOWN = "Unknown" | |
| class SentimentShift(str, Enum): | |
| """Direction of emotional change across the call.""" | |
| IMPROVED = "Improved" | |
| WORSENED = "Worsened" | |
| UNCHANGED = "Unchanged" | |
| MIXED = "Mixed" | |
| UNKNOWN = "Unknown" | |
| class RiskLevel(str, Enum): | |
| """Risk level derived from the audio escalation score.""" | |
| LOW = "Low" | |
| MEDIUM = "Medium" | |
| HIGH = "High" | |
| CRITICAL = "Critical" | |
| UNKNOWN = "Unknown" | |
| class ConfidenceLevel(str, Enum): | |
| """Confidence level for model predictions.""" | |
| LOW = "Low" | |
| MEDIUM = "Medium" | |
| HIGH = "High" | |
| UNKNOWN = "Unknown" | |
| NEGATIVE_EMOTIONS = { | |
| EmotionLabel.ANGER, | |
| EmotionLabel.SADNESS, | |
| EmotionLabel.FEAR, | |
| EmotionLabel.DISGUST, | |
| } | |
| POSITIVE_EMOTIONS = { | |
| EmotionLabel.HAPPY, | |
| } | |
| CALM_EMOTIONS = { | |
| EmotionLabel.NEUTRAL, | |
| } | |
| # CREMA-D filename emotion codes. | |
| # Example filename: | |
| # 1001_DFA_ANG_XX.wav | |
| CREMAD_EMOTION_MAP = { | |
| "ANG": EmotionLabel.ANGER, | |
| "SAD": EmotionLabel.SADNESS, | |
| "FEA": EmotionLabel.FEAR, | |
| "DIS": EmotionLabel.DISGUST, | |
| "HAP": EmotionLabel.HAPPY, | |
| "NEU": EmotionLabel.NEUTRAL, | |
| } | |
| # These weights will be used later when calculating audio_escalation_score. | |
| # Defining them now makes the scoring method explainable and consistent. | |
| ESCALATION_SCORE_WEIGHTS = { | |
| "anger_probability": 0.25, | |
| "stress_probability": 0.20, | |
| "negative_emotion_probability": 0.20, | |
| "vocal_intensity_score": 0.10, | |
| "pitch_variability_score": 0.10, | |
| "speech_rate_score": 0.05, | |
| "pause_score": 0.05, | |
| "overlap_score": 0.05, | |
| } |