Back to Research Papers

Mem0: Personalized AI Memory Layer

2024-2025Memory & Context Management

Abstract

Mem0 provides a production-ready memory layer for LLM applications with intelligent conflict resolution and memory consolidation. The two-phase pipeline first extracts candidate memories from conversations, then intelligently resolves conflicts with existing memories through ADD/UPDATE/DELETE/NOOP decisions.

Key Contributions

  • 1.Two-phase pipeline: Extract → Resolve
  • 2.Conflict resolution via LLM judgment (ADD/UPDATE/DELETE/NOOP)
  • 3.Memory deduplication and consolidation
  • 4.Graph-enhanced variant (Mem0^g) with entity relationships
  • 5.Production-ready API for memory management
  • 6.Supports multiple LLM backends

Implementation in Awareness

Awareness implements Mem0's two-phase approach:

**Phase 1: Extraction** - Parse conversation for factual statements - LLM identifies candidate memories - Score importance (1-10 scale) - Generate embeddings for each candidate

**Phase 2: Conflict Resolution** - Search for similar existing memories (cosine > 0.85) - For each match, LLM decides: - **ADD**: New information, no conflict - **UPDATE**: Refine/update existing memory - **DELETE**: Information invalidated - **NOOP**: Redundant, no action needed

Graph Enhancement (Mem0^g):

- Extract entities and relationships

- Build knowledge graph in Neo4j

- Enable traversal-based retrieval

- Support complex multi-hop queries

Code Example

// Mem0 two-phase pipeline in Awareness
async function consolidateMemories(
  conversationHistory: Message[]
): Promise<void> {
  // Phase 1: Extract candidates
  const candidates = await extractCandidateMemories(conversationHistory);

  // Phase 2: Resolve conflicts
  for (const candidate of candidates) {
    const similar = await findSimilarMemories(candidate);

    if (similar.length === 0) {
      await addMemory(candidate); // ADD
    } else {
      const decision = await llm.judge({
        prompt: "Should we ADD, UPDATE, DELETE, or NOOP?",
        candidate,
        existing: similar
      });

      if (decision === "UPDATE") {
        await updateMemory(similar[0].id, candidate);
      } else if (decision === "DELETE") {
        await deleteMemory(similar[0].id);
      }
      // NOOP: do nothing
    }
  }
}

Usage in Awareness

Memory extraction and consolidation pipeline implementation

Related Papers