paraphraser_SOP / app.py
Jaane's picture
Update app.py
fb4ca2a verified
import os
import warnings
import random
import torch
import gradio as gr
from parrot import Parrot
from concurrent.futures import ThreadPoolExecutor, as_completed
warnings.filterwarnings("ignore")
os.environ['TRANSFORMERS_NO_ADVISORY_WARNINGS'] = '1'
def random_state(seed):
torch.manual_seed(seed)
if torch.cuda.is_available():
torch.cuda.manual_seed_all(seed)
random_state(1234)
parrot = Parrot(model_tag="prithivida/parrot_paraphraser_on_T5")
def paraphrase_sentence(sentence):
paraphrases = parrot.augment(input_phrase=sentence, max_return_phrases=10, max_length=100, adequacy_threshold=0.75,
fluency_threshold=0.75)
return random.choice(paraphrases)[0] if paraphrases else sentence
def split_text_by_fullstop(text):
return [sentence.strip() for sentence in text.split('.') if sentence]
def process_text_by_fullstop(text):
sentences = split_text_by_fullstop(text)
with ThreadPoolExecutor() as executor:
future_to_sentence = {executor.submit(paraphrase_sentence, sentence + '.'): sentence for sentence in sentences}
paraphrased_sentences = []
for future in as_completed(future_to_sentence):
paraphrased_sentences.append(future.result())
return ' '.join(paraphrased_sentences)
def gradio_interface(input_text):
paraphrased_text = process_text_by_fullstop(input_text)
return paraphrased_text
interface = gr.Interface(fn=gradio_interface,
inputs="text",
outputs="text",
title="Text Paraphraser",
description="Enter text to get paraphrased output.")
interface.launch()
'''import warnings
import random
import torch
import os
import gradio as gr
from parrot import Parrot
# Suppress warnings
warnings.filterwarnings("ignore")
os.environ['TRANSFORMERS_NO_ADVISORY_WARNINGS'] = '1'
# Set random state for reproducibility
def random_state(seed):
torch.manual_seed(seed)
if torch.cuda.is_available():
torch.cuda.manual_seed_all(1234)
# Initialize Parrot model
parrot = Parrot(model_tag="prithivida/parrot_paraphraser_on_T5")
# Function to paraphrase a single sentence
def paraphrase_sentence(sentence):
paraphrases = parrot.augment(input_phrase=sentence, max_return_phrases=10, max_length=100, adequacy_threshold=0.75, fluency_threshold=0.75)
if paraphrases:
return random.choice(paraphrases)[0] # Select a random paraphrase
return sentence # Return the original sentence if no paraphrase is available
# Function to split text by periods (full stops)
def split_text_by_fullstop(text):
sentences = [sentence.strip() for sentence in text.split('.') if sentence] # Split and remove empty strings
return sentences
# Main function to process and paraphrase text by splitting at periods
def process_text_by_fullstop(text):
sentences = split_text_by_fullstop(text) # Split text into sentences by full stops
paraphrased_sentences = [paraphrase_sentence(sentence + '.') for sentence in sentences] # Paraphrase each sentence
return ' '.join(paraphrased_sentences) # Join paraphrased sentences back into a single text
# Function to copy output text to the clipboard
def copy_to_clipboard(output_text):
# JavaScript code to copy the output text to the clipboard
return f"""
<script>
var text = `{output_text}`;
navigator.clipboard.writeText(text).then(function() {{
alert('Copied to clipboard!');
}}, function(err) {{
alert('Failed to copy text');
}});
</script>
"""
# Gradio interface function
def generate_content(input_text):
paraphrased_text = process_text_by_fullstop(input_text)
return paraphrased_text
# Gradio Interface with new layout
with gr.Blocks() as demo:
# Adding a logo and title
gr.HTML("""
<div style="display: flex; align-items: center; justify-content: center; margin-bottom: 30px;">
<img src="https://raw.githubusercontent.com/juicjaane/blueai/main/logo_2.jpg" style="width: 80px;margin: 0 auto;">
</div>
""")
with gr.Row():
# Input column with Submit and Clear buttons below the text area
with gr.Column():
input_text = gr.Textbox(placeholder="Enter sop to get paraphrased output...", label="User", lines=5)
with gr.Row():
submit_button = gr.Button("Submit")
clear_button = gr.Button("Clear")
# Output column with Copy button below the output text area
with gr.Column():
output_text = gr.Textbox(label="output", lines=5)
copy_button = gr.Button("Copy")
# Define button actions
submit_button.click(generate_content, inputs=input_text, outputs=output_text)
clear_button.click(lambda: "", None, input_text) # Clear input
clear_button.click(lambda: "", None, output_text) # Clear output
copy_button.click(copy_to_clipboard, inputs=output_text, outputs=None) # Copy the output to clipboard
# Launch the app
demo.launch()'''