xxxrokxxx commited on
Commit
5f26384
โ€ข
1 Parent(s): 5e45cbb

now app.py

Browse files
Files changed (1) hide show
  1. app.py +221 -67
app.py CHANGED
@@ -1,82 +1,236 @@
1
  import gradio as gr
2
  from huggingface_hub import InferenceClient
 
 
 
 
 
 
 
3
 
4
- client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
5
-
6
- def respond(
7
- message,
8
- history: list[tuple[str, str]],
9
- system_message,
10
- max_tokens,
11
- temperature,
12
- top_p,
13
- language,
14
- ):
15
- messages = [{"role": "system", "content": system_message}]
16
-
17
- # Extract the language name without the flag emoji
18
- language_name = language.split()[-1]
19
-
20
- # Add language instruction to the system message
21
- language_instruction = f"Please respond in {language_name}."
22
- messages[0]["content"] += " " + language_instruction
23
 
24
- for val in history:
25
- if val[0]:
26
- messages.append({"role": "user", "content": val[0]})
27
- if val[1]:
28
- messages.append({"role": "assistant", "content": val[1]})
29
 
30
- messages.append({"role": "user", "content": message})
 
31
 
32
- response = ""
 
 
 
 
33
 
34
- for message in client.chat_completion(
35
- messages,
36
- max_tokens=max_tokens,
37
- stream=True,
38
- temperature=temperature,
39
- top_p=top_p,
40
- ):
41
- token = message.choices[0].delta.content
 
42
 
43
- response += token
44
- yield response
45
 
46
- # Language options with flags
47
  languages = [
48
- "๐Ÿ‡บ๐Ÿ‡ธ English",
49
- "๐Ÿ‡ช๐Ÿ‡ธ Spanish",
50
- "๐Ÿ‡ซ๐Ÿ‡ท French",
51
- "๐Ÿ‡ฉ๐Ÿ‡ช German",
52
- "๐Ÿ‡ฎ๐Ÿ‡น Italian",
53
- "๐Ÿ‡จ๐Ÿ‡ณ Chinese",
54
- "๐Ÿ‡ฏ๐Ÿ‡ต Japanese",
55
- "๐Ÿ‡ธ๐Ÿ‡ฎ Slovenian",
56
- "๐Ÿ‡ท๐Ÿ‡บ Russian",
57
- "๐Ÿ‡ป๐Ÿ‡ณ Vietnamese"
58
  ]
59
 
60
- demo = gr.ChatInterface(
61
- respond,
62
- additional_inputs=[
63
- gr.Textbox(value="You are a friendly Chatbot.", label="System message"),
64
- gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
65
- gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
66
- gr.Slider(
67
- minimum=0.1,
68
- maximum=1.0,
69
- value=0.95,
70
- step=0.05,
71
- label="Top-p (nucleus sampling)",
72
- ),
73
- gr.Dropdown(
74
- choices=languages,
75
- value="๐Ÿ‡บ๐Ÿ‡ธ English",
76
- label="Language",
77
- ),
78
- ],
79
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
 
81
  if __name__ == "__main__":
82
  demo.launch()
 
1
  import gradio as gr
2
  from huggingface_hub import InferenceClient
3
+ from gradio_client import Client
4
+ import os
5
+ import uuid
6
+ from anthropic import Anthropic
7
+
8
+ from dotenv import load_dotenv, find_dotenv
9
+ _ = load_dotenv(find_dotenv()) # read local .env file
10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
+ HF_TOKEN = os.getenv('HF_TOKEN')
 
 
 
 
13
 
14
+ anthropic = Anthropic()
15
+ MODEL_NAME = "claude-3-haiku-20240307"
16
 
17
+ # Define model parameters here
18
+ SYSTEM_MESSAGE = "You are a friendly Chatbot, who gives short answers."
19
+ MAX_TOKENS = 512
20
+ TEMPERATURE = 0
21
+ TOP_P = 0.95
22
 
23
+ def get_completion(prompt):
24
+ return anthropic.messages.create(
25
+ model=MODEL_NAME,
26
+ max_tokens=MAX_TOKENS,
27
+ temperature=TEMPERATURE,
28
+ messages=[{
29
+ "role": 'user', "content": prompt
30
+ }]
31
+ ).content[0].text
32
 
33
+ #chat_client = InferenceClient("HuggingFaceH4/zephyr-7b-beta", token="")
34
+ tts_client = Client("xxxrokxxx/Multilingual-TTS", hf_token=HF_TOKEN)
35
 
 
36
  languages = [
37
+ "English", "Spanish", "French", "German", "Italian",
38
+ "Chinese", "Japanese", "Slovenian", "Russian", "Vietnamese"
 
 
 
 
 
 
 
 
39
  ]
40
 
41
+ language_flags = {
42
+ "English": "๐Ÿ‡ฌ๐Ÿ‡ง", "Spanish": "๐Ÿ‡ช๐Ÿ‡ธ", "French": "๐Ÿ‡ซ๐Ÿ‡ท", "German": "๐Ÿ‡ฉ๐Ÿ‡ช", "Italian": "๐Ÿ‡ฎ๐Ÿ‡น",
43
+ "Chinese": "๐Ÿ‡จ๐Ÿ‡ณ", "Japanese": "๐Ÿ‡ฏ๐Ÿ‡ต", "Slovenian": "๐Ÿ‡ธ๐Ÿ‡ฎ", "Russian": "๐Ÿ‡ท๐Ÿ‡บ", "Vietnamese": "๐Ÿ‡ป๐Ÿ‡ณ"
44
+ }
45
+
46
+ def translate_text(text, from_lang, to_lang):
47
+ prompt = f"Translate the following text from {from_lang} to {to_lang}:\n\n{text}\n\nTranslation:"
48
+ return get_completion(prompt)
49
+
50
+ def get_speakers(language):
51
+ try:
52
+ result = tts_client.predict(language=language, api_name="/get_speakers")
53
+ speakers = result[0]['choices']
54
+ return [speaker[0] for speaker in speakers]
55
+ except Exception as e:
56
+ print(f"Error getting speakers for {language}: {e}")
57
+ return ["Default"]
58
+
59
+ def generate_unique_filename(extension=".wav"):
60
+ return str(uuid.uuid4()) + extension
61
+
62
+ def to_voice(text, language, speaker):
63
+ try:
64
+ #print(f"Generating voice for text: {text[:50]}... in language: {language} with speaker: {speaker}")
65
+ _, audio_path = tts_client.predict(
66
+ text=text,
67
+ language_code=language,
68
+ speaker=speaker,
69
+ tashkeel_checkbox=False,
70
+ api_name="/text_to_speech_edge"
71
+ )
72
+
73
+ #print(f"Audio generated at path: {audio_path}")
74
+
75
+ # Create a new file with a shorter, unique name
76
+ new_filename = generate_unique_filename()
77
+ new_path = os.path.join(os.path.dirname(audio_path), new_filename)
78
+ os.rename(audio_path, new_path)
79
+
80
+ print(f"Audio file renamed to: {new_path}")
81
+ return new_path
82
+ except Exception as e:
83
+ print(f"Error generating voice: {e}")
84
+ return None
85
+
86
+ def respond(message, chat_history, language):
87
+ language_instruction = f"Please respond in {language}."
88
+ full_prompt = f"{SYSTEM_MESSAGE} {language_instruction}\n\nUser: {message}\nAssistant:"
89
+
90
+ for human, ai in chat_history:
91
+ full_prompt += f"\n\nUser: {human}\nAssistant: {ai}"
92
+
93
+ full_prompt += f"\n\nUser: {message}\nAssistant:"
94
+
95
+ ai_message = get_completion(full_prompt)
96
+ return ai_message
97
+
98
+ def print_like_dislike(x: gr.LikeData):
99
+ print(x.index, x.value, x.liked)
100
+ return x.liked
101
+
102
+ def add_message(history, message, response_type):
103
+ history.append((message, None))
104
+ return history, gr.Textbox(value="", interactive=True)
105
+
106
+ def bot(history, response_type, language1, language2, speaker):
107
+ human_message = history[-1][0]
108
+ ai_message = respond(human_message, history[:-1], language1)
109
+
110
+ audio_path = None
111
+ if response_type in ["text + audio"]:
112
+ #print(f"Attempting to generate audio for response type: {response_type}")
113
+
114
+ # If languages are different, translate before generating audio
115
+ if language1 != language2:
116
+ #print(f"Translating from {language1} to {language2}")
117
+ translated_message = translate_text(ai_message, language1, language2)
118
+ audio_text = translated_message
119
+ else:
120
+ audio_text = ai_message
121
+
122
+ audio_path = to_voice(audio_text, language2, speaker)
123
+ #print(f"Audio path after generation: {audio_path}")
124
+
125
+ history[-1] = (human_message, ai_message)
126
+
127
+ return history, audio_path, response_type
128
+
129
+
130
+
131
+ def update_speakers(language):
132
+ language = language.split(" ")[-1] # Remove flag from language
133
+ speakers = get_speakers(language)
134
+ return gr.Dropdown(choices=speakers, value=speakers[0] if speakers else None, label="Speaker")
135
+
136
+ custom_css = """
137
+ .submit-btn, .play-btn {
138
+ background-color: transparent !important;
139
+ border: none !important;
140
+ padding: 0 !important;
141
+ }
142
+ .submit-btn:hover, .play-btn:hover {
143
+ background-color: transparent !important;
144
+ }
145
+ """
146
+
147
+
148
+
149
+ with gr.Blocks(css=custom_css, theme=gr.themes.Base()) as demo:
150
+ chatbot = gr.Chatbot(
151
+ elem_id="chatbot",
152
+ bubble_full_width=False,
153
+ height=400,
154
+ show_label=False,
155
+ )
156
+
157
+ with gr.Row():
158
+ msg = gr.Textbox(
159
+ show_label=False,
160
+ placeholder="Enter your message...",
161
+ scale=9
162
+ )
163
+ submit_btn = gr.Button(
164
+ "โžค",
165
+ elem_classes=["submit-btn"],
166
+ scale=1
167
+ )
168
+
169
+ response_type = gr.Radio(
170
+ ["text", "text + audio"],
171
+ value="text",
172
+ label="Response Type",
173
+ )
174
+
175
+ with gr.Accordion("Language Selection", open=False):
176
+ with gr.Column():
177
+ gr.Markdown("### Text to Speech")
178
+ with gr.Row():
179
+ language1 = gr.Dropdown(choices=languages, label="Text Language", value="English")
180
+ language2 = gr.Dropdown(choices=languages, label="Speech Language", value="English")
181
+ initial_speakers = get_speakers("English")
182
+ speaker = gr.Dropdown(choices=initial_speakers, value=initial_speakers[0] if initial_speakers else None, label="Speaker")
183
+
184
+ #gr.Markdown("### Speech to Text")
185
+ #with gr.Row():
186
+ # language3 = gr.Dropdown(choices=languages, label="Speech Language", value="English")
187
+ # language4 = gr.Dropdown(choices=languages, label="Text Language", value="English")
188
+
189
+
190
+
191
+
192
+ audio_visible = response_type in ["text + audio"]
193
+ print("Audio Visible", audio_visible)
194
+ audio_player = gr.Audio(label="Response Audio", visible=audio_visible, elem_id="audio-player", autoplay=True)
195
+ play_btn = gr.Button("๐Ÿ”Š", elem_classes=["play-btn"], visible=False)
196
+
197
+ # Hidden components to store state
198
+ audio_path_state = gr.State()
199
+ response_type_state = gr.State()
200
+
201
+ # Event handlers
202
+
203
+ language1.change(update_speakers, inputs=[language1], outputs=[speaker])
204
+ language2.change(update_speakers, inputs=[language2], outputs=[speaker])
205
+
206
+ def process_response(history, audio_path, response_type):
207
+ #print(f"Processing response. Audio path: {audio_path}, Response type: {response_type}")
208
+ audio_visible = response_type in ["text + audio"] and audio_path is not None
209
+ return (
210
+ history,
211
+ audio_path if audio_visible else None,
212
+ audio_visible,
213
+ audio_path,
214
+ response_type
215
+ )
216
+ def play_audio(audio_path):
217
+ return gr.update(value=audio_path, visible=True, autoplay=True), gr.update(visible=True)
218
+
219
+ msg.submit(add_message, [chatbot, msg, response_type], [chatbot, msg]).then(
220
+ bot, [chatbot, response_type, language1, language2, speaker], [chatbot, audio_path_state, response_type_state]
221
+ ).then(
222
+ process_response, [chatbot, audio_path_state, response_type_state], [chatbot, audio_player, audio_path_state, response_type_state]
223
+ )
224
+
225
+ submit_btn.click(add_message, [chatbot, msg, response_type], [chatbot, msg]).then(
226
+ bot, [chatbot, response_type, language1, language2, speaker], [chatbot, audio_path_state, response_type_state]
227
+ ).then(
228
+ process_response, [chatbot, audio_path_state, response_type_state], [chatbot, audio_player, audio_path_state, response_type_state]
229
+ )
230
+
231
+ play_btn.click(play_audio, inputs=[audio_path_state], outputs=[audio_player, play_btn])
232
+
233
+ chatbot.like(print_like_dislike, None, None)
234
 
235
  if __name__ == "__main__":
236
  demo.launch()