fix(release): v0.1.0 build — scipy/sklearn missing + wake-word failure loop #14
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
slaid098/voice_assistant#14
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Контекст
Релиз v0.1.0 собран (PR #12, #13), но exe не запускается на Windows. PyInstaller не включил транзитивные зависимости openwakeword (scipy 1.18.0, scikit-learn 1.9.0). При запуске —
ModuleNotFoundError: No module named 'scipy._external.array_api_compat.numpy.fft'. Модель wake-word не грузится.Дополнительно: при ошибке загрузки детектора
cli.py:while Trueбесконечно повторяетspeak("Модель активации не загружена.")каждые ~2 сек. Failure не кэшируется — retry на каждом цикле.Задача
release.yml: добавить--collect-all scipyи--collect-all scikit-learnв PyInstaller командуwake_word.py: кэшировать failure загрузки — после первой неудачи НЕ повторятьModel(...)на каждом циклеcli.py: приdetector is None— логировать fatal иsys.exit(1), не входить в бесконечный циклКонтракты
OpenWakeWordDetector.__init__: после первой неудачной попыткиModel(...)—self._load_failed = True, при повторных вызовах конструктора сразу return без retryactive_wake_word_detector(): если детектор не загрузился, кэшировать это состояние (модуль-level флаг_load_failed), не создавать новыйOpenWakeWordDetector()на каждом вызовеcli.py: послеpreload_wake_word_detector()проверитьactive_wake_word_detector() is None→logger.critical(...)+sys.exit(1)Инварианты
is_available()по-прежнему возвращает bool поself._model is not NoneГраничные случаи
Влияние на связанные компоненты
assistant.py:run_assistant_step()—detector is Noneветка остаётся, но не должна достигаться (cli.py exiting раньше)release.yml— размер exe вырастет (~80MB scipy + ~30MB sklearn)test_wake_word.py— нужно проверить mock-логикуВне scope
Критерии приемки
uv run pytest— зелёные, +новые тестыuv run ruff check/mypy— зелёные--collect-all scipy+--collect-all scikit-learn