LLM Configuration¶
File: configs/llm.yaml
Command: kenzy-llm [config_path]
The LLM service processes transcribed text through a tool-calling loop and returns a spoken response. It uses LiteLLM as the model abstraction layer, so any provider LiteLLM supports works out of the box.
Pulled from the server
kenzy-llm pulls this config from the server at boot — it discovers the server via mDNS (or KENZY_SERVER_URL) and blocks until it answers, so start the server first. Edit it from the dashboard's Services tab (writes configs/services/llm.yaml on the server and restarts the service). Passing an explicit path loads locally instead (dev/offline). See central config for backend services.
Full reference¶
Core¶
| Key | Default | Description |
|---|---|---|
host |
"127.0.0.1" |
Bind address |
port |
8766 |
HTTP port |
log_level |
"info" |
What the service prints to its console |
log_capture_level |
"debug" |
How deep the dashboard log viewer can see, independent of log_level |
model |
"gpt-4o" |
LiteLLM model string (see Model strings) |
base_url |
— | Provider base URL. Required for Ollama, LM Studio, and similar local providers. |
max_tool_iterations |
5 |
Maximum skill call iterations per request before returning whatever the model has |
Prompts¶
| Key | Default | Description |
|---|---|---|
system_prompt |
(built-in) | Injected at the start of every LLM call. Defines Kenzy's persona and behavior. |
voice_prompt |
(built-in) | Fallback TTS style instruction used when the model does not provide one. |
Location context¶
Injected into every LLM call and used as the default by location-aware skills (e.g. weather).
| Key | Description |
|---|---|
location.city |
City name |
location.state |
State or province |
location.country |
Country code (e.g. "US") |
location.timezone |
IANA timezone (e.g. "America/New_York") |
location.latitude |
Decimal latitude |
location.longitude |
Decimal longitude |
Skills¶
| Key | Default | Description |
|---|---|---|
skills.dir |
"skills" |
Your skills overlay directory, loaded in addition to the bundled built-in skills. Relative paths resolve under the config home — ~/.config/kenzy/skills, or the repo root in a dev checkout. |
skills.disabled |
[] |
Skill function names to disable (applies to built-in and overlay skills alike) without deleting any file. |
Per-skill configuration lives under skills.<skill_name> as a nested map. See Built-in Skills for the keys each skill accepts.
Model strings¶
LiteLLM encodes the provider in the model string prefix:
| Provider | Example model string |
|---|---|
| OpenAI | gpt-4o, gpt-4o-mini |
| Anthropic | claude-opus-4-8, claude-sonnet-4-6 |
| Ollama (local) | ollama/hermes3, ollama/llama3.1 |
| LM Studio (local) | openai/model-name + base_url |
| Together AI | together_ai/meta-llama/Llama-3-70b |
API keys are read automatically from the environment. See the LiteLLM provider docs for the required environment variable per provider.
Example¶
host: "127.0.0.1"
port: 8766
model: "gpt-4o"
max_tool_iterations: 5
system_prompt: |
You are Kenzy, a helpful home assistant. Be concise and conversational.
voice_prompt: "Speak in a friendly, natural tone at a moderate pace."
location:
city: "Raleigh"
state: "NC"
country: "US"
timezone: "America/New_York"
latitude: 35.7796
longitude: -78.6382
skills:
dir: skills
disabled: []
weather:
units: imperial
home_assistant:
url: "http://homeassistant.local:8123"
device_ids_yaml: "data/home_assistant/device_ids.yaml"
device_ids_json: "data/home_assistant/device_ids.json"
default_room: "living_room"
Using a local model
To run entirely offline with Ollama:
yaml
model: "ollama/hermes3"
base_url: "http://localhost:11434"
No API key is required. Skill sub-calls (news summaries, HA resolution) also use this model unless overridden with a per-skill model key.