memoket-kite README

The project's README from github.com/memoket/memoket-kite. As one markdown file: README.md.

Memoket × KITE: the memory inside Memoket

Follow the thread, not the nearest match.

Open-source and vector-free, KITE achieves 🥇 93.51% on LoCoMo and 🥇 85.60% on LongMemEval-S, with gpt-4.1-mini used across all benchmark stages and an average reader context of only ~1.6K tokens per question.

Memoket website Join Memoket on Discord Follow Memoket on X Follow Memoket on Instagram Follow Memoket on Facebook


KITE at a glance: conversations become source-linked memory facts, memory settles under a governed topic map, a question compiles to an inspectable plan, and the answer arrives with receipts.

💡 Why KITE by Memoket

Most AI memory turns every sentence into a cloud of numbers and hands back whatever lands closest to your question. It always returns something, even when the answer was never there, and it cannot show you why.

KITE by Memoket reads what a question means, not how it sounds.

"Who's the decision-maker on the Henderson account now?"

Nothing in memory says decision-maker:

  • March. Marcus: "I'll sign off on Henderson."
  • June. The new VP of Ops: "Dana owns Henderson from here."

Both were filed under the same topic when they were written. Then now sorts them by date. Similarity has no notion of now: nearest-match memory rates March just as relevant and answers "Marcus", with nothing to tell you it is wrong. KITE answers "Dana", with the June line attached.

Nearest-match memory 🪁 KITE by Memoket
Finds whatever sounds like the question the facts that answer it
When it was never said returns something anyway comes back empty, and says so
Why this answer? a similarity score a readable plan, with who said it and when
Runtime stack embeddings · vector DB · rerankers one portable, topic-indexed file
Ask again tomorrow depends on the index that day the same plan walks the same steps

⚙️ How It Works

The whole idea in one line: conversations settle into facts under topics, and a question finds its topic and pulls that topic's memories, receipts included.

1 · Message → Fact

A user says, "I moved to Tokyo on July 26." KITE by Memoket extracts what happened and files it under its topics, keeping the original message as evidence:

<fact t="2026-07-26" kind="event" who="user"
      place="tokyo" event="move" src="chat1L1">
  The user moved to Tokyo on 26 July 2026.
</fact>
<line id="chat1L1" who="user">I moved to Tokyo on July 26.</line>

2 · Question → Plan

When the agent asks "Where does the user live now?", KITE by Memoket compiles the question into a plan you can read, validate, and cache:

{
  "select": "facts",
  "where": {"who": ["user"], "event": ["move"]},
  "pipe": [
    {"op": "sort", "key": "t", "desc": true},
    {"op": "head", "n": 1}
  ]
}

3 · Plan → Execution

The executor runs the plan over the topic index. Keywords and associations come first, then conditions filter down to the one moment that answers the question:

SEARCH facts
FILTER who = "user" AND event = "move"
SORT BY event_time DESC
TAKE 1

The same validated plan always follows the same steps over the same memory, with no embeddings and no vector database anywhere.

4 · Evidence → Answer

Answer: Tokyo
Source: chat1L1, "I moved to Tokyo on July 26."

Key Features

🚫 No vector stack

No embeddings, no vector database, no layers to embed, sort, and re-rank every result.

🗂️ Structured facts

Conversations crystallize into typed, dated, topic-indexed memory you can open and read.

🔍 Inspectable queries

Every question becomes a symbolic plan, revealing exactly how each answer was matched.

🕐 Time-aware retrieval

People, events, dates, and updates handled directly, so "now" means now.

🧾 Shows its work

Evidence links straight back to the moment it came from: who said it, when, and the actual words.

🤷 Knows what it doesn't know

When something was never said, the search comes back genuinely empty, and KITE says so.

🚀 Quick Start

1. Install and configure

python -m pip install memoket-kite
export OPENAI_API_KEY="sk-..."
mkdir -p artifacts
curl -fsSL \
  https://raw.githubusercontent.com/memoket/memoket-kite/main/examples/data/demo_codebook.xml \
  -o artifacts/quickstart.xml

Using another OpenAI-compatible provider? Set OPENAI_BASE_URL as well.

2. Remember

Turn a conversation into structured, source-backed facts:

from memoket_kite import Memory

memory = Memory.load("artifacts/quickstart.xml")
memory.remember(
    [{"role": "user", "content": "I moved to Tokyo."}],
    session_id="session_1",
)

3. Recall

Compile a question into a plan and retrieve matching facts, each carrying its sources:

from memoket_kite import Memory

memory = Memory.load("artifacts/quickstart.xml")

for fact in memory.recall("Where did the user move?"):
    print(fact.content)
    print(fact.sources)

4. Answer

Generate an answer from the retrieved evidence and keep the receipts:

from memoket_kite import Memory

memory = Memory.load("artifacts/quickstart.xml")

result = memory.answer_with_evidence("Where did the user move?")
print(result.text)  # "The user moved to Tokyo."
for fact in result.evidence:
    print(fact.content, fact.sources)  # the moments the answer stands on

print(memory.answer("Where did the user move?"))  # just the text

Full reference in docs/api.md; more runnable examples in examples/.

📊 Benchmark Results

KITE by Memoket posts the top overall score on both public long-conversation memory benchmarks. It is the only system up there that uses no vectors, and it reads less context than any capable rival.

Benchmark Overall Accuracy Avg. Reader Context
LoCoMo 🥇 93.51% 1.51k tokens
LongMemEval-S 🥇 85.60% 1.65k tokens

All systems are evaluated under one shared protocol, with gpt-4.1-mini as the common reader and judge; the exact rubrics are in the LoCoMo protocol and LongMemEval protocol. Reader context is the mean per-question evidence budget: what the reader actually gets to see, measured by the same ledger on every question.

Each figure comes from a reference run under the default configuration, with gpt-4.1-mini reading and judging and no ablation flags set. The reproduction contract pins the dataset revisions, protocols, model IDs, expected row counts, and reported scores. The provided scripts rebuild the evaluation locally from the official datasets with a configured compatible LLM endpoint.

How a local run is recorded

Every rebuilt run writes a local manifest naming the exact commit, corpus digest, tokenizer, and plan-cache digest it used. Judging records the answers, verdicts, and score in a second manifest keyed to the first. A completed run can validate that seal and recompute its metrics offline; the reference verifier also checks the manifest-declared paths, counts, and reported aggregate. Details are in the benchmark guide and reproducibility notes; the benchmark corpora keep their own licences, spelled out in LICENSE-DATA.md.

🔗 Integrations

KITE by Memoket is a plain Python library: three calls take you from a raw conversation to a cited answer. Integrations across the agent ecosystem (Claude Code, Codex, Cursor, OpenCode, and more) are next on the roadmap.

Want yours first? Tell us on Discord.

the string ties into Memoket

Download on the App Store    Get it on Google Play

✨ Experience KITE with Memoket

The memory you just read about ships today. KITE is the algorithm inside every Memoket: the same topic-filed facts, the same line back to the source, running on your own device. Ask it "didn't this client say their fiscal year ends in March?" months later, and it surfaces the exact moment: who said it, when, and in their words.

Memoket captures memories; KITE is the memory itself.

https://github.com/user-attachments/assets/685ac90d-95ab-4114-a7d3-c22ec3db94a0

See more of Memoket in action →

🤝 Community

📖 Citation

A technical report is in preparation; BibTeX will land here with the arXiv release. Until then, please cite this repository.

📄 License

KITE by Memoket is released under the Apache License 2.0.


Like its name, KITE by Memoket stays light enough to fly, always on a line back to the truth. 🪁

memoket-kite (memoket/memoket-kite)

Searching Database…

这是什么?KITE 是一个开源、无向量的 AI 代理长期记忆引擎:它把对话转化为按主题索引的结构化事实,用可审查的检索计划(而非嵌入相似度搜索)来回答问题,在 LoCoMo 和 LongMemEval 基准上名列第一。
这是独立应用,还是我在代码里调用的库?它是一个纯 Python 库,提供三步调用的工作流(remember、recall、answer),嵌入你自己的代理代码里使用,不是托管服务或图形界面应用。
怎么让它跑起来?安装并配置好之后,你调用三个步骤:Remember 把对话转化为结构化事实,Recall 把问题编译成计划并拉取匹配的事实,Answer 再根据这些证据生成带引用的回答。
用它需要 OpenAI API 密钥吗?需要。KITE 依赖一个 OpenAI 兼容的 LLM 端点来完成抽取和回答(公开的基准测试使用的是 gpt-4.1-mini),你也可以通过环境变量把它指向其他兼容服务商。
它已经能接入 Claude Code 或 Cursor 这类工具了吗?还没有;与 Claude Code、Codex、Cursor、OpenCode 等编码代理的直接集成被列为即将推出的路线图事项,所以目前你只能把它当作原始的 Python 库来用。
KITE 和典型的向量数据库记忆系统有什么不同?KITE 不用嵌入、向量存储和重排序器,而是抽取带类型、带日期、归档在主题下的事实,并用符号化、可读的检索计划来回答问题,因此它可以返回真正的空结果,而不是貌似合理的错误答案。
为什么它处理时效性问题比相似度搜索更好?同一主题下的事实按日期排序,所以当信息发生变化时(比如某个账户现在归谁所有),较新的事实胜出,而不是新旧条目按相似度得到同样高的相关性分数。
KITE 和 Memoket 是什么关系?KITE 是底层的检索算法;Memoket 是构建在它之上的消费级产品,在用户设备上本地运行同样的按主题归档、带来源链接的记忆。
这些基准数字的可复现性如何?每次运行都会写一个本地清单,记录所用的确切 commit、语料摘要、分词器和计划缓存摘要,另有第二个清单记录评审结果;参考校验器可以离线依据这些封存数据重新计算指标。
Creator
memoket
Size
19 MB
Stars
144
Age
2mo
Commits · 90 Days