[{"data":1,"prerenderedAt":622},["ShallowReactive",2],{"blog-zep-en":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":23,"sources":27,"cover":46,"og":47,"expertise":48,"locales":49,"lang":50,"title":53,"description":54,"coverAlt":55,"metaTitle":56,"takeaways":57,"faq":63,"toc":76,"blocks":101,"others":367},"zep","2026-10-06",11,"rag",[9,10,11,12,13],"Agent memory","Knowledge graph","Temporal graph","Context engineering","RAG",[15,16,17,18,19,20,21,22],"zep ai","zep agent memory","graphiti knowledge graph","zep pricing","zep vs mem0","long-term memory for agents","temporal knowledge graph","zep cloud",[24],{"name":25,"url":26},"Zep","https:\u002F\u002Fwww.getzep.com\u002F",[28,31,34,37,40,43],{"title":29,"url":30},"Zep pricing: plans, credits and limits","https:\u002F\u002Fwww.getzep.com\u002Fpricing",{"title":32,"url":33},"Zep documentation","https:\u002F\u002Fhelp.getzep.com\u002F",{"title":35,"url":36},"Graphiti on GitHub","https:\u002F\u002Fgithub.com\u002Fgetzep\u002Fgraphiti",{"title":38,"url":39},"Graphiti product page","https:\u002F\u002Fwww.getzep.com\u002Fplatform\u002Fgraphiti\u002F",{"title":41,"url":42},"Announcing a new direction for Zep's open-source strategy","https:\u002F\u002Fwww.getzep.com\u002Fblog\u002Fannouncing-a-new-direction-for-zeps-open-source-strategy\u002F",{"title":44,"url":45},"Graphiti: temporal knowledge graphs for AI agents (arXiv)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2501.13956","\u002Fimages\u002Fblog\u002Fzep\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fzep\u002Fog.jpg","ai-engineer",[50,51,52],"en","de","hu","Zep review: agent memory on a temporal graph","Zep is a hosted agent-memory API on a temporal knowledge graph: credits on writes, retrieval free, Flex from $125 a month, Graphiti as the part you can self-host.","Five circles in a zigzag chain with a branch, small squares dropping on each and discs below.","Zep review: memory, credits, self-hosting · Balázs Csorba",[58,59,60,61,62],"Zep is a hosted agent-memory API that stores facts in a temporal knowledge graph and returns the context an assistant should see on the next turn.","Credits are charged on writes only, one credit per episode up to 350 bytes, while retrieval, storage, threads and users are free.","Self-serve plans are Free with 10,000 credits, Flex at $125 for 50,000 credits and Flex Plus at $375 for 200,000, with SOC 2 Type II and a HIPAA BAA reserved for Enterprise.","Zep Community Edition was discontinued in April 2025, so Graphiti is the only part that can be self-hosted.","Extraction runs a model on every write, which makes cost a function of how talkative the agent is and makes extractor errors silently wrong context.",[64,67,70,73],{"q":65,"a":66},"How does Zep charge for usage?","By credits on writes: an episode up to 350 bytes costs one credit, a 640-byte episode costs two and a 1,200-byte episode costs four. Retrieval, storage, threads, users and graph storage cost nothing, so a read-heavy agent keeps running cheaply.",{"q":68,"a":69},"Can Zep be self-hosted?","Not as a product. Zep Community Edition was discontinued in April 2025 and its code sits in a legacy folder; Graphiti, the Apache-2.0 temporal graph library, can run locally, and the full service is available inside your own VPC only through the Enterprise tier.",{"q":71,"a":72},"How much does Zep cost?","The free tier gives 10,000 credits a month, Flex is $125 a month for 50,000 credits with overage at $25 per 10,000, and Flex Plus is $375 for 200,000 credits. Enterprise pricing is negotiated and adds SOC 2 Type II, a HIPAA BAA and deployment options.",{"q":74,"a":75},"What is the difference between Zep and a vector store for chat history?","A vector store returns what is textually similar, including superseded facts, while Zep stores entities and relations with validity windows, so retrieval can return what is true now and what changed. The trade-off is a model call on every write, and its mistakes become context.",[77,80,83,86,89,92,95,98],{"id":78,"title":79},"what-it-is","What it is",{"id":81,"title":82},"how-it-works","How it works",{"id":84,"title":85},"getting-started","Getting started",{"id":87,"title":88},"performance","Performance and cost",{"id":90,"title":91},"pricing","Pricing",{"id":93,"title":94},"where-it-shingles","Where it shingles",{"id":96,"title":97},"verdict","Verdict",{"id":99,"title":100},"sources","Sources",[102,110,113,116,136,154,155,158,167,170,171,174,176,179,186,187,190,238,241,249,252,253,256,266,267,270,315,318,324,325,328,341,345,346],{"type":103,"content":104},"paragraph",[105,106],"Zep is an agent-memory service: the application sends messages and facts, the service keeps a temporal knowledge graph per user, and each turn it returns the context an assistant should see next. ",{"tag":107,"children":108},"strong",[109],"It is the right purchase for a team whose agents fail because they forget, and the wrong one for a team that has to run everything itself, because the only self-hostable part is the Graphiti library.",{"type":103,"content":111},[112],"It sits between the application and the model, replacing hand-rolled summary buffers, vector stores full of old chat logs and the memory helpers inside LangChain and LlamaIndex. It competes with Mem0, with LangMem, with a Postgres table plus embeddings, and with the long-term memory endpoints the model vendors are adding; the difference is that Zep stores facts with a valid-from and valid-to time instead of a flat list of past messages.",{"type":114,"level":115,"id":78,"text":79},"heading",2,{"type":103,"content":117},[118,119,123,124,127,128,131,132,135],"The product is a managed API: ",{"tag":120,"children":121},"code",[122],"user.add"," for durable facts, ",{"tag":120,"children":125},[126],"thread.create"," and ",{"tag":120,"children":129},[130],"thread.add_messages"," for conversation, ",{"tag":120,"children":133},[134],"graph.get_user_context"," for retrieval. Ingestion is where the work happens, an extraction pass turns each episode into entities, relations and observations stamped with time, and retrieval assembles a context block together with the facts that support it. The open-source half is Graphiti, an Apache-2.0 library that performs the same temporal graph maintenance, including fact-level incremental updates rather than a nightly full re-index.",{"type":137,"ordered":138,"items":139},"list",false,[140,142,144,146,148,150,152],[141],"Licence and ownership: Graphiti is Apache-2.0 and maintained by Zep Software; the Zep memory service itself is a closed, hosted product.",[143],"Self-hosting: Zep Community Edition was discontinued in April 2025 and its code was moved to a legacy folder, so the graph engine can run locally while the full service cannot.",[145],"Metering: one credit per episode up to 350 bytes, one more per further 350 bytes or part thereof, and an eighth of a credit per webhook invocation.",[147],"Not metered: retrieval, storage, threads, users and graph storage cost nothing, so a read-heavy agent stays cheap to keep running.",[149],"Performance: the vendor reports p95 retrieval latency of 148 ms on a 10,000-node graph and 168 ms on a 100-million-node graph.",[151],"Benchmarks: vendor-reported 94.7% on LoCoMo and 90.2% on LongMemEval, two long-conversation memory benchmarks.",[153],"Deployment: cloud, cloud with customer-managed keys, or bring-your-own-cloud inside a customer VPC; SOC 2 Type II and a HIPAA BAA belong to the Enterprise tier.",{"type":114,"level":115,"id":81,"text":82},{"type":103,"content":156},[157],"Every message or fact sent is an episode. The extraction pass asks a model to identify entities and relations, writes them into the graph with a validity window, and touches only the nodes that episode affects: a correction closes the previous interval instead of overwriting it. Retrieval then walks the graph around the subject of the current question, takes the still-valid facts and the recent episodes, and returns a context string within a token budget.",{"type":159,"attrs":160,"inner":164,"caption":165},"diagram",{"viewBox":161,"role":162,"aria-labelledby":163},"0 0 760 300","img","d-zep-t d-zep-d","\u003Ctitle id=\"d-zep-t\">How a fact reaches the prompt\u003C\u002Ftitle>\u003Cdesc id=\"d-zep-d\">Messages and facts written by the application are extracted into a per-user context graph of entities and relationships, each with a validity window. On every turn the retrieval call walks that graph, skips superseded statements and returns a context block plus the supporting facts.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"ah-n\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\u003Cpath d=\"M0 0L10 5L0 10z\" class=\"d-head\" \u002F>\u003C\u002Fmarker>\u003Cmarker id=\"ah-na\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\u003Cpath d=\"M0 0L10 5L0 10z\" class=\"d-head-accent\" \u002F>\u003C\u002Fmarker>\u003C\u002Fdefs>\u003Crect x=\"270\" y=\"18\" width=\"220\" height=\"72\" rx=\"12\" class=\"d-accent\" \u002F>\u003Ctext x=\"380\" y=\"48\" text-anchor=\"middle\" class=\"d-text\">context graph\u003C\u002Ftext>\u003Ctext x=\"380\" y=\"72\" text-anchor=\"middle\" class=\"d-small\">entities and facts over time\u003C\u002Ftext>\u003Crect x=\"10\" y=\"188\" width=\"140\" height=\"54\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"80\" y=\"221\" text-anchor=\"middle\" class=\"d-text\">Alice\u003C\u002Ftext>\u003Crect x=\"200\" y=\"223\" width=\"140\" height=\"54\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"270\" y=\"256\" text-anchor=\"middle\" class=\"d-text\">CRM migration\u003C\u002Ftext>\u003Crect x=\"420\" y=\"223\" width=\"140\" height=\"54\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"490\" y=\"256\" text-anchor=\"middle\" class=\"d-text\">Snowflake\u003C\u002Ftext>\u003Crect x=\"610\" y=\"188\" width=\"140\" height=\"54\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"680\" y=\"221\" text-anchor=\"middle\" class=\"d-text\">Q3 deadline\u003C\u002Ftext>\u003Cpath d=\"M380 92 L80 181\" class=\"d-line\" marker-end=\"url(#ah-n)\" \u002F>\u003Cpath d=\"M380 92 L270 216\" class=\"d-line\" marker-end=\"url(#ah-n)\" \u002F>\u003Cpath d=\"M380 92 L490 216\" class=\"d-line\" marker-end=\"url(#ah-n)\" \u002F>\u003Cpath d=\"M380 92 L680 181\" class=\"d-line\" marker-end=\"url(#ah-n)\" \u002F>\u003Cpath d=\"M150 229 L196 245\" class=\"d-dash d-line\" \u002F>\u003Cpath d=\"M340 250 L416 250\" class=\"d-dash d-line\" \u002F>\u003Cpath d=\"M560 245 L606 229\" class=\"d-dash d-line\" \u002F>\u003Ctext x=\"380\" y=\"244\" text-anchor=\"middle\" class=\"d-small\">works on\u003C\u002Ftext>\u003Ctext x=\"380\" y=\"294\" text-anchor=\"middle\" class=\"d-small\">superseded by\u003C\u002Ftext>\u003Cpath d=\"M270 44 L214 44 L214 160 L80 160 L80 181\" class=\"d-line-accent\" marker-end=\"url(#ah-na)\" \u002F>\u003Ctext x=\"206\" y=\"120\" text-anchor=\"end\" class=\"d-small\">get_user_context\u003C\u002Ftext>",[166],"The graph is kept per user and per thread, and retrieval assembles a context block rather than a similarity-ranked list of chunks.",{"type":103,"content":168},[169],"The design choice that matters is temporal rather than vector. A fact has a lifetime, so the graph can answer what is true now, what changed and when, and which of two contradictory statements supersedes the other. A summarising buffer cannot do that without a second system, and pure vector retrieval returns whatever is textually similar, including the stale version of a fact corrected last week.",{"type":114,"level":115,"id":84,"text":85},{"type":103,"content":172},[173],"The hosted quickstart is four calls. The snippet below stores a fact, opens a thread, appends a message and asks for the context an assistant should receive.",{"type":120,"code":175},"from zep_cloud.client import Zep\n\nclient = Zep(api_key=\"zep-...\")\n\n# durable facts, extracted into the context graph\nclient.user.add(user_id=\"alice\", fact=\"Alice leads the migration off the legacy CRM\")\n\n# episodic history: writes are charged as credits by size, retrieval is free\nclient.thread.create(thread_id=\"t-1\", user_id=\"alice\")\nclient.thread.add_messages(\n    thread_id=\"t-1\",\n    messages=[{\"role\": \"user\", \"content\": \"Where did we stop on the CRM migration?\"}],\n)\n\n# what the assistant should see on this turn\ncontext = client.graph.get_user_context(user_id=\"alice\", max_facts=25)\nprint(context.context)",{"type":103,"content":177},[178],"Two things behave differently from a vector store. First, ingestion is asynchronous and charged, so the natural pattern is to send messages as they happen and read context once per turn. Second, retrieval returns prose with its supporting facts rather than chunk ids, which moves the summarisation decision out of your prompt and into the service; convenient, but the quality of what the model now sees is Zep's extraction quality as much as your own prompt.",{"type":180,"variant":181,"title":182,"body":183},"callout","tip","Memory writes are model calls",[184],[185],"Every episode is extracted by a model before it reaches the graph, so a chatty agent that dumps raw tool output burns credits and, more importantly, inherits whatever the extractor decides is a fact. Send messages rather than tool dumps, cap the facts retrieved per call, and read what the service believes about a user after the first hundred turns.",{"type":114,"level":115,"id":87,"text":88},{"type":103,"content":188},[189],"Cost is credits, and credits are bytes: a 700-byte message costs two credits, so Flex with 50,000 credits a month holds roughly 25,000 average-sized messages before overage at $25 per 10,000 credits. The unusual part is that retrieval is unmetered, because that is the call an agent makes every turn; the meter runs only when memory is written.",{"type":191,"head":192,"rows":201},"table",[193,195,197,199],[194],"Operation",[196],"Credit cost",[198],"Charged when",[200],"What to watch",[202,211,220,229],[203,205,207,209],[204],"Episode up to 350 bytes",[206],"1",[208],"On every write: message, fact or JSON payload",[210],"Raw tool output pasted into messages is the usual overrun",[212,214,216,218],[213],"Each further 350 bytes",[215],"+1",[217],"Per episode, rounded up",[219],"A 1,200-byte episode already costs 4 credits",[221,223,225,227],[222],"Webhook invocation",[224],"1\u002F8",[226],"Where webhooks are enabled",[228],"Chatty automations add up quietly",[230,232,234,236],[231],"Retrieval, storage, users",[233],"0",[235],"Never",[237],"Read-heavy agents stay cheap",{"type":103,"content":239},[240],"The self-serve plans are Free with 10,000 credits a month, Flex at $125 for 50,000 credits and Flex Plus at $375 for 200,000, with overage at $25 per 10,000 and $75 per 40,000 credits respectively. Latency figures are vendor-reported: p95 retrieval of 148 ms at 10,000 nodes and 168 ms at 100 million, which says the graph does not visibly degrade with size and says nothing about the latency of the extraction step that runs before it.",{"type":137,"ordered":138,"items":242},[243,245,247],[244],"Size the plan on writes rather than reads: messages a day, average bytes, times credits, times thirty.",[246],"Strip raw tool payloads before they become episodes; a summarised tool result costs a fraction of a transcript.",[248],"Set a fact budget on retrieval so the context block never grows into a system prompt nobody reads.",{"type":103,"content":250},[251],"None of that is unusual for a memory vendor, they all bill writes and promise cheap reads. The specific risk here is the extraction step, because whatever the extractor misses cannot be retrieved later: there is no second pass over the raw messages once they are reduced to facts.",{"type":114,"level":115,"id":90,"text":91},{"type":103,"content":254},[255],"The pricing page lists credit-based self-serve plans and a negotiated Enterprise tier. The paid entry point on the current page is Flex at $125 a month, and below it sits only the free tier; Enterprise adds custom credits, guaranteed rate limits and the compliance paperwork.",{"type":137,"ordered":138,"items":257},[258,260,262,264],[259],"Free: 10,000 credits a month, two projects, one Memory MCP server seat, variable rate limits, no rollover.",[261],"Flex: $125 a month for 50,000 credits, then $25 per 10,000, 600 requests per minute, five projects, 30-day rollover, community support.",[263],"Flex Plus: $375 a month for 200,000 credits, then $75 per 40,000, 1,000 requests per minute, observations, webhooks, analytics and seven-day API logs.",[265],"Enterprise: custom credits and rates, SOC 2 Type II, HIPAA BAA, one-year audit and API logs, DPA for EU customers, deployment inside your own VPC.",{"type":114,"level":115,"id":93,"text":94},{"type":103,"content":268},[269],"Start with the deployment weakness: since Community Edition was discontinued in April 2025, the graph engine, Graphiti, runs locally but the product does not, so an air-gapped or regulated deployment is an Enterprise conversation and the self-serve tiers do not include SOC 2 Type II or a BAA. Second, memory is only as good as the extraction, and the extraction is a model call, so a hallucinated relation or a missed update is not a queryable error but silently wrong context. Third, credit metering makes cost a function of how talkative the agent is rather than of how many users it serves. Fourth, a graph is a different debugging surface from a chat log: explaining why the model saw a fact requires the graph, not the transcript.",{"type":191,"head":271,"rows":279},[272,274,275,277],[273],"Tool",[79],[276],"Where it wins",[278],"What you give up",[280,288,297,306],[281,282,284,286],[25],[283],"Hosted memory API over a temporal context graph",[285],"Facts with validity windows and vendor-reported p95 under 170 ms",[287],"No self-hosted product, and every write costs credits",[289,291,293,295],[290],"Mem0",[292],"Open-source memory layer with a hosted option",[294],"Simpler API and a server you can run yourself",[296],"Flatter memory model with less temporal bookkeeping",[298,300,302,304],[299],"LangMem and LangGraph",[301],"Memory primitives inside a graph framework",[303],"Memory next to the agents and stores you already run",[305],"Storage, extraction and retrieval have to be assembled by you",[307,309,311,313],[308],"Postgres plus embeddings",[310],"Chat history in a table, similarity search over it",[312],"No new vendor and full control of the data",[314],"No temporal reasoning, so superseded facts stay retrievable",{"type":103,"content":316},[317],"The real question is whether forgetting is the failure mode. If agents repeat themselves, lose decisions between sessions or cannot say what changed, a graph with validity windows answers it directly. If retrieval keeps returning the wrong document, memory is the wrong layer altogether, and the same effort spent on chunking and reranking pays back sooner.",{"type":180,"variant":319,"title":320,"body":321},"warn","Poisoning is a memory problem",[322],[323],"One message, web page or document written into memory can shape every later session that reads it, which is why Zep published a post on defending agent memory against poisoning in September 2026. Treat writes as trusted input: scope them per user, restrict which sources are allowed to write facts, and keep the retrieval budget small enough that a poisoned fact cannot crowd out the system prompt.",{"type":114,"level":115,"id":96,"text":97},{"type":103,"content":326},[327],"Zep is a good product with a clear price of admission: it solves forgetting well, and what it costs is the ability to run the whole thing yourself. Teams shipping agents to paying users, where the visible failure is a customer being asked the same question twice, should take it. Teams with a data-residency constraint should build on Graphiti and own the service around it.",{"type":137,"ordered":329,"items":330},true,[331,333,335,337,339],[332],"Take it when agents fail by forgetting, and the failure shows up as repeated questions or decisions lost between sessions.",[334],"Take it when memory writes are human messages: the credit model is cheapest when episodes are short and infrequent.",[336],"Do not take it as a self-hosted deployment, since April 2025 only Graphiti is yours to run and everything around it lives in Zep's cloud.",[338],"Do not take it when retrieval quality rather than memory is the problem, because no memory layer fixes a bad index.",[340],"Budget the extraction step: every write is a model call, so cost tracks how verbose the agent is, not how many users it serves.",{"type":342,"content":343},"quote",[344],"Agent memory is a state-management problem wearing an AI costume: a graph that gives facts a lifetime is exactly what a summary buffer cannot provide, and the bill is a model call for every message you decide to remember.",{"type":114,"level":115,"id":99,"text":100},{"type":137,"ordered":329,"items":347},[348,352,355,358,361,364],[349],{"tag":350,"href":30,"children":351},"a",[29],[353],{"tag":350,"href":33,"children":354},[32],[356],{"tag":350,"href":36,"children":357},[35],[359],{"tag":350,"href":39,"children":360},[38],[362],{"tag":350,"href":42,"children":363},[41],[365],{"tag":350,"href":45,"children":366},[44],[368,443,503,561],{"slug":369,"published":370,"minutes":371,"category":7,"tags":372,"keywords":377,"about":390,"sources":400,"cover":437,"og":438,"expertise":48,"locales":439,"lang":50,"title":440,"description":441,"coverAlt":442},"embedding-model-selection-2026","2026-10-17",9,[373,13,374,375,376],"Embeddings","MTEB","Vector search","Model selection",[378,379,380,381,382,383,384,385,386,387,388,389],"best embedding model 2026","how to choose an embedding model","embedding model comparison","MTEB leaderboard explained","RTEB benchmark","open source embedding model","multilingual embedding model","voyage-4 vs openai embeddings","Qwen3-Embedding","EmbeddingGemma","embedding model for RAG","switching embedding models re-embed",[391,394,397],{"name":392,"url":393},"Word embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWord_embedding",{"name":395,"url":396},"Information retrieval","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInformation_retrieval",{"name":398,"url":399},"Discounted cumulative gain","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDiscounted_cumulative_gain",[401,404,407,410,413,416,419,422,425,428,431,434],{"title":402,"url":403},"Enevoldsen et al.: MMTEB, Massive Multilingual Text Embedding Benchmark (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.13595",{"title":405,"url":406},"Hugging Face: Introducing RTEB, a new standard for retrieval evaluation (Oct 2025)","https:\u002F\u002Fhuggingface.co\u002Fblog\u002Frteb",{"title":408,"url":409},"OpenAI: Vector embeddings guide","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fembeddings",{"title":411,"url":412},"OpenAI: API pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing",{"title":414,"url":415},"Voyage AI: The Voyage 4 model family, shared embedding space with MoE architecture (Jan 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F01\u002F15\u002Fvoyage-4\u002F",{"title":417,"url":418},"Voyage AI: Text embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fembeddings",{"title":420,"url":421},"Voyage AI: Pricing","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fpricing",{"title":423,"url":424},"Google: Gemini API embeddings documentation","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fembeddings",{"title":426,"url":427},"Google: Gemini API pricing","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fpricing",{"title":429,"url":430},"Cohere: Embed models documentation","https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Fcohere-embed",{"title":432,"url":433},"Qwen: Qwen3-Embedding-8B model card","https:\u002F\u002Fhuggingface.co\u002FQwen\u002FQwen3-Embedding-8B",{"title":435,"url":436},"Google Developers Blog: Introducing EmbeddingGemma (Sep 2025)","https:\u002F\u002Fdevelopers.googleblog.com\u002Fen\u002Fintroducing-embeddinggemma\u002F","\u002Fimages\u002Fblog\u002Fembedding-model-selection-2026\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fembedding-model-selection-2026\u002Fog.jpg",[50,51,52],"Choosing an embedding model in 2026: leaderboards, costs and a bake-off on your own data","How to pick an embedding model for RAG in 2026: what MTEB and RTEB tell you, hosted vs open weights, prices, dimensions, and a one-week bake-off.","Three columns of stacked blocks, the middle tallest, each measured by a short bar and a wide bracket.",{"slug":444,"published":370,"minutes":445,"category":7,"tags":446,"keywords":450,"about":462,"sources":472,"cover":497,"og":498,"expertise":48,"locales":499,"lang":50,"title":500,"description":501,"coverAlt":502},"contextual-retrieval-late-chunking",10,[13,447,373,448,449],"Chunking","Contextual retrieval","Late chunking",[451,452,453,454,455,456,457,458,459,460,461],"contextual retrieval","anthropic contextual retrieval","late chunking","contextual chunk embeddings","contextual embeddings rag","contextual bm25","chunk context rag","voyage-context-3","voyage-context-4","late chunking vs contextual retrieval","rag chunking context loss",[463,466,469],{"name":464,"url":465},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",{"name":467,"url":468},"Okapi BM25","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOkapi_BM25",{"name":470,"url":471},"Sentence embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSentence_embedding",[473,476,479,482,485,488,491,494],{"title":474,"url":475},"Anthropic: Introducing Contextual Retrieval (Sep 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fcontextual-retrieval",{"title":477,"url":478},"Günther et al.: Late Chunking, Contextual Chunk Embeddings Using Long-Context Embedding Models (2024, rev. 2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2409.04701",{"title":480,"url":481},"Jina AI: Late Chunking in Long-Context Embedding Models (Aug 2024)","https:\u002F\u002Fjina.ai\u002Fnews\u002Flate-chunking-in-long-context-embedding-models\u002F",{"title":483,"url":484},"Voyage AI: Introducing voyage-context-3 (Jul 2025)","https:\u002F\u002Fblog.voyageai.com\u002F2025\u002F07\u002F23\u002Fvoyage-context-3\u002F",{"title":486,"url":487},"Voyage AI: voyage-context-4 (Jun 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F06\u002F29\u002Fvoyage-context-4\u002F",{"title":489,"url":490},"Voyage AI: Contextualized chunk embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fcontextualized-chunk-embeddings",{"title":492,"url":493},"Anthropic: Claude API pricing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fabout-claude\u002Fpricing",{"title":495,"url":496},"Qu, Tu and Bao: Is Semantic Chunking Worth the Computational Cost? (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2410.13070","\u002Fimages\u002Fblog\u002Fcontextual-retrieval-late-chunking\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcontextual-retrieval-late-chunking\u002Fog.jpg",[50,51,52],"Contextual retrieval and late chunking: giving RAG chunks back their context","Chunks lose their document. How contextual retrieval, late chunking and contextualized embedding models fix that, what each costs, and when to skip it.","Four loose square pieces gathered by a wide bracket below, each joined upward to a large sheet.",{"slug":504,"published":370,"minutes":371,"category":7,"tags":505,"keywords":509,"about":522,"sources":530,"cover":555,"og":556,"expertise":48,"locales":557,"lang":50,"title":558,"description":559,"coverAlt":560},"rag-access-control-permissions",[13,506,507,508,375],"Access control","Security","Multi-tenancy",[510,511,512,513,514,515,516,517,518,519,520,521],"rag access control","permission aware rag","document level security rag","rag multi tenancy","vector database access control","pgvector row level security","security trimming azure ai search","openfga rag authorization","qdrant multitenancy","pinecone namespaces multitenancy","owasp llm08 vector and embedding weaknesses","rag data leakage",[523,526,529],{"name":524,"url":525},"Access-control list","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAccess-control_list",{"name":527,"url":528},"Multitenancy","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",{"name":464,"url":465},[531,534,537,540,543,546,549,552],{"title":532,"url":533},"OWASP GenAI Security Project: LLM08:2025 Vector and Embedding Weaknesses","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm082025-vector-and-embedding-weaknesses\u002F",{"title":535,"url":536},"PostgreSQL documentation: Row Security Policies","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-rowsecurity.html",{"title":538,"url":539},"pgvector README: filtering and iterative index scans","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector",{"title":541,"url":542},"Qdrant: Multitenancy and partitions guide","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fguides\u002Fmultiple-partitions\u002F",{"title":544,"url":545},"Pinecone: Implement multitenancy using namespaces","https:\u002F\u002Fdocs.pinecone.io\u002Fguides\u002Findex-data\u002Fimplement-multitenancy",{"title":547,"url":548},"Microsoft Learn: Document-level access control in Azure AI Search","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fsearch\u002Fsearch-document-level-access-overview",{"title":550,"url":551},"OpenFGA: RAG authorization use case","https:\u002F\u002Fopenfga.dev\u002Fdocs\u002Fuse-cases\u002Frag-authorization",{"title":553,"url":554},"Morris et al.: Text Embeddings Reveal (Almost) As Much As Text (EMNLP 2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2310.06816","\u002Fimages\u002Fblog\u002Frag-access-control-permissions\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frag-access-control-permissions\u002Fog.jpg",[50,51,52],"Access control for RAG: permission-aware retrieval without leaking documents","How RAG assistants leak documents and how to stop it: ACLs on every chunk, pre-filtering, row-level security in pgvector, permission sync and leak tests.","Seven cards in a row, six with a lock badge, one bare card sending an arrow outward.",{"slug":562,"published":370,"minutes":445,"category":7,"tags":563,"keywords":568,"about":580,"sources":588,"cover":615,"og":616,"expertise":617,"locales":618,"lang":50,"title":619,"description":620,"coverAlt":621},"rag-product-catalog-pim-data",[13,564,565,566,567],"PIM","Product data","B2B e-commerce","Metadata filtering",[569,570,571,572,573,574,575,576,577,578,579],"rag product catalog","rag pim data","llm product data","product catalog chatbot","akeneo rag","pimcore ai search","rag structured data","metadata filtering rag","product attributes embeddings","b2b product assistant","etim classification ai",[581,584,585],{"name":582,"url":583},"Product information management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_information_management",{"name":464,"url":465},{"name":586,"url":587},"ETIM (standard)","https:\u002F\u002Fwww.etim-international.com\u002Fclassification\u002F",[589,592,595,598,600,603,606,609,612],{"title":590,"url":591},"Akeneo API: Products, product values, metric values and product models","https:\u002F\u002Fapi.akeneo.com\u002Fconcepts\u002Fproducts.html",{"title":593,"url":594},"Akeneo Help Center: What about products with variants?","https:\u002F\u002Fhelp.akeneo.com\u002Fserenity-take-the-power-over-your-products\u002Fserenity-what-about-products-with-variants",{"title":596,"url":597},"Pimcore documentation: Classification Store","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore\u002FObjects\u002FObject_Classes\u002FData_Types\u002FClassification_Store\u002F",{"title":599,"url":587},"ETIM International: Classification",{"title":601,"url":602},"ETIM International: ETIM releases and the IXF format","https:\u002F\u002Fetim-international.com\u002F?p=754",{"title":604,"url":605},"Reddy et al.: Shopping Queries Dataset, a large-scale ESCI benchmark for improving product search (2022)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2206.06588",{"title":607,"url":608},"Amazon Science: esci-data repository","https:\u002F\u002Fgithub.com\u002Famazon-science\u002Fesci-data",{"title":610,"url":611},"Qdrant documentation: Filtering","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fconcepts\u002Ffiltering\u002F",{"title":613,"url":614},"Sui et al.: Table Meets LLM, can large language models understand structured table data? (WSDM 2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2305.13062","\u002Fimages\u002Fblog\u002Frag-product-catalog-pim-data\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frag-product-catalog-pim-data\u002Fog.jpg","b2b-ecommerce-developer",[50,51,52],"RAG over product catalogues: turning PIM data into answers that hold","Product data is structured, so chunking it like PDFs fails. How to serialize PIM attributes, route spec questions to filters and keep answers exact.","A frame of nine squares with tiny symbols, funnelling down to one card.",1792261155608]