import json from typing import Dict, Any from transformers import pipeline from ai.sarvam_client import generate_response, extract_json emotion_classifier = pipeline( "text-classification", model="j-hartmann/emotion-english-distilroberta-base", top_k=None ) def get_emotion_scores(text: str): predictions = emotion_classifier(text)[0] scores = {} for item in predictions: scores[item["label"]] = round(item["score"], 4) return scores def create_emotion_prompt(text: str): scores = get_emotion_scores(text) return f""" Analyze this news article for emotional manipulation. Emotion scores: {scores} Article: {text} Return ONLY this JSON. {{ "fear_detected":false, "urgency_detected":false, "outrage_detected":false, "sensationalism_detected":false, "emotion_intensity":0.0, "explanation":"" }} Output ONLY JSON. Do NOT explain. Do NOT use markdown. """ def get_emotion_from_model(text): return generate_response( create_emotion_prompt(text) ) def parse_model_response(response): default = { "fear_detected": False, "urgency_detected": False, "outrage_detected": False, "sensationalism_detected": False, "emotion_intensity": 0.0, "explanation": "No response received from Sarvam AI." } if response is None: return default parsed = extract_json(response) if parsed is None: return { **default, "explanation": "Could not parse model response.", } for key in default: parsed.setdefault(key, default[key]) return parsed def analyze_emotion(text): if not text.strip(): return { "fear_detected": False, "urgency_detected": False, "outrage_detected": False, "sensationalism_detected": False, "emotion_intensity": 0.0, "explanation": "Empty input." } raw = get_emotion_from_model(text) return parse_model_response(raw)