Configuration
Everything optional starts off. Keep the mock until the client works end to end, then add one provider at a time from the dashboard or the private config/config.php. Changes apply on the next request; no restart is needed.
Shipped Defaults
| Setting | Default |
|---|---|
llm.mode | mock: predictable replies, no network |
tts.enabled, stt.enabled | false (PocketTTS and Parakeet preselected) |
decision.enabled | false: always the baseline NPC |
allowed_actions | ["follow_player"] on the server and in the client |
history_limit | 10 lines per session and NPC |
Client voice_enabled | false |
The dashboard settings pages rewrite config/config.php safely but do not keep comments in the file. If a page refuses to save, run sudo bash scripts/install.sh again to repair ownership, then check Control Panel > Diagnostics ("Dashboard can save settings").
Connect An LLM
- Open Configuration > LLM and choose a Reply mode.
- For
local, set Base URL to the server's/v1address, for examplehttp://127.0.0.1:1234/v1. Foropenaiit is optional;openrouteranddwemerllmuse fixed URLs. - Set Model to the exact model name your provider lists. Every mode except
mockneeds one. - Press Save LLM settings (saving never contacts the provider), then Send test.
| Reply mode | Endpoint | Key |
|---|---|---|
mock | none | none |
openai | OpenAI, or any OpenAI-compatible base_url | usually |
openrouter | OpenRouter | required |
local | your own OpenAI-compatible server | optional |
dwemerllm | DwemerDistro LLM Studio at 127.0.0.1:1234; load a model there first | never sent |
The test shows the reply and its time, or a short reason such as HTTP 401 (key refused) or HTTP 404 (URL or model not found). A test may cost money; it saves no history and runs no actions. A failing provider gives the game 502 llm_unavailable, with the reason in the Apache error log.
To edit the file instead, in WSL, replace the llm block, for example:
'llm' => ['mode' => 'dwemerllm', 'model' => 'id-of-the-model-loaded-in-llm-studio',
'timeout_seconds' => 60, 'max_tokens' => 200],
API Keys
- Open Configuration > API keys.
- Paste the key into its slot, for example
llm.api_key, and press Save keys.
The page only ever shows Saved or Not set. A blank field keeps the saved key; the clear box removes it. Keys live only in config/config.php: never in the database, the browser, logs or Git. dwemerllm never receives a key.
Voice: PocketTTS And Parakeet
Voice is opt-in and never needed for text. The templates do not install or start voice services.
- Start PocketTTS (audio.cpp, port 8086) and/or Parakeet (port 8022) from the DwemerDistro launcher.
- Open Configuration > Voice, enable speech and/or transcription and save. The default URLs are
http://127.0.0.1:8086/v1/audio/speechandhttp://127.0.0.1:8022/v1/audio/transcriptions. For PocketTTS, a blank model or voice savespocket-ttsandalba. - Press Speak to hear a sample. For Parakeet, choose a short WAV (at most 10 MB) under Test transcription and press Transcribe.
- In the client's
config.json, set"voice_enabled": true.
The console client saves reply WAVs in %TEMP%\dwemer-ai-example\ and does not play them. Use --listen <file.wav> for speech input. Text always comes first: a voice failure prints Voice unavailable, text only: .... faster-whisper (port 9876) is also supported; see CONNECTORS.md, Voice.
Report voice as working only after you test it with your own services and recordings.
Optional NPC Selection
decision.php answers one question: which of up to 8 offered NPCs should answer a line. It returns no reply or actions and falls back to the baseline NPC on any problem. Call it only when the player has no explicit or crosshair target.
Enable it on Configuration > NPC selection, or in the config:
'decision' => ['enabled' => true, 'provider' => 'mock'],
Then test from the client folder:
.\example_mod.exe --decide "Scout, is the trail safe?"
With the mock enabled it prints npc_scout (provider, matched, ...); the command only prints the choice. The jev provider uses OpenRouter and needs a key; see CONNECTORS.md, NPC selection.
Full reference: CONNECTORS.md and SETUP.md sections 4 and 5.
Next step: Give NPCs bios, facts and memory.
