initial: silero-tts-service + README
This commit is contained in:
1 parent
8c60c25ad2
commit
984b1fec6d
18 files changed
+2080
No files matched your search
Executable
+49
@@ -0,0 +1,49 @@
|
||||
"""Валидаторы входных данных.
|
||||
|
||||
Не зависят от torch/silero — можно тестировать изолированно.
|
||||
"""
|
||||
|
||||
from fastapi import HTTPException
|
||||
|
||||
|
||||
def validate_text(text: str) -> str:
|
||||
"""
|
||||
Очистка и валидация входного текста:
|
||||
- Убирает управляющие символы (кроме \n \r \t)
|
||||
- Нормализует множественные пробелы
|
||||
- Проверяет длину
|
||||
"""
|
||||
if not text.strip():
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
detail="Текст не может быть пустым или пробелами",
|
||||
)
|
||||
|
||||
# Удаляем управляющие символы
|
||||
text = "".join(
|
||||
ch for ch in text
|
||||
if ch in ("\n", "\r", "\t") or (ord(ch) >= 32 and ch != "\x7f")
|
||||
)
|
||||
|
||||
# Нормализуем множественные пробелы (но не табы/ньюлайны)
|
||||
import re
|
||||
text = re.sub(r"[^\S\n\t]+", " ", text)
|
||||
text = text.strip()
|
||||
|
||||
if len(text) > 4000:
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
detail=f"Текст слишком длинный (max 4000, got {len(text)})",
|
||||
)
|
||||
|
||||
return text
|
||||
|
||||
|
||||
def validate_speaker(speaker: str, speakers: dict) -> str:
|
||||
"""Проверка валидности голоса."""
|
||||
if speaker not in speakers:
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
detail=f"Неизвестный голос. Доступные: {', '.join(speakers.keys())}",
|
||||
)
|
||||
return speaker
|
||||
Reference in new issue
Block a user