Skip to content

Ужесточение фильтрации символов (RU/EN) и добавление fallback без language routing#19

Open
ndrco wants to merge 1 commit into
masterfrom
codex/fix-valueerror-in-tts-synthesis
Open

Ужесточение фильтрации символов (RU/EN) и добавление fallback без language routing#19
ndrco wants to merge 1 commit into
masterfrom
codex/fix-valueerror-in-tts-synthesis

Conversation

@ndrco

@ndrco ndrco commented Feb 23, 2026

Copy link
Copy Markdown
Owner

Motivation

  • Исключить прохождение CJK и прочих нежелательных юникод-скриптов через нормализатор, так как \w в Unicode-режиме покрывает слишком много скриптов и приводит к падениям Silero (например, ValueError в apply_tts).
  • Сделать поведение безопаснее в ветке без language-aware routing, добавив тот же тип fallback, который уже присутствует в routing-ветке, чтобы запросы с «грязным» или смешанным текстом не приводили к 500.

Description

  • Заменены регулярные выражения в app/text/normalize.py: вместо \w теперь используются явные диапазоны разрешённых символов для ru и en (A-Za-zА-Яа-яЁё0-9 для RU и A-Za-z0-9 для EN) с сохранением допуска цифр и распространённой пунктуации, через strip_unsupported_symbols.
  • В методе _synthesize_with_newline_ssml_breaks в app/services/tts_service.py добавлен try/except (ValueError, RuntimeError, KeyError) вокруг вызова RU-синтеза, и при ошибке выполняется дополнительная санитация через strip_unsupported_symbols(..., lang="ru") и повторная отправка в движок.
  • Добавлены тесты: в tests/test_normalize.py — проверки удаления CJK для lang="ru" и lang="en"; в tests/test_api_tts.py — сценарий без routing, где мок-движок эмулирует ValueError для CJK и проверяется успешный fallback и отсутствие CJK в итоговых вызовах движка.

Testing

  • Добавлены автоматические тесты в tests/test_normalize.py и tests/test_api_tts.py, но полноценный запуск pytest завершился неудачей из-за отсутствия системной зависимости httpx для starlette.testclient в окружении; это блокируется внешней установкой пакетов в текущем окружении.
  • Попытка установить httpx (pip install httpx) не удалась из-за сетевой/ proxy-ограничения (403), поэтому полный прогон тестов локально не прошёл.
  • Выполнена быстрая проверка поведения функции strip_unsupported_symbols через python-скрипт, и она вернула ожидаемую санитизацию (CJK удалены) для образцов ru и en входов, что подтверждает корректность изменения регулярных выражений.

Codex Task

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant