Spaces:
Running
Running
| 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) |