- Окно настроек: модель и провайдер (со списком моделей с сервера), озвучка,
голосовой ввод, слово активации, автозапуск с Windows
- Сохранение в config.yaml через ruamel.yaml с комментариями и ссылками ${VAR},
проверка значений до записи; переключатели трея тоже сохраняются
- Настройки LLM и переключатели применяются на лету, для остального — перезапуск
- Один экземпляр приложения, лог в файл, аргументы --config и --wait-pid, русские диалоги Qt
- Сборка PyInstaller (onedir) с библиотеками CUDA, иконка приложения
- Тесты сохранения настроек и окна настроек
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
45 lines
1.5 KiB
RPMSpec
45 lines
1.5 KiB
RPMSpec
# -*- mode: python ; coding: utf-8 -*-
|
|
# Сборка: uv run pyinstaller agr-assistent.spec --noconfirm
|
|
# Результат: dist/agr-assistent/agr-assistent.exe (папка целиком переносима)
|
|
|
|
from pathlib import Path
|
|
|
|
import nvidia
|
|
from PyInstaller.utils.hooks import collect_data_files, collect_dynamic_libs, collect_submodules
|
|
|
|
datas = [("src/agr_assistent/default_config.yaml", "agr_assistent")]
|
|
datas += collect_data_files("silero_vad")
|
|
datas += collect_data_files("faster_whisper")
|
|
|
|
binaries = collect_dynamic_libs("vosk") + collect_dynamic_libs("ctranslate2")
|
|
# cuBLAS и cuDNN для распознавания на видеокарте; путь к ним добавляет stt/whisper.py
|
|
for package_dir in nvidia.__path__:
|
|
for dll in Path(package_dir).glob("*/bin/*.dll"):
|
|
binaries.append((str(dll), f"nvidia/{dll.parent.parent.name}/bin"))
|
|
|
|
# num2words подключает языковые модули динамически
|
|
hiddenimports = collect_submodules("num2words")
|
|
|
|
a = Analysis(
|
|
["packaging/launcher.py"],
|
|
pathex=["src"],
|
|
binaries=binaries,
|
|
datas=datas,
|
|
hiddenimports=hiddenimports,
|
|
excludes=["tkinter", "matplotlib", "IPython", "pytest"],
|
|
noarchive=False,
|
|
)
|
|
pyz = PYZ(a.pure)
|
|
|
|
exe = EXE(
|
|
pyz,
|
|
a.scripts,
|
|
[],
|
|
exclude_binaries=True,
|
|
name="agr-assistent",
|
|
icon="packaging/icon.ico",
|
|
console=False,
|
|
upx=False,
|
|
)
|
|
coll = COLLECT(exe, a.binaries, a.datas, name="agr-assistent", upx=False)
|