Spaces:
Building
Building
Update websocket_handler.py
Browse files- websocket_handler.py +20 -0
websocket_handler.py
CHANGED
@@ -291,6 +291,10 @@ class RealtimeSession:
|
|
291 |
if not self.is_streaming and self.is_websocket_active and self.state == ConversationState.LISTENING:
|
292 |
log_info(f"🔄 Restarting STT stream...", session_id=self.session.session_id)
|
293 |
|
|
|
|
|
|
|
|
|
294 |
# Önce mevcut stream'i temizle (eğer varsa)
|
295 |
if self.stt_manager:
|
296 |
await self.stop_stt_streaming()
|
@@ -557,10 +561,14 @@ async def handle_audio_chunk(websocket: WebSocket, session: RealtimeSession, mes
|
|
557 |
if session.state in [ConversationState.PLAYING_AUDIO, ConversationState.PROCESSING_TTS,
|
558 |
ConversationState.PROCESSING_LLM, ConversationState.PROCESSING_STT]:
|
559 |
log_debug(f"🔇 Ignoring audio chunk during state: {session.state.value}", session_id=session.session.session_id)
|
|
|
|
|
560 |
return
|
561 |
|
562 |
# Change state to listening if idle
|
563 |
if session.state == ConversationState.IDLE:
|
|
|
|
|
564 |
await session.change_state(ConversationState.LISTENING)
|
565 |
await websocket.send_json({
|
566 |
"type": "state_change",
|
@@ -604,6 +612,16 @@ async def handle_audio_chunk(websocket: WebSocket, session: RealtimeSession, mes
|
|
604 |
|
605 |
if session.chunk_counter == 1:
|
606 |
log_info(f"🎤 Started streaming audio to STT", session_id=session.session.session_id)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
607 |
elif session.chunk_counter % 100 == 0:
|
608 |
log_info(f"📊 Sent {session.chunk_counter} chunks to STT so far...", session_id=session.session.session_id)
|
609 |
|
@@ -650,6 +668,8 @@ async def handle_audio_chunk(websocket: WebSocket, session: RealtimeSession, mes
|
|
650 |
log_warning(f"⚠️ STT timeout detected, restarting stream", session_id=session.session.session_id)
|
651 |
session.is_streaming = False
|
652 |
session.chunk_counter = 0
|
|
|
|
|
653 |
# Timeout durumunda yeniden başlat
|
654 |
await session.restart_stt_if_needed()
|
655 |
else:
|
|
|
291 |
if not self.is_streaming and self.is_websocket_active and self.state == ConversationState.LISTENING:
|
292 |
log_info(f"🔄 Restarting STT stream...", session_id=self.session.session_id)
|
293 |
|
294 |
+
# Önce audio buffer'ı temizle - eski chunk'ları sil
|
295 |
+
await self.audio_buffer.clear()
|
296 |
+
self.chunk_counter = 0
|
297 |
+
|
298 |
# Önce mevcut stream'i temizle (eğer varsa)
|
299 |
if self.stt_manager:
|
300 |
await self.stop_stt_streaming()
|
|
|
561 |
if session.state in [ConversationState.PLAYING_AUDIO, ConversationState.PROCESSING_TTS,
|
562 |
ConversationState.PROCESSING_LLM, ConversationState.PROCESSING_STT]:
|
563 |
log_debug(f"🔇 Ignoring audio chunk during state: {session.state.value}", session_id=session.session.session_id)
|
564 |
+
# Audio buffer'ı da temizle ki eski chunk'lar birikmesin
|
565 |
+
await session.audio_buffer.clear()
|
566 |
return
|
567 |
|
568 |
# Change state to listening if idle
|
569 |
if session.state == ConversationState.IDLE:
|
570 |
+
# IDLE'dan LISTENING'e geçerken buffer'ı temizle
|
571 |
+
await session.audio_buffer.clear()
|
572 |
await session.change_state(ConversationState.LISTENING)
|
573 |
await websocket.send_json({
|
574 |
"type": "state_change",
|
|
|
612 |
|
613 |
if session.chunk_counter == 1:
|
614 |
log_info(f"🎤 Started streaming audio to STT", session_id=session.session.session_id)
|
615 |
+
# İlk chunk'ta format kontrolü yap
|
616 |
+
if len(decoded_audio) >= 4:
|
617 |
+
if decoded_audio[:4] == b'\x1a\x45\xdf\xa3':
|
618 |
+
log_info(f"✅ Valid WEBM header detected", session_id=session.session.session_id)
|
619 |
+
else:
|
620 |
+
log_warning(f"⚠️ Unknown audio format, first 4 bytes: {decoded_audio[:4].hex()}", session_id=session.session.session_id)
|
621 |
+
# Format hatalıysa buffer'ı temizle ve chunk counter'ı resetle
|
622 |
+
await session.audio_buffer.clear()
|
623 |
+
session.chunk_counter = 0
|
624 |
+
return
|
625 |
elif session.chunk_counter % 100 == 0:
|
626 |
log_info(f"📊 Sent {session.chunk_counter} chunks to STT so far...", session_id=session.session.session_id)
|
627 |
|
|
|
668 |
log_warning(f"⚠️ STT timeout detected, restarting stream", session_id=session.session.session_id)
|
669 |
session.is_streaming = False
|
670 |
session.chunk_counter = 0
|
671 |
+
# Buffer'ı temizle
|
672 |
+
await session.audio_buffer.clear()
|
673 |
# Timeout durumunda yeniden başlat
|
674 |
await session.restart_stt_if_needed()
|
675 |
else:
|