# agr-assistent Минимальный AI-ассистент, живущий в системном трее. - LLM: локальные модели (Ollama, LM Studio, llama.cpp) или OpenRouter — через единый OpenAI-совместимый API - Каждый запрос отдельный — без бесконечной истории диалога; короткие уточнения («а завтра?») в течение пары минут после ответа видят предыдущие вопросы - Журнал запросов и ответов со стримингом - Долговременная память: «запомни…», «забудь…», а устойчивые факты о вас модель сохраняет сама - Озвучка ответов голосом Silero: фразы проговариваются по мере генерации, блоки кода пропускаются - Голосовой ввод по глобальной горячей клавише: faster-whisper на видеокарте, конец фразы по паузе (Silero VAD) - Слово активации («ассистент») через Vosk — без нажатия клавиш ## Запуск Нужен [uv](https://docs.astral.sh/uv/). ```bash uv sync uv run agr-assistent ``` При первом запуске рядом создаётся `config.yaml` (путь можно переопределить переменной `AGR_ASSISTENT_CONFIG`). В нём выбирается провайдер и модель: ```yaml llm: provider: openrouter providers: openrouter: api_key: ${OPENROUTER_API_KEY} # или ключ напрямую model: openai/gpt-4o-mini ``` Для Ollama достаточно запустить сервер и скачать модель: `ollama pull qwen2.5:7b`. Модель Silero (~145 МБ) скачивается при первом запуске в `%LOCALAPPDATA%\agr-assistent\models`. Голос и модель задаются в секции `tts` конфига; озвучку можно выключить в меню значка. Silero читает только кириллицу: числа переводятся в слова, латиница пропускается. ### Память Скажите «Запомни, что у меня Škoda Octavia» или «Забудь про машину». Если включено автоматическое запоминание (`memory.auto_save`), модель сама сохраняет устойчивые факты: имя, близких, технику, предпочтения. Факты хранятся локально в `%LOCALAPPDATA%\agr-assistent\memory.sqlite3` и добавляются к каждому запросу; посмотреть, исправить и удалить их можно в настройках на вкладке «Память». Память работает через вызов инструментов, поэтому модель должна их поддерживать (например, `qwen2.5:7b` в Ollama или большинство моделей OpenRouter). С другими моделями ассистент просто отвечает без памяти и один раз предупреждает об этом. ### Голосовой ввод Нажмите `Win+Alt+Space` (настраивается в `voice.hotkey`), дождитесь короткого сигнала и говорите — запись закончится сама после паузы, или нажмите клавишу ещё раз. Если ассистент в этот момент отвечает, он замолкает и слушает. Распознаёт faster-whisper (`large-v3-turbo`, ~1.6 ГБ, скачивается при первом запуске). При наличии видеокарты NVIDIA используется она: библиотеки CUDA ставятся pip-пакетами `nvidia-cublas-cu12` и `nvidia-cudnn-cu12`, отдельно устанавливать CUDA Toolkit не нужно. Без видеокарты распознавание идёт на CPU — тогда лучше выбрать модель `small` или `medium`. ### Слово активации Включается пунктом меню значка или `wake_word.enabled: true` в конфиге. Скажите «Ассистент», дождитесь сигнала и произнесите команду. Фразы задаются в `wake_word.phrases`, все слова должны быть в словаре модели — иначе приложение сообщит, каких слов не хватает. Пока ассистент слушает команду, думает или говорит, слово активации не отслеживается: микрофон не занят дважды, и ассистент не реагирует на собственный голос. Перебить его во время ответа можно горячей клавишей. Используется маленькая модель Vosk (~45 МБ) со свободным распознаванием: в простое она почти не нагружает процессор. Слова, начинающиеся с ключевого («ассистентка»), могут давать ложные срабатывания. ### Настройки Окно настроек открывается из меню значка или кнопкой «Настройки» в чате: провайдер и модель (список моделей подгружается с сервера), голос, горячая клавиша, модель Whisper, слово активации, автозапуск с Windows. Изменения сохраняются в `config.yaml` с сохранением комментариев; ключи вида `${ПЕРЕМЕННАЯ}` остаются ссылками. Настройки модели и переключатели применяются сразу, для смены моделей, голоса и горячей клавиши приложение предложит перезапуститься. Закрытие окна сворачивает приложение в трей. Клик по значку открывает чат. Повторный запуск не создаёт второй экземпляр, а показывает окно уже запущенного. Лог пишется в `%LOCALAPPDATA%\agr-assistent\logs`. Путь к конфигу можно передать аргументом: `agr-assistent --config D:\path\config.yaml`. ## Сборка exe ```bash uv run pyinstaller agr-assistent.spec --noconfirm ``` Результат — папка `dist\agr-assistent` (~2.8 ГБ, из них ~2 ГБ — библиотеки CUDA) с `agr-assistent.exe`; её можно переносить целиком. `config.yaml` создаётся рядом с exe, модели скачиваются в `%LOCALAPPDATA%\agr-assistent\models` при первом запуске. ## Разработка ```bash uv run pytest ```