Treat Deepgram 1006 disconnect as silence

This commit is contained in:
2026-03-15 17:30:40 +03:00
parent 59a607ba57
commit ebe79c3692

View File

@@ -312,6 +312,17 @@ class SpeechRecognizer:
if not session_error["message"]: if not session_error["message"]:
session_error["message"] = str(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 --- # --- Обработчики событий Deepgram ---
def on_transcript(unused_self, result, **kwargs): def on_transcript(unused_self, result, **kwargs):
"""Вызывается, когда приходит часть текста.""" """Вызывается, когда приходит часть текста."""
@@ -651,6 +662,10 @@ class SpeechRecognizer:
final_text = latest_interim.strip() final_text = latest_interim.strip()
self.transcript = final_text self.transcript = final_text
if session_error["message"] and not 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"]) raise RuntimeError(session_error["message"])
if cleanup_unhealthy: if cleanup_unhealthy:
# Если cleanup подвис, не валим текущую команду и не запускаем ложный retry. # Если cleanup подвис, не валим текущую команду и не запускаем ложный retry.