fix(release): v0.1.0 build — scipy/sklearn + wake-word failure handling #15
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!15
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/release/scipy-sklearn-missing"
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?
Что сделано
--collect-all scipyи--collect-all scikit-learn(транзитивные deps openwakeword)_load_failedфлаг — после первой неудачиactive_wake_word_detector()возвращает None без повторной попыткиactive_wake_word_detector() is None→sys.exit(1)(не бесконечный цикл с TTS)Почему
Релиз v0.1.0 не запускается:
ModuleNotFoundError: scipy._external.array_api_compat.numpy.fft. PyInstaller не подобрал транзитивные deps openwakeword. Дополнительно: при ошибке загрузки — бесконечный цикл с повторением TTS-фразы каждые 2 секWatch out
Размер exe вырастет (~80MB scipy + ~30MB sklearn). После merge — передвинуть tag v0.1.0 на новый master, push → rebuild
Pending
Передвинуть v0.1.0 → rebuild → verify на Windows
Closes #14
Code Review Summary
Чистый фикс-PR для релиза v0.1.0: 3 бага, 3 коммита, 5 файлов, +56/-2 строк. CI зелёный, тесты покрывают новое поведение, код следует существующим конвенциям репо.
Positives
_load_failedфлаг кэширует failure, повторные вызовы возвращают None без реконструкции ONNX-детектора. Логика прозрачна, порядок проверок правильный (кэш → failure → создание).sys.exit(1)послеlogger.critical— правильный паттерн.while Trueцикл сохранён (просто недостижим при failure) — не сломана существующая структура.test_active_detector_failure_cachedпроверяет ровно то что нужно:call_count == 1(конструктор вызывается один раз),_load_failed is Trueпосле первой неудачи. Существующие тесты корректно обновлены (reset_load_failed = Falseчерез monkeypatch).active_wake_word_detectorдобавлен, чтобыmain()не падал наsys.exit(1)в существующем тесте loop-handles-keyboard-interrupt.--collect-all scipyи--collect-all scikit-learn, ничего лишнего.## Что сделано,## Почему,## Watch out,## Pending— заполнены осмысленно.Watch outпредупреждает о росте размера exe.Closes #14привязывает issue.Suggestions (info, not blocking)
global _cached_detector, _load_failedрасширяет существующийglobalpattern (pre-existing с# noqa: PLW0603). Это устоявшийся singleton-паттерн в этом модуле, не новое нарушение. Альтернатива (класс-контейнер илиfunctools.cache) была бы overkill для 2 переменных — текущее решение прагматично._load_failedникогда не сбрасывается в runtime. Это намеренно (процесс всё равноsys.exit(1)при failure), но если в будущем появится hot-reload моделей — понадобится reset-функция. Не блокирующее, архитектурный задел не требуется сейчас (YAGNI).Verdict: APPROVE