|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import gradio as gr |
|
import pyperclip |
|
from text_generation import InferenceAPIClient |
|
|
|
|
|
class TextGenerator: |
|
""" |
|
TextGenerator class generates text based on user input using OpenAI's text-generation model. |
|
""" |
|
def __init__(self, model: str): |
|
self.client = InferenceAPIClient(model=model) |
|
self.input_text = gr.inputs.Textbox(placeholder="Enter your text here...", label="Enter input text here") |
|
self.output_text = gr.outputs.Textbox(placeholder="Bot's response", label="Bot's response:") |
|
self.progress_bar = gr.outputs.ProgressBar(label="Progress") |
|
self.generate_button = gr.inputs.Button(label="Generate") |
|
self.clear_button = gr.inputs.Button(label="Clear") |
|
self.copy_button = gr.outputs.Button(label="Copy to Clipboard") |
|
self.interface = gr.Interface(self.generate_output_text, |
|
inputs=[self.input_text, self.generate_button, self.clear_button], |
|
outputs=[self.output_text, self.copy_button, self.progress_bar], |
|
title="Text Generation Bot", |
|
theme="default", |
|
layout="vertical", |
|
description="This bot generates text based on the input you provide. Please enter your text below.") |
|
|
|
def generate_output_text(self, input_text: str) -> str: |
|
""" |
|
This method generates and returns text based on the provided input. |
|
|
|
Args: |
|
input_text : str : The user's input. |
|
|
|
Returns: |
|
str : The generated text based on the user's input. |
|
""" |
|
try: |
|
|
|
self.progress_bar.update(0) |
|
|
|
generated_text = self.client.generate_text(input_text) |
|
except Exception as e: |
|
|
|
error_message = f"Sorry, an error occurred. {str(e)}. Please try again." |
|
self.output_text.update(error_message) |
|
return |
|
|
|
if not generated_text: |
|
default_text = "Sorry, unable to generate text. Please try again." |
|
self.output_text.update(default_text) |
|
else: |
|
|
|
self.output_text.update(generated_text) |
|
|
|
self.progress_bar.update(100) |
|
|
|
@classmethod |
|
def clear_inputs(cls): |
|
""" |
|
This method clears input and output textboxes on the interface. |
|
""" |
|
|
|
cls.input_text.empty() |
|
|
|
cls.output_text.empty() |
|
cls.copy_button.hide() |
|
|
|
@classmethod |
|
def copy_output_text(cls): |
|
""" |
|
This method copies the output text to the clipboard for easier use. |
|
""" |
|
pyperclip.copy(cls.output_text.value) |
|
|
|
def launch_interface(self): |
|
""" |
|
This method launches the interface for the TextGenerator. |
|
""" |
|
|
|
self.clear_button.set_click_handler(self.clear_inputs) |
|
self.copy_button.set_click_handler(self.copy_output_text) |
|
|
|
self.interface.launch() |
|
|
|
|
|
if __name__ == "__main__": |
|
MODEL = "openai/gpt-2" |
|
text_generator = TextGenerator(model=MODEL) |
|
text_generator.launch_interface() |