File size: 4,009 Bytes
f96eb1f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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)