feat: LLM hot-swap voice command + Ollama backend (148 → 151 commands)
Closes the last functional parity gap with rust. Python now has voice-driven
Ollama↔Groq switching, persistent across restarts.
llm_backend.py (new, ~130 lines)
Singleton module:
current_client() → active OpenAI client (or None)
current_backend() → 'groq' | 'ollama' | 'none'
current_model() → active model name
swap_to(name) → hot-swap + persist to <here>/llm_backend.txt
parse_backend(name) → ru/en alias normaliser ('облако'→groq, 'локальный'→ollama)
Backends:
- Groq: config.GROQ_TOKEN + GROQ_BASE_URL + GROQ_MODEL (defaults)
- Ollama: OLLAMA_BASE_URL (default http://localhost:11434/v1) +
OLLAMA_MODEL (default qwen2.5:3b). api_key='ollama' (placeholder,
openai lib insists on a non-empty string; Ollama ignores it).
Init precedence (idempotent _ensure_init):
1. Persisted choice from llm_backend.txt
2. JARVIS_LLM env var
3. Auto-detect: Groq if token present, else Ollama
Voice commands (commands.yaml, +3 entries → 151)
llm_switch_local → ollama
llm_switch_cloud → groq
llm_status → speaks current backend
extensions.py
+ do_llm_switch / do_llm_status handlers
+ llm_backend import
do_interesting_fact migrated off direct OpenAI(...) to use llm_backend.current_*
dev_handlers.py
+ llm_backend import
do_codebase_ask + do_github_summarize_pr migrated to llm_backend.current_*
vision_handler.py
Vision call documented as Groq-specific (Ollama doesn't expose vision via
OpenAI-compat in our stack), kept direct config.GROQ_TOKEN reading.
Tests: ast.parse passes for all 5 modules. yaml.safe_load = 151 entries.
PYTHON PARITY VS RUST IS NOW FUNCTIONALLY COMPLETE.
Only remaining rust-only feature: the Tauri GUI (python is console-only).
This commit is contained in:
parent
31ff997782
commit
8d3da4ea06
6 changed files with 254 additions and 53 deletions
|
|
@ -1275,3 +1275,35 @@ github_summarize_pr:
|
|||
- что в последнем pr
|
||||
- разбор pr
|
||||
action: {type: github_summarize_pr}
|
||||
|
||||
llm_switch_local:
|
||||
phrases:
|
||||
- переключись на локальный
|
||||
- переключись на локальный мозг
|
||||
- включи локальный режим
|
||||
- перейди на локальный
|
||||
- используй локальный
|
||||
- перейди на оллама
|
||||
- используй оллама
|
||||
action: {type: llm_switch, target: ollama}
|
||||
|
||||
llm_switch_cloud:
|
||||
phrases:
|
||||
- переключись на облако
|
||||
- переключись на облачный
|
||||
- переключись на грок
|
||||
- переключись на гроку
|
||||
- используй облако
|
||||
- используй грок
|
||||
- перейди на облако
|
||||
action: {type: llm_switch, target: groq}
|
||||
|
||||
llm_status:
|
||||
phrases:
|
||||
- какой у тебя мозг
|
||||
- какой ллм
|
||||
- какой у тебя llm
|
||||
- облако или локально
|
||||
- ты сейчас где работаешь
|
||||
- что за модель
|
||||
action: {type: llm_status}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue