import gradio as gr import torch from transformers import AutoTokenizer from modeling import BERTMultiLabel LABELS = ["anger", "fear", "joy", "sadness", "surprise"] # Load tokenizer and model tokenizer = AutoTokenizer.from_pretrained("./") model = BERTMultiLabel("microsoft/deberta-v3-base", num_labels=len(LABELS)) state = torch.load("pytorch_model.bin", map_location="cpu") model.load_state_dict(state) model.eval() # ---------------- PREDICTION FUNCTION ---------------- # def predict(text): if not text.strip(): return {"error": "Please enter text."} enc = tokenizer( text, truncation=True, padding="max_length", max_length=128, return_tensors="pt" ) with torch.no_grad(): logits = model(enc["input_ids"], enc["attention_mask"]) probs = torch.sigmoid(logits)[0].tolist() scores = {label: round(p, 4) for label, p in zip(LABELS, probs)} mood = LABELS[int(torch.tensor(probs).argmax())] emoji_map = { "anger": "😡", "fear": "😨", "joy": "😊", "sadness": "😢", "surprise": "😮", } return { "Predicted Mood": f"{emoji_map[mood]} {mood.capitalize()}", "Scores": scores, } # ---------------- UI LAYOUT ---------------- # with gr.Blocks(title="Mood Detection of the User - DeBERTa") as demo: gr.Markdown("""

🎭 Emotion Detection with DeBERTa-v3

Multi-label emotion classification powered by DeBERTa-v3
Trained on IIT Madras Deep Learning & GenAI Dataset (2025)


""") with gr.Row(): with gr.Column(scale=1): gr.HTML("""

📌 Model Overview

""") gr.HTML("""

📚 Dataset Details

Dataset: IIT Madras DL-GenAI Multi-Label Emotion Dataset

Metric: Macro F1 Score

""") gr.HTML("""

🏆 Competition Summary

""") with gr.Column(scale=2): input_box = gr.Textbox( label="Enter your text", placeholder="Example: I feel amazing today! 🎉", lines=4, ) btn = gr.Button("🎯 Analyze Emotion", elem_id="analyze-button") output = gr.JSON(label="Model Output") btn.click(predict, inputs=input_box, outputs=output) gr.Markdown("""

Built by Ayusman Samasi • IIT Madras Deep Learning & GenAI

""") demo.launch()