diff --git a/app/audio/stt.py b/app/audio/stt.py index 7070363..b1843ba 100644 --- a/app/audio/stt.py +++ b/app/audio/stt.py @@ -312,6 +312,17 @@ class SpeechRecognizer: if not session_error["message"]: session_error["message"] = str(message) + def is_benign_disconnect(message: str) -> bool: + if not message: + return False + lowered = message.lower() + return ( + "connectionclosed" in lowered + or "code 1006" in lowered + or "no_close_frame" in lowered + or "websocket" in lowered + ) + # --- Обработчики событий Deepgram --- def on_transcript(unused_self, result, **kwargs): """Вызывается, когда приходит часть текста.""" @@ -651,6 +662,10 @@ class SpeechRecognizer: final_text = latest_interim.strip() self.transcript = final_text if session_error["message"] and not final_text: + # Частый случай после музыки: соединение Deepgram закрывается (1006) + # до начала речи. Это штатное завершение, не ошибка. + if not heard_speech and is_benign_disconnect(session_error["message"]): + return "" raise RuntimeError(session_error["message"]) if cleanup_unhealthy: # Если cleanup подвис, не валим текущую команду и не запускаем ложный retry.