118 lines
5.1 KiB
YAML
118 lines
5.1 KiB
YAML
# Javis configuration. Copy to config.yaml and edit.
|
||
|
||
gui:
|
||
theme: "dark" # dark | light (Tools → "Toggle light/dark theme")
|
||
show_startup_dialog: true # show the configuration dialog before the main window
|
||
minimize_to_tray: true # closing the window hides to the tray; quit via File → Quit
|
||
global_ptt_hotkey: "ctrl+alt+space" # system-wide push-to-talk (Windows); "" = off
|
||
|
||
llm:
|
||
base_url: "http://localhost:11434"
|
||
model: "gemma3:4b"
|
||
temperature: 0.7
|
||
request_timeout_seconds: 120
|
||
# Keep the model loaded in Ollama for 1 h after each request (default is
|
||
# only 5 min, so gaps > 5 min force a full model reload next turn).
|
||
# "infinity" keeps it loaded forever.
|
||
keep_alive: 3600
|
||
|
||
stt:
|
||
model_size: "large-v3" # tiny, base, small, medium, large-v3, distil-large-v3
|
||
device: "auto" # auto, cuda, cpu
|
||
compute_type: "float16" # float16, int8_float16, int8, float32
|
||
language: null # null = auto-detect
|
||
|
||
tts:
|
||
backend: "piper" # piper (Piper VITS — CPU ONNX, default) | f5 (F5-TTS voice cloning)
|
||
device: "auto"
|
||
default_voice: "default" # Piper voice name (see the Voices tab / voice-ref-curator)
|
||
|
||
# Overnight voice training — the default voice is retrained once per night
|
||
# inside the start_hour → end_hour window, resuming from the latest checkpoint.
|
||
# Toggle/disable here (or in Settings → Voice Training); changes apply live.
|
||
training:
|
||
enabled: true
|
||
start_hour: 3 # window opens at 03:00 (0-23)
|
||
end_hour: 6 # window closes at 06:00 (0-23)
|
||
min_remaining_minutes: 60 # don't start a run if less window time remains
|
||
max_epochs: 6000
|
||
batch_size: 32
|
||
num_workers: 2
|
||
accelerator: "gpu" # gpu | cpu
|
||
precision: "16-mixed" # 32 | 16-mixed | bf16-mixed
|
||
language: "de" # Piper language code
|
||
|
||
audio:
|
||
sample_rate: 16000
|
||
input_device: null # null = system default; or int device index
|
||
output_device: null
|
||
thinking_cue_delay_s: 2.5 # soft tick while Javis is still working; 0 = off
|
||
|
||
wake_word:
|
||
enabled: true
|
||
model: "hey_jarvis" # built-in openWakeWord name, or a custom model: "rufus" -> ~/.javis/models/wakeword/rufus.onnx (see docs/WAKE_WORD.md)
|
||
threshold: 0.5
|
||
vad_threshold: 0.5 # silero-vad probability threshold
|
||
silence_ms: 800 # end-of-utterance silence
|
||
|
||
mcp:
|
||
servers_config: "mcp_servers.json"
|
||
approval_default: "ask" # ask | allow | deny (headless: "ask" is denied — no UI)
|
||
call_timeout_seconds: 30
|
||
approval_timeout_seconds: 45 # auto-deny if the approval dialog isn't answered; 0 = wait
|
||
voice_approval: true # answer the approval prompt with "ja"/"nein" (needs STT + mic)
|
||
|
||
api:
|
||
# HTTP API for javis-slave companion devices (plain HTTP — trusted LAN only).
|
||
enabled: false
|
||
host: "0.0.0.0" # bind address; 0.0.0.0 = all interfaces
|
||
port: 8765
|
||
pairing_code_ttl_seconds: 300 # lifetime of a single-use pairing code
|
||
|
||
agent:
|
||
# Persona preset. Choose one: default | smart_home | concise | verbose
|
||
preset: "default"
|
||
# Optional verbatim system prompt (overrides the preset above).
|
||
system_prompt_inline: null
|
||
# Optional path to a .txt file (highest priority — overrides everything else).
|
||
system_prompt_file: null
|
||
history_max_turns: 20
|
||
# Maximum LLM <-> tool-call iterations per turn before giving up.
|
||
max_llm_iterations: 5
|
||
# Spoken feedback for voice users (empty string = silent).
|
||
error_phrase: "Entschuldigung, da ist etwas schiefgelaufen. Bitte versuch es noch einmal."
|
||
approval_phrase: "Soll ich das ausführen? Sag ja oder nein."
|
||
|
||
memory:
|
||
# "ollama" uses llm.base_url; "hermes" uses the remote Hermes API server.
|
||
provider: "ollama"
|
||
# Hermes API root (not the dashboard URL). Required when provider is hermes.
|
||
base_url: null
|
||
# Store API_SERVER_KEY in this environment variable; never put it in YAML.
|
||
api_key_env: "JAVIS_HERMES_API_KEY"
|
||
# Dedicated model for background fact extraction.
|
||
# null = use the same model as llm.model.
|
||
# Set to a smarter or reasoning model for higher-quality extraction without
|
||
# slowing down the main conversation (extraction runs in the background).
|
||
# Examples: "qwen2.5:14b", "qwen3:8b", "deepseek-r1:8b", "llama3.1:8b"
|
||
model: null
|
||
# Temperature for extraction calls. Low values (0.0–0.2) give more consistent
|
||
# JSON output. Reasoning models work well at 0.1.
|
||
temperature: 0.1
|
||
# Context window for extraction. Much smaller than the main LLM is fine —
|
||
# extraction prompts are short. Reduce if memory calls are slow.
|
||
num_ctx: 4096
|
||
# Timeout (seconds) for extraction calls. 120 is a safe default.
|
||
# Increase for reasoning models on slow hardware (deepseek-r1 can take 3–5 min on CPU).
|
||
# Set to null only to inherit llm.request_timeout_seconds (not recommended).
|
||
timeout_seconds: 120
|
||
# Maximum number of new facts to extract per turn.
|
||
max_facts: 2
|
||
# Maximum number of existing memories included in the extraction prompt
|
||
# (most-recently-updated first). Raise for larger memories, lower to keep
|
||
# extraction prompts short.
|
||
max_existing_for_prompt: 25
|
||
|
||
paths:
|
||
base_dir: null # null = ~/.javis
|