freddyaboulton HF staff commited on
Commit
ec9410c
·
verified ·
1 Parent(s): 86fc8e0

Upload folder using huggingface_hub

Browse files
Files changed (2) hide show
  1. app.py +11 -12
  2. index.html +43 -1
app.py CHANGED
@@ -38,30 +38,29 @@ def response(
38
  ):
39
  gradio_chatbot = gradio_chatbot or []
40
  conversation_state = conversation_state or []
 
 
 
 
 
 
 
41
 
42
- text = stt(audio)
43
- sample_rate, array = audio
44
- gradio_chatbot.append(
45
- {"role": "user", "content": gr.Audio((sample_rate, array.squeeze()))}
46
- )
47
- yield AdditionalOutputs(gradio_chatbot, conversation_state)
48
-
49
- conversation_state.append({"role": "user", "content": text})
50
 
51
- try:
52
  request = client.chat.completions.create(
53
  model="Meta-Llama-3.2-3B-Instruct",
54
- messages=conversation_state,
55
  temperature=0.1,
56
  top_p=0.1,
57
  )
58
  response = {"role": "assistant", "content": request.choices[0].message.content}
59
 
60
- except Exception:
61
  import traceback
62
 
63
  traceback.print_exc()
64
- raise WebRTCError(traceback.format_exc())
65
 
66
  conversation_state.append(response)
67
  gradio_chatbot.append(response)
 
38
  ):
39
  gradio_chatbot = gradio_chatbot or []
40
  conversation_state = conversation_state or []
41
+ try:
42
+ text = stt(audio)
43
+ sample_rate, array = audio
44
+ gradio_chatbot.append(
45
+ {"role": "user", "content": gr.Audio((sample_rate, array.squeeze()))}
46
+ )
47
+ yield AdditionalOutputs(gradio_chatbot, conversation_state)
48
 
49
+ conversation_state.append({"role": "user", "content": text})
 
 
 
 
 
 
 
50
 
 
51
  request = client.chat.completions.create(
52
  model="Meta-Llama-3.2-3B-Instruct",
53
+ messages=conversation_state, # type: ignore
54
  temperature=0.1,
55
  top_p=0.1,
56
  )
57
  response = {"role": "assistant", "content": request.choices[0].message.content}
58
 
59
+ except Exception as e:
60
  import traceback
61
 
62
  traceback.print_exc()
63
+ raise WebRTCError(str(e) + "\n" + traceback.format_exc())
64
 
65
  conversation_state.append(response)
66
  gradio_chatbot.append(response)
index.html CHANGED
@@ -176,10 +176,28 @@
176
  transform: scale(1.2);
177
  }
178
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
179
  </style>
180
  </head>
181
 
182
  <body>
 
 
183
  <div class="container">
184
  <div class="logo">
185
  <h1>Hello Computer 💻</h1>
@@ -257,11 +275,24 @@
257
  updateAudioLevel();
258
  }
259
 
 
 
 
 
 
 
 
 
 
 
 
260
  function handleMessage(event) {
261
  const eventJson = JSON.parse(event.data);
262
  const typingIndicator = document.getElementById('typing-indicator');
263
 
264
- if (eventJson.type === "send_input") {
 
 
265
  fetch('/input_hook', {
266
  method: 'POST',
267
  headers: {
@@ -336,6 +367,15 @@
336
  });
337
 
338
  const serverResponse = await response.json();
 
 
 
 
 
 
 
 
 
339
  await peerConnection.setRemoteDescription(serverResponse);
340
 
341
  eventSource = new EventSource('/outputs?webrtc_id=' + webrtc_id);
@@ -347,6 +387,8 @@
347
  });
348
  } catch (err) {
349
  console.error('Error setting up WebRTC:', err);
 
 
350
  }
351
  }
352
 
 
176
  transform: scale(1.2);
177
  }
178
  }
179
+
180
+ /* Add styles for toast notifications */
181
+ .toast {
182
+ position: fixed;
183
+ top: 20px;
184
+ left: 50%;
185
+ transform: translateX(-50%);
186
+ background-color: #f44336;
187
+ color: white;
188
+ padding: 16px 24px;
189
+ border-radius: 4px;
190
+ font-size: 14px;
191
+ z-index: 1000;
192
+ display: none;
193
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
194
+ }
195
  </style>
196
  </head>
197
 
198
  <body>
199
+ <!-- Add toast element after body opening tag -->
200
+ <div id="error-toast" class="toast"></div>
201
  <div class="container">
202
  <div class="logo">
203
  <h1>Hello Computer 💻</h1>
 
275
  updateAudioLevel();
276
  }
277
 
278
+ function showError(message) {
279
+ const toast = document.getElementById('error-toast');
280
+ toast.textContent = message;
281
+ toast.style.display = 'block';
282
+
283
+ // Hide toast after 5 seconds
284
+ setTimeout(() => {
285
+ toast.style.display = 'none';
286
+ }, 5000);
287
+ }
288
+
289
  function handleMessage(event) {
290
  const eventJson = JSON.parse(event.data);
291
  const typingIndicator = document.getElementById('typing-indicator');
292
 
293
+ if (eventJson.type === "error") {
294
+ showError(eventJson.message);
295
+ } else if (eventJson.type === "send_input") {
296
  fetch('/input_hook', {
297
  method: 'POST',
298
  headers: {
 
367
  });
368
 
369
  const serverResponse = await response.json();
370
+
371
+ if (serverResponse.status === 'failed') {
372
+ showError(serverResponse.meta.error === 'concurrency_limit_reached'
373
+ ? `Too many connections. Maximum limit is ${serverResponse.meta.limit}`
374
+ : serverResponse.meta.error);
375
+ stop();
376
+ return;
377
+ }
378
+
379
  await peerConnection.setRemoteDescription(serverResponse);
380
 
381
  eventSource = new EventSource('/outputs?webrtc_id=' + webrtc_id);
 
387
  });
388
  } catch (err) {
389
  console.error('Error setting up WebRTC:', err);
390
+ showError('Failed to establish connection. Please try again.');
391
+ stop();
392
  }
393
  }
394