chore: docker, config, delivery sinks, dialogue, and agent docs
- Dockerfile: multi-stage build with CGO_ENABLED=0, embedder model copy, non-root user, healthcheck, and /data volume. - docker-compose.yml: mavend + mavweb services with shared volume, health checks, and restart policy. - .gitignore: ignore models/llm/*.gguf, deploy/telegram.env, tmp artifacts. - deploy/mavend.json: add LLM, phraser, voice sections (embedder, model paths, wake sensitivity). Add telegram token env-var expansion. - deploy/telegram.env.example: template for telegram bot token. - internal/config/config.go: add LLM config struct, voice config struct (embedder, llama, wake sensitivity), telegram token loading. - telegramsink: add chat intent delivery support alongside existing types. - voicesink: skip empty payloads in delivery. - dialogue/session: add chat intent to anaphora resolution, test coverage. - AGENTS.md: update with LLM embedder, LFM model download/configure steps, new UI conventions. - REARCH.md: architecture research document. - cmd/mavend/main.go: wire LLM config, phraser, embedder, telegram config, WebAuthn, IPC event/routine handlers, and reactive notes.
This commit is contained in:
@@ -74,6 +74,38 @@ sudo cp onnxruntime-linux-x64-1.15.1/lib/libonnxruntime.so* /usr/local/lib/
|
||||
Without the embedder block, the daemon uses `HashEmbedder` (works, but weak on
|
||||
Russian recall — you may see many "clarify" responses).
|
||||
|
||||
## LFM model for router + phraser
|
||||
|
||||
The daemon uses a single resident LFM (sub-1B) for both routing (intent
|
||||
classification + slot extraction) and phrasing (nudges, reminders, reactive
|
||||
replies). Without it, the `StubPhraser` + `HashEmbedder` classifier are used
|
||||
— deterministic but stiff (canned confirmations, weak Russian recall).
|
||||
|
||||
**Download the model** (GGUF, ~780 MB):
|
||||
|
||||
```sh
|
||||
make download-llm
|
||||
```
|
||||
|
||||
Or manually:
|
||||
|
||||
```sh
|
||||
curl -sL "https://huggingface.co/lfm/LFM2.5-1.2B-Instruct-GGUF/resolve/main/LFM2.5-1.2B-Instruct-Q4_K_M.gguf" \
|
||||
-o models/llm/LFM2.5-1.2B-Instruct-Q4_K_M.gguf
|
||||
```
|
||||
|
||||
**Configure in `deploy/mavend.json`** — the `phraser` block points at this
|
||||
model and the daemon spawns `llama-server` as a subprocess. The router and
|
||||
replier use the same llama-server via the shared `internal/llm` client.
|
||||
|
||||
Telegram tokens are read from `deploy/telegram.env` (gitignored), expanded
|
||||
via `${VAR}` in the JSON config.
|
||||
|
||||
**Routing is now LFM-first** with classifier fallback. The LLM router runs
|
||||
after stage-0 (exact-match grammar) and before the classifier cascade. On any
|
||||
error or parse failure, the classifier handles the utterance — the turn never
|
||||
breaks on the model.
|
||||
|
||||
## Web UI conventions
|
||||
|
||||
- All server-rendered pages share `cmd/mavweb/static/ui.css` (served at
|
||||
|
||||
Reference in New Issue
Block a user