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
3.28 kB
import unittest
from src.aspect_sentiment.analytics_engine import compute_conversation_analytics
class ConversationAnalyticsTests(unittest.TestCase):
def test_analytics_computation(self):
partial_result = {
"diarizationMetrics": {
"speaker_duration": {"Agent": 45.0, "Customer": 30.0},
"silence_duration": 5.0,
"total_duration": 80.0,
"interruptions": {"Agent": 1, "Customer": 0}
},
"diarizedTranscript": [],
"reconstructedTranscript": [
{"speaker": "Agent", "start": 0.0, "end": 2.0},
{"speaker": "Customer", "start": 3.0, "end": 6.0},
{"speaker": "Agent", "start": 7.5, "end": 9.5}
],
"conversationStages": [],
"sentimentTimeline": {},
"summary": {
"averageScore": 0.35,
},
"conversionScore": {
"probability": 0.82,
"label": "hot",
"confidence": 0.64,
},
"pipelineFeatures": {
"hesitation_score": 1,
},
"conversationSummary": {
"confidence": 0.85
},
"rawFeatures": [
{"label": "OBJECTION"},
{"label": "INTENT"}
],
"metadata": {
"speakerConfidence": {"Speaker_A": 0.9, "Speaker_B": 0.8}
}
}
latencies = {
"vad_diarization_ms": 150.0,
"embeddings_ms": 90.0,
"classifier_ms": 30.0,
"llama_extraction_ms": 500.0,
"xgboost_prediction_ms": 20.0
}
analytics = compute_conversation_analytics(partial_result, latencies)
# Verify required keys are present
self.assertIn("agentQuality", analytics)
self.assertIn("customerEngagement", analytics)
self.assertIn("speakingRatio", analytics)
self.assertIn("averageResponseTime", analytics)
self.assertIn("interruptions", analytics)
self.assertIn("deadAir", analytics)
self.assertIn("conversationDuration", analytics)
self.assertIn("talkListenRatio", analytics)
self.assertIn("objectionSignalsCount", analytics)
self.assertIn("buyingSignalsCount", analytics)
self.assertIn("riskScore", analytics)
self.assertIn("followUpPriority", analytics)
self.assertIn("conversationQualityScore", analytics)
self.assertIn("profiling", analytics)
self.assertIn("calibratedConfidence", analytics)
# Check specific values
self.assertEqual(analytics["objectionSignalsCount"], 1)
self.assertEqual(analytics["buyingSignalsCount"], 1)
self.assertEqual(analytics["speakingRatio"]["Agent"], 0.6)
self.assertEqual(analytics["speakingRatio"]["Customer"], 0.4)
self.assertEqual(analytics["talkListenRatio"], 1.5)
self.assertEqual(analytics["followUpPriority"], "High")
self.assertEqual(analytics["profiling"]["totalLatencyMs"], 790.0)
self.assertGreater(analytics["calibratedConfidence"], 0.5)
if __name__ == "__main__":
unittest.main()