Spaces:
Sleeping
Sleeping
| 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) |