Treat Deepgram 1006 disconnect as silence
This commit is contained in:
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user