Akbub's picture
deploy: Nexus AI v0.2.0 - SAP C4C Lead Creation UI included in fresh frontend build
d1f3f31
Raw
History Blame Contribute Delete
2.89 kB
import unittest
from src.aspect_sentiment.diarization import TranscriptTurn
from src.aspect_sentiment.sentiment_timeline import (
compute_turn_sentiment,
map_sentiment_label,
compute_sentiment_timeline,
)
class SentimentTimelineTests(unittest.TestCase):
def test_sentiment_label_mapping(self):
# Ready To Buy
t1 = "I am ready to buy this laptop right now. Confirm the order."
score1 = compute_turn_sentiment(t1)
self.assertEqual(map_sentiment_label(t1, score1), "Ready To Buy")
# Interested
t2 = "I am looking for a device with good battery and performance."
score2 = compute_turn_sentiment(t2)
self.assertEqual(map_sentiment_label(t2, score2), "Interested")
# Frustrated
t3 = "This is too expensive and I am disappointed with your delivery delay."
score3 = compute_turn_sentiment(t3)
self.assertEqual(map_sentiment_label(t3, score3), "Frustrated")
# Positive
t4 = "This is a great option. Thank you!"
score4 = compute_turn_sentiment(t4)
self.assertEqual(map_sentiment_label(t4, score4), "Positive")
# Neutral
t5 = "The laptop has 16GB RAM and 512GB SSD."
score5 = compute_turn_sentiment(t5)
self.assertEqual(map_sentiment_label(t5, score5), "Neutral")
def test_sentiment_timeline_generation(self):
turns = [
TranscriptTurn(speaker="Agent", text="This is a test call for the system.", start=0.0, end=2.0),
TranscriptTurn(speaker="Customer", text="I want to buy a gaming laptop but I am frustrated with prices.", start=2.5, end=6.0),
TranscriptTurn(speaker="Agent", text="I understand. We can offer you EMI options and a 10% discount.", start=6.5, end=10.0),
TranscriptTurn(speaker="Customer", text="Oh that is perfect, I am very interested now and ready to buy!", start=10.5, end=14.0),
]
timeline = compute_sentiment_timeline(turns)
# Verify turns length matches input
self.assertEqual(len(timeline["turns"]), 4)
# Check sentimentLabels
self.assertEqual(timeline["turns"][0]["sentimentLabel"], "Neutral")
self.assertEqual(timeline["turns"][1]["sentimentLabel"], "Frustrated")
self.assertEqual(timeline["turns"][3]["sentimentLabel"], "Ready To Buy")
# Check transitions: Frustrated to Ready To Buy etc.
self.assertGreater(timeline["summary"]["transitionCount"], 0)
self.assertEqual(timeline["summary"]["startLabel"], "Neutral")
self.assertEqual(timeline["summary"]["endLabel"], "Ready To Buy")
self.assertEqual(timeline["summary"]["trend"], "Improving")
self.assertGreater(timeline["summary"]["curveConfidence"], 0.0)
if __name__ == "__main__":
unittest.main()