- commands.yaml с рабочими примерами: медиа, громкость, поиск, папки, блокировка; перечитывается автоматически, ошибки не ломают остальные команды - Действия run / open / http / keys; вывод и ответы возвращаются модели - Вызов через модель (tool calling) и мгновенно по точным фразам, в том числе с параметрами - Подтверждение «да/нет» для опасных команд, после голосового вопроса микрофон включается сам - Безопасность: запуск без оболочки, защита аргументов cmd/PowerShell/.bat, переменные окружения раскрываются только в шаблоне - Вкладка «Команды» в настройках - Тесты разбора, действий, фраз и полных сценариев через Assistant Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
48 lines
1.5 KiB
RPMSpec
48 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"),
|
|
("src/agr_assistent/default_commands.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)
|