feat: implement KnowledgeDistiller — the Agent Dream loop#8
feat: implement KnowledgeDistiller — the Agent Dream loop#8ManniTheRaccoon merged 3 commits intomainfrom
Conversation
- Add ReferenceKnowledgeDistiller with 6-step pipeline: filter → extract → threshold → deduplicate → limit → finalize - Add PatternExtractionStrategy (rule-based baseline extractor) - Pluggable ExtractionStrategy interface for LLM/hybrid extractors - Configurable minConfidence, maxFacts, and ID generation - Set up TypeScript build for skeleton and reference-implementation - Add .gitignore, root tsconfig.json, pnpm-lock - 11 passing tests covering all pipeline stages
|
@ManniTheRaccoon Bitte um Review:
Kontext: Dies ist die erste Reference-Implementation für AMI. Die Architektur wird in PR #9 (DEC-003) auf ein Event-Bus-Modell umgestellt — der Distiller wird dann als registered processor adaptiert. Die Kernlogik bleibt aber bestehen. |
|
@ManniTheRaccoon Update zum Review-Auftrag: 1. Code Verification:
2. Code Content Validation:
Kontext: Dies ist die erste Reference-Implementation für AMI. Die 6-Stage Pipeline (filter → extract → threshold → deduplicate → limit → finalize) soll episodische Nachrichten zu semantischen Fakten destillieren. Das ExtractionStrategy-Interface muss zukunftssicher sein für LLM-basierte Extraktoren. In PR #9 (DEC-003) wurde die Architektur auf ein Event-Bus-Modell umgestellt — der Distiller wird danach als registered processor adaptiert, die Kernlogik hier bleibt aber bestehen. |
ManniTheRaccoon
left a comment
There was a problem hiding this comment.
Review: KnowledgeDistiller — Code Verification & Content Validation
1. Code Verification ✅
Kompiliert & läuft: TypeScript-Setup mit project references sauber, tsconfig korrekt, exports stimmen.
Tests: 11 Tests, gute Coverage der Pipeline-Stufen:
- Empty input, system message filtering
- Extraction (declarative, preference, decision)
- Threshold, deduplication, maxFacts limit
- Source episode linking
TypeScript-Interfaces: ExtractionStrategy ist sauber definiert, FactCandidate hat die richtigen Felder, KnowledgeDistiller implementiert das Skeleton-Interface korrekt.
Kleinigkeiten:
- Tests laufen gegen
dist/(compiled JS) statt gegen TS source — das ist bewusst (kein Test-TypeScript-Transform nötig), aber bedeutet dass man vor Tests builden muss idGeneratordefault nutztMath.random()— für Tests okay, für Produktion vielleichtcrypto.randomUUID()erwägen
2. Code Content Validation ✅
a) PR vs. Code — stimmt überein:
- 6-Stage Pipeline (filter → extract → threshold → deduplicate → limit → finalize) ist exakt wie beschrieben implementiert
- PatternExtractionStrategy erkennt alle 6 genannten Pattern-Typen in der richtigen Prioritätsreihenfolge
- Pluggable Strategy-Interface funktioniert — man kann
ExtractionStrategyimplementieren ohne die Pipeline zu ändern - Dedup über normalisierte Texte mit confidence-merge wie beschrieben
b) Roadmap-Alignment:
- Zweites ROADMAP-Item (
KnowledgeDistiller), passt zum Projektverlauf - Model-agnostisch: keine LLM-Dependency, saubere Baseline
- Die Pipeline-Architektur überlebt den Event-Bus-Umbau in DEC-003 — die
distill()Methode wird einfach als Processor registriert, Kernlogik bleibt
Design-Stärken:
breaknach erstem Pattern-Match pro Satz verhindert Duplikate- Sentence-Splitter ist simpel aber ausreichend für die Baseline
- Metadata (
tag,confidence) fließt sauber durch die Pipeline bis zum finalenFact
Ein Vorschlag: Der Sentence-Splitter (split(/(?<=[.!?])\s+/)) kann bei Abkürzungen wie "e.g. " oder "Dr. Smith" falsch splitten. Für die Baseline kein Blocker, aber worth noting für LLM-basierte Extraktoren die den vollen Kontext brauchen.
Verdict: Solide Reference-Implementation. Sauber, testbar, erweiterbar. 👍
ManniTheRaccoon
left a comment
There was a problem hiding this comment.
LGTM ✅ — saubere Reference-Implementation, Tests grün, Roadmap-aligned. Details im vorherigen Comment-Review.
|
@ManniTheRaccoon Ergänzung: 3. Action:
|
Summary
Implements the
KnowledgeDistillerinterface from the cognitive skeleton — the second item on the ROADMAP. This is the mechanism by which episodic memory (conversation) gets consolidated into semantic memory (facts). In biological terms: the dream loop.Changes
Core:
ReferenceKnowledgeDistiller6-step pipeline: filter → extract → threshold → deduplicate → limit → finalize
ExtractionStrategyminConfidence(default: 0.3)maxFacts(default: 20), sorted by confidenceIncluded:
PatternExtractionStrategyRule-based baseline extractor recognizing:
Actually, ...) — highest confidence (0.8)We decided to ...) — 0.7X means Y) — 0.7I prefer ...) — 0.6Always ...,Never ...) — 0.6X is Y) — 0.5Rules are ordered by priority so specific patterns match before broad ones.
Infrastructure
skeletonandreference-implementationpackagestsconfig.jsonwith project references.gitignorefor node_modules, dist, tsbuildinfoDesign Decisions
ExtractionStrategyinterface allows swapping in LLM-based extractors without changing the pipeline. The pattern-based one is a zero-dependency baseline.Next Step
ROADMAP item: Bootstrap the reference agent: Ami — wire the distiller into an agent that uses EpisodicMemory → KnowledgeDistiller → SemanticMemory in a loop.