Configuration
LLM / STT / TTS (OS Server — /root/config/config.json)
The main config for the LLM brain plus messaging channels lives here. Edit directly, then restart os-server for the change to apply.
Key fields:
{
"llm_base_url": "https://api.openai.com/v1",
"llm_api_key": "sk-…",
"llm_model": "gpt-4o-mini",
"stt_base_url": "https://api.openai.com/v1",
"stt_api_key": "sk-…",
"stt_language": "en",
"tts_base_url": "https://api.openai.com/v1",
"tts_api_key": "sk-…",
"tts_provider": "openai",
"tts_voice": "alloy",
"channel": "telegram",
"telegram_bot_token": "…",
"telegram_user_id": "…"
}
To use a self-hosted OpenAI-compatible endpoint (Ollama / vLLM / LM Studio),
set llm_base_url to http://<host>:<port>/v1. Any API key placeholder
works if the endpoint doesn't check auth.
sudo nano /root/config/config.json
sudo systemctl restart os-server
HAL runtime env (/opt/hal/.env)
HAL reads its runtime tuning (audio devices, VAD thresholds, realtime voice
config, camera settings) from /opt/hal/.env. A curated set of presets lives
in the repo under os/hal/env-presets/.
sudo nano /opt/hal/.env
sudo systemctl restart hal
Common knobs:
| Var | What it does |
|---|---|
HAL_AUDIO_INPUT_ALSA | Mic ALSA device (plug:device_micro2 on Intern v2 Pro) |
HAL_AUDIO_OUTPUT_ALSA | Speaker ALSA device |
HAL_VAD_THRESHOLD | Voice-activity RMS floor (lower = more sensitive) |
HAL_SILENCE_TIMEOUT | Seconds of silence before committing a turn |
HAL_REALTIME_TURN_DETECTION | on = server-side VAD (Gemini/OpenAI), off = client VAD |
HAL_GEMINI_LIVE_MODEL | Gemini realtime model id |
HAL_OPENAI_REALTIME_MODEL | OpenAI realtime model id |
DEVICE_TYPE | intern-v2 — hardware kit gate for drivers like the mic mute switch |