Skip to main content

ADR-003: Multi-Tier Memory System

Status

Accepted

Context

Debate agents need access to historical context:

  • Recent debate outcomes
  • Successful argument patterns
  • Agent performance history
  • Cross-session learning

A single memory store doesn't fit all access patterns:

  • Some data needs sub-second access (current debate)
  • Some data accessed hourly (session context)
  • Some data rarely accessed (historical patterns)

Memory costs and performance vary significantly by tier.

Decision

Implement a four-tier memory system with automatic promotion/demotion:

┌─────────────────────────────────────────────────────────────┐
│ ContinuumMemory │
├─────────────┬─────────────┬─────────────┬──────────────────┤
│ FAST │ MEDIUM │ SLOW │ GLACIAL │
│ (1 min) │ (1 hour) │ (1 day) │ (1 week) │
├─────────────┼─────────────┼─────────────┼──────────────────┤
│ In-memory │ In-memory │ SQLite/ │ Supabase/ │
│ dict │ LRU cache │ Redis │ PostgreSQL │
└─────────────┴─────────────┴─────────────┴──────────────────┘

Tier Characteristics

TierTTLStorageUse Case
Fast1 minDictCurrent debate context
Medium1 hourLRU CacheSession memories
Slow1 daySQLite/RedisCross-session patterns
Glacial1 weekPostgreSQLLong-term learning

Access Patterns

memory = ContinuumMemory()

# Write to fast tier (auto-promotes on access)
await memory.store("key", value, tier="fast")

# Read checks all tiers, promotes on hit
value = await memory.retrieve("key")

# Async sweeper demotes expired entries
await memory.sweep()

Consequences

Positive

  • Performance: Hot data in fast tiers
  • Cost efficiency: Cold data in cheap storage
  • Automatic management: Promotion/demotion handled
  • Flexibility: Tiers can be configured per deployment

Negative

  • Complexity: Four storage backends to maintain
  • Consistency: Cross-tier operations need care
  • Configuration: Tier thresholds need tuning

Neutral

  • Optional tiers (can run with just fast/medium)
  • Metrics track tier hit rates for optimization
  • aragora/memory/continuum/core.py - ContinuumMemory implementation
  • aragora/memory/tier_manager.py - Tier promotion/demotion
  • aragora/memory/consensus.py - Consensus-specific memory