SentiDemo / app.py
AR04's picture
Update app.py
cd4eb6d verified
import gradio as gr
import plotly.express as px
import pandas as pd
from transformers import pipeline
# Load model
classifier = pipeline(task="text-classification", model="AR04/Senti", top_k=None)
id2label = {
0: "admiration", 1: "amusement", 2: "anger", 3: "annoyance", 4: "approval",
5: "caring", 6: "confusion", 7: "curiosity", 8: "desire", 9: "disappointment",
10: "disapproval", 11: "disgust", 12: "embarrassment", 13: "excitement",
14: "fear", 15: "gratitude", 16: "grief", 17: "joy", 18: "love", 19: "nervousness",
20: "optimism", 21: "pride", 22: "realization", 23: "relief", 24: "remorse",
25: "sadness", 26: "surprise", 27: "neutral"
}
def classify_and_visualize(text):
outputs = classifier([text])[0] # list of dicts
# Convert to DataFrame
df = pd.DataFrame(outputs)
# Radar chart (polar plot)
fig = px.line_polar(
df,
r="score",
theta="label",
line_close=True,
title="Emotion Radar",
)
fig.update_traces(fill="toself", line=dict(color="blue"))
return df.to_dict("records"), fig
with gr.Blocks() as demo:
gr.Markdown("## 🎭 Emotion Radar Chat App")
with gr.Row():
with gr.Column():
text_input = gr.Textbox(placeholder="Type a message...", lines=2)
submit_btn = gr.Button("Analyze")
with gr.Column():
result_json = gr.JSON()
result_plot = gr.Plot()
submit_btn.click(fn=classify_and_visualize, inputs=text_input, outputs=[result_json, result_plot])
if __name__ == "__main__":
demo.launch()