Spaces:
Sleeping
Sleeping
File size: 4,619 Bytes
ff78ff7 beaff03 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
import gradio as gr
from transformers import pipeline, AutoTokenizer, AutoModelForSeq2SeqLM, AutoModelForCausalLM
import gtts
# === Load Pipeline ===
sentiment_pipeline = pipeline("sentiment-analysis", verbose = 0, model="distilbert/distilbert-base-uncased-finetuned-sst-2-english")
# === Sentiment Analysis ===
def analyze_sentiment(text):
result = sentiment_pipeline(text)[0]
return f"{result['label']} (Score: {result['score']:.2f})"
# Initialize the summarization pipeline, tokenizer, and model
model_name = "sshleifer/distilbart-cnn-12-6"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
summary_pipe = pipeline("summarization", model=model, tokenizer=tokenizer)
# Function to chunk text with an overlap
def chunk_text_with_overlap(tokens, max_length, overlap):
chunks = []
for i in range(0, len(tokens), max_length - overlap):
chunk = tokens[i:i + max_length]
chunks.append(chunk)
return chunks
# === Summarization ===
def summarize_text(text):
# Get the maximum length from the model configuration
max_length = model.config.max_position_embeddings
print('max_length:', max_length)
# Define the overlap
overlap = 50 # Adjust overlap as needed
# Tokenize the text
tokens = tokenizer(text, return_tensors='pt', truncation=False)['input_ids'][0]
# Chunk the tokens with overlap
chunks = chunk_text_with_overlap(tokens, max_length, overlap)
# Summarize each chunk
summaries = []
for chunk in chunks:
input_ids = chunk.unsqueeze(0) # Add batch dimension
summary_ids = model.generate(input_ids, max_length=max_length, num_beams=4, length_penalty=2.0, early_stopping=True)
summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
summaries.append(summary)
# Combine the summaries into a final summary
final_summary = ' '.join(summaries)
return final_summary
# === Text-to-Speech ===
def text_to_speech(text):
tts = gtts.gTTS(text)
tts.save("output.mp3")
return "output.mp3"
chat_pipeline = pipeline("text-generation", model="yasserrmd/Human-Like-Qwen2.5-1.5B-Instruct")
# === Chatbot ===
def chatbot(message, chat_history):
# Generate response
result = chat_pipeline(message, max_new_tokens=10)
# Extract only the reply
bot_reply = result[0]["generated_text"]
return bot_reply
chat_pipeline1 = pipeline("text-generation", model="yasserrmd/Human-Like-Qwen2.5-1.5B-Instruct")
# === Chatbot ===
def chatbot1(message, chat_history):
# Generate response
result = chat_pipeline1(message, max_new_tokens=10)
# Extract only the reply
bot_reply = result[0]["generated_text"]
return bot_reply
# === Build Gradio Interface ===
with gr.Blocks() as demo:
with gr.Tabs():
with gr.Tab("Sentiment Analysis"):
gr.Markdown("### 🔍 Sentiment Analysis")
sentiment_input = gr.Textbox(label="Enter text", lines=3, placeholder="Type a sentence to analyze...")
sentiment_button = gr.Button("Analyze")
sentiment_output = gr.Textbox(label="Sentiment")
sentiment_button.click(analyze_sentiment, inputs=sentiment_input, outputs=sentiment_output)
with gr.Tab("Summarization"):
gr.Markdown("### ✂️ Summarization")
summary_input = gr.Textbox(label="Enter text", lines=8, placeholder="Paste long text here...")
summary_button = gr.Button("Summarize")
summary_output = gr.Textbox(label="Summary")
summary_button.click(summarize_text, inputs=summary_input, outputs=summary_output)
with gr.Tab("Text-to-Speech"):
gr.Markdown("### 🗣️ Text-to-Speech (using Bark)")
tts_input = gr.Textbox(label="Enter text to speak", lines=3, placeholder="Try something like: 'Hello, how are you?'")
tts_button = gr.Button("Generate Speech")
tts_output = gr.Audio(label="Generated Speech", type="numpy")
tts_button.click(text_to_speech, inputs=tts_input, outputs=tts_output)
with gr.TabItem("Chatbot 1"):
gr.ChatInterface(
chatbot,
type="messages",
title="Chatbot 1",
description="Start the conversation in Chatbot 1!")
with gr.TabItem("Chatbot 2"):
gr.ChatInterface(
chatbot1,
type="messages",
title="Chatbot 2",
description="Start the conversation in Chatbot 2!")
demo.launch() |