suno_prompt_gen / app.py
caveman1's picture
Upload folder using huggingface_hub
f96eb1f verified
raw
history blame
4.01 kB
import os
import gradio as gr
from glm_huggingface import run_glm
from open_ai import run_openai
from prompt_loader import get_prompt
from dotenv import load_dotenv
load_dotenv()
if os.getenv("OPENAI_API_KEY",False):
print ("using OPENAI_API_KEY")
run_llm=run_openai
else:
print ("using glm from huggingface")
run_llm=run_glm
PROMPT_STYLE = get_prompt("PROMPT_STYLE")
PROMPT_TEXT = get_prompt("PROMPT_TEXT")
PROMPT_TEXT2 = get_prompt("PROMPT_TEXT2")
SYSPROMPT_STYLE = get_prompt("SYSPROMPT_STYLE")
SYSPROMPT_TEXT = get_prompt("SYSPROMPT_TEXT")
def get_song_output(artist, song_text):
try:
# Get style music from artist
style_glm = run_openai(f"Describe {artist}", sys_prompt=SYSPROMPT_STYLE)
if style_glm:
style = style_glm
else:
style = ''
except Exception as e:
print(f"ERROR infer llm: {e}")
style = ''
try:
text_glm = run_openai(f"{PROMPT_TEXT}\n{style}\n#Text song:\n{song_text}\n{PROMPT_TEXT2}", sys_prompt=SYSPROMPT_TEXT)
if text_glm:
text = text_glm
else:
text = ''
except Exception as e:
print(f"ERROR infer llm: {e}")
text = ''
return style, text
# Define translatable strings
english_strings = {
"title": "SUNO style generator and sound format",
"performer_label": "Performer Name",
"song_text_label": "Song Text",
"language_english": "English",
"language_russian": "Russian",
"generate_button": "Generate",
"style_label": "Style",
"song_result_label": "Song Text"
}
russian_strings = {
"title": "Название: SUNO стайл генератор и звуковой формат",
"performer_label": "Имя исполнителя: ",
"song_text_label": "Текст песни: ",
"language_english": "Английский: ",
"language_russian": "Русский: ",
"generate_button": "Сгенерировать: ",
"style_label": "Стиль: ",
"song_result_label": "Текст песни: "
}
current_language = "English"
with gr.Blocks() as demo:
with gr.Row(elem_id="header", equal_height=True):
# Левая колонка (логотип 100x100)
with gr.Column(scale=0, min_width=100):
gr.Image(
value="splash.webp",
width=100,
height=100,
show_label=False,
interactive=False,
show_download_button=False,
show_fullscreen_button=False,
elem_id="logo"
)
# Правая колонка (markdown на всю ширину)
with gr.Column(scale=1):
gr.Markdown(f"# {english_strings['title']}\nby <a href='https://boosty.to/aicave/donate'>AiCave</a>")
with gr.Row():
with gr.Column():
# Input fields
name_input = gr.Textbox(label=english_strings["performer_label"],lines=5, max_lines=10)
text_input = gr.Textbox(label=english_strings["song_text_label"], lines=25, max_lines=25)
# language_radio = gr.Radio(["English", "Russian"], label=english_strings["language_english"] + "/" + english_strings["language_russian"])
generate_button = gr.Button(english_strings["generate_button"])
with gr.Column():
# Output fields
style_output = gr.Textbox(label=english_strings["style_label"],lines=5, max_lines=10,show_copy_button=True)
song_output = gr.Textbox(label=english_strings["song_result_label"], lines=28, max_lines=28,show_copy_button=True)
# Generate button click event - calls the get_song_output function
generate_button.click(
fn=get_song_output,
inputs=[name_input, text_input],
outputs=[style_output, song_output]
)
demo.css = """
#header {
align-items: center;
padding: 0px 0px;
border-bottom: 0px solid #ddd;
}
"""
if __name__ == "__main__":
demo.launch(quiet = False)