caveman1 commited on
Commit
f96eb1f
·
verified ·
1 Parent(s): 327e9fc

Upload folder using huggingface_hub

Browse files
Files changed (9) hide show
  1. app.py +120 -0
  2. glm_huggingface.py +129 -0
  3. install.sh +4 -0
  4. open_ai.py +36 -0
  5. paths.py +20 -0
  6. prompt_loader.py +25 -0
  7. prompts_enc.py +7 -0
  8. requirements.txt +6 -0
  9. splash.webp +0 -0
app.py ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import gradio as gr
3
+ from glm_huggingface import run_glm
4
+ from open_ai import run_openai
5
+ from prompt_loader import get_prompt
6
+
7
+ from dotenv import load_dotenv
8
+
9
+ load_dotenv()
10
+
11
+ if os.getenv("OPENAI_API_KEY",False):
12
+ print ("using OPENAI_API_KEY")
13
+ run_llm=run_openai
14
+ else:
15
+ print ("using glm from huggingface")
16
+ run_llm=run_glm
17
+
18
+ PROMPT_STYLE = get_prompt("PROMPT_STYLE")
19
+ PROMPT_TEXT = get_prompt("PROMPT_TEXT")
20
+ PROMPT_TEXT2 = get_prompt("PROMPT_TEXT2")
21
+ SYSPROMPT_STYLE = get_prompt("SYSPROMPT_STYLE")
22
+ SYSPROMPT_TEXT = get_prompt("SYSPROMPT_TEXT")
23
+
24
+ def get_song_output(artist, song_text):
25
+ try:
26
+ # Get style music from artist
27
+ style_glm = run_openai(f"Describe {artist}", sys_prompt=SYSPROMPT_STYLE)
28
+ if style_glm:
29
+ style = style_glm
30
+ else:
31
+ style = ''
32
+ except Exception as e:
33
+ print(f"ERROR infer llm: {e}")
34
+ style = ''
35
+
36
+ try:
37
+ text_glm = run_openai(f"{PROMPT_TEXT}\n{style}\n#Text song:\n{song_text}\n{PROMPT_TEXT2}", sys_prompt=SYSPROMPT_TEXT)
38
+ if text_glm:
39
+ text = text_glm
40
+ else:
41
+ text = ''
42
+ except Exception as e:
43
+ print(f"ERROR infer llm: {e}")
44
+ text = ''
45
+
46
+ return style, text
47
+
48
+ # Define translatable strings
49
+ english_strings = {
50
+ "title": "SUNO style generator and sound format",
51
+ "performer_label": "Performer Name",
52
+ "song_text_label": "Song Text",
53
+ "language_english": "English",
54
+ "language_russian": "Russian",
55
+ "generate_button": "Generate",
56
+ "style_label": "Style",
57
+ "song_result_label": "Song Text"
58
+ }
59
+
60
+ russian_strings = {
61
+ "title": "Название: SUNO стайл генератор и звуковой формат",
62
+ "performer_label": "Имя исполнителя: ",
63
+ "song_text_label": "Текст песни: ",
64
+ "language_english": "Английский: ",
65
+ "language_russian": "Русский: ",
66
+ "generate_button": "Сгенерировать: ",
67
+ "style_label": "Стиль: ",
68
+ "song_result_label": "Текст песни: "
69
+ }
70
+
71
+ current_language = "English"
72
+
73
+ with gr.Blocks() as demo:
74
+ with gr.Row(elem_id="header", equal_height=True):
75
+ # Левая колонка (логотип 100x100)
76
+ with gr.Column(scale=0, min_width=100):
77
+ gr.Image(
78
+ value="splash.webp",
79
+ width=100,
80
+ height=100,
81
+ show_label=False,
82
+ interactive=False,
83
+ show_download_button=False,
84
+ show_fullscreen_button=False,
85
+ elem_id="logo"
86
+ )
87
+ # Правая колонка (markdown на всю ширину)
88
+ with gr.Column(scale=1):
89
+ gr.Markdown(f"# {english_strings['title']}\nby <a href='https://boosty.to/aicave/donate'>AiCave</a>")
90
+
91
+ with gr.Row():
92
+ with gr.Column():
93
+ # Input fields
94
+ name_input = gr.Textbox(label=english_strings["performer_label"],lines=5, max_lines=10)
95
+ text_input = gr.Textbox(label=english_strings["song_text_label"], lines=25, max_lines=25)
96
+ # language_radio = gr.Radio(["English", "Russian"], label=english_strings["language_english"] + "/" + english_strings["language_russian"])
97
+ generate_button = gr.Button(english_strings["generate_button"])
98
+
99
+ with gr.Column():
100
+ # Output fields
101
+ style_output = gr.Textbox(label=english_strings["style_label"],lines=5, max_lines=10,show_copy_button=True)
102
+ song_output = gr.Textbox(label=english_strings["song_result_label"], lines=28, max_lines=28,show_copy_button=True)
103
+
104
+ # Generate button click event - calls the get_song_output function
105
+ generate_button.click(
106
+ fn=get_song_output,
107
+ inputs=[name_input, text_input],
108
+ outputs=[style_output, song_output]
109
+ )
110
+
111
+ demo.css = """
112
+ #header {
113
+ align-items: center;
114
+ padding: 0px 0px;
115
+ border-bottom: 0px solid #ddd;
116
+ }
117
+ """
118
+
119
+ if __name__ == "__main__":
120
+ demo.launch(quiet = False)
glm_huggingface.py ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+ import os
3
+ import sys
4
+ import html
5
+ import re
6
+ from typing import Any, List, Optional
7
+ from paths import get_project_root
8
+ from gradio_client import Client # type: ignore
9
+
10
+
11
+ def run_glm(prompt: str, sys_prompt: str) -> str:
12
+ """
13
+ Run LLM using the GLM Gradio Space via gradio_client.
14
+
15
+ Environment variables (loaded from .env at the repo root if available):
16
+ - GLM_GRADIO_SPACE (default: "zai-org/GLM-4.5-Space")
17
+ - GLM_SYS_PROMPT (default mirrors the system prompt used in test_gradio.py)
18
+ - GLM_TEMPERATURE (float; default: 1)
19
+ - GLM_THINKING_ENABLED (bool; "1"/"true"/"yes" => True; default: False)
20
+ - GLM_API_NAME (default: "/chat_wrapper")
21
+ """
22
+ text = (prompt or "").strip()
23
+ if not text:
24
+ return prompt
25
+
26
+ _load_env()
27
+
28
+ space = os.getenv("GLM_GRADIO_SPACE", "zai-org/GLM-4.5-Space").strip() or "zai-org/GLM-4.5-Space"
29
+ sys_prompt = sys_prompt or ""
30
+
31
+ api_name = os.getenv("GLM_API_NAME", "/chat_wrapper").strip() or "/chat_wrapper"
32
+ temperature = _coerce_float(os.getenv("GLM_TEMPERATURE", "1"), default=1.0)
33
+ thinking_enabled = _coerce_bool(os.getenv("GLM_THINKING_ENABLED", "0"))
34
+
35
+ try:
36
+ client = Client(space)
37
+ result = client.predict(
38
+ msg=text,
39
+ sys_prompt=sys_prompt,
40
+ thinking_enabled=thinking_enabled,
41
+ temperature=temperature,
42
+ api_name=api_name,
43
+ )
44
+ content = _extract_clean_assistant_text(result).strip()
45
+ return content if content else prompt
46
+ except Exception as e:
47
+ _warn(f"GLM infer filed: {type(e).__name__}")
48
+ return prompt
49
+
50
+
51
+ # --- Internal helpers ---------------------------------------------------------
52
+
53
+
54
+ def _warn(msg: str) -> None:
55
+ print(f"[llm_refiner_glm] {msg}", file=sys.stderr)
56
+
57
+
58
+ def _load_env() -> None:
59
+ """
60
+ Attempt to load .env from the project root (best-effort).
61
+ """
62
+ env_path = get_project_root() / ".env"
63
+ try:
64
+ from dotenv import load_dotenv # type: ignore
65
+ load_dotenv(dotenv_path=env_path)
66
+ except Exception:
67
+ # If python-dotenv isn't installed, silently rely on existing process env
68
+ pass
69
+
70
+
71
+ def _coerce_bool(val: Any) -> bool:
72
+ s = str(val).strip().lower()
73
+ return s in {"1", "true", "yes", "on"}
74
+
75
+
76
+ def _coerce_float(val: Any, default: float) -> float:
77
+ try:
78
+ return float(val)
79
+ except Exception:
80
+ return default
81
+
82
+
83
+ def _clean_html_to_text(html_content: Any) -> str:
84
+ """
85
+ Convert HTML (possibly with entities) to plain text with minimal structure preserved via newlines.
86
+ Mirrors the robust cleaning approach used in test_gradio.py.
87
+ """
88
+ if not isinstance(html_content, str):
89
+ html_content = str(html_content)
90
+ # Unescape entities first to normalize both raw and escaped HTML
91
+ text = html.unescape(html_content)
92
+ # Convert common block/line-break tags to newlines
93
+ text = re.sub(r"(?is)<br\s*/?>|</p>|</div>", "\n", text)
94
+ text = re.sub(r"(?is)<(script|style)\b.*?>.*?</\1>", "", text)
95
+ # Remove all remaining HTML tags (raw)
96
+ text = re.sub(r"(?s)<[^>]+>", "", text)
97
+ # Normalize whitespace: CRLF->LF, but don't remove empty lines or collapse whitespace
98
+ text = text.replace("\r\n", "\n").replace("\r", "\n")
99
+ # Preserve all lines including empty ones and whitespace
100
+ lines = text.splitlines()
101
+ # Join lines with single newlines, but keep existing whitespace
102
+ return "\n".join(lines)
103
+
104
+
105
+ def _extract_clean_assistant_text(result: Any) -> str:
106
+ """
107
+ Extract 'assistant' messages from a Gradio chat result and return plain text without HTML.
108
+
109
+ Supports result formats:
110
+ - (messages, *rest)
111
+ - messages
112
+ Each message is a dict with 'role' and 'content'.
113
+ """
114
+ # Normalize to a list of messages
115
+ if isinstance(result, tuple) and result:
116
+ messages = result[0]
117
+ else:
118
+ messages = result
119
+
120
+ clean_segments: List[str] = []
121
+ if isinstance(messages, list):
122
+ for m in messages:
123
+ if isinstance(m, dict) and m.get("role") == "assistant":
124
+ content = m.get("content", "")
125
+ clean_segments.append(_clean_html_to_text(content))
126
+
127
+ if not clean_segments:
128
+ return ""
129
+ return "\n\n".join(s for s in clean_segments if s)
install.sh ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ #!/bin/bash
2
+ uv venv .venv --python=3.12
3
+ source .venv/bin/activate
4
+ uv pip install -r requirements.txt
open_ai.py ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+
3
+ from openai import OpenAI
4
+ from dotenv import load_dotenv
5
+
6
+ load_dotenv()
7
+
8
+ api_key = os.getenv("OPENAI_API_KEY","")
9
+ url = os.getenv("OPENAI_API_URL","https://api.openai.com/v1/")
10
+ model = os.getenv("OPENAI_API_MODEL","openai/gpt-oss-120b")
11
+ client = OpenAI(
12
+ api_key=api_key,
13
+ base_url=url
14
+ )
15
+ def run_openai(prompt: str, sys_prompt: str) -> str:
16
+ try:
17
+ response = client.chat.completions.create(
18
+ model=model,
19
+ max_tokens=5000,
20
+ temperature=1,
21
+ presence_penalty=0,
22
+ top_p=0.95,
23
+ messages=[
24
+ {
25
+ "role": "system",
26
+ "content": sys_prompt
27
+ },
28
+ {
29
+ "role": "user",
30
+ "content": prompt
31
+ }
32
+ ]
33
+ )
34
+ except Exception as e:
35
+ return f"LLM infer filed: {type(e).__name__}"
36
+ return response.choices[0].message.content
paths.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+
5
+ __all__ = ["get_project_root", "get_data_dir", "data_file"]
6
+
7
+
8
+ def get_project_root() -> Path:
9
+ """Return the absolute path to the repository root (directory containing this file)."""
10
+ return Path(__file__).resolve().parent
11
+
12
+
13
+ def get_data_dir() -> Path:
14
+ """Return the absolute path to the data directory under the repository root."""
15
+ return get_project_root() / "data"
16
+
17
+
18
+ def data_file(name: str) -> Path:
19
+ """Return the absolute path to a file inside the data directory."""
20
+ return get_data_dir() / name
prompt_loader.py ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from base64 import b64decode
2
+ from cryptography.fernet import Fernet
3
+ from dotenv import load_dotenv
4
+ import os
5
+ import prompts_enc
6
+
7
+ load_dotenv()
8
+
9
+ def get_prompt(name: str) -> str:
10
+ """Возвращает раскодированный промпт по имени."""
11
+ key = os.getenv("PROMPT_KEY")
12
+ if not key:
13
+ raise RuntimeError("PROMPT_KEY отсутствует в переменных окружения")
14
+
15
+ if not hasattr(prompts_enc, name):
16
+ raise KeyError(f"Промпт '{name}' не найден")
17
+
18
+ fernet = Fernet(key.encode())
19
+ encoded = getattr(prompts_enc, name)
20
+ decoded = fernet.decrypt(b64decode(encoded)).decode()
21
+ return decoded
22
+
23
+
24
+ if __name__ == "__main__":
25
+ print(get_prompt("PROMPT_STYLE"))
prompts_enc.py ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # ⚠️ AUTO-GENERATED — DO NOT EDIT
2
+
3
+ PROMPT_STYLE = 'Z0FBQUFBQm81WXdiRGpzZmhhS3pPTWgzZVhLWFk3LXlhY0VwTWYxZkxkQWE3NE5GbXBaY2VOTzZ3ZmM0Z2g0dkFpS1hneW1zY0NHaFVncmo1aUlqSWZaTTBOVUNtODAxSExxWHlwOTQwajhNb2pmX05ZRHpzOTBoVl9PWmUwaElISFIwWjZEeGhqMEFLb1lDNS1raEhWOXQyVHFsYjROUUVBdVRSWThURnNYWXJyYlR5Qy0xMTVDQ1l0LWFKdml4TDRQY0VwcVJncE52NGlwenlIX1hTdTJDcmZ4aEg4OGZFOVFnMldWSkRUaDkxN3ByXzN1VzFGazZwMHE4NnhESlQ0dVhTLWFmYzFoZWdOMGFic1JpcHlXRUt4UGYzYzctakxxNzdRQXpzb29rbmVCcEFWUENnal9vSWgtX1d5bWljdHU0X3NxQ0huWW0xb2lMV1FvaFhFNzQyVkhWMUFSaWxPNmdDOXM3UTc5REc3OTZqWFVTMWtXTndmc3BZT3N4ajBZNENBbmZheDM3aVBzSEROQ1JwOUppeUVabi11RWxLbTlKdGNXVHVpdVpFSXpYZW5La0h4SFVhSDd1SndJTXQ1SmxjcElQVHRXVENiLWVZczhVRXNzdDBjbEpGdks4YlkyZ1dfdnRsTVhHSmhtcVMxZ1BURVNrTEtjS1FNVzF0YzI4MlhuWXRYM3dBN2I4VWdKZ1BySG1qN3RZMEd2TE44THZkdmNBMEI2MjdRQk1TcVdwQXV3PQ=='
4
+ PROMPT_TEXT = 'Z0FBQUFBQm81WXdiMzVRckwtclplZmFFQ1ZiWFh6LVNWY3BqNy04emg4N203NzJFNWRJWXR5Y1lZMkg1R09iM19yeVFtN2NwdlpDcmdSdGxxZWVqaWs0UllWM29JRzczYnp0eDhqVDQ0dWZKN2thN1B2c1d0T1BaVzc2SU1xdjk4U1FUVXIyX0FvenhHc3JGZGw1azh6UmptTlp3SFVYT2pPd3FpalZ3Sm1HWWpEZ1p3SUdTSVZYZTZDUHJZbF96Y19EUG5ldUxNejYwS2p3aERGRFdvb29sQ3pjSEJZY1IwUTd2VkdsVW44d0czaDFqSDFucnJNaGhqMWM3aGpmcFN5RWJ3bFRvV2JWZWg0akk2MVNEVVRWb1pZaC15YmVWWWxsRjRmY0JXMThrLXA0Wk0tSGJOU00zMUhrV0RSZW01dmx1SFRjZzEybnFrV0lTTjU4Q0F2YUFnSElmUThCUFVCUUZING1iT1d2Y1NsallIcnF6ZzVzVHRuelNxSWpLYmZndkVndlhia0oyVDFvWW9LRjZQdHZPWUE3cklFaDBQdmczb1c0ckRPUzlXUlozWlQ5cmxjWjUwaWM3NDUyZW1CWi1RNVc4cnV0R0FGc0FaR1YtQ01CeHFJcXpDREZsU0cxVDFadzgybG4tcC1sYUlpVm1IUDRTMTZpNEF5Yks1NUkwaTVBV3NrZ0Y2S2hTaHIzQWtVeVREWGIxT0QyWHpRZ3J6eEhqcW5BYzdGMkpsd0puNF90OGR5Qy1LZmNjWjFzamloUGxRa0NaMTNLOWlWSC1KVnBvY0Y4U1JqNGQyU29VYkQ2aWZhTHB5bml2dzhIX0JRaHZvdjVwRGhUNGtMa21nMW4wT0N6LTg3MHVxR2ZuWFAwbFVRSnpoc05adWY0MGJaTURBbXh1a2hzbzBqMEwyT0FlSzFsbk1kSG1KWGZQa3NlTWR0UlFkRFdPZ3RLR2FjNGR3NGNLS1F4eEpMWi16V2RBSklwYTU3eDhWWlJma0paRThwa1B3ZVNRbGJNY1ZGSG9hYkpxWXFpSV9pX3BvZXR2b1JOT3VNNDNpVFBqdXRPelZKZThObUNNSmIzbnhqV1VSX1JvQ2hMTmtWVFg3UTBCUVkzMW1pYXFScWFCZjZfU0dOcFZuNzFzYnFKM0VvVU9ZWE92QV91dkNTTmtydFNhRER6anA1enA0aHE5eVBYQWlNNmlvNzVrWmxSRFVRQ3RWZ2VDRDFUM293c1p3NXg0em9xc01pQ0toTWV4eHBPcHk1QmNkalotbmFsSGhyaXJfQ1hvZ3ZiVUw3S0g2c1NXR3VlWkZ3RlVhYjNVNlMtOFV1d3l6Z1BOaE1UVVpPRVBGSmJHc19qZ1l1Tk1NQjl2aTlzTmliaVNiYWM2WUl3YVhaZ0JIUTBXdVg4Yk9zd1JIUmsydjQwMEZQR253SlhwYS1WSklLTXJvM2Jrc01LUXFFZHkyOWFwVTI4QnhURW9ENGdxbEFHS2c3ZVFoazBRMGJycG4yZXBaOGx1SXRhMEZlZUd5b3MwWU9ibTJWNkk3aklLTXFHSmUwRm5uSUZ3SFFvSmZ5Z2YxTEhwUmdaekxjMHBDZzhqenJqa04xSDFOQUY1UVFKMHFUTlpYN09lTEVyZHI4cm9Ub2ZHSE9NTWJ5SUJSQzI5aE55UlFJaWZrU2lLVll5RzNvLUtvNXhmbmtMRkVFZjFqdmdmeVpxZ2xOd2hvdjlBMm5pUTd1YnNvZzhXV2Q4S1B4VldiQTBwTzBYdldwSW5lYzI5eDJXdVBYM2FXWWJLVW00LUxwUFh4M2JMWVRpODdFYWxWTEtOODVZYUQwUVJjMm1hWmJ4bHNhcldpR0x6OHlOR3k5V2kybHBSQWVYaUt6RVZWMVdfV2x2bS0wRVlBNXlzQUNhUTU3TDlGQUJsbi01WFVvR1ExNzZjeUI5dnZ4ckZmak0yZV8wVDlITnJycnhEbDd1VDJCOGdXdEFPVXB0OE5LdzRyek5aaklVV0ZSS2dGT3dWWWpQMVhaSFJ1U1lvRGxlOFktQ2FSOEZEdUk3SDVwODhyeW9uNjdFUXp2cV8yMzR4dm9QSldOOW5nRWVHN3ZxTnN5ejkxMFRLUlFRUmFYemV2Y3BuaFpZT2VMRXZTRXVwT3djTzl5WFNOTmVFODFXV1VaRFBTdndvVE5TSG54QnRKNEl5MTVuZ3ZzcFhDMkttOXBuLWp0TkRwNjM1WkUyWnBaa21RWFUzM3BFenU4ZlRDMTVuakQzMW9iTkJSdnRTWk9EdjBBZ25MWnJjamNwUTYzb3ZRNXJvQklrNk5CM1hReEstdEJKVUtFZ3ZxRWdacDdTS2FqVXVxOHhsLWhWczlZSTJMalYxTTBHaVFDU3EtNWM1VEU4NjE3SzdHYVdVVFpBNTVucERodGdKemlTR1llQ3ZtVEdXYV92OE0xcnZMc292QXpLQVpELXV6LVM4R1ZzY3RJQnpDSW1NX285eEo3cmhSeW9udmkwRXQtVVlLakNzdk9jalNpRWM4VW82VC1oMVFpUXl3MWhLcVByTy1Bb3ZGWGxRUkdCSmFDTDUxUnhVREJtVEY1djZneVdxM3pmUVVqWkt5bGg0ZS1Udk5zX1p6WllrY2djSHFJLVBMdnoyWWdUMmZBRlMzYk5HRk45RVI3bTA3S1VIeXBMVUxjaERjbF80QXhacGg5b2c0Sk1GeUtOMWdTV0xmaFpyem00RW42dVJqUUVXRk1DclVSX3hmaHhxTkpCNEhNQ21pR3B1NWV2Y1FuSFBBR2ZqRENrUGxTQnB4bFJPSmNoVXU2dHlJd05QOTBTV1dfS01oVWZLdHNXMDZVSEdkVk9GSWY3eE92NTZKM0RKbUpubGV3cWVhajhiOUd6NzVySUl6SGgxS20tM0pnTWoyLUVQcy1HWGxDck5Yb0RvdnBGWVY2d1BFVENTdXlHb1Nlcld3NlpjZUNaX0I4VEpZX3plY2ZpWWtVRFlfTTRCNkJ2aWQyaHhmNGg3WmVuVkY1TVotVDJ2bTQyeTFhdU5WOTZFbE5ZbjJUVjJDMVFtOEhRWGp1ZW9NOUlCZElteGhLOVVrVkVPTTJoRVh5T0NlU0cwSlZ4VW1NZ25jQWxIUlk0ckNkYWZteVVxd1dCczRiYzhNS2x4QUozbTBfazBndmpWbXlGZXJMd3BzV05Gc09pVXFTcWJnTXM3SVpBR0phckE4LUh4Z1RsQV9lVWVDcXZxbnZlMXNyY3Y1TGZCcHg4UHhiOWRaN2hwaUtQYkRLODRRVUVnSEJETEVJdnhaTDBYZzF3djlQYXZzRGZ2dkVucS1ZRE4yRW9TNktfYUdac3ZaWlhGZng2TmppN0c2RHFPcGxJQzZhd1pwT0JBZDJJQTVycTEyWmxGVXdpaVFuNWw2eVUwOG9Vc2pYS2tNa1NWVnd2QUh0djduQnZ0dFJCM3VFSmRTNS1kRU1nZ3hGMjVzcm9OYXNrd1RnYTh3Q3g4YlZCYW9MS2dXcHlvN0VuVjVBaEtMeDREcEZoMDA3aTJ4N2pVUXZXM0pzcF9TbTN4RFMxS2F2RC1JUjVjWU9PRjhZYms3LV91M3UyM0g5Y0VZM3dIbmprN2RxbDE5cHY4akNRMFA5SmRJT3M5V0NOUFViMUJUcGp4akZWVWtEV3dXVDFZSjBCY29CX1VrOWx0WUtCUzE4RzdPRUF6UzhJWlpwVGVrckQ0QXBZY1N4Ri15ejVwLWI5Wm5QV3V1OGt0VWxpZDZMamZUcHptdUZJMnVZWnJMdDBsMVpxQUw4czlNRDJpZEdrcFJpa1NBT2Q5QmwwOElGSEtXRmNjNmpZekVlZEc0d3BZWkRhaXRpZzBURThRRVhmUk5jenhVQ1NuUEFHWHJaMGlpcVVGLWxLQlhXTktZd3NPb2ZnZlhrdzFyUGxkQnNudEw5alhhdHl1VUJOeXFzMzhxMmpWT2dJT25BSGtIOWJfWjJYbGdXVmEtT25QRm9XZFVlN0FkMHVpREpSWWp2SW5YcFBQN21WM3JCS1Q5U19tLW5oTnpRNDJ2bzNwYzVOM3d2M3ZVQVBUN0NlZVBWLUZDZW5nVkRKdDRLQ2I1SzJ6RFQ0WlBRVGgwSVNEWFpUVWUwWTBfVzlZOG5UZm5jSG5ROUc0RkJMbFFzd2REWndHOXNpV2JyVDU5anpYZWUxbkU4TGoyU1VkOFNEcklnTlVSWkt2NWN6czhVMGJGbnF3aGJLc2FxX0JrT2JxZ0kzZk1DVnJLb0UxbDRtUGthWk5xV19GQldheTdnU0VLTWtlSTk3WDBDWHdUaDNaQzVsVkhHZE40X0dDLWdsWThBNGNReDFONGhMODdNejFCY0lqbzhrRjh5bDVDdGdjU0ViQWY0Tm84NkRHb1d4SUY2RWdDdz09'
5
+ PROMPT_TEXT2 = 'Z0FBQUFBQm81WXdiX0xqQ1FZVTMzTEJFWEVGdHNyTVNXSjdBNGVpNnB4UWNSYjB1OUEtU3Fwb3pqOEhSc1VIbTYzbW1LTUVJdlp1WW5ydF9qSDh3bDZZekx4QnQtSHIxNFpiOFYwTHpMNjg1a0pmRURrOEVIV2tIYnBGcUhxUnZPZUU3VXlRbVFTNFJaYWdFaFkxNWswdU01ZEtadllHSldHekZPbW1uNkI5Zl9wUU1qNzlUZ1Nxd045SHUwZHp3c01zMFlHRmZ2eVRfQnprZ3ZGZENUUjZqaUZSeGtic0lISnlfclBVdVBKam40ODRvdFFobXlLQTI3TWhkRzNrNzdLWDVtZjcyZzQ5cnZmRGdhMk1ITHhibm44QU5tQVQtTE9NNUl6ZzJITEdNUFRFOFlqMDFqZDFkOEZMMmt4WER3NkV5alhpcERYQm1fSmc4QXBITVlsTGRDS1FwNnAwd3lSRXlkVGlOVkpCb1EybnNRSzJXcnpDMGt3X3Fuci1hVk9SUTc3UU5JbVNYWUdnVHhLMDhzY05seGY1X0JZMl9mNGowUVUwTHg3aTVjSnVIa2NpSWlKOW5FRjFkUnhKWmNIRmoxN1NVY256RFBKZWlQbzNnUHJGamNqNnl3Uk1tcGtaS2dnckhDb3RaYzd0N1Y5WE1oR0ZreWpwWDF5ZklhenlPc05ZekhyOFhUdzNnRTZERGdWMDBRTXVxRC1FcFI5OGM1b0tkMFBPbXdUN3BoSVdaT3g0UWtKdmVwSkJScHVrdTVqRDdnM25SUlhORkRlZktWTmxtNFAza3R5ajBwZVhPWEpCUE03YUdUWlZORHlIdWIwTUltcXdZeDM5bEJzZEFCVlp2Q25MNGZDQThxUWlucXlKY2pPY3lnSFVQYnZlMUE0QUpjZDJNbWY3T3kya0xFWDFhckowT3hrekk4TE1mdmpZeVNubjk1Wm1FdXdXdXF6T1NtU2VJZVRMSkpPc1RZa2ZydHR3MnVTT0tSeWtaUVhHa3J5Umd4VzF6M0xTWUVhejJicGNRd05HdC1CYklCclAya2wwQUdDM0JOQT09'
6
+ SYSPROMPT_STYLE = 'Z0FBQUFBQm81WXdiQ0xMdzRKT1EwaC1hVVRqVEd0ZlM3cUVsQ3JKN0dqREpNLTZCN1NmTTRLRWwyMDFXeFBvOUl3WlQyNklCWjFNalp0cVFvMFpDWkk5dnRMbXlOdjUtVW5raWQxTEVHc2Q0eHNVSkE0eDZrd2xJTDJCTG14blJTZVE1NWhDZHFpMXZfUFBrRzVpMHZsVFZkU2Q4RVZiZEtWUzI4eFQzUXQwS1NFWlpJbHIwVlNGVHdic0NpdDFQa3JEVHMzUzVEVV8yWGU1M2JWbEpUWGgzM0k1T3ZJSjRERDRmUGpWbnoyUDNTTmZ6YW95bDNJYm9naDVZZzF4Z3JkOEJyTldTYjdXZUQ3Y2xhR2NBYUdKZnp2dEdFLUJ6T0NhOUhWbTlyc3lTNmN2azJpTXBPZXpXbVVaVjVDRExnOXY3dklDN3daUVFiM3BHQWRHaS1UcUFVdjZVYzlTc2dQZHlUSW1vcXdON2tzTHRnX292cFJSbHlQOHpPMGJtOGJWLVl2LXRlQ3FVVTh2VDQ4WVB5OVBzMjJiNENtTlFSek5sTGZyS2F0eVEzcEhsa1RVeE5NZz0='
7
+ SYSPROMPT_TEXT = 'Z0FBQUFBQm81WXdiWVFEcG9nOV9MSnI2T0MyOEhGYTFmd2FYLTd2enJmdFhxUzVWM1BadE40S1poaTNSVlg2NXNjOTItLUhSZmVReVpmeV92SnI4RzljdzBrLW1Nc0dmeXNqOVhXa0pjZ1U0SlVIUUJsUXdQNXpKd29WZmlKaWVUSDJ1N2xuT3NpQ1Y1QU03SU1ISFBVQlRVZDZWcC1saGlvMzBMU3BDME94QWg4cVRUZzg3Um84YXNiTW0zNTBjOVB6N0Jvd1BSbWdpZ3lhelZISTNZdy1kUlItTVJGdHJkTUoxd2Q1U2R2N3ZjUFBPRGxHVUY4cktKREJ5R2xfVWJzLVU4WHVwdkJOcnZaTzBhTGJaaDBjRGh2SmpMZ0xlcF9PWi1kTWNYWE93c3dXeEhtRmc5aTdiMy1qaUVMdGtaZUt0SnZIWlk0SmtaQWJmQ0Fidm9GRExFcU5kWV9OcXpqbXliaEg3WlZaWnU0MGVtSktvTC1nVTRBRWE4OFRPRmNLdzlvbE1NYTBETGd1MWxvYTZoSE9YUExzTDhRNU8zOW51TlpQMXJCS3F6UnVNdDlDX2RUcmtWbVExclJqVzRqajE1Y3Q2UDBibUhSOEJNcjRjMS1BYjJXU1hFbFIyb1RURllReVpDVmVnVVlCeVlSUXREZ2ZxX1l3Njh3Q2RGUFUxRzI3b3RVOVI='
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ gradio
2
+ gradio_client
3
+ openai
4
+ python-dotenv
5
+ requests
6
+ cryptography
splash.webp ADDED