import gradio as gr from transformers import pipeline from gtts import gTTS import time import os # Load models sentiment_pipeline = pipeline("sentiment-analysis", model="distilbert-base-uncased-finetuned-sst-2-english") summarization_pipeline = pipeline("summarization", model="RussianNLP/FRED-T5-Summarizer") # Task logic def perform_task(task, text): if not text.strip(): return "⚠️ Please enter some text to analyze.", None, gr.update(visible=False) time.sleep(0.5) if task == "Sentiment Analysis": result = sentiment_pipeline(text)[0] label = result['label'] score = round(result['score'], 3) emoji = "😊" if label == "POSITIVE" else "😟" confidence_bar = "█" * int(score * 10) + "░" * (10 - int(score * 10)) output = f""" {emoji} **Sentiment Analysis Results** **Label:** {label} **Confidence:** {score} ({score*100:.1f}%) **Visual:** {confidence_bar} **Interpretation:** This text expresses a {label.lower()} sentiment with {score*100:.1f}% confidence. """.strip() return output, None, gr.update(visible=False) elif task == "Summarization": result = summarization_pipeline(text, max_length=100, min_length=30, do_sample=False) summary = result[0]['summary_text'] original_words = len(text.split()) summary_words = len(summary.split()) compression_ratio = round((1 - summary_words/original_words) * 100, 1) output = f""" 📝 **Text Summarization Results** **Summary:** {summary} **Statistics:** • Original: {original_words} words • Summary: {summary_words} words • Compression: {compression_ratio}% reduction """.strip() return output, None, gr.update(visible=False) elif task == "Text-to-Speech": tts = gTTS(text) filename = "tts_output.mp3" tts.save(filename) word_count = len(text.split()) char_count = len(text) output = f""" 🔊 **Text-to-Speech Generated Successfully!** **Input Statistics:** • Words: {word_count} • Characters: {char_count} • Estimated duration: ~{word_count * 0.5:.1f} seconds **Audio file ready for playback below** ⬇️ """.strip() return output, filename, gr.update(visible=True, value=filename) # Handle button click def handle_task_processing(task, text): if not text.strip(): return "⚠️ Please enter some text to get started!", None, gr.update(visible=False) result_text, audio_file, audio_update = perform_task(task, text) return result_text, audio_file, audio_update # Custom CSS custom_css = """""" # UI Layout with gr.Blocks(theme=gr.themes.Soft(), css=custom_css) as demo: gr.HTML(custom_css) gr.Markdown("# 🤖 Multi-Task AI Assistant", elem_id="title") with gr.Tabs(): # === Main Assistant Tab === with gr.Tab("🧠 Multi-Task Interface"): gr.Markdown("""
✨ Multi-Task AI Assistant - Powered by Transformers & Gradio
Built with ❤️ for seamless AI interaction