Zep is a context layer for agents: an LLM turns the messages and data you send into a temporal graph of entities and facts, and agents retrieve from that graph. LLMSlim Core is an MIT-licensed Python library that stores every turn word for word and, when you search, returns the turns that answer the question within a token budget, with no LLM call on either side. Here is how they differ, what two public benchmarks show, what each costs, and how to bring your Zep threads across.
Updated November 2, 2026Results: LLMSlim Core 0.9, round 3Reader: Claude Haiku 5.5Prices checked 2 November 2026
We build LLMSlim. We are not affiliated with Zep. Zep Cloud is a hosted service; we benchmarked Graphiti 0.30.2, the open-source framework Zep is built on, on Neo4j, through Zep's own benchmark harness. Zep did not run, review or endorse this comparison.
The short answer
Zep builds a temporal graph: an LLM extracts entities and facts from each message, dates them, and resolves them against what the graph already holds. LLMSlim keeps the messages and selects from them when you ask. Zep is a hosted service, with Graphiti as its open-source framework; LLMSlim Core is a library you run, and its hosted edition, Orbit, opens with LLMSlim 1.0.
On LoCoMo at about 2,500 tokens, read by Claude Haiku 5.5, Graphiti on Neo4j answered 74.4%, against 91.7% for LLMSlim Core 0.9 with no model (+17.3 points, 95% CI +14.8 to +19.7) and 93.0% with its optional 22M-parameter reranker. Per 1,000 questions end to end, that cost $6.24 for Graphiti, against $0.89 and $0.95 for LLMSlim.
On the 24 LongMemEval questions pre-registered for Zep, Graphiti answered 58.3% for $697.56 per 1,000 questions, against 87.5% for $0.94 for LLMSlim (+29.2 points, 95% CI +12.5 to +45.8). Building a graph of each 500-message history costs about $0.70 a question. 24 questions is a small sample: the intervals are about ±17 points.
Our Graphiti results are far below Zep's own published LongMemEval result (71.2% with GPT-4o, in the Zep paper), and we ran Graphiti with Claude Haiku 5.5 rather than Zep Cloud. Read them as one setup, not a verdict on Zep Cloud.
These results are for LLMSlim Core 0.9.0 selecting from whole sessions. The Memory API of 0.12 reads a history differently, and on two-person conversations it keeps less of the evidence than the version benchmarked here; see what this does not show.
At a glance
Two ways to remember. Different trade-offs.
Aspect
LLMSlim
Zep
What it stores
Every turn, word for word, under its date and scope
Each message as an episode, which stays retrievable, and the entities and facts an LLM extracts from it, in a temporal graph
Model calls when you add
None
LLM calls for each episode: extracting entities and facts, dating facts, resolving them against the graph, and summarizing entities
When a fact changes
Both turns stay, each under its date; since 0.12, search shows statements that may conflict side by side
A contradicting fact invalidates the older one, with valid_at and invalid_at times on each fact
How search works
Ranks stored turns against the question by shared words, with no model, and returns them within a token budget; an optional 22M-parameter cross-encoder rescores
Retrieves a prompt-ready Context Block from the user's graph; Graphiti combines semantic, full-text and graph search
What you run
One Python package. Memory in SQLite (built into Python), Postgres or, from 1.0, MongoDB
Zep Cloud is hosted; Enterprise can deploy in your VPC. Graphiti runs on Neo4j, FalkorDB or Amazon Neptune, with an LLM and an embedder you provide
Zep calls itself "the unified context layer for enterprise data": it combines conversations, documents and business data into temporal Context Graphs that agents retrieve from. Chat messages go into threads. Each message is stored as an episode, and an LLM-driven pipeline extracts entities and facts from it, dates the facts, resolves them against the graph (a contradiction invalidates the older fact) and updates entity summaries. Agents retrieve a prompt-ready Context Block from a user's graph.
Zep's open-source framework for temporal knowledge graphs, which Zep's FAQ describes as the framework that powers Zep Cloud. It runs on Neo4j, FalkorDB or Amazon Neptune, with an LLM and an embedder from providers such as OpenAI, Azure OpenAI, Gemini or Anthropic. Zep Community Edition, a self-hosted Zep, is deprecated and no longer supported. Round 3 benchmarked Graphiti 0.30.2 on Neo4j.
From Zep's documentation, its FAQ and the Graphiti repository, read on 2 November 2026.
How LLMSlim differs
Keep what was said. No LLM on the way in.
01
Verbatim storage, no graph to maintain
add stores each turn as it was said, with its time and scope. There are no entities to resolve and no facts to extract, so nothing can be merged wrongly or extracted wrongly; what the model reads later is what was said.
02
No LLM calls on write
Storing makes no model call, so adding memory costs nothing per message and works offline. In round 3, building Graphiti's graph on Claude Haiku 5.5 was $5.29 of its $6.24 per 1,000 LoCoMo questions, and about $0.70 a question on LongMemEval's 500-message histories.
03
Selection at question time, within a budget
search ranks user turns and windows of replies against the question, and returns what fits the token budget you give, in date order. Relevance is lexical by default: no model, deterministic. relevance="semantic" adds a 22M-parameter cross-encoder that runs on a CPU.
04
Self-hosted on SQLite, Postgres or MongoDB
One pip install. Memory lives in a SQLite file by default, in Postgres for several processes or machines, or, from 1.0, in MongoDB. There is no graph database, embedding model or LLM to run.
05
An MCP server and an HTTP API
llmslim mcp gives Claude Code, Claude Desktop, Cursor and other MCP clients remember, recall, forget and fit_context tools. llmslim serve puts the same memory behind a JSON API, with a TypeScript client for the Vercel AI SDK and Mastra.
06
Changes kept side by side
Zep invalidates a fact when a newer one contradicts it. LLMSlim keeps both statements under their dates, and since 0.12 its search shows statements that may conflict side by side, so the model weighs which one holds.
Head to head · Round 3 · LLMSlim Core 0.9.0 · 13–15 Oct 2026
Two memory benchmarks, one reader. Same questions, similar budgets.
Graphiti ran through Zep's own benchmark harness: each LoCoMo message an episode, each LongMemEval session an episode, and 20 facts and 20 entities in Zep's own context template. LLMSlim selected from the same histories at about the same number of tokens. Claude Haiku 5.5 read every context with Mem0's answer prompt; Mem0's judge scored LoCoMo and the official judge LongMemEval. Costs are per 1,000 questions end to end at list prices, including the calls that build Graphiti's graph.
LoCoMo: 1,307 test questions on 8 long conversations, about 2,500 tokens
System
Context tokens
Accuracy (95% CI)
Cost per 1k questions
Full history, read from the prompt cache
27,133
95.1 (93.9–96.3)
$0.83
LLMSlim 0.9 + reranker
2,495
93.0 (91.5–94.3)
$0.95
LLMSlim 0.9
2,492
91.7 (90.3–93.3)
$0.89
Mem0, top 50 memories
2,425
91.0 (89.4–92.5)
$2.66
RAG over turns (Qwen3-Embedding-0.6B)
2,430
85.2 (83.2–87.0)
$0.90
Zep (Graphiti on Neo4j)
2,738
74.4 (72.0–76.7)
$6.24
Accuracy by Mem0's judge, with the 95% bootstrap interval. Graphiti's context, in Zep's template, averaged 2,738 tokens. The full history was read from the prompt cache because a conversation's questions were asked back to back; without the cache it costs $4.48 per 1,000 questions.
LongMemEval-S: Zep's 24-question sample, about 2,500 tokens
System
Context tokens
Accuracy (95% CI)
Cost per 1k questions
Full history
111,243
91.7 (79.2–100.0)
$90.22
LLMSlim 0.9
2,501
87.5 (75.0–100.0)
$0.94
LLMSlim 0.9 + reranker
2,498
87.5 (70.8–100.0)
$1.01
Mem0, top 50 memories
2,844
87.5 (75.0–100.0)
$219.48
RAG over turns (Qwen3-Embedding-0.6B)
2,474
83.3 (66.7–95.8)
$3.28
Zep (Graphiti on Neo4j)
2,053
58.3 (37.5–79.2)
$697.56
Each question has its own history of about 111k tokens and 500 messages, so Graphiti builds a new graph for each question: about $0.70 a question. Accuracy by the official judge.
Paired differences with 95% intervals
Comparison
Benchmark (questions)
Difference (95% CI)
Reading
LLMSlim vs Zep
LoCoMo, about 2,500 tokens (1,307)
+17.3 (+14.8, +19.7)
Ahead
LLMSlim vs Zep, token F1 (no judge)
LoCoMo, about 2,500 tokens (1,307)
+10.5 (+8.9, +12.0)
Ahead
LLMSlim vs Zep
LongMemEval-S, Zep's sample (24)
+29.2 (+12.5, +45.8)
Ahead
LLMSlim vs Zep, Mem0's more lenient judge
LongMemEval-S, Zep's sample (24)
+20.8 (+0.0, +41.7)
Level
Paired differences in points, the default LLMSlim (no model) minus Zep, on the same questions, with the paired bootstrap 95% interval in brackets, from the round 3 tables. Level means the interval includes zero, so the gap may be noise.
What this does not show
Graphiti, not Zep Cloud
Zep Cloud is a hosted service with its own models and settings. We ran Graphiti 0.30.2, the open-source framework that powers it, on Neo4j (Graphiti's primary backend), through Zep's own harness (getzep/zep-papers), with Claude Haiku 5.5 for extraction, Qwen3-Embedding-0.6B for embeddings and Zep's BGE reranker. Zep Cloud may score differently.
Far below Zep's own published result
Zep's paper reports 71.2% on LongMemEval-S with GPT-4o, against 60.2% for full context in its setup. Our 58.3% used Claude Haiku 5.5 for extraction and reading, on a 24-question sample, so the two are not comparable. Compare each system's gap to its own full-context baseline, not raw scores across readers.
Where the run differs from Zep's harness
Each difference is in Zep's favour or forced by the benchmark's one-model rule. On LongMemEval, Zep's run added every message on its own; here each session is one episode, to keep the cost of Graphiti's several calls per episode within budget. Zep's LoCoMo script read a photo-caption key LoCoMo does not have; here every system sees the captions. Graphiti's embedding and database compute is not counted, which favours it.
A small sample on LongMemEval
Zep ran on its pre-registered 24 questions, because building a graph of each 500-message history costs about $0.70 a question. The 95% intervals are about ±17 points on 24 questions; under Mem0's more lenient judge the gap's interval touches zero.
Measured on Core 0.9.0, not on the 0.12 Memory API
Round 3 measured LLMSlim selecting from whole sessions with compress_documents. Since 0.12.0, Memory.search reads a history turn by turn. On 230 LoCoMo development questions, counting the questions whose labelled evidence is all in the context (no reader in the loop), the 0.12 read path kept all of it for 75.7% of questions at 2,500 tokens, against 85.7% for the path benchmarked here. Fixes on main raise that to 80.0%; the rest of the gap is open, and is listed in the 1.0 roadmap's known quality issues.
A cached full history
When a conversation's questions come back to back, the cached full history (95.1% for $0.83 per 1,000 questions) is cheaper than LLMSlim at 10,000 tokens and more accurate than any compressed context. LLMSlim is the cheaper choice when the context changes between questions, when questions arrive too far apart for the cache, or when a history is long enough to be billed at the long-prompt rate.
Zep combines business data, documents and conversations into Context Graphs shared across users and accounts, with access policies for agents and teams. LLMSlim scopes memory per user, agent and session, and has no graph that spans sources.
Compliance and a managed service today
Zep's Enterprise plan includes SOC 2 Type II, a HIPAA BAA, an SLA and deployment in your own VPC. LLMSlim Core runs wherever you run it, and its hosted edition, Orbit, opens with LLMSlim 1.0.
Questions about entities and their history
Zep's graph answers questions about people, accounts and how facts about them changed, with validity times on each fact. LLMSlim returns what was said; it has no entity graph.
Facts that should be invalidated
When a fact changes, Zep invalidates the older one. LLMSlim keeps both under their dates and shows statements that may conflict side by side; if your agent must see only the current fact, Zep does that work for you.
Text mostly not in English
LLMSlim's default lexical scoring uses English stemming and stopwords, and we have no published results in other languages. Evaluate both on your own data before choosing.
When LLMSlim fits
Where LLMSlim makes sense.
Conversation memory where the exact words matter, with no extraction model in between.
No LLM bill for memory: storing a message costs nothing. In round 3, building Graphiti's graph was $5.29 of its $6.24 per 1,000 LoCoMo questions.
Long conversations: on LoCoMo, 91.7% with no model and 93.0% with the reranker, against 74.4% for Graphiti, in round 3.
One package on your own machines: SQLite, Postgres or, from 1.0, MongoDB, with no graph database to run.
Claude Code, Cursor and other MCP clients through llmslim mcp, and any language through llmslim serve.
Pricing · checked 2 November 2026
What each costs. From each pricing page.
Zep's plans as its pricing page listed them on 2 November 2026, next to LLMSlim's. The units differ (Zep counts credits for what you ingest, Orbit counts stored turns and searches), so the plans don't map one to one.
Zep
Plan
Price
What it includes
Free
Free
10,000 credits a month, for prototyping. Limits apply.
Flex
$125 a month, billed monthly
50,000 credits a month, then $25 per 10,000 credits. 600 requests a minute, 5 projects, 5 Context MCP Server seats, API logs kept 1 day.
Flex Plus
$375 a month, billed monthly
200,000 credits a month, then $75 per 40,000 credits. 1,000 requests a minute, 10 projects, 15 Context MCP Server seats, webhooks and analytics, API logs kept 7 days.
Enterprise
Custom (contact Zep)
Negotiated credits, guaranteed rate limits with an SLA, SOC 2 Type II and a HIPAA BAA, and deployment in Zep Cloud, with your own encryption keys, or in your VPC.
Graphiti (open source)
Free, Apache-2.0
Self-hosted framework. You run a graph database (Neo4j, FalkorDB or Amazon Neptune) and pay for its LLM and embedder.
Source: www.getzep.com/pricing, checked 2 November 2026. Prices change; check the page before you decide.
LLMSlim (Orbit opens with LLMSlim 1.0)
Plan
Price
What it includes
Core
Free, MIT
Self-hosted, with no account and no limits on projects, turns or searches. No model calls, so memory adds nothing to an LLM bill; you run the machine and, if you want one, the database.
Orbit Free
Free
1 project, 1,000 stored turns, 1,000 searches a month.
Orbit Pro
$19 a month, or $190 a year
3 projects, 250,000 stored turns, 100,000 searches a month.
Orbit Team
$99 a month, or $990 a year
10 projects, 2M stored turns, 1M searches a month, 5 seats included, then $15 per extra seat a month.
A credit, per Zep's page: an episode (a chat message, a JSON payload or a block of text) up to 350 bytes uses 1 credit, plus 1 for each further 350 bytes or part of it. Retrieval, storage, threads and users use no credits. The page also offers annual billing, which it says saves 17%.
Zep's extraction runs on Zep's side and is covered by credits. On Graphiti it is your LLM bill: in round 3, building Graphiti's graph on Claude Haiku 5.5 added $5.29 per 1,000 LoCoMo questions, and about $0.70 per LongMemEval question.
LLMSlim Core makes no model calls, so its only costs are your machine and database.
LLMSlim Orbit, the hosted edition, opens with LLMSlim 1.0 and is not available yet; these are its plans at launch, from /pricing. Nothing is charged before it opens.
Migrate
Bring your memory across. Tested, with real output.
LLMSlim has no Zep importer. The closest path is Zep's own message history: export each thread's messages as JSON lines in the shape llmslim import jsonl reads, and import those. We ran the conversion, the import and the search below on sample messages in the shape of Zep's v4 list-messages response; the outputs are copied from that run. We have no Zep account, so the export script follows Zep's SDK reference and source but was not run against Zep.
1. Export your threads from Zep
With pip install zep-cloud and a Zep API key: list each user's threads, read their messages oldest first, and write one line per message. to_llmslim maps Zep's message fields to the JSONL fields LLMSlim reads.
export_zep.pypython
import json
import os
from zep_cloud.client import Zep
client = Zep(api_key=os.environ["ZEP_API_KEY"])
users = {"asha": "<Asha's Zep user UUID>"} # your user id -> Zep's user UUID
def to_llmslim(message, thread_uuid, user_id):
return {
"id": message.uuid_,
"role": message.role,
"content": message.content,
"timestamp": message.reference_time or message.created_at,
"session_id": thread_uuid,
"user_id": user_id,
}
with open("zep-history.jsonl", "w", encoding="utf-8") as out:
for user_id, user_uuid in users.items():
for thread in client.thread.list(user_uuid=user_uuid): # the pager reads every page
for message in client.thread.list_messages(thread.uuid_, order_by="created_at", order="asc"):
out.write(json.dumps(to_llmslim(message, thread.uuid_, user_id), ensure_ascii=False) + "\n")
zep-history.jsonl (2 of 5 lines)json
{"id": "c0a8f1e2-0001-4a7b-9c3d-5e6f7a8b9001", "role": "user", "content": "I moved to Pune last month, to Koregaon Park.", "timestamp": "2026-10-03T06:12:40.118Z", "session_id": "8a41c6d2-7f0e-4c11-b5e3-2d9f60a1c001", "user_id": "asha"}
{"id": "c0a8f1e2-0002-4a7b-9c3d-5e6f7a8b9002", "role": "assistant", "content": "Noted: you live in Pune now, in Koregaon Park.", "timestamp": "2026-10-03T06:12:44.902Z", "session_id": "8a41c6d2-7f0e-4c11-b5e3-2d9f60a1c001", "user_id": "asha"}
2. Import the JSONL
llmslim import jsonl comes with LLMSlim 1.0; until then, install main from GitHub to use it. Each thread becomes a session. System messages are left out, and function and tool messages too unless you pass --include-tool-output. Running it again stores only what is new.
terminalbash
# main from GitHub, which becomes 1.0: adds llmslim import
pip install "llmslim[fast-tokens] @ git+https://github.com/Thanatos9404/llmslim"
# 0.12.0 from PyPI: no importer (see the loop below)
pip install "llmslim[fast-tokens]"
8a41c6d2-7f0e-4c11-b5e3-2d9f60a1c001: 2 turns, 2 new, 0 already there
8a41c6d2-7f0e-4c11-b5e3-2d9f60a1c002: 3 turns, 3 new, 0 already there
Imported JSONL history from zep-history.jsonl
into: memory.db (user asha)
files: 1
sessions: 2
turns: 5 imported, 0 already there, 0 skipped
On 0.12.0: add them in a loop
pip install llmslim (0.12.0) has no importer; this loop stores the same messages. Running it twice stores them twice.
add_history.pypython
import json
from llmslim.memory import Memory
memory = Memory("memory.db")
added = 0
with open("zep-history.jsonl", encoding="utf-8") as history:
for line in history:
row = json.loads(line)
if row["role"] not in ("user", "assistant"):
continue # system, function and tool messages stay behind
memory.add(
{"role": row["role"], "content": row["content"]},
user_id=row["user_id"],
run_id=row["session_id"],
timestamp=row["timestamp"],
metadata={"source_id": row["id"]},
)
added += 1
print(added, "messages added")
outputtext
5 messages added
3. Search
Memory.search returns the turns that answer a question, within a token budget, ready to put in a prompt as data.
check.pypython
from llmslim.memory import Memory
memory = Memory("memory.db")
for question in ["What am I allergic to?", "Where did I move to?"]:
context = memory.search(question, user_id="asha", budget=60)
print(f"{question} ({context.tokens} of {context.history_tokens} tokens)\n{context.text}\n")
output (main; 0.12.0 repeats the date on each reply)text
What am I allergic to? (42 of 149 tokens)
[2026-10-17 (Sat) 08:30] user: I'm allergic to peanuts, so never suggest satay.
assistant: Understood: no peanuts, and no satay.
Where did I move to? (47 of 149 tokens)
[2026-10-03 (Sat) 06:12] user: I moved to Pune last month, to Koregaon Park.
assistant: Noted: you live in Pune now, in Koregaon Park.
Only messages come across. Zep's facts, entities, summaries and data added to a graph directly are not exported by this script; LLMSlim reads the messages themselves.
Your user ids are yours to choose: the script maps each of your users to their Zep user UUID, and stores turns under your id.
Re-run your own evaluation after switching. Our results cover two English benchmarks and one reader.
In the setup we ran, LLMSlim was ahead: on LoCoMo, 91.7% with no model against 74.4% for Graphiti (+17.3 points, 95% CI +14.8 to +19.7), and on Zep's 24 LongMemEval questions 87.5% against 58.3%. But we ran Graphiti, not Zep Cloud, with Claude Haiku 5.5 as every model, and Zep's own paper reports 71.2% on LongMemEval-S with GPT-4o. Zep also does things LLMSlim doesn't: graphs shared across users and sources, fact invalidation, and compliance options. These results are for LLMSlim Core 0.9.0; the 0.12 Memory API keeps less of the evidence on two-person conversations, a gap that is still open.
Can LLMSlim import my Zep data?+
Not directly: llmslim import has no Zep format. Export your threads' messages with Zep's SDK as JSON lines and import them with llmslim import jsonl (LLMSlim 1.0, or main from GitHub today), or with a Memory.add loop on 0.12.0. Facts and entities from Zep's graph don't come across; LLMSlim reads the messages themselves.
Can I self-host Zep instead?+
Zep's FAQ says Zep Community Edition is deprecated and no longer supported, and points to Zep Cloud, the open-source Graphiti framework, and BYOC deployments for enterprise customers. LLMSlim Core is self-hosted by default.
Does LLMSlim call an LLM?+
No. Storing and searching run no LLM. By default no model runs at all; relevance="semantic" adds a 22M-parameter cross-encoder that runs on your CPU.
Is LLMSlim affiliated with Zep?+
No. LLMSlim is an independent MIT-licensed project from AMEYOR. We ran Graphiti, Zep's open-source framework, through Zep's own benchmark harness; Zep did not run, review or endorse the comparison.
Can I reproduce the numbers?+
Yes. The splits, the scripts that ran Graphiti (zep_locomo.py and zep_lme.py) and every answer and judgement are in benchmarks/live/round3 in the public repository. All of round 3, every system and benchmark, cost $107.10 in Claude API calls.