Skip to main content

Comparison · Zep alternative

LLMSlim vs Zep. An honest comparison.

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.

AspectLLMSlimZep
What it storesEvery turn, word for word, under its date and scopeEach 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 addNoneLLM calls for each episode: extracting entities and facts, dating facts, resolving them against the graph, and summarizing entities
When a fact changesBoth turns stay, each under its date; since 0.12, search shows statements that may conflict side by sideA contradicting fact invalidates the older one, with valid_at and invalid_at times on each fact
How search worksRanks stored turns against the question by shared words, with no model, and returns them within a token budget; an optional 22M-parameter cross-encoder rescoresRetrieves a prompt-ready Context Block from the user's graph; Graphiti combines semantic, full-text and graph search
What you runOne Python package. Memory in SQLite (built into Python), Postgres or, from 1.0, MongoDBZep 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
InterfacesPython API, llmslim serve (HTTP), llmslim mcp (MCP server), a TypeScript clientPython, TypeScript and Go SDKs, a REST API, a Context MCP Server
ScopePer user, agent and sessionUser graphs, and shared Context Graphs across users, documents and business data, with access policies
LicenseMITZep Cloud: a commercial service. Graphiti: Apache-2.0. Zep Community Edition is deprecated
Hosted optionLLMSlim Orbit, opening with LLMSlim 1.0 (not available yet)Zep Cloud: Free, Flex, Flex Plus and Enterprise plans

What Zep is

What Zep is. From its own docs.

Zep

Zep docs: overview, How graph creation works

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.

Graphiti

getzep/graphiti on GitHub (Apache-2.0); Zep docs: Graphiti overview

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

SystemContext tokensAccuracy (95% CI)Cost per 1k questions
Full history, read from the prompt cache27,13395.1 (93.9–96.3)$0.83
LLMSlim 0.9 + reranker2,49593.0 (91.5–94.3)$0.95
LLMSlim 0.92,49291.7 (90.3–93.3)$0.89
Mem0, top 50 memories2,42591.0 (89.4–92.5)$2.66
RAG over turns (Qwen3-Embedding-0.6B)2,43085.2 (83.2–87.0)$0.90
Zep (Graphiti on Neo4j)2,73874.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

SystemContext tokensAccuracy (95% CI)Cost per 1k questions
Full history111,24391.7 (79.2–100.0)$90.22
LLMSlim 0.92,50187.5 (75.0–100.0)$0.94
LLMSlim 0.9 + reranker2,49887.5 (70.8–100.0)$1.01
Mem0, top 50 memories2,84487.5 (75.0–100.0)$219.48
RAG over turns (Qwen3-Embedding-0.6B)2,47483.3 (66.7–95.8)$3.28
Zep (Graphiti on Neo4j)2,05358.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

ComparisonBenchmark (questions)Difference (95% CI)Reading
LLMSlim vs ZepLoCoMo, 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 ZepLongMemEval-S, Zep's sample (24)+29.2 (+12.5, +45.8)Ahead
LLMSlim vs Zep, Mem0's more lenient judgeLongMemEval-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.

When to choose Zep

Cases where Zep is the better fit.

  • Shared, governed context across sources

    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
PlanPriceWhat it includes
FreeFree10,000 credits a month, for prototyping. Limits apply.
Flex$125 a month, billed monthly50,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 monthly200,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.
EnterpriseCustom (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.0Self-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)
PlanPriceWhat it includes
CoreFree, MITSelf-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 FreeFree1 project, 1,000 stored turns, 1,000 searches a month.
Orbit Pro$19 a month, or $190 a year3 projects, 250,000 stored turns, 100,000 searches a month.
Orbit Team$99 a month, or $990 a year10 projects, 2M stored turns, 1M searches a month, 5 seats included, then $15 per extra seat a month.
Orbit Business$399 a month, or $3,990 a yearUnlimited projects, 10M stored turns, 5M searches a month, 15 seats included.
Orbit EnterpriseCustomCustom limits, SAML SSO with SCIM, an SLA and a DPA.

Source: llmslim.app/pricing, which also lists the plans in rupees.

  • 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]"
terminalbash
llmslim import jsonl zep-history.jsonl --db memory.db
outputtext
  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.

Import your chat history (1.0 docs)

FAQ

Questions people ask before switching.

Is LLMSlim better than Zep?

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.

Sources