ciyidogan commited on
Commit
9d37ba9
·
verified ·
1 Parent(s): 51ad6ad

Update websocket_handler.py

Browse files
Files changed (1) hide show
  1. 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: