Files
Maven/REARCH.md
T
kami c9d88c152e Drop "never phones home" as a hard rule
The owner's call, 2026-07-31: a 0.8B model does not know enough about the
world to be useful without reading something. So she may now read external
sources to answer world questions.

What replaces the old rule, in all three docs:

- No telemetry, no cloud model, no third-party account. Unchanged.
- Local first: the Kiwix ZIMs on the box before anything on the network.
- External search is allowed but off unless configured, same as weather
  and telegram.
- His notes and facts are never search input. Only the utterance goes out
  — never the persona block, the history, or matched notes.

Docs only, no code.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CGeSZxh1DCtRxmFVSYVGvJ
2026-07-31 17:34:53 +04:00

4.6 KiB

Maven — Re-architecture (Qwen3 resident model, revised 2026-07-18)

Supersedes the classifier-first routing model. Agreed in a design session after diagnosing that homesrv deploys with a stub phraser (no LLM running) and an embedder-classifier that routes by nearest-neighbor between frozen seed phrases — the structural cause of "she messes up queries."

Hardware reality: homesrv = Ryzen 5 5600U laptop, Vega iGPU, 14 GB shared RAM. Workstation (RX 7900 XT) is NOT the deploy target and is often busy. So: small models, on-demand where heavy, always-on where cheap.

Principle

The LLM is not the center of everything. Deterministic tools handle the bulk. One locally trained Qwen3-1.7B resident model is used for routing and talking back. Its system prompt selects one of two independently evaluated contracts: route actions or persona responses.

If the router is good, Maven feels good. Routing is the linchpin.

The spine

utterance
   → [world-state context]   cheap: time, presence, calendar_busy, weather (no LLM)
   → ROUTER  = Qwen3-1.7B (always-on, grammar-constrained)
        reads utterance + context + tool schema, emits a STRUCTURED action:
          • call a tool (deterministic)      • answer directly
   → tools (deterministic, fast)
   → PHRASER = Qwen3-1.7B (same resident process) → TTS / text
  • Router = Phraser = one resident Qwen3-1.7B llama-server, with separate route and persona prompts/contracts. Always warm; classifier/stub remain the failure floors.
  • The resident checkpoint is trained end-to-end as: Qwen3-1.7B-Base → RU CPT → joint persona/router SFT → merge → GGUF. Larger on-demand reasoning models are deferred until the main feature set is complete.
  • Embedder demoted from router to tool — it now backs memory.search (RAG) and gives the router a cheap "similar past notes/intents" hint. The router no longer depends on it clearing a threshold. Upgrade MiniLM → bge-m3 for better RU retrieval later (model swap, not architecture).

Router output

  • Constrained structured JSON action {tool, args, escalate} — NOT free-form multi-step function-calling. Sub-1B is far more reliable emitting a fixed schema. Enforce with a GBNF grammar in llama.cpp (near-bulletproof).
  • Keep the existing stage-0 exact-match fast-path for dead-obvious commands (skips the router entirely) — cheap insurance, already built.

The proactive / memory half — one background engine

"Take notes," "remember," "reflect," "suggest do you want to add X?", "remind" are NOT request-path features. They are one digestion worker:

DIGESTION WORKER  (periodic + event-driven, off the request path)
  • reads new facts/notes since last pass
  • RAG-consolidates: dedupe, link, summarize into durable memory
  • reflects: detect patterns ("mentioned X three times")
  • proposes: "want me to add X / remind you about Y?" → nudge dispatcher
  • surfaces due reminders
  uses the resident Qwen3 model for bounded synthesis — never blocks a turn

Notes capture is a deterministic Tier-0 tool; making notes mean something later is the worker + RAG.

Layer table

Layer What Runs
Context world-state (time/presence/calendar/weather) always, no LLM
Router Qwen3 structured-action orchestrator — linchpin always-on
Tools note/reminder/memory/calendar/weather/act (deterministic) always
Reasoner larger specialist model deferred
Phraser Qwen3 persona response always-on (same proc as router)
Digestion worker reflection → suggestions/nudges/memory background
Reach telegram (+ existing ntfy/voice) quick win
Voice quality custom/better TTS deferred (workstation GPU busy)

Build order

  1. Foundation + router — completed shared llama-server client, router, fallback, replier, TTS normalization and telegram reach.
  2. Qwen3 resident checkpoint — finish RU CPT, pass the raw-vs-CPT gate, jointly SFT persona/router contracts, merge, quantize and deploy.
  3. Main features — reflection, proactive suggestions, memory consolidation, RAG read-back.
  4. Deferred work — larger reasoner, custom Piper voice and other expansions.

Non-goals (unchanged)

Not a nag. Not autonomous. Feminine-gendered RU self-ref. No telemetry, no cloud model, no third-party account — but she MAY read external sources to answer world questions (Kiwix first, search optional). "Never phones home" as an absolute is deprecated, owner's call 2026-07-31; see CLAUDE.md § Non-goals.