Skip to main content

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:

VarWhat it does
HAL_AUDIO_INPUT_ALSAMic ALSA device (plug:device_micro2 on Intern v2 Pro)
HAL_AUDIO_OUTPUT_ALSASpeaker ALSA device
HAL_VAD_THRESHOLDVoice-activity RMS floor (lower = more sensitive)
HAL_SILENCE_TIMEOUTSeconds of silence before committing a turn
HAL_REALTIME_TURN_DETECTIONon = server-side VAD (Gemini/OpenAI), off = client VAD
HAL_GEMINI_LIVE_MODELGemini realtime model id
HAL_OPENAI_REALTIME_MODELOpenAI realtime model id
DEVICE_TYPEintern-v2 — hardware kit gate for drivers like the mic mute switch