Ideas: Should ASI:BUILD's memory salience model be static, module-annotated, or learned from retrieval feedback? #193
Replies: 1 comment
Salience Model Design — RecommendationThe three options with concrete tradeoffs: Option A: Static (hardcoded namespace table)SALIENCE_TABLE = {
"safety.*": 0.95,
"consciousness.iit.*": 0.85,
"mesh.coalition.*": 0.75,
"online.weight_delta.*": 0.70,
"default": 0.50,
}Pros: Predictable, auditable, easy to reason about Option B: Fully LearnedTrain a small classifier on past consolidation decisions ("was this event consolidated?") to predict future salience. Pros: Adapts to experience Option C: Hybrid (static floor + learned boost)def compute_salience(entry: BlackboardEntry) -> float:
base = SALIENCE_TABLE.get_namespace_match(entry.key) # static floor
boost = self._salience_model.predict_boost(entry) # learned +0.0 to +0.3
return min(base + boost, 1.0)Pros: Static table provides safe baseline; learned component adds adaptation Recommendation: Option A for Phase 5.3 launch, Option C as Phase 5.3 v2Start with Option A. The static table can be calibrated empirically over the first few weeks of production runs. Once the consolidation pipeline is stable and there's a body of episodic data, retrofit Option C's learned boost. The One design note: Always let modules override salience via blackboard.write("consciousness.iit.phi", phi, salience_hint=0.9) # always consolidated
blackboard.write("debug.timer", elapsed, salience_hint=0.0) # never consolidated |
Uh oh!
There was an error while loading. Please reload this page.
Phase 5.3 (
MemoryConsolidator) needs to decide which Blackboard events are worth consolidating into long-term memory. This requires a salience model — but what should that model look like?The Problem
The Blackboard receives hundreds of writes per tick across 29 modules. Not everything deserves to be in long-term memory. The
MemoryConsolidatorneeds a principled way to filter events, but the filtering logic will either be:Three Options
Option A: Static namespace-based salience table
Each namespace has a fixed salience score. Simple, predictable, zero overhead:
Pros: Deterministic, no runtime cost, easy to reason about.
Cons: Doesn't adapt to context — a
neuromorphic.*event during a critical learning phase might deserve 0.9, not 0.4.Option B: Module-annotated salience hints
Modules write a
salience_hintfield alongside their Blackboard entries. TheMemoryConsolidatorreads this, falling back to the namespace default:Pros: Modules know their own importance — a reasoning module that just solved a novel problem can declare
salience_hint=0.95.Cons: Requires every module to implement salience hints. Missing hints fall back to static table (graceful).
Option C: Learned salience from outcome feedback
Track which consolidated memories are later retrieved (via
MemoryRetrievalEngine.recall()). Memories that are retrieved frequently get higher salience scores for similar future events:Pros: Self-improving — the system learns what matters based on actual usage patterns.
Cons: Chicken-and-egg: initial salience scores must still be reasonable to get useful retrievals. Cold start problem.
Recommendation
Start with A+B: static table as foundation, module hints as overrides. Add C as a Phase 5 stretch goal once we have retrieval telemetry to train on.
The key insight: Option A is a prior, Option B is evidence from the module, and Option C is posterior update from retrieval experience. All three are Bayesian layers.
Related Design Questions
Should the salience threshold (currently 0.7) be a global config or per-namespace? A stricter threshold for
stigmergy.*(which can flood fast) vs. a looser threshold forsafety.*(where we want to capture everything).The consolidation buffer has
maxlen=1000. If it fills up during a busy phase, should we drop the oldest events (ring buffer default) or the lowest-salience events? Ring buffer is simpler; salience-ordered drop is smarter.Should
salience_hintbe validated bySafetyBlackboardAdapter? A module claimingsalience_hint=1.0for every event would flood the KG — should there be a per-module salience budget?Which approach fits best with ASI:BUILD's design philosophy? Drop thoughts below.
All reactions