Skip to main content
Airi’s memory system manages conversation history, context retrieval, and persistent storage. It uses DuckDB for in-browser storage and provides configurable retention and retrieval policies.

Memory Architecture

Airi’s memory system has multiple layers:

Session Management

Conversations are organized into sessions:

Database Configuration

Storage Backend

Airi uses multiple storage backends:
Storage Mounts:
  • local: Persistent IndexedDB storage
  • outbox: Queue for cloud synchronization
  • memory: In-memory cache (default)

DuckDB Integration

For advanced querying and analytics:
DuckDB Features:
  • SQL queries on conversation history
  • Aggregations and analytics
  • Full-text search (future)
  • Vector similarity search (future)

Context Management

Active Context

Context is dynamically provided by modules:
Built-in Context Providers:
  • Datetime: Current date/time
  • User Profile: User preferences and info
  • Module State: State from active modules (Discord, Minecraft, etc.)

Context Injection

Context is injected before each LLM call:
Example Context:

Message History Management

Session Creation

Message Persistence

Messages are automatically persisted after each turn:
Persistence is queued to avoid blocking:

Context Window Limits

Messages are automatically pruned to fit model context:
Default Limits:
  • GPT-4o: 120k tokens (留 8k for response)
  • Claude 3.5: 180k tokens (留 20k for response)
  • Local models: Varies (typically 4k-8k)

Retention Policies

Session Retention

Configure how long to keep sessions:
Implementation (custom):

Message-Level Retention

For fine-grained control:

Context Retrieval

Semantic Search (Future)

Planned feature using embeddings:
Basic text search:

Memory Retrieval Settings

Retrieval Strategy

Configure how context is retrieved:
Strategies:
  • Recent: Simply take last N messages
  • Relevant: Semantic search for related messages (requires embeddings)
  • Hybrid: Combine recency and relevance

Context Summarization

For long conversations:

Performance Tuning

Database Optimization

IndexedDB Settings:
Query Optimization:

Memory Usage

Lazy Loading:
Message Streaming:

Caching Strategy

Session Forking

Create alternate conversation branches:

Export & Backup

Export Sessions

Import Sessions

Cloud Sync (Future)

Planned cloud synchronization:

Troubleshooting

Storage Quota Exceeded

Symptoms: “QuotaExceededError” when saving messages Solutions:
  1. Clear old sessions:
  2. Reduce retention policy
  3. Export and delete archived sessions
  4. Check browser storage quota:

Slow Query Performance

Solutions:
  1. Add database indexes (see optimization section)
  2. Reduce message load count
  3. Use pagination for session lists
  4. Enable caching

Context Too Long

Error: Model context window exceeded Solutions:
  1. Enable automatic message pruning
  2. Reduce maxMessagesPerSession
  3. Enable message summarization
  4. Switch to model with larger context (Claude 3.5, Gemini 1.5)

Code Reference

Memory system implementation:
  • Session store: packages/stage-ui/src/stores/chat/session-store.ts
  • Context store: packages/stage-ui/src/stores/chat/context-store.ts
  • Chat orchestrator: packages/stage-ui/src/stores/chat.ts
  • Database repos: packages/stage-ui/src/database/repos/
  • Storage config: packages/stage-ui/src/database/storage.ts

Character Settings

Configure character behavior

Providers

Configure LLM providers