datbkpro commited on
Commit
d936d48
·
verified ·
1 Parent(s): 873c17b

Update ui/tabs.py

Browse files
Files changed (1) hide show
  1. ui/tabs.py +43 -22
ui/tabs.py CHANGED
@@ -266,21 +266,22 @@ def create_streaming_voice_tab(streaming_service: StreamingVoiceService):
266
  autoplay=True
267
  )
268
 
269
- # Biến để lưu kết quả từ VAD callback
270
- vad_result = gr.State(value={
271
- 'transcription': "",
272
- 'response': "",
273
- 'tts_audio': None,
274
- 'status': 'waiting'
275
- })
276
 
277
  def start_vad():
278
  """Bắt đầu VAD listening"""
279
  def vad_callback(result):
280
  """Callback khi VAD phát hiện speech"""
281
- # Lưu kết quả vào state
282
- vad_result.value = result
283
- print(f"VAD Result: {result}")
 
 
 
284
 
285
  success = streaming_service.start_listening(vad_callback)
286
  status = "✅ Đang lắng nghe với VAD..." if success else "❌ Lỗi khởi động VAD"
@@ -299,7 +300,6 @@ def create_streaming_voice_tab(streaming_service: StreamingVoiceService):
299
  return "❌ Không có âm thanh", "Vui lòng nói lại", None, "Đang chờ...", {}
300
 
301
  try:
302
- # SỬA LỖI: Gọi đúng phương thức
303
  result = streaming_service.process_streaming_audio(audio_data)
304
  state = streaming_service.get_conversation_state()
305
  status = "✅ Đã xử lý manual audio"
@@ -312,15 +312,30 @@ def create_streaming_voice_tab(streaming_service: StreamingVoiceService):
312
  """Xóa hội thoại"""
313
  streaming_service.clear_conversation()
314
  state = streaming_service.get_conversation_state()
 
 
 
 
315
  return "", "", None, "🗑️ Đã xóa hội thoại", state
316
 
317
- def update_from_vad():
318
- """Cập nhật UI từ kết quả VAD"""
319
- result = vad_result.value
 
 
 
 
 
 
 
 
 
 
 
320
  state = streaming_service.get_conversation_state()
321
- return result['transcription'], result['response'], result['tts_audio'], "✅ VAD đã xử lý", state
322
 
323
- # Event handlers
324
  start_vad_btn.click(
325
  start_vad,
326
  outputs=[status_display, state_display]
@@ -331,7 +346,6 @@ def create_streaming_voice_tab(streaming_service: StreamingVoiceService):
331
  outputs=[status_display, state_display]
332
  )
333
 
334
- # SỬA LỖI: Sử dụng đúng phương thức stream
335
  microphone.stream(
336
  process_manual_audio,
337
  inputs=[microphone],
@@ -343,13 +357,20 @@ def create_streaming_voice_tab(streaming_service: StreamingVoiceService):
343
  outputs=[realtime_transcription, ai_response, tts_output, status_display, state_display]
344
  )
345
 
346
- # Timer để cập nhật kết quả từ VAD
347
- streaming_tab.poll(
348
- update_from_vad,
349
- 1000,
 
350
  outputs=[realtime_transcription, ai_response, tts_output, status_display, state_display]
351
  )
352
-
 
 
 
 
 
 
353
 
354
  return streaming_tab
355
  def create_image_tab(image_service: ImageService):
 
266
  autoplay=True
267
  )
268
 
269
+ # Biến state để lưu kết quả từ VAD
270
+ vad_transcription = gr.State(value="")
271
+ vad_response = gr.State(value="")
272
+ vad_audio = gr.State(value=None)
273
+ vad_status = gr.State(value="waiting")
 
 
274
 
275
  def start_vad():
276
  """Bắt đầu VAD listening"""
277
  def vad_callback(result):
278
  """Callback khi VAD phát hiện speech"""
279
+ # Cập nhật state với kết quả mới
280
+ vad_transcription.value = result.get('transcription', '')
281
+ vad_response.value = result.get('response', '')
282
+ vad_audio.value = result.get('tts_audio', None)
283
+ vad_status.value = result.get('status', 'completed')
284
+ print(f"VAD Callback: {result.get('transcription', '')}")
285
 
286
  success = streaming_service.start_listening(vad_callback)
287
  status = "✅ Đang lắng nghe với VAD..." if success else "❌ Lỗi khởi động VAD"
 
300
  return "❌ Không có âm thanh", "Vui lòng nói lại", None, "Đang chờ...", {}
301
 
302
  try:
 
303
  result = streaming_service.process_streaming_audio(audio_data)
304
  state = streaming_service.get_conversation_state()
305
  status = "✅ Đã xử lý manual audio"
 
312
  """Xóa hội thoại"""
313
  streaming_service.clear_conversation()
314
  state = streaming_service.get_conversation_state()
315
+ # Reset các state
316
+ vad_transcription.value = ""
317
+ vad_response.value = ""
318
+ vad_audio.value = None
319
  return "", "", None, "🗑️ Đã xóa hội thoại", state
320
 
321
+ def get_vad_results():
322
+ """Lấy kết quả từ VAD cập nhật UI"""
323
+ if vad_status.value == "completed":
324
+ # Reset status sau khi lấy kết quả
325
+ vad_status.value = "waiting"
326
+ state = streaming_service.get_conversation_state()
327
+ return (vad_transcription.value, vad_response.value, vad_audio.value,
328
+ "✅ VAD đã xử lý", state)
329
+ else:
330
+ # Không có kết quả mới, trả về None để không cập nhật
331
+ return gr.skip(), gr.skip(), gr.skip(), gr.skip(), gr.skip()
332
+
333
+ def refresh_state():
334
+ """Chỉ cập nhật state display"""
335
  state = streaming_service.get_conversation_state()
336
+ return state
337
 
338
+ # Event handlers chính
339
  start_vad_btn.click(
340
  start_vad,
341
  outputs=[status_display, state_display]
 
346
  outputs=[status_display, state_display]
347
  )
348
 
 
349
  microphone.stream(
350
  process_manual_audio,
351
  inputs=[microphone],
 
357
  outputs=[realtime_transcription, ai_response, tts_output, status_display, state_display]
358
  )
359
 
360
+ # Nút refresh để cập nhật kết quả VAD thủ công
361
+ refresh_btn = gr.Button("🔄 Kiểm tra kết quả VAD", variant="secondary", visible=False)
362
+
363
+ refresh_btn.click(
364
+ get_vad_results,
365
  outputs=[realtime_transcription, ai_response, tts_output, status_display, state_display]
366
  )
367
+
368
+ # Tự động cập nhật state display mỗi 2 giây
369
+ streaming_tab.load(
370
+ refresh_state,
371
+ outputs=[state_display],
372
+ every=2
373
+ )
374
 
375
  return streaming_tab
376
  def create_image_tab(image_service: ImageService):