Spaces:
Sleeping
Sleeping
import os | |
import json | |
import vertexai | |
from vertexai.generative_models import GenerativeModel | |
import vertexai.preview.generative_models as generative_models | |
import gradio as gr | |
import pyperclip | |
# Read the service account key JSON file path from environment variable | |
SERVICE_ACCOUNT_KEY_PATH = os.getenv("GOOGLE_APPLICATION_CREDENTIALS") | |
if not SERVICE_ACCOUNT_KEY_PATH: | |
raise ValueError("The GOOGLE_APPLICATION_CREDENTIALS environment variable is not set.") | |
with open(SERVICE_ACCOUNT_KEY_PATH) as f: | |
service_account_info = json.load(f) | |
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = SERVICE_ACCOUNT_KEY_PATH | |
def generate(text): | |
try: | |
vertexai.init(project="idyllic-now-424815-h2", location="us-central1") | |
model = GenerativeModel( | |
"gemini-1.5-flash-001", | |
system_instruction=[ | |
'Objective', text, 'Instructions', 'Use words like "thou," "thee," "thy," "henceforth," "forsooth," and "verily."', | |
'Transform sentences to be elaborate and formal.', | |
'Maintain a delusional nobleman tone, addressing others as if they are of lower status.', | |
'Examples', ':', 'Input', ': "Hey, what\'s up?"', 'Output', ': "Greetings, fair compatriot! What news dost thou bring?"', | |
'Input', ': "Can you help me with this?"', 'Output', ': "Might I entreat thee to lend thine esteemed assistance in this matter?"', | |
'Input', ': "I don\'t like this."', 'Output', ': "I find this matter to be most displeasing and beneath my esteemed tastes."', | |
'Input', ': "You did a good job."', 'Output', ': "Thy efforts are commendable, and thou hast performed admirably."', | |
'Input', ': "See you later."', 'Output', ': "Until we meet again, may fortune smile upon thee."', | |
'Keep the original meaning, but make it sound like a nobleman from a fantasy world.' | |
] | |
) | |
generation_config = { | |
'max_output_tokens': 3019, | |
'temperature': 1, | |
'top_p': 0.32, | |
} | |
safety_settings = { | |
generative_models.HarmCategory.HARM_CATEGORY_HATE_SPEECH: generative_models.HarmBlockThreshold.BLOCK_NONE, | |
generative_models.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: generative_models.HarmBlockThreshold.BLOCK_NONE, | |
generative_models.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: generative_models.HarmBlockThreshold.BLOCK_NONE, | |
generative_models.HarmCategory.HARM_CATEGORY_HARASSMENT: generative_models.HarmBlockThreshold.BLOCK_NONE, | |
} | |
responses = model.generate_content( | |
[text], | |
generation_config=generation_config, | |
safety_settings=safety_settings, | |
stream=True, | |
) | |
response_text = "" | |
for response in responses: | |
response_text += response.text | |
return response_text if response_text else "No valid response generated or response was blocked." | |
except Exception as e: | |
return str(e) | |
def copy_to_clipboard(text): | |
pyperclip.copy(text) | |
return "Text copied to clipboard!" | |
def update_output_and_copy(text): | |
response_text = generate(text) | |
pyperclip.copy(response_text) | |
return gr.update(value=response_text, visible=True), "Text copied to clipboard!" | |
iface = gr.Interface( | |
fn=generate, | |
inputs=gr.Textbox(lines=2, placeholder="Enter text here..."), | |
outputs=gr.Textbox(visible=True), | |
title="Chuunibyou Text Generator", | |
description="Transform text into an elaborate and formal style with a Chuunibyou tone." | |
) | |
iface_with_button = gr.Blocks() | |
with iface_with_button: | |
textbox = gr.Textbox(lines=2, placeholder="Enter text here...") | |
output = gr.Textbox(visible=True) | |
submit_button = gr.Button("Submit") | |
copy_message = gr.Textbox(visible=True) | |
submit_button.click( | |
fn=update_output_and_copy, | |
inputs=textbox, | |
outputs=[output, copy_message] | |
) | |
if __name__ == "__main__": | |
iface_with_button.launch() | |