refactor(tts): remove Piper TTS provider #11
No reviewers
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
slaid098/voice_assistant!11
Loading…
Reference in a new issue
No description provided.
Delete branch "refactor/tts/remove-piper"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что сделано
Полностью удалён Piper TTS провайдер:
src/voice_assistant/speech/providers/piper_tts.pyиtests/test_piper.pytts.py: убран импортpiper_tts, переписан_active_providers()(auto→[vosk, google],vosk→[vosk, google],google→[google, vosk]), удаленаpreload_piper(), убран неиспользуемыйthreadingимпортmodel_loader.py: удаленыpiper_model_path()иpiper_config_path()config.py: удалено полеpiper_modelи загрузкаPIPER_MODELcli.py: убранpreload_piperиз импорта и вызова, условие предзагрузки Vosk TTS расширено наauto(in {"vosk", "auto"})sounds.py,base.py,vosk_tts.py,text_normalize.py)test_model_loader.py,mock_piper→mock_localвtest_tts.py, удалён мок изtest_cli.py,TTS_PROVIDER=piper→voskвtest_config.py, исправленlen(providers)вtest_vosk_tts.py(3 → 2, спека пропустила этот файл)pyproject.toml: удалена зависимостьpiper-tts>=1.4.0,uv.lockперегенерирован.env.template: убранpiperизTTS_PROVIDER, удалёнPIPER_MODELrelease.yml: удалён шаг скачивания Piper модели и--collect-all piperREADME.mdиAGENTS.md: обновлены (7 строк AGENTS.md).gitignore: удалены мёртвые Piper паттерныПочему
Piper — устаревшая модель, Vosk TTS качественнее (5 спикеров vs 1). Piper занимал ~60 МБ в релизе и усложнял dispatch (4 режима вместо 3). Удаление упрощает логику и уменьшает размер сборки.
Watch out
Breaking change —
TTS_PROVIDER=piperбольше не валиден, fallback на google (default branch в_active_providers).uv.lockперегенерирован (удаленыpiper-ttsиpathvalidate). Vosk TTS preload теперь работает и вautoрежиме (раньше толькоvosk).Pending
Release pipeline адаптация под Forgejo — issue #10. CHANGELOG не трогался (будет обнулён в следующем PR).
Closes #9
Closes #9
Code Review Summary
Чистый, хорошо исполненный PR — полное удаление Piper TTS провайдера. Все 22 файла корректно обновлены, 308 строк удалено, 38 добавлено. Piper-ссылки остались только в CHANGELOG.md (14 совпадений), что явно оговорено в PR body ("будет обнулён в следующем PR").
Positives
_active_providers()(tts.py:90-99) — логика переписана корректно:auto/vosk→[vosk_tts, google_tts],google→[google_tts, vosk_tts]. Невалидное значениеpiperпопадает в fallthroughreturn [google_tts, vosk_tts]— safe fallback.auto(in {"vosk", "auto"}),preload_vosk_tts()синхронная (vosk_tts.py:84-90, без threading), STARTUP (cli.py:61) играет строго после загрузки. Контракт "STARTUP after full init" сохранён.threadingимпорт удален из tts.py (был нужен только дляpreload_piper), но оставлен в cli.py — используетсяthreading.Timerв_crash_handler. Корректно.piper-ttsи его транзитивная зависимостьpathvalidate.test_piper.pyудалён,mock_piper→mock_localв test_tts.py,len(providers) == 2в test_vosk_tts.py (было 3),TTS_PROVIDER=piper→voskв test_config.py.piper_tts,preload_piper,piper_model_path,piper_config_path,piper_model,PIPER_MODEL,mock_piper). Nofrom voice_assistant.speech.providers.piperimports.--max-modules B) ✅.refactor(tts): remove Piper TTS provider— conventional format, body содержит все 4 heading'а осмысленно, Closes #9.Suggestions (info, not blocking)
uv run xenon --max-absolute B --max-modules A --max-average A, но CI (ci.yml:49) использует--max-modules B. Модулиassistant.pyиnlu/intent.pyимеют rank B (pre-existing, не изменены в этом PR). Расхождение существовало до PR — можно выровнять в отдельном issue.test_main_loop_handles_keyboard_interruptне мокаетsettings.tts_providerиensure_vosk_tts_model— полагается на defaultgoogleдля пропуска блока Vosk preload. Работает, но если default когда-либо сменится наvosk/auto, тест сломается. Pre-existing pattern, не введён этим PR.Verdict: APPROVE