ar08 commited on
Commit
3af8857
Β·
verified Β·
1 Parent(s): 64c39dc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -22
app.py CHANGED
@@ -106,14 +106,18 @@ def transcribe_and_chat(audio):
106
  def create_demo():
107
  with gr.Blocks(css="""
108
  @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;700&display=swap');
109
- body { font-family: 'Poppins', sans-serif; margin: 0; padding: 0; box-sizing: border-box;}
110
- #audio-input {border: 2px solid #ffb703; padding: 10px;}
111
- #chat-output {background-color: #023047; color: #ffffff; font-size: 1.2em;}
112
- #audio-output {border: 2px solid #8ecae6;}
113
- #clear-button {background-color: #fb8500; color: white;}
114
- #voice-volume {background-color: #219ebc;}
115
- button {font-size: 16px;}
116
- audio {background-color: #ffb703; border-radius: 10px;}
 
 
 
 
117
  footer {display: none;}
118
  @media (max-width: 768px) {
119
  #audio-input, #chat-output, #audio-output { width: 100%; }
@@ -122,9 +126,8 @@ def create_demo():
122
  """) as demo:
123
  gr.Markdown(
124
  """
125
- <div style='text-align:center; color:#023047; font-size: 28px; font-weight: bold;'>πŸ—£οΈ AI Voice Assistant</div>
126
- <p style='text-align:center; color:#8ecae6; font-size: 18px;'>Talk to your personal AI! Record your voice, and get a response in both text and audio.</p>
127
- <p style='text-align:center; color:#8ecae6;'>Powered by advanced AI models for real-time interaction.</p>
128
  """,
129
  elem_id="header"
130
  )
@@ -139,16 +142,13 @@ def create_demo():
139
  chat_output = gr.Textbox(label="πŸ’¬ AI Response", elem_id="chat-output", lines=5, interactive=False)
140
  audio_output = gr.Audio(label="πŸ”Š AI Voice Response", autoplay=True, elem_id="audio-output")
141
 
142
- # Add some spacing and a divider
143
- gr.Markdown("<hr style='border: 1px solid #8ecae6;'/>")
144
 
145
- # Processing the audio input
146
  def process_audio(audio, volume):
147
  logging.info(f"Received audio: {audio}")
148
  if audio is None:
149
  return "No audio detected. Please try recording again.", None
150
  response, audio_path = transcribe_and_chat(audio)
151
- # Adjust volume for the response audio
152
  adjusted_audio_path = asyncio.run(text_to_speech_stream(response, volume))
153
  logging.info(f"Response: {response}, Audio path: {adjusted_audio_path}")
154
  return response, adjusted_audio_path
@@ -160,21 +160,18 @@ def create_demo():
160
  demo.load(None, js="""
161
  function() {
162
  var recordButton;
163
-
164
  function findRecordButton() {
165
  var buttons = document.querySelectorAll('button');
166
- for (var i = 0; i < buttons.length; i++) {
167
  if (buttons[i].textContent.includes('Record from microphone')) {
168
  return buttons[i];
169
  }
170
  }
171
- return null;
172
  }
173
 
174
  function startListening() {
175
- if (!recordButton) {
176
- recordButton = findRecordButton();
177
- }
178
  if (recordButton) {
179
  recordButton.click();
180
  }
@@ -202,7 +199,6 @@ def create_demo():
202
  setTimeout(playAssistantAudio, 100);
203
  });
204
 
205
- // Prevent audio from stopping when switching tabs
206
  document.addEventListener("visibilitychange", function() {
207
  var audioElements = document.querySelectorAll('audio');
208
  audioElements.forEach(function(audio) {
 
106
  def create_demo():
107
  with gr.Blocks(css="""
108
  @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;700&display=swap');
109
+ body { font-family: 'Poppins', sans-serif; margin: 0; padding: 0; background-color: #f0f4f8; color: #333; }
110
+ #header { font-size: 30px; font-weight: 700; color: #333; }
111
+ p { font-size: 18px; color: #666; }
112
+ #audio-input {border: 2px solid #9b51e0; padding: 10px; border-radius: 10px; background-color: #ffffff;}
113
+ #chat-output {background-color: #2f3640; color: #ffffff; font-size: 1.2em; border-radius: 10px; padding: 15px;}
114
+ #audio-output {border: 2px solid #9b51e0; padding: 10px; border-radius: 10px; background-color: #ffffff;}
115
+ #clear-button {background-color: #ff6b6b; color: white; border-radius: 5px;}
116
+ #voice-volume {background-color: #51a3ff;}
117
+ button {font-size: 16px; padding: 10px 20px; border-radius: 5px; cursor: pointer;}
118
+ button:hover { background-color: #ff6b6b; color: white;}
119
+ audio {border-radius: 10px; background-color: #9b51e0; padding: 10px;}
120
+ hr { border: 1px solid #9b51e0; margin-top: 20px; }
121
  footer {display: none;}
122
  @media (max-width: 768px) {
123
  #audio-input, #chat-output, #audio-output { width: 100%; }
 
126
  """) as demo:
127
  gr.Markdown(
128
  """
129
+ <div id='header'>πŸ—£οΈ AI Voice Assistant</div>
130
+ <p style='text-align:center;'>Talk to your personal AI! Record your voice, and get a response in both text and audio.</p>
 
131
  """,
132
  elem_id="header"
133
  )
 
142
  chat_output = gr.Textbox(label="πŸ’¬ AI Response", elem_id="chat-output", lines=5, interactive=False)
143
  audio_output = gr.Audio(label="πŸ”Š AI Voice Response", autoplay=True, elem_id="audio-output")
144
 
145
+ gr.Markdown("<hr />")
 
146
 
 
147
  def process_audio(audio, volume):
148
  logging.info(f"Received audio: {audio}")
149
  if audio is None:
150
  return "No audio detected. Please try recording again.", None
151
  response, audio_path = transcribe_and_chat(audio)
 
152
  adjusted_audio_path = asyncio.run(text_to_speech_stream(response, volume))
153
  logging.info(f"Response: {response}, Audio path: {adjusted_audio_path}")
154
  return response, adjusted_audio_path
 
160
  demo.load(None, js="""
161
  function() {
162
  var recordButton;
163
+
164
  function findRecordButton() {
165
  var buttons = document.querySelectorAll('button');
166
+ for (var i = 0; buttons.length; i++) {
167
  if (buttons[i].textContent.includes('Record from microphone')) {
168
  return buttons[i];
169
  }
170
  }
 
171
  }
172
 
173
  function startListening() {
174
+ recordButton = findRecordButton();
 
 
175
  if (recordButton) {
176
  recordButton.click();
177
  }
 
199
  setTimeout(playAssistantAudio, 100);
200
  });
201
 
 
202
  document.addEventListener("visibilitychange", function() {
203
  var audioElements = document.querySelectorAll('audio');
204
  audioElements.forEach(function(audio) {