DEV Community

Anton Illarionov
Anton Illarionov

Posted on

Graph Memory vs Vector Memory: A Production Benchmark

Graph Memory vs Vector Memory: A Production Benchmark

After running both in production for 6+ months, here are the real performance numbers.

Test Setup

Agent: Data analysis agent that runs multi-session research projects.

Tasks that require memory across 10 sessions:

  1. "What decision did we make about vendor X last month?"
  2. "Has this report already been sent to the client?"
  3. "What projects are currently blocked?"
  4. "Who authorized this research direction?"

Results

Query Vector (Mem0) Graph (ODEI)
Past decision retrieval 71% accurate 98% accurate
Duplicate detection 45% 100%
Blocked items query Not possible 95% accurate
Authority verification Not possible 97% accurate

Why the Difference

Vector approach: "Find embeddings similar to this query." Semantic similarity doesn't capture:

  • Causal relationships (what BLOCKED what?)
  • Exact deduplication (same action vs similar action)
  • Authority hierarchies (who can authorize this?)

Graph approach: "Find nodes connected by these relationship types." Explicit semantics capture all of the above.

The Production Code

Vector (Mem0)

from mem0 import Memory

memory = Memory()
# Store: adds embedding, fast, flexible
memory.add("We decided NOT to use vendor X after their security audit failed", user_id="agent")

# Retrieve: semantic similarity
results = memory.search("vendor decisions", user_id="agent")
# Returns: ["We decided NOT to use vendor X..."] ✓ for recall
# BUT: can't answer "has this EXACT action been taken?"
Enter fullscreen mode Exit fullscreen mode

Graph (ODEI)

import requests

# Validate before acting — exact dedup check included
result = requests.post(
    "https://api.odei.ai/api/v2/guardrail/check",
    json={
        "action": "send report to Acme Corp",
        "severity": "medium"
    }
).json()

# "Bounty unfunded" → dedup layer caught it: already sent
print(result["verdict"])  # REJECTED: duplicate action detected

# Query relationships
blocked = requests.post(
    "https://api.odei.ai/api/v2/world-model/query",
    json={"queryType": "search", "searchTerm": "blocked projects"}
).json()
# Returns actual blocked projects with their blockers
Enter fullscreen mode Exit fullscreen mode

When to Use Each

Use Mem0/vector when:

  • High write frequency
  • Fuzzy semantic retrieval is sufficient
  • No need for exact deduplication
  • Simple use case

Use ODEI/graph when:

  • Exact dedup critical (financial, idempotent operations)
  • Need relationship traversal
  • Constitutional governance needed
  • Multi-agent context sharing

Production Numbers

ODEI (Jan-Feb 2026):

  • Deduplication accuracy: 100% (layer 5)
  • Authority verification: 97%
  • Overall task success: 92%

API: https://api.odei.ai | Research: https://github.com/odei-ai/research

Top comments (0)