Spaces:
Building
Building
Update websocket_handler.py
Browse files- websocket_handler.py +17 -13
websocket_handler.py
CHANGED
@@ -409,16 +409,27 @@ class RealtimeSession:
|
|
409 |
|
410 |
elif action == "audio_ended":
|
411 |
# Audio playback ended on client
|
|
|
|
|
412 |
if session.state == ConversationState.PLAYING_AUDIO:
|
413 |
-
|
414 |
await session.change_state(ConversationState.LISTENING)
|
415 |
await websocket.send_json({
|
416 |
"type": "state_change",
|
417 |
"from": "playing_audio",
|
418 |
"to": "listening"
|
419 |
})
|
420 |
-
|
421 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
422 |
|
423 |
# STT hazır olduğunda sinyal gönder
|
424 |
if success and session.is_streaming:
|
@@ -428,12 +439,14 @@ class RealtimeSession:
|
|
428 |
"message": "STT is ready to receive audio"
|
429 |
})
|
430 |
else:
|
431 |
-
log_error(f"❌ STT
|
432 |
await websocket.send_json({
|
433 |
"type": "error",
|
434 |
"error_type": "stt_init_failed",
|
435 |
"message": "Failed to initialize STT after audio playback"
|
436 |
})
|
|
|
|
|
437 |
|
438 |
elif action == "restart_stt":
|
439 |
# Manual STT restart request
|
@@ -441,15 +454,6 @@ class RealtimeSession:
|
|
441 |
await session.stop_stt_streaming()
|
442 |
await session.restart_stt_if_needed()
|
443 |
|
444 |
-
async def cleanup(self):
|
445 |
-
"""Clean up resources"""
|
446 |
-
try:
|
447 |
-
self.is_websocket_active = False
|
448 |
-
await self.stop_stt_streaming() # STT'yi düzgün durdur
|
449 |
-
log_info(f"Cleaned up realtime session", session_id=self.session.session_id)
|
450 |
-
except Exception as e:
|
451 |
-
log_warning(f"Cleanup error", error=str(e), session_id=self.session.session_id)
|
452 |
-
|
453 |
# ========================= MAIN HANDLER =========================
|
454 |
async def websocket_endpoint(websocket: WebSocket, session_id: str):
|
455 |
"""Main WebSocket endpoint for real-time conversation"""
|
|
|
409 |
|
410 |
elif action == "audio_ended":
|
411 |
# Audio playback ended on client
|
412 |
+
log_info(f"🎵 Client reported audio ended, current state: {session.state.value}", session_id=session.session.session_id)
|
413 |
+
|
414 |
if session.state == ConversationState.PLAYING_AUDIO:
|
415 |
+
# State'i listening'e çevir
|
416 |
await session.change_state(ConversationState.LISTENING)
|
417 |
await websocket.send_json({
|
418 |
"type": "state_change",
|
419 |
"from": "playing_audio",
|
420 |
"to": "listening"
|
421 |
})
|
422 |
+
|
423 |
+
# STT'yi başlat
|
424 |
+
log_info(f"🎤 Starting STT after audio playback ended", session_id=session.session.session_id)
|
425 |
+
|
426 |
+
# Önce mevcut STT varsa temizle
|
427 |
+
if session.stt_manager:
|
428 |
+
await session.stop_stt_streaming()
|
429 |
+
await asyncio.sleep(0.1) # Kısa bekleme
|
430 |
+
|
431 |
+
# Yeni STT başlat
|
432 |
+
success = await session.initialize_stt()
|
433 |
|
434 |
# STT hazır olduğunda sinyal gönder
|
435 |
if success and session.is_streaming:
|
|
|
439 |
"message": "STT is ready to receive audio"
|
440 |
})
|
441 |
else:
|
442 |
+
log_error(f"❌ STT initialization failed", session_id=session.session.session_id)
|
443 |
await websocket.send_json({
|
444 |
"type": "error",
|
445 |
"error_type": "stt_init_failed",
|
446 |
"message": "Failed to initialize STT after audio playback"
|
447 |
})
|
448 |
+
else:
|
449 |
+
log_warning(f"⚠️ audio_ended received but state is not playing_audio: {session.state.value}", session_id=session.session.session_id)
|
450 |
|
451 |
elif action == "restart_stt":
|
452 |
# Manual STT restart request
|
|
|
454 |
await session.stop_stt_streaming()
|
455 |
await session.restart_stt_if_needed()
|
456 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
457 |
# ========================= MAIN HANDLER =========================
|
458 |
async def websocket_endpoint(websocket: WebSocket, session_id: str):
|
459 |
"""Main WebSocket endpoint for real-time conversation"""
|