# 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 читает только кириллицу: числа переводятся в слова, латиница пропускается. ### Голосовой ввод Нажмите `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 МБ) со свободным распознаванием: в простое она почти не нагружает процессор. Слова, начинающиеся с ключевого («ассистентка»), могут давать ложные срабатывания. Закрытие окна сворачивает приложение в трей. Клик по значку открывает чат, в меню значка — переключение провайдера, новый диалог и выход. ## Разработка ```bash uv run pytest ```