Importance Fusion (ICNU)¶
The ICNU Importance Fusion system computes a memory's importance score at ingestion time by blending four signals: Interest, Challenge, Novelty, and Urgency.
The Problem¶
Without ICNU, importance is determined solely by the Surprise Detector — a statistical outlier test based on how "surprising" a memory's embedding is relative to recent memories. This works well for detecting unusual information, but has blind spots:
- A memory about a user's urgent deadline might not be statistically surprising
- A memory about a challenging technical problem might have a common embedding
- A memory that the agent finds interesting has no way to signal that interest
ICNU adds three LLM-provided signals alongside the existing novelty signal to produce a richer importance score.
The Formula¶
Where:
| Signal | Symbol | Range | Source |
|---|---|---|---|
| Interest | \(x_I\) | [0, 1] | LLM-provided hint |
| Challenge | \(x_C\) | [0, 1] | LLM-provided hint |
| Novelty | \(x_N\) | [0, 1] | Computed from working memory scan |
| Urgency | \(x_U\) | [0, 1] | LLM-provided hint |
The weights \(w_i\) are configurable and auto-normalize to sum=1.0:
| Weight | Default | Rationale |
|---|---|---|
| \(w_I\) (interest) | 0.30 | Agent engagement is a strong signal |
| \(w_C\) (challenge) | 0.10 | Complexity is less important than novelty |
| \(w_N\) (novelty) | 0.40 | Novelty is the strongest predictor of future usefulness |
| \(w_U\) (urgency) | 0.20 | Time-sensitive information needs priority |
Output Range¶
The formula maps to importance ∈ [0.05, 10.0]:
- 0.05 — All signals zero (routine, uninteresting, familiar, non-urgent)
- 10.0 — All signals maximal (interesting, challenging, novel, urgent)
Novelty Computation¶
How It Works¶
Novelty is computed using the nearest-neighbor distance in working memory — the minimum L2 distance between the incoming embedding and all existing working memory slots:
nearestDistance() performs a SIMD-accelerated scan of all working memory slots (~0.5ms for 100 slots × 768 dims) and returns the minimum L2 distance. A high distance means the memory is genuinely novel — it's far from everything the agent has seen recently.
Normalization¶
The raw distance is normalized to [0, 1] via:
Where 2.0 is a configurable threshold representing "maximally novel."
IngestionHints¶
The LLM provides hints via the IngestionHints record:
// At ingestion time
var hints = new IngestionHints(
0.8f, // interest: agent finds this very interesting
0.3f, // challenge: moderate complexity
0.9f // urgency: high time sensitivity
);
// Novelty is computed automatically from working memory
cognitiveTarget.ingestCognitive(id, text, type, tags, source, hints);
Safety Features¶
- Clamping: All values are clamped to [0.0, 1.0] on construction
- Fallback:
IngestionHints.NONEtriggers novelty-only mode (backward compatible) - Gaming detection: If all hints are maximal (I=1.0, C=1.0, U=1.0), a WARN is logged
NONE Fallback¶
When no hints are provided (IngestionHints.NONE), the system falls back to IcnuWeights.NOVELTY_ONLY — importance is determined solely by nearest-neighbor distance, matching the pre-ICNU behavior.
Configuration¶
Fusion Weights¶
var memory = SpectorMemory.builder()
.icnuWeights(new IcnuWeights(0.4f, 0.1f, 0.3f, 0.2f)) // custom weights
.build();
Built-in Weight Presets¶
| Preset | I | C | N | U | Use Case |
|---|---|---|---|---|---|
DEFAULT |
0.30 | 0.10 | 0.40 | 0.20 | General-purpose |
NOVELTY_ONLY |
0.00 | 0.00 | 1.00 | 0.00 | Backward-compatible |
Weight Auto-Normalization¶
Weights are automatically normalized on construction:
var w = new IcnuWeights(1f, 1f, 1f, 1f);
// → interest=0.25, challenge=0.25, novelty=0.25, urgency=0.25
Worked Example¶
Agent ingests: "User has a production outage — database connections exhausted"
| Signal | Value | Source |
|---|---|---|
| Interest | 0.7 | LLM hint — agent finds this relevant |
| Challenge | 0.5 | LLM hint — moderate complexity |
| Novelty | 0.9 | Working memory scan — nothing like this recently |
| Urgency | 1.0 | LLM hint — production outage |
With default weights:
This is a high-importance memory (8.11 / 10.0) — it will be prioritized in future recalls and resist time decay.
MCP Integration¶
When using the MCP tools, importance fusion happens automatically if the ingestion tool provides hints:
{
"name": "core_memory_append",
"arguments": {
"id": "outage-2024-01",
"text": "Production database connections exhausted at 2AM",
"tags": "production,database,outage",
"hints": {
"interest": 0.7,
"challenge": 0.5,
"urgency": 1.0
}
}
}
Backward Compatibility
The hints field is optional. When omitted, importance is computed using novelty-only mode — identical to the pre-ICNU behavior.