Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from transformers import pipeline | |
| try: | |
| from transformers import Conversation | |
| except ImportError: # older Transformers fallback | |
| from transformers.pipelines.conversational import Conversation | |
| from speechbrain.pretrained import Tacotron2, HIFIGAN | |
| import torch, numpy as np | |
| # βββββββββββββββββββββββββββ Model loading ββββββββββββββββββββββββββββ | |
| tacotron2 = Tacotron2.from_hparams(source="speechbrain/tts-tacotron2-ljspeech") | |
| hifigan = HIFIGAN.from_hparams(source="speechbrain/tts-hifigan-ljspeech") | |
| sentiment_pipe = pipeline( | |
| "sentiment-analysis", | |
| model="distilbert-base-uncased-finetuned-sst-2-english" | |
| ) | |
| chat_pipe = pipeline( | |
| "conversational", | |
| model="microsoft/DialoGPT-medium", | |
| device_map="auto" | |
| ) | |
| summ_pipe = pipeline( | |
| "summarization", | |
| model="sshleifer/distilbart-cnn-12-6", | |
| device_map="auto" | |
| ) | |
| print("β All models are loaded!") | |
| # βββββββββββββββββββββ Sentiment-analysis tab βββββββββββββββββββββββββ | |
| def analyze(text): | |
| res = sentiment_pipe(text)[0] | |
| return res["label"], round(res["score"], 4) | |
| with gr.Blocks() as sentiment_tab: | |
| inp = gr.Textbox(label="Enter text") | |
| btn = gr.Button("Analyze") | |
| label = gr.Textbox(label="Sentiment") | |
| conf = gr.Number(label="Confidence") | |
| btn.click(analyze, inp, [label, conf]) | |
| # βββββββββββββββββββββ Summarization tab ββββββββββββββββββββββββββββββ | |
| def summarize(text): | |
| return summ_pipe(text, max_length=130, min_length=30, do_sample=False)[0]["summary_text"] | |
| with gr.Blocks() as summarization_tab: | |
| long = gr.Textbox(lines=12, label="Paste long text") | |
| btn = gr.Button("Summarize") | |
| short = gr.Textbox(lines=8, label="Summary") | |
| btn.click(summarize, long, short) | |
| # βββββββββββββββββββββ Text-to-speech tab βββββββββββββββββββββββββββββ | |
| def speak(text): | |
| text = text.strip() | |
| if not text: | |
| return None | |
| mel, _, _ = tacotron2.encode_text(text) | |
| wav = hifigan.decode_batch(mel)[0].cpu().numpy().astype(np.float32).squeeze() | |
| return 22050, wav # (sample-rate, numpy array) | |
| with gr.Blocks() as tts_tab: | |
| txt = gr.Textbox(label="Text to speak") | |
| btn = gr.Button("Generate voice") | |
| aud = gr.Audio(label="Speech", type="numpy") | |
| btn.click(speak, txt, aud) | |
| # βββββββββββββββββββββ Chatbot tab (live echo) ββββββββββββββββββββββββ | |
| with gr.Blocks() as chatbot_tab: | |
| state = gr.State([]) # list[tuple[str, str]] | |
| chatbox = gr.Chatbot() | |
| msg = gr.Textbox(placeholder="Type hereβ¦") | |
| send = gr.Button("Send") | |
| def add_user(user_text, history): | |
| user_text = user_text.strip() | |
| if not user_text: | |
| return history, history, "" | |
| history = history + [(user_text, "")] | |
| return history, history, "" # clear textbox | |
| def add_bot(history): | |
| past_users = [u for u, _ in history[:-1]] | |
| past_bots = [b for _, b in history[:-1]] | |
| last_user = history[-1][0] | |
| conv = Conversation( | |
| text=last_user, | |
| past_user_inputs=past_users, | |
| generated_responses=past_bots | |
| ) | |
| chat_pipe(conv) | |
| bot_reply = conv.generated_responses[-1] | |
| history[-1] = (last_user, bot_reply) | |
| return history, history | |
| send.click( | |
| add_user, | |
| [msg, state], | |
| [chatbox, state, msg], | |
| queue=False | |
| ).then( | |
| add_bot, | |
| state, | |
| [chatbox, state], | |
| queue=True | |
| ) | |
| msg.submit( | |
| add_user, | |
| [msg, state], | |
| [chatbox, state, msg], | |
| queue=False | |
| ).then( | |
| add_bot, | |
| state, | |
| [chatbox, state], | |
| queue=True | |
| ) | |
| # ββββββββββββββββββββ Assemble & launch app ββββββββββββββββββββββββββ | |
| with gr.Blocks(title="TrailTrek Gears β AI Demo") as demo: | |
| with gr.TabItem("Sentiment Analysis"): sentiment_tab.render() | |
| with gr.TabItem("Summarization"): summarization_tab.render() | |
| with gr.TabItem("Text-to-Speech"): tts_tab.render() | |
| with gr.TabItem("Chatbot"): chatbot_tab.render() | |
| if __name__ == "__main__": | |
| demo.launch() | |