first commit

This commit is contained in:
workD12
2026-09-11 19:47:15 +03:00
commit 32754a1fe2
56 changed files with 3836 additions and 0 deletions
+35
View File
@@ -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