Initial commit: Javis project

This commit is contained in:
Javis committed 2026-09-21 21:44:00 +02:00
commit 435c645f36
164 files changed
+35279

No files matched your search

+117
View File
@@ -0,0 +1,117 @@
# 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