import gradio as gr from transformers import pipeline MODEL_ID = "j-hartmann/emotion-english-distilroberta-base" text_emotion = pipeline( task="text-classification", model=MODEL_ID, return_all_scores=True ) def analyze_text(text: str): """Return top emotion, its confidence, and all scores.""" if not text or not text.strip(): return "—", 0.0, {"notice": "Please enter some text."} result = text_emotion(text)[0] sorted_pairs = sorted( [(r["label"], float(r["score"])) for r in result], key=lambda x: x[1], reverse=True ) top_label, top_score = sorted_pairs[0] all_scores = {label.lower(): round(score, 4) for label, score in sorted_pairs} return top_label, round(top_score, 4), all_scores with gr.Blocks(title="Empath AI — Text Emotions") as demo: gr.Markdown("# Empath AI — Text Emotion Detection\nPaste text and click **Analyze**.") with gr.Row(): inp = gr.Textbox( label="Enter text", placeholder="Example: I'm so happy with the result today!", lines=4 ) btn = gr.Button("Analyze", variant="primary") with gr.Row(): top = gr.Textbox(label="Top Emotion", interactive=False) conf = gr.Number(label="Confidence (0–1)", interactive=False) all_scores = gr.JSON(label="All Emotion Scores") gr.Examples( examples=[ ["I'm thrilled with how this turned out!"], ["This is taking too long and I'm getting frustrated."], ["I'm worried this might fail."], ["Thanks so much—this really helped."] ], inputs=inp ) btn.click(analyze_text, inputs=inp, outputs=[top, conf, all_scores]) demo.launch()