progress: dialogue and memory now wired (tasks 6/7 follow-up)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+20
-16
@@ -126,13 +126,13 @@ This session was run through **opencode**, not Claude Code (co-author trailer).
|
|||||||
block (some of model/tokenizer/lib paths missing) is now a load error instead
|
block (some of model/tokenizer/lib paths missing) is now a load error instead
|
||||||
of a silent fall-through to the Hash floor; the floor fallback logs explicitly.
|
of a silent fall-through to the Hash floor; the floor fallback logs explicitly.
|
||||||
- **Dialogue state scaffold (task 6)** — `internal/dialogue/`: `Session` +
|
- **Dialogue state scaffold (task 6)** — `internal/dialogue/`: `Session` +
|
||||||
TTL `SessionStore` + pure `InheritSlots`. **Library only — not wired** into the
|
TTL `SessionStore` + pure `InheritSlots`. **Now wired** (post-merge follow-up):
|
||||||
live path (wiring left as the plan's optional BLOCKED tail). This is the
|
the voice handler carries slots across same-intent turns within a 2-min window
|
||||||
substrate for future multi-turn (gap #2), not conversation itself yet.
|
(`followUpMerge`, unit-tested) — bounded gap-filling, not full multi-turn yet.
|
||||||
- **Long-term memory interface (task 7)** — `internal/memory/`: `Store` interface
|
- **Long-term memory interface (task 7)** — `internal/memory/`: `Store` interface
|
||||||
+ `InMemoryStore` (cosine). Wired into `IntentNote`: after `WriteNote` the note
|
+ `InMemoryStore` (cosine). Wired into `IntentNote` (best-effort insert) and,
|
||||||
embedding is `Insert`ed best-effort (log-and-continue, never fails the write).
|
post-merge, into `IntentFact` (facts indexed) + `IntentQuery` (read-back after
|
||||||
In-memory only — no external vector backend yet (gap #8 remains).
|
notes-RAG misses). In-memory only — no persistent backend yet (gap #8).
|
||||||
|
|
||||||
Follow-ups (Claude Code, post-merge): gofmt'd `handlers_test.go` (the jul6
|
Follow-ups (Claude Code, post-merge): gofmt'd `handlers_test.go` (the jul6
|
||||||
verification commit left it misaligned, so `gofmt -l` still flagged it despite the
|
verification commit left it misaligned, so `gofmt -l` still flagged it despite the
|
||||||
@@ -233,11 +233,13 @@ first — these define the category:
|
|||||||
Today it's a dictaphone with a brain, not something you talk to across the
|
Today it's a dictaphone with a brain, not something you talk to across the
|
||||||
kitchen. Highest-leverage gap — a wake word + speaker device changes what
|
kitchen. Highest-leverage gap — a wake word + speaker device changes what
|
||||||
Maven *is*, not just how good it is. (Listening modes 2–3 in maven.md.)
|
Maven *is*, not just how good it is. (Listening modes 2–3 in maven.md.)
|
||||||
2. **No conversation.** The router classifies one utterance → one reply. No
|
2. **Conversation is thin, not absent.** The router still classifies one
|
||||||
follow-ups, no anaphora ("а когда?"). A dialogue-state scaffold exists
|
utterance → one reply and there's no anaphora resolution or LLM-driven
|
||||||
(`internal/dialogue`, jul6 task 6 — session TTL + `InheritSlots`) but is
|
dialogue. But `internal/dialogue` is now **wired** (jul6 task 6 + follow-up):
|
||||||
**not wired** into the live path; the only runtime multi-turn state is still
|
a 2-min session carries slots across turns, so a same-intent follow-up
|
||||||
the 90s destructive-confirm park. The sub-1B phraser only words replies.
|
(«напомни завтра» → «…позвонить маме») inherits the earlier time. Bounded to
|
||||||
|
same-intent gap-filling — cross-intent anaphora and real multi-turn dialogue
|
||||||
|
are still future. The sub-1B phraser only words replies.
|
||||||
3. **Latency/shape of a turn.** Clip-based STT (record → upload → whisper →
|
3. **Latency/shape of a turn.** Clip-based STT (record → upload → whisper →
|
||||||
route → phrase → piper → play). No streaming either direction, no barge-in;
|
route → phrase → piper → play). No streaming either direction, no barge-in;
|
||||||
every exchange is a full round trip.
|
every exchange is a full round trip.
|
||||||
@@ -258,11 +260,13 @@ Capability-class gaps — built but thin:
|
|||||||
"clarify".
|
"clarify".
|
||||||
7. **Presence is effectively one signal** (page_heartbeat); desk_active is
|
7. **Presence is effectively one signal** (page_heartbeat); desk_active is
|
||||||
still an undeployed script — "voice when near" routing runs on a guess.
|
still an undeployed script — "voice when near" routing runs on a guess.
|
||||||
8. **Long-term memory per spec (obsidian → chroma) is still stubbed** — jul6
|
8. **Long-term memory is in-memory only, not the spec's chroma.** `internal/
|
||||||
task 7 added an `internal/memory` `Store` interface + an in-memory cosine
|
memory` (jul6 task 7 + follow-up) has a `Store` interface + in-memory cosine
|
||||||
impl, and note writes now insert into it best-effort, but there's no
|
impl; notes **and facts** are indexed on capture, and `IntentQuery` now reads
|
||||||
persistent/external vector backend and nothing reads it back yet. It's a
|
it back (after notes-RAG misses, before general-knowledge) — fact recall
|
||||||
seam, not personalization. Persona prompt and custom TTS voice (kami-picked,
|
(«когда я пил воду?») is its distinct payoff. Still missing: a persistent/
|
||||||
|
external vector backend (the store is lost on restart) — the read seam is
|
||||||
|
there to swap onto one. Persona prompt and custom TTS voice (kami-picked,
|
||||||
replaces the irina floor — [[custom-voice-training]]) are still future items.
|
replaces the irina floor — [[custom-voice-training]]) are still future items.
|
||||||
|
|
||||||
Ops footnote: in the Docker deploy, voice-over-web needs mavend to bind its
|
Ops footnote: in the Docker deploy, voice-over-web needs mavend to bind its
|
||||||
|
|||||||
Reference in New Issue
Block a user