A local Windows voice assistant. Hold a hotkey → speak → the assistant executes your command. Everything runs offline: speech recognition via Faster Whisper, intent detection via rule engine + Ollama fallback.
- Push-to-talk voice control (default: Right Shift)
- 15+ built-in skills: open/close apps, volume, brightness, screenshots, Wi-Fi toggle, shutdown, web search, clipboard
- Cyberpunk-themed PyQt6 GUI with animated waveform
- Teach custom voice commands without code — saved to
config.json - Fully local: Faster Whisper ASR + Ollama LLM, no cloud APIs
main_gui.py / main_fast.py
│
├─ assistant/
│ ├─ core/
│ │ ├─ exceptions.py (AssistantError hierarchy)
│ │ └─ state.py (AssistantState dataclass)
│ ├─ nlu/
│ │ ├─ normalizer.py (text cleaning, lemmatization)
│ │ ├─ ollama_client.py (OllamaClient — injectable base_url)
│ │ └─ engine.py (rules + Ollama fallback → intent)
│ ├─ skills/
│ │ ├─ app_control.py (open/close/minimize apps)
│ │ ├─ system_control.py (volume, brightness, shutdown …)
│ │ ├─ browser.py (search, open website)
│ │ ├─ clipboard.py (copy/paste)
│ │ └─ registry.py (SKILLS dict + Skill Protocol)
│ ├─ asr.py (Faster Whisper transcription)
│ ├─ recorder.py (push-to-talk audio capture)
│ └─ runner.py (skill dispatch + confirmation flow)
└─ config.json (hotkey, app aliases, custom commands)
| File | Use when |
|---|---|
main_gui.py |
Daily use — cyberpunk control panel, visual feedback |
main_fast.py |
Debugging / scripting — console-only, lighter startup |
- Windows 10/11
- Python 3.10+
- Ollama installed and on PATH
- Microphone
:: 1. Clone
git clone https://github.com/Bogdusik/Personal-PC-Assistant.git
cd Personal-PC-Assistant
:: 2. Run setup (checks admin, copies config, installs deps)
setup.bat
:: 3. Pull an Ollama model (one-time)
ollama pull gemma3:12b
:: 4. Launch (as Administrator for hotkey support)
python main_gui.pypython -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
copy config.example.json config.jsonEdit config.json:
hotkey— key to hold while speaking (default:"right shift")mic_device— microphone device index ornullfor defaultollama_model— model name (default:"gemma3:12b")app_aliases— map your app names to full.exepaths
Run as Administrator — required for keyboard hotkey hooks.
| Variable | Default | Description |
|---|---|---|
OLLAMA_BASE_URL |
http://localhost:11434 |
Override Ollama server URL |
OLLAMA_MODEL |
gemma3:12b |
Override model (also settable in config.json) |
Say "новая команда" (new command) or press Ctrl+4 while the assistant is running to add a custom voice trigger:
- Choose a match type:
equals,startswith,contains, orregex - Pick an intent and its arguments
- Commands are saved to
config.jsonimmediately
pip install pytest
pytest tests/ -vpip install ruff mypy
ruff check .
mypy assistant --ignore-missing-imports