feat: parity with rust fork — LLM auto-fallback + 6 new action types + 20+ commands
Brings the python fork in line with the new feature/pc-tools work that
landed in rust. Same UX, same trigger phrases, same env vars.
config.py:
+ LLM_AUTO_FALLBACK = True
+ LLM_AUTO_FALLBACK_MIN_CHARS = 4
Mirrors the rust config knobs. The old "скажи X" trigger still works
(VA_TBR strips it before intent matching, so what remains hits this
fallback anyway) — but now ANY unrecognized query goes to Groq, not
just "скажи" ones.
main.py:
va_respond: replaced the fuzz-on-"скажи" gate with a unified auto-
fallback that fires whenever no command matches, GROQ_TOKEN is set,
and the utterance is at least LLM_AUTO_FALLBACK_MIN_CHARS long.
+ _speak(text): recorder.stop() → tts.va_speak → start, used by the
new action handlers so the mic doesn't pick up the assistant.
+ _set_clipboard(text): subprocess to PowerShell Set-Clipboard, no
new python deps.
+ _strip_trigger(voice, triggers): shared helper for codegen/file_search
where we need the text AFTER the trigger phrase.
New action handlers (registered in run_action dispatch):
+ groq_codegen — extracts query, calls Groq with strict "code only"
system prompt at temp 0.2, strips ```lang ... ``` fences, puts the
result in the clipboard, speaks "Код в буфере, сэр. Строк: N".
+ ocr_screen — PowerShell System.Drawing screenshot to a temp PNG,
shells to tesseract.exe (-l rus+eng), speaks a 120-char preview,
clipboard. Looks for tesseract on PATH first then standard install
dirs; gives a clear "Tesseract не установлен" if missing.
+ sysinfo — CIM-based battery/cpu/ram/disk via PS one-liners, time
via python datetime (gets us localized weekday for free). Topics:
time / battery / cpu / ram / disk / all.
+ file_search — strips trigger, recursive Get-ChildItem in Desktop/
Documents/Downloads (depth 3, top 5), opens explorer /select on
the first hit, speaks count and basename.
+ audio_devices_panel — opens mmsys.cpl. Proper COM-based device
switching (like the rust IPolicyConfig version) is deferred — TODO
in backlog.
commands.yaml:
Total 33 commands (was 19). New:
+ open_notepad / open_calculator / open_explorer / open_terminal
/ open_settings / open_task_manager / lock_screen / screenshot
— all via shell action (no AHK exes needed).
+ volume_up / volume_down — five chained keys=volumeup/volumedown
presses each, like rust's _volume_helper.ps1 with Times=5.
+ media_stop — keys=stop.
+ sysinfo_time / sysinfo_battery / sysinfo_cpu / sysinfo_ram /
sysinfo_disk / sysinfo_all — sysinfo action.
+ file_search, codegen, read_screen, switch_audio_device.
Replaced (were AHK exes that Priler ships and we don't have):
~ music → keys playpause
~ music_off → keys playpause (toggle)
~ music_next → keys nexttrack
~ music_prev → keys prevtrack
Removed (Priler hardware/setup specific, can't sensibly port):
- gaming_mode_on / gaming_mode_off (display config switch)
- music_save (depends on the specific player AHK was driving)
- switch_to_headphones / switch_to_dynamics (replaced with the
generic switch_audio_device that opens mmsys.cpl)
Kept as-is (worked already, no AHK dependency):
open_browser / open_youtube / open_google (url action)
sound_off / sound_on (pycaw via system.volume_mute/unmute)
thanks / stupid / off
Smoke-tested: yaml.safe_load → 33 commands, ast.parse main.py → OK.
Portability: USERPROFILE for screenshot path, $env:SystemDrive for disk,
PATH lookup for tesseract before falling back to standard install dirs.
No hardcoded user-specific paths.
This commit is contained in:
parent
53678fbdfa
commit
80a685230c
3 changed files with 463 additions and 151 deletions
370
commands.yaml
370
commands.yaml
|
|
@ -20,82 +20,99 @@ open_google:
|
|||
- запусти гугл
|
||||
action: {type: url, href: "https://www.google.com", browser: "yandex"}
|
||||
|
||||
music:
|
||||
open_notepad:
|
||||
phrases:
|
||||
- давай музыку
|
||||
- музыка
|
||||
- яндекс музыка
|
||||
- включи музыку
|
||||
- открой музыку
|
||||
- послушаем музыку
|
||||
- хочу музыку
|
||||
- врубай музло
|
||||
- включи что-то послушать
|
||||
- давай что-то послушаем
|
||||
action: {type: exe, file: "Run music.exe"}
|
||||
- открой блокнот
|
||||
- запусти блокнот
|
||||
- открой нотепад
|
||||
action: {type: shell, cmd: 'start "" notepad.exe'}
|
||||
|
||||
music_off:
|
||||
open_calculator:
|
||||
phrases:
|
||||
- выключи музыку
|
||||
- отруби музыку
|
||||
- убери музыку
|
||||
- отключи музыку
|
||||
- закрой музыку
|
||||
- останови музыку
|
||||
- хватит музыки
|
||||
action: {type: exe, file: "Stop music.exe", delay_ms: 200}
|
||||
- открой калькулятор
|
||||
- запусти калькулятор
|
||||
- нужен калькулятор
|
||||
action: {type: shell, cmd: 'start "" calc.exe'}
|
||||
|
||||
music_save:
|
||||
open_explorer:
|
||||
phrases:
|
||||
- сохрани трек
|
||||
- мне нравится трек
|
||||
- сохрани песню
|
||||
- мне нравится песня
|
||||
- добавь трек в избранное
|
||||
- добавь песню в избранное
|
||||
- запомни мелодию
|
||||
- запомни трек
|
||||
- запомни песню
|
||||
- добавь мелодию в избранное
|
||||
- сохрани то что сейчас играет
|
||||
- добавь то что сейчас играет в избранное
|
||||
- лайкни трек
|
||||
- лайкни мелодию
|
||||
- лайкни песню
|
||||
action: {type: exe, file: "Save music.exe", delay_ms: 200}
|
||||
- открой проводник
|
||||
- открой папку
|
||||
- запусти проводник
|
||||
- открой файлы
|
||||
action: {type: shell, cmd: 'start "" explorer.exe'}
|
||||
|
||||
music_next:
|
||||
open_terminal:
|
||||
phrases:
|
||||
- следующий трек
|
||||
- следующая мелодия
|
||||
- следующая песня
|
||||
- переключи трек
|
||||
- переключи музыку
|
||||
- переключи мелодию
|
||||
- переключи песню
|
||||
- следующая музыка
|
||||
action: {type: exe, file: "Next music.exe", delay_ms: 200}
|
||||
- открой терминал
|
||||
- запусти терминал
|
||||
- открой консоль
|
||||
- открой повершелл
|
||||
action: {type: shell, cmd: 'start "" wt.exe || start "" powershell.exe'}
|
||||
|
||||
music_prev:
|
||||
open_settings:
|
||||
phrases:
|
||||
- предыдущая музыка
|
||||
- предыдущий трек
|
||||
- предыдущая мелодия
|
||||
- предыдущая песня
|
||||
- верни трек
|
||||
- верни мелодию
|
||||
- верни песню
|
||||
- верни прошлый трек
|
||||
- верни прошлую мелодию
|
||||
- верни прошлую песню
|
||||
- верни прошлую музыку
|
||||
- верни то что играло
|
||||
- давай предыдущий трек
|
||||
- переключи музыку обратно
|
||||
- переключи на прошлый трек
|
||||
- переключи на прошлую мелодию
|
||||
- переключи на прошлую песню
|
||||
action: {type: exe, file: "Prev music.exe", delay_ms: 200}
|
||||
- открой настройки
|
||||
- открой параметры
|
||||
- открой настройки виндоус
|
||||
action: {type: shell, cmd: 'start "" ms-settings:'}
|
||||
|
||||
open_task_manager:
|
||||
phrases:
|
||||
- открой диспетчер задач
|
||||
- запусти диспетчер задач
|
||||
- диспетчер задач
|
||||
action: {type: shell, cmd: 'start "" taskmgr.exe'}
|
||||
|
||||
lock_screen:
|
||||
phrases:
|
||||
- заблокируй компьютер
|
||||
- заблокируй экран
|
||||
- блокировка экрана
|
||||
- залочь
|
||||
action: {type: shell, cmd: 'rundll32.exe user32.dll,LockWorkStation'}
|
||||
|
||||
screenshot:
|
||||
phrases:
|
||||
- сделай скриншот
|
||||
- скриншот
|
||||
- сними экран
|
||||
action:
|
||||
type: shell
|
||||
cmd: >-
|
||||
powershell -NoProfile -Command "Add-Type -AssemblyName System.Windows.Forms,System.Drawing; $b=[System.Windows.Forms.Screen]::PrimaryScreen.Bounds; $bmp=New-Object Drawing.Bitmap $b.Width,$b.Height; $g=[Drawing.Graphics]::FromImage($bmp); $g.CopyFromScreen($b.Location,[Drawing.Point]::Empty,$b.Size); $p=Join-Path $env:USERPROFILE ('Pictures\jarvis_'+(Get-Date -Format 'yyyyMMdd_HHmmss')+'.png'); $bmp.Save($p); $g.Dispose(); $bmp.Dispose()"
|
||||
|
||||
volume_up:
|
||||
phrases:
|
||||
- громче
|
||||
- сделай громче
|
||||
- прибавь звук
|
||||
- увеличь громкость
|
||||
- погромче
|
||||
action:
|
||||
type: multi
|
||||
steps:
|
||||
- {type: keys, sequence: 'volumeup'}
|
||||
- {type: keys, sequence: 'volumeup'}
|
||||
- {type: keys, sequence: 'volumeup'}
|
||||
- {type: keys, sequence: 'volumeup'}
|
||||
- {type: keys, sequence: 'volumeup'}
|
||||
|
||||
volume_down:
|
||||
phrases:
|
||||
- тише
|
||||
- сделай тише
|
||||
- убавь звук
|
||||
- уменьши громкость
|
||||
- потише
|
||||
action:
|
||||
type: multi
|
||||
steps:
|
||||
- {type: keys, sequence: 'volumedown'}
|
||||
- {type: keys, sequence: 'volumedown'}
|
||||
- {type: keys, sequence: 'volumedown'}
|
||||
- {type: keys, sequence: 'volumedown'}
|
||||
- {type: keys, sequence: 'volumedown'}
|
||||
|
||||
sound_off:
|
||||
phrases:
|
||||
|
|
@ -120,6 +137,146 @@ sound_on:
|
|||
- {type: system, op: volume_unmute}
|
||||
- {type: play_sound, name: ok}
|
||||
|
||||
music:
|
||||
phrases:
|
||||
- давай музыку
|
||||
- музыка
|
||||
- яндекс музыка
|
||||
- включи музыку
|
||||
- открой музыку
|
||||
- послушаем музыку
|
||||
- хочу музыку
|
||||
- врубай музло
|
||||
- включи что-то послушать
|
||||
- давай что-то послушаем
|
||||
action: {type: keys, sequence: 'playpause'}
|
||||
|
||||
music_off:
|
||||
phrases:
|
||||
- выключи музыку
|
||||
- отруби музыку
|
||||
- убери музыку
|
||||
- отключи музыку
|
||||
- закрой музыку
|
||||
- останови музыку
|
||||
- хватит музыки
|
||||
- пауза
|
||||
- поставь на паузу
|
||||
action: {type: keys, sequence: 'playpause'}
|
||||
|
||||
music_next:
|
||||
phrases:
|
||||
- следующий трек
|
||||
- следующая мелодия
|
||||
- следующая песня
|
||||
- переключи трек
|
||||
- переключи мелодию
|
||||
- переключи песню
|
||||
- следующая музыка
|
||||
action: {type: keys, sequence: 'nexttrack'}
|
||||
|
||||
music_prev:
|
||||
phrases:
|
||||
- предыдущая музыка
|
||||
- предыдущий трек
|
||||
- предыдущая мелодия
|
||||
- предыдущая песня
|
||||
- верни трек
|
||||
- верни мелодию
|
||||
- верни песню
|
||||
- верни прошлый трек
|
||||
- переключи на прошлый трек
|
||||
action: {type: keys, sequence: 'prevtrack'}
|
||||
|
||||
media_stop:
|
||||
phrases:
|
||||
- стоп музыка
|
||||
- полная тишина
|
||||
action: {type: keys, sequence: 'stop'}
|
||||
|
||||
switch_audio_device:
|
||||
phrases:
|
||||
- переключи устройство
|
||||
- смени вывод
|
||||
- переключи на наушники
|
||||
- переключи на колонки
|
||||
- переключи на динамики
|
||||
- открой настройки звука
|
||||
action: {type: audio_devices_panel}
|
||||
|
||||
sysinfo_time:
|
||||
phrases:
|
||||
- сколько времени
|
||||
- который час
|
||||
- какой сегодня день
|
||||
- какое сегодня число
|
||||
action: {type: sysinfo, topic: time}
|
||||
|
||||
sysinfo_battery:
|
||||
phrases:
|
||||
- сколько заряда
|
||||
- заряд батареи
|
||||
- сколько процентов батареи
|
||||
action: {type: sysinfo, topic: battery}
|
||||
|
||||
sysinfo_cpu:
|
||||
phrases:
|
||||
- загрузка процессора
|
||||
- сколько процессор
|
||||
- нагрузка цпу
|
||||
action: {type: sysinfo, topic: cpu}
|
||||
|
||||
sysinfo_ram:
|
||||
phrases:
|
||||
- сколько памяти
|
||||
- сколько оперативки
|
||||
- загрузка оперативки
|
||||
- сколько свободной памяти
|
||||
action: {type: sysinfo, topic: ram}
|
||||
|
||||
sysinfo_disk:
|
||||
phrases:
|
||||
- сколько свободно на диске
|
||||
- сколько места на диске
|
||||
- сколько свободно на компе
|
||||
action: {type: sysinfo, topic: disk}
|
||||
|
||||
sysinfo_all:
|
||||
phrases:
|
||||
- статус системы
|
||||
- что с компьютером
|
||||
- состояние пк
|
||||
- что по системе
|
||||
action: {type: sysinfo, topic: all}
|
||||
|
||||
file_search:
|
||||
phrases:
|
||||
- найди файл
|
||||
- найди документ
|
||||
- поиск файла
|
||||
- ищи файл
|
||||
- где файл
|
||||
action: {type: file_search}
|
||||
|
||||
codegen:
|
||||
phrases:
|
||||
- напиши код
|
||||
- сгенерируй код
|
||||
- набросай код
|
||||
- сделай скрипт
|
||||
- напиши скрипт
|
||||
- сгенерируй скрипт
|
||||
action: {type: groq_codegen}
|
||||
|
||||
read_screen:
|
||||
phrases:
|
||||
- прочитай экран
|
||||
- что на экране
|
||||
- распознай текст с экрана
|
||||
- что написано на экране
|
||||
- сними текст с экрана
|
||||
action: {type: ocr_screen}
|
||||
|
||||
thanks:
|
||||
phrases:
|
||||
- спасибо
|
||||
|
|
@ -141,85 +298,6 @@ stupid:
|
|||
- ты тупой
|
||||
action: {type: play_sound, name: stupid}
|
||||
|
||||
gaming_mode_on:
|
||||
phrases:
|
||||
- включи игровой режим
|
||||
- перейди в игровой режим
|
||||
- я хочу поиграть
|
||||
- переключись на телевизор
|
||||
action:
|
||||
type: multi
|
||||
steps:
|
||||
- {type: play_sound, name: ok}
|
||||
- {type: exe, file: "Switch to gaming mode.exe", wait: true}
|
||||
- {type: play_sound, name: ready}
|
||||
|
||||
gaming_mode_off:
|
||||
phrases:
|
||||
- рабочий режим
|
||||
- вернись в рабочий режим
|
||||
- переключись на компьютер
|
||||
- обратно на компьютер
|
||||
- отключи игровой режим
|
||||
- выйди из игрового режима
|
||||
- вернись на компьютер
|
||||
- выход с игрового режима
|
||||
- рабочее пространство
|
||||
- вернись в игровой режим
|
||||
- выключи игровой режим
|
||||
action:
|
||||
type: multi
|
||||
steps:
|
||||
- {type: play_sound, name: ok}
|
||||
- {type: exe, file: "Switch back to workspace.exe", wait: true}
|
||||
- {type: play_sound, name: ready}
|
||||
|
||||
switch_to_headphones:
|
||||
phrases:
|
||||
- переключи на наушники
|
||||
- включи наушники
|
||||
- перейди на наушники
|
||||
- давай звук в наушники
|
||||
- давай звук на наушники
|
||||
- переключи звук в наушники
|
||||
- переключи звук на наушники
|
||||
- переключи на кракены
|
||||
- включи кракены
|
||||
- перейди на кракены
|
||||
- давай звук в кракены
|
||||
- давай звук на кракены
|
||||
- переключи звук в кракены
|
||||
- переключи звук на кракены
|
||||
action:
|
||||
type: multi
|
||||
steps:
|
||||
- {type: play_sound, name: ok}
|
||||
- {type: exe, file: "Switch to headphones.exe", wait: true, delay_ms: 500}
|
||||
- {type: play_sound, name: ready}
|
||||
|
||||
switch_to_dynamics:
|
||||
phrases:
|
||||
- переключи на динамики
|
||||
- включи динамики
|
||||
- перейди на динамики
|
||||
- давай звук в динамики
|
||||
- давай звук на динамики
|
||||
- переключи звук в динамики
|
||||
- переключи звук на динамики
|
||||
- переключи на колонки
|
||||
- включи колонки
|
||||
- перейди на колонки
|
||||
- давай звук в колонки
|
||||
- давай звук на колонки
|
||||
- переключи звук в колонки
|
||||
- переключи звук на колонки
|
||||
action:
|
||||
type: multi
|
||||
steps:
|
||||
- {type: play_sound, name: ok}
|
||||
- {type: exe, file: "Switch to dynamics.exe", wait: true, delay_ms: 500}
|
||||
- {type: play_sound, name: ready}
|
||||
|
||||
'off':
|
||||
phrases:
|
||||
- выключись
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue