moodlens-api / tests /test_fusion_engine_rules.py
kpatel1607's picture
Upload folder using huggingface_hub
627c7fe verified
Raw
History Blame Contribute Delete
4.3 kB
from app.services.fusion_engine import (
aggregate_statements,
calibrate_sarcasm,
adjust_emotion_with_sarcasm,
calculate_mood_score,
)
def emotion(emotion_name, score=70):
return {
"top_emotions": [{"emotion": emotion_name, "score": score}],
"predicted_emotions": [{"emotion": emotion_name, "score": score}],
}
def sarcasm(probability=0.12):
score = round(probability * 100, 2)
return {
"label": "Sarcastic" if probability >= 0.34 else "Not Sarcastic",
"confidence": "Low",
"decision_reason": "raw",
"model_sarcasm_score": score,
"model_not_sarcasm_score": round(100 - score, 2),
}
def fused_statement(text, raw_emotion="joy", raw_score=72, raw_sarcasm=0.12, previous_negative=False):
raw = emotion(raw_emotion, raw_score)
calibrated = calibrate_sarcasm(text, raw, sarcasm(raw_sarcasm), previous_negative)
final = adjust_emotion_with_sarcasm(text, raw, calibrated, previous_negative)
primary = final["top_emotions"][0]
mood_score = calculate_mood_score(primary["emotion"], primary["score"], calibrated)
return {
"text": text,
"primary_emotion": primary["emotion"],
"mood_score": mood_score,
"sarcasm_label": calibrated["label"],
"sarcasm_score": calibrated["model_sarcasm_score"],
}
def test_clear_sarcasm_from_positive_surface_negative_event():
result = fused_statement("Great, the app crashed during my final demo.")
assert result["sarcasm_label"] == "Sarcastic"
assert result["primary_emotion"] == "annoyance"
assert result["mood_score"] < -15
def test_literal_negative_is_not_sarcastic():
result = fused_statement("The server crashed before the demo.", raw_emotion="sadness")
assert result["sarcasm_label"] == "Not Sarcastic"
assert result["primary_emotion"] == "sadness"
assert result["mood_score"] < -15
def test_literal_positive_resolution_stays_positive():
result = fused_statement("I fixed the issue after debugging for hours and I feel proud.", raw_emotion="joy")
assert result["sarcasm_label"] == "Not Sarcastic"
assert result["primary_emotion"] == "joy"
assert result["mood_score"] > 15
def test_supportive_context_becomes_gratitude():
result = fused_statement("My friend supported me when I was stressed.", raw_emotion="sadness")
assert result["sarcasm_label"] == "Not Sarcastic"
assert result["primary_emotion"] == "gratitude"
assert result["mood_score"] > 15
def test_student_context_positive_surface_is_sarcastic():
result = fused_statement("Wonderful, another surprise test before I finished the assignment.")
assert result["sarcasm_label"] == "Sarcastic"
assert result["primary_emotion"] == "annoyance"
def test_coding_context_positive_surface_is_sarcastic():
result = fused_statement("Perfect, the deployment failed again after saying it was successful.")
assert result["sarcasm_label"] == "Sarcastic"
assert result["primary_emotion"] == "annoyance"
def test_vague_uncertain_stays_near_neutral():
result = fused_statement("Today was certainly something.", raw_emotion="joy")
assert result["sarcasm_label"] == "Uncertain"
assert result["primary_emotion"] == "neutral"
assert -15 <= result["mood_score"] <= 15
def test_short_ambiguous_positive_without_context_is_uncertain():
result = fused_statement("Nice.")
assert result["sarcasm_label"] == "Uncertain"
assert -15 <= result["mood_score"] <= 15
def test_previous_negative_context_makes_positive_surface_likely_sarcastic():
result = fused_statement("Perfect timing.", previous_negative=True)
assert result["sarcasm_label"] == "Likely Sarcastic"
assert result["primary_emotion"] == "annoyance"
def test_multiline_aggregation_weights_sarcasm_and_negative_context():
statements = [
fused_statement("I woke up feeling okay.", raw_emotion="neutral"),
fused_statement("Then the assignment portal crashed before submission.", raw_emotion="sadness"),
fused_statement("Great, exactly what I needed before finals.", previous_negative=True),
]
overall = aggregate_statements(statements)
assert overall["overall_mood"] == "Negative with Sarcasm"
assert overall["sarcasm_count"] == 1