first commit
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
"""Классификация ошибок пайплайна → голосовые куи (текст + wav-файл).
|
||||
|
||||
Отец должен СЛЫШАТЬ, что случилось: нет сети / лимит / что-то ещё.
|
||||
Куи — готовые wav из assets/earcons (мгновенно, без синтеза в момент ошибки).
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
CUES_DIR = Path(__file__).resolve().parents[2] / "assets" / "earcons"
|
||||
|
||||
# Паттерны текста ошибки → куи
|
||||
_PATTERNS: list[tuple[str, str]] = [
|
||||
(r"Connection|ConnectError|Network|Timeout|timed out|getaddrinfo|SSLError|RemoteProtocol", "error_network.wav"),
|
||||
(r"429|Rate limit|rate_limit|quota|Quota|billing|insufficient", "error_limit.wav"),
|
||||
(r"401|403|Unauthorized|PermissionDenied|forbidden", "error_limit.wav"),
|
||||
]
|
||||
|
||||
UNCLEAR_CUE = "unclear_question.wav"
|
||||
GENERAL_CUE = "error_general.wav"
|
||||
UNCLEAR_LIMIT = 5 # после N неразборчивых подряд — голосовое сообщение и сброс
|
||||
|
||||
|
||||
def classify_error(exc: BaseException | str) -> str:
|
||||
"""Текст ошибки → имя wav-куи в assets/earcons."""
|
||||
text = str(exc)
|
||||
for pattern, cue in _PATTERNS:
|
||||
if re.search(pattern, text):
|
||||
return cue
|
||||
return GENERAL_CUE
|
||||
|
||||
|
||||
def cue_path(cue: str) -> Path:
|
||||
return CUES_DIR / cue
|
||||
Reference in New Issue
Block a user