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.
Full reference¶
Core¶
| Key | Default | Description |
|---|---|---|
host |
"127.0.0.1" |
Bind address |
port |
8766 |
HTTP port |
log_level |
"info" |
Log verbosity |
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" |
Path to the skills directory. Relative paths are resolved from the project root. |
skills.disabled |
[] |
List of skill function names to disable without deleting the 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.