File size: 3,358 Bytes
fc1c2aa
 
 
04aeb37
fc1c2aa
 
 
 
04cb90a
fc1c2aa
 
04aeb37
 
 
4d40b03
fc1c2aa
 
04aeb37
fc1c2aa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
04cb90a
 
 
 
 
 
 
 
 
 
 
 
 
 
fc1c2aa
 
 
 
 
04cb90a
 
 
fc1c2aa
04cb90a
 
fc1c2aa
 
 
04cb90a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fc1c2aa
 
04cb90a
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
import warnings
import random
import torch

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()