Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
411 commits
Select commit Hold shift + click to select a range
9198b85
fix bugs: modify redis queue logics to make it run as expected
tangg555 Dec 2, 2025
4c10503
feat: add a default mem cube initialization for scheduler
tangg555 Dec 2, 2025
3ac309d
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 2, 2025
fb6ddc5
Merge remote-tracking branch 'upstream/scheduler' into dev
tangg555 Dec 2, 2025
fd34e9d
feat: timer add log args (#581)
CarltonXiang Dec 2, 2025
1579fab
Scheduler (#584)
tangg555 Dec 2, 2025
cc7bc86
address scheduler init bug
tangg555 Dec 3, 2025
c7ecdae
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 3, 2025
5d5023d
Scheduler: fix bugs due to init from env (#585)
tangg555 Dec 3, 2025
ea1358e
Fix: submit add for playground query (#586)
fridayL Dec 3, 2025
5994a27
feat(scheduler): Propagate trace_id across process boundaries for mem…
tangg555 Dec 3, 2025
bd19c4c
fix bugs: redis queue allows to reget pending tasks which exceeding i…
tangg555 Dec 3, 2025
3fd189f
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 3, 2025
c7090c8
fix(scheduler): Correct lazy-loading logic for mem_cube property
Dec 3, 2025
30109f6
Add MONITOR_EVENT logs for scheduler lifecycle
Dec 3, 2025
15adf59
Feat/add model log (#595)
CarltonXiang Dec 3, 2025
5850d7a
fix: Resolve Ruff linting and formatting issues
Dec 3, 2025
52dfe47
Scheduler: new feat to addressed repeated task issues (#594)
tangg555 Dec 3, 2025
9febb1d
feat: split chunk for pure string (#593)
CaralHsi Dec 3, 2025
57c45dc
Handle dequeue timestamp without pydantic errors
Dec 3, 2025
3311832
Fix dequeue timestamp logging for pydantic models (#596)
glin93 Dec 3, 2025
36d0ba0
feat: Feedback Function (#597)
whipser030 Dec 3, 2025
4dd7f76
Feat/tool memory (#583)
Wang-Daoji Dec 3, 2025
159c47e
Hotfix/cloud log handler (#598)
glin93 Dec 3, 2025
dfff010
fix(scheduler): Correctly process feedback logs by checking for 'text…
glin93 Dec 3, 2025
722d445
chore(feedback): propagate source_doc_id in KB logs if available (#601)
glin93 Dec 3, 2025
4a8edb3
feat: add delete memory log; fix decode sources (#599)
CaralHsi Dec 4, 2025
73e8a22
Feat/tool memory (#603)
Wang-Daoji Dec 4, 2025
53aa48c
fix: feedback messages (#604)
whipser030 Dec 4, 2025
07a8994
fix: input Pydantic bug (#602)
CaralHsi Dec 4, 2025
8cc4199
Feat/fix palyground bug (#605)
Wang-Daoji Dec 4, 2025
9833254
feat(scheduler): Unify web log submission checks and add debug logs (…
glin93 Dec 4, 2025
1727070
Feat: add document for memory extract (#606)
fridayL Dec 4, 2025
7ed1f42
feat: orchestrator add task priority; move task labels into task_sche…
tangg555 Dec 4, 2025
316864b
Feat/time status (#608)
CarltonXiang Dec 4, 2025
b88657b
Feat: add file in info (#611)
fridayL Dec 4, 2025
b327ea7
Feat: remove reqiumentxt (#612)
fridayL Dec 4, 2025
3b927e2
feat: more logs for debug
tangg555 Dec 4, 2025
b56f57a
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 4, 2025
4e65f58
fix bugs: addresss some bugs
tangg555 Dec 4, 2025
d3dd54d
refactor: remove logger info in pref add function
tangg555 Dec 4, 2025
3f99afd
Scheduler: new feat about orchestrator task schedule (#614)
tangg555 Dec 4, 2025
8b5f796
fix file_ids (#615)
wustzdy Dec 4, 2025
a72384b
Feat/fix palyground bug (#613)
Wang-Daoji Dec 4, 2025
0f5f2ef
Feat/sources (#616)
CaralHsi Dec 4, 2025
111b4d4
feat: add file ids (#617)
fridayL Dec 4, 2025
98fa2b5
Feat: reorgnaize chunk code and use markdown chunker (#618)
fridayL Dec 4, 2025
926a8b1
feat: Fix inconsistent trace_id in scheduler dequeue logs (#619)
glin93 Dec 4, 2025
b839d18
feat: Improve MultiModalStructMemReader: Better Language Detection, P…
CaralHsi Dec 4, 2025
9be93fb
refactor: change redis queue to periodically refresh pending tasks
tangg555 Dec 5, 2025
7866f21
Fix/mem feedback tracking and all status checking (#622)
glin93 Dec 5, 2025
a52a9e8
Feat/fix palyground bug (#621)
Wang-Daoji Dec 5, 2025
6f66aef
Dev zdy 1205 (#623)
wustzdy Dec 5, 2025
41ea8b7
feat: a faster and better redis queue
tangg555 Dec 5, 2025
99f61f3
refactor: remove cleanup in redis queue
tangg555 Dec 5, 2025
8984d2e
Fix scheduler memory get with user_name and retries (#624)
glin93 Dec 5, 2025
da74cb7
Fix: Populate source_doc_id in memory metadata for scheduler logging …
glin93 Dec 6, 2025
5a396b6
Feat/fix palyground bug (#626)
Wang-Daoji Dec 7, 2025
d03f960
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 7, 2025
f892678
feat: allow directly execute task if task priority is level 1
tangg555 Dec 7, 2025
178cb09
feat: reverted code and add memory_type (#627)
fridayL Dec 7, 2025
4746f2a
Feat/fix palyground bug (#629)
Wang-Daoji Dec 7, 2025
0a522b3
refactor: refactor log_add_handler and redis queue to make the code r…
tangg555 Dec 7, 2025
3280f25
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 7, 2025
1ddfe9c
fix bugs: fix the bug in _process_chat_data
tangg555 Dec 7, 2025
2a10311
fix: use message item_id for task status updates instead of execution id
Dec 7, 2025
d18a917
style: format dispatcher.py with ruff
Dec 7, 2025
8d4c854
chore: emit dequeue for immediate tasks
Dec 7, 2025
6476442
fix: resolve ruff UP038 in base_scheduler.py
Dec 7, 2025
257b7f6
feat: add scheduler queue status endpoint
Dec 7, 2025
6048b2b
fix: lazy-init redis in queue status handler
Dec 7, 2025
5679474
feat: a range of new feats to make a better redis scheduler (#630)
tangg555 Dec 7, 2025
4d9cef4
fix: unwrap queue wrapper for redis status
Dec 7, 2025
248e86a
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 7, 2025
5d83f7c
Merge remote-tracking branch 'upstream/scheduler' into dev
tangg555 Dec 7, 2025
cd524c2
merge latest dev and pr (#632)
tangg555 Dec 7, 2025
1682e6e
fix: preserve stream key on redis dequeue
Dec 7, 2025
c6cabf5
Feat/evaluation doc qa (#634)
CaralHsi Dec 7, 2025
f5eae2f
fix get_subgraph (#633)
wustzdy Dec 7, 2025
4231c89
patch: The supplementary catch-all method for polardb keyword search …
whipser030 Dec 7, 2025
8be6f34
Feat: add sources chunk content (#639)
fridayL Dec 7, 2025
65bad8f
Fix/trace id align (#637)
glin93 Dec 7, 2025
7027bbd
Feat/merge main log (#638)
CarltonXiang Dec 7, 2025
85a3b9b
feat: file info
Dec 7, 2025
65573f1
Fix/file source (#640)
glin93 Dec 7, 2025
f6eeff9
Feat/evaluation doc qa (#636)
CaralHsi Dec 7, 2025
dce178f
fix bugs: fix a bug causing no schedule memory
tangg555 Dec 7, 2025
73a190e
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 7, 2025
eb60331
Handle special characters (#643)
wustzdy Dec 7, 2025
2998969
feat:add doc source reranker (#642)
fridayL Dec 7, 2025
0e0dcb5
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 8, 2025
3206a67
fix bugs: fix bugs in memory schedule (#641)
tangg555 Dec 8, 2025
1f3606f
Feat/fix palyground bug (#644)
Wang-Daoji Dec 8, 2025
c8500ec
feat: Enhance File Parsing Pipeline with Chunk-Level Source Tracking …
CaralHsi Dec 8, 2025
f776ee0
optimize (#646)
wustzdy Dec 8, 2025
75e9d33
Feat/fix palyground bug (#647)
Wang-Daoji Dec 8, 2025
7b9db93
feat: add a new env variable to set stream_prefix in redis; make add …
tangg555 Dec 8, 2025
e0f2be5
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 8, 2025
dc69cb2
Feat/evaluation doc qa (#649)
CaralHsi Dec 8, 2025
f95e3ba
fix bugs: update start_listening in redis_queue
tangg555 Dec 8, 2025
43faee0
new feat: add enhancement and env variable for scheduler (#650)
tangg555 Dec 8, 2025
b44d6a7
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 8, 2025
b1237d6
refactor: revise polardb and scheduelr init
tangg555 Dec 8, 2025
6f32006
feat: add file_info for file parser (#651)
fridayL Dec 8, 2025
1923128
Feat/monitor event new filed (#653)
glin93 Dec 8, 2025
ce144f4
Merge branch 'dev' into scheduler
fridayL Dec 8, 2025
aec6d19
refactor scheduler and polardb (#652)
tangg555 Dec 8, 2025
7fa718b
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 8, 2025
c94792d
feat: image parse in file (#654)
CaralHsi Dec 8, 2025
ad97277
fix:remove macos-13 test (#657)
fridayL Dec 9, 2025
3d5a6e5
Feat/task message (#656)
glin93 Dec 9, 2025
275ddc8
add nodes batch (#658)
wustzdy Dec 9, 2025
35b192f
optimize add batch (#661)
wustzdy Dec 9, 2025
e7b4ea4
Feat/fix palyground bug (#655)
Wang-Daoji Dec 9, 2025
b6efb0c
Feat/fix palyground bug (#662)
Wang-Daoji Dec 9, 2025
9487eb6
feat: time task_broker; add a hallucination filter for simple struct add
tangg555 Dec 9, 2025
04b1007
feat: Pass source_doc_id in task completion logs (#664)
glin93 Dec 9, 2025
5f7505f
Feat/evaluation doc qa (#660)
CaralHsi Dec 9, 2025
485c44e
Fix(rabbitmq): Handle exchange and routing key based on cloud env for…
glin93 Dec 9, 2025
b491631
Feat/fix palyground bug (#665)
Wang-Daoji Dec 9, 2025
cecdc66
dix delete quota (#666)
wustzdy Dec 9, 2025
d70239b
feat & fix bugs: redis scheduler support periodically refresh active …
tangg555 Dec 9, 2025
2aba3f5
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 9, 2025
b229d28
Merge remote-tracking branch 'upstream/scheduler' into dev
tangg555 Dec 9, 2025
1b16ca9
fix quote (#670)
wustzdy Dec 9, 2025
216efbd
fix redis key (#672)
wustzdy Dec 9, 2025
23137c6
refactor: revise the code according to llm suggestions
tangg555 Dec 9, 2025
15ac0a2
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 9, 2025
b03d26e
address ruff
tangg555 Dec 9, 2025
ab6de77
Feat/fix palyground bug (#673)
Wang-Daoji Dec 9, 2025
bf8a0be
modify examples
tangg555 Dec 9, 2025
705ea33
Merge branch 'dev' into scheduler
glin93 Dec 9, 2025
12342fb
feat: process chunks from redis streams
tangg555 Dec 9, 2025
b33fc30
Merge remote-tracking branch 'upstream/scheduler' into dev
tangg555 Dec 9, 2025
5e0b177
fix: fix ids for memory (#674)
fridayL Dec 9, 2025
87e2fef
refactor: update add operation
tangg555 Dec 9, 2025
259fda2
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 9, 2025
5b76b01
fix: init feedback failed (#675)
whipser030 Dec 9, 2025
675ddde
Merge branch 'dev' into scheduler
tangg555 Dec 9, 2025
2d6b8de
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 9, 2025
d3e2d3b
new feat of scheduler (#669)
tangg555 Dec 9, 2025
d339765
feat: status_tracker support lazy init
tangg555 Dec 9, 2025
be93ea0
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 9, 2025
7948b10
Merge remote-tracking branch 'upstream/scheduler' into dev
tangg555 Dec 9, 2025
321f843
new feat for status tracker (#676)
tangg555 Dec 9, 2025
2e6c0aa
Feat: set add memory batch (#678)
fridayL Dec 10, 2025
d76d56c
feat: add bs params (#679)
fridayL Dec 10, 2025
3edd095
optimize pool (#681)
wustzdy Dec 10, 2025
e46c805
Feat/fix palyground bug (#680)
Wang-Daoji Dec 10, 2025
d42a7ce
Revert "optimize pool" (#682)
tangg555 Dec 10, 2025
9ac19a1
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 10, 2025
bb69318
feat: delete require pkg
Dec 10, 2025
4d9aa5b
Feat/fix palyground bug (#683)
Wang-Daoji Dec 10, 2025
7a9836f
Feat/fix palyground bug (#684)
Wang-Daoji Dec 10, 2025
ae8e260
refactor: improve scheduler
tangg555 Dec 10, 2025
940f753
Feat: feedback add strict info filter (#685)
whipser030 Dec 11, 2025
3009b73
Feat/fix palyground bug (#687)
Wang-Daoji Dec 11, 2025
1bf0215
Feat/fix palyground bug (#688)
Wang-Daoji Dec 11, 2025
efca186
optimize pool (#686)
wustzdy Dec 11, 2025
0bae890
Feat/fix palyground bug (#689)
Wang-Daoji Dec 11, 2025
6181fe8
fix bugs: rewrite retriever.search and resolve the json wrong decodin…
tangg555 Dec 11, 2025
48bbe92
Feat/fix palyground bug (#690)
Wang-Daoji Dec 11, 2025
ef67c6f
Feat/fix palyground bug (#691)
Wang-Daoji Dec 11, 2025
82d860f
refactor: revise add
tangg555 Dec 11, 2025
25a62e2
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 11, 2025
610ac8c
Feat/fix palyground bug (#693)
Wang-Daoji Dec 11, 2025
3b328a1
Merge branch 'dev' into scheduler
tangg555 Dec 11, 2025
e9e4fb0
Scheduler: a range of bugs fixture and new features (#692)
tangg555 Dec 11, 2025
6b80e7f
feat: update prompt for playground (#694)
fridayL Dec 11, 2025
836f373
refactor: more logs and revision of simple struct
tangg555 Dec 11, 2025
40d0f6d
Feat/update prompt (#696)
fridayL Dec 11, 2025
ca5eb4f
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 11, 2025
fe17378
Merge remote-tracking branch 'upstream/scheduler' into dev
tangg555 Dec 11, 2025
cc3b8b9
address ruff
tangg555 Dec 11, 2025
ab3131a
address ruff
tangg555 Dec 11, 2025
d210235
Scheduler: more logs and revision of add (#697)
tangg555 Dec 11, 2025
cb64336
Feat/update prompt (#698)
fridayL Dec 11, 2025
cbcf33b
Fix/timer log (#677)
CarltonXiang Dec 12, 2025
87e1833
fix Special characters (#700)
wustzdy Dec 12, 2025
38b495e
Feat/fix palyground bug (#701)
Wang-Daoji Dec 12, 2025
87160f3
add polardb pool config (#702)
wustzdy Dec 12, 2025
81ac660
fix bugs and refactor: revise add api
tangg555 Dec 12, 2025
4d53d7e
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 12, 2025
d7923e4
fix bugs: logger error
tangg555 Dec 12, 2025
9d426bb
fix: embedding fail need a safety way (#704)
whipser030 Dec 12, 2025
2f8d627
feat: Relax cloud env check to support any non-empty MEMSCHEDULER_RAB…
glin93 Dec 15, 2025
2639279
Fix cloud playground env detection (#707)
glin93 Dec 15, 2025
cdc1754
Feat/fix palyground bug (#708)
Wang-Daoji Dec 15, 2025
4338bd9
Feat/fix palyground bug (#709)
Wang-Daoji Dec 15, 2025
35bc424
Feat/fix palyground bug (#710)
Wang-Daoji Dec 16, 2025
d64cf2f
Feat/fix palyground bug (#711)
Wang-Daoji Dec 16, 2025
f333888
Patch: deduplicate add objects (#714)
whipser030 Dec 16, 2025
1a2ef2f
optimize (#712)
wustzdy Dec 16, 2025
0263c5a
Fix/rabbitmq publish cache (#713)
glin93 Dec 16, 2025
801a5d7
Revert "Fix/rabbitmq publish cache" (#719)
CaralHsi Dec 17, 2025
a827c7f
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 17, 2025
ed31a3d
Fix/rabbitmq publish cache (#720)
glin93 Dec 17, 2025
b999ff3
Patch: use manager _add_memories_parallel (#721)
whipser030 Dec 17, 2025
59efc4f
optimize (#717)
wustzdy Dec 17, 2025
b1efa60
Fix search dedup to remove duplicate memory content (#722)
glin93 Dec 17, 2025
4e2d87f
fix: delete special charactors (#724)
whipser030 Dec 17, 2025
8ea4828
feat: update evaluation; add general string parser (#715)
CaralHsi Dec 17, 2025
36b0b29
patch:deduplicate add items (#725)
whipser030 Dec 17, 2025
a82149f
Feat/fix palyground bug (#718)
Wang-Daoji Dec 17, 2025
3c01d1e
Feat: include embedding config (#726)
fridayL Dec 17, 2025
9de723b
Feat/fix palyground bug (#727)
Wang-Daoji Dec 17, 2025
0b4b74f
Feat/fix palyground bug (#729)
Wang-Daoji Dec 17, 2025
ea3ac85
feat & fix bugs: revise fine add functions and fix bugs of claiming p…
tangg555 Dec 17, 2025
2b60979
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 17, 2025
8ee783e
fix: add source_doc_id record (#728)
whipser030 Dec 17, 2025
aaa88ec
Merge branch 'dev' into scheduler
tangg555 Dec 17, 2025
4dcbcac
Scheduler: improve add apis (#703)
tangg555 Dec 17, 2025
361bbc9
add log (#730)
wustzdy Dec 17, 2025
ee266b2
refactor: address log issue
tangg555 Dec 17, 2025
93b2b4d
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 17, 2025
522432d
Scheduler: address log issue (#731)
tangg555 Dec 17, 2025
f63470d
refactor: optimize memory update
tangg555 Dec 17, 2025
4c3da0a
Merge branch 'dev' into scheduler
tangg555 Dec 17, 2025
7e8ae7c
Feat:update embedding (#732)
fridayL Dec 17, 2025
ee05597
Merge branch 'dev' into scheduler
tangg555 Dec 17, 2025
95ac663
scheduler: fix replace_working_memory problem (#734)
tangg555 Dec 17, 2025
32af4eb
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 17, 2025
48d726a
remove DETACH (#736)
wustzdy Dec 17, 2025
ed29947
Feat: change pref deafult reranker (#735)
fridayL Dec 18, 2025
d65e70d
feat: more proper lang in multi-modal parser (#733)
CaralHsi Dec 18, 2025
666698d
update delete from cypher to delete (#737)
wustzdy Dec 18, 2025
7c4db5c
refactor: revise _submit_web_logs to address log missing issue
tangg555 Dec 18, 2025
58fd663
Merge remote-tracking branch 'upstream/dev' into dev
tangg555 Dec 18, 2025
1a6ef9b
Feature/remove web log queue v2 (#741)
glin93 Dec 18, 2025
9fa93db
fix: add reranker to init components (#739)
whipser030 Dec 18, 2025
563f846
revert: remove create log item_id inheritance (#743)
glin93 Dec 18, 2025
35a69b0
Scheduler: try to fix bugs (#745)
tangg555 Dec 18, 2025
445f7b9
Scheduler: fix bugs in log (#746)
tangg555 Dec 18, 2025
05d5045
Scheduler (#747)
tangg555 Dec 18, 2025
bb44553
Scheduler: fix bugs (#750)
tangg555 Dec 18, 2025
eb3c4f2
Scheduler (#751)
tangg555 Dec 22, 2025
00a1f04
Feat/timer debug (#753)
CarltonXiang Dec 22, 2025
15b475b
fix: time bug (#758)
CaralHsi Dec 22, 2025
c30feee
Dev zdy 1221 01 user names (#759)
wustzdy Dec 23, 2025
e93eb02
Fix: search time cost (#752)
fridayL Dec 23, 2025
1572fb5
Patch: add feedback post process, llm judge update validality (#761)
whipser030 Dec 23, 2025
c716d1a
fix: interface SDK (#760)
zZhangSir Dec 23, 2025
4c6a114
feat: add openai request body log (#763)
CarltonXiang Dec 24, 2025
4f02be4
Feat: change deafult memos cube (#765)
fridayL Dec 24, 2025
1e7b1bd
feat: update openapi.json
Dec 24, 2025
ddb5cac
feat: update api.json
Dec 24, 2025
c65593d
update readme (#766)
tangbotony Dec 24, 2025
2dcf1af
Feat/config deafult (#768)
fridayL Dec 24, 2025
0b31448
Merge branch 'sync_main' into dev_new_update
fridayL Dec 24, 2025
2f10198
change version
fridayL Dec 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/python-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ jobs:
os:
- "ubuntu-latest"
- "windows-latest"
- "macos-13"
- "macos-14"
- "macos-15"
# Ref: https://docs.github.com/en/actions/how-tos/writing-workflows/choosing-where-your-workflow-runs/choosing-the-runner-for-a-job
Expand Down
21 changes: 18 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@
MemOS is an open-source **Agent Memory framework** that empowers AI agents with **long-term memory, personality consistency, and contextual recall**. It enables agents to **remember past interactions**, **learn over time**, and **build evolving identities** across sessions.

Designed for **AI companions, role-playing NPCs, and multi-agent systems**, MemOS provides a unified API for **memory representation, retrieval, and update** — making it the foundation for next-generation **memory-augmented AI agents**.

🆕 **MemOS 2.0** introduces **knowledge base system**, **multi-modal memory** (images & documents), **tool memory** for Agent optimization, **memory feedback mechanism** for precise control, and **enterprise-grade architecture** with Redis Streams scheduler and advanced DB optimizations.
<div align="center">
<a href="https://memos.openmem.net/">
<img src="https://statics.memtensor.com.cn/memos/memos-banner.gif" alt="MemOS Banner">
</a>

<h1 align="center">
<img src="https://statics.memtensor.com.cn/logo/memos_color_m.png" alt="MemOS Logo" width="50"/> MemOS 1.0: 星河 (Stellar) <img src="https://img.shields.io/badge/status-Preview-blue" alt="Preview Badge"/>
<img src="https://statics.memtensor.com.cn/logo/memos_color_m.png" alt="MemOS Logo" width="50"/> MemOS 2.0: 星尘(Stardust) <img src="https://img.shields.io/badge/status-Preview-blue" alt="Preview Badge"/>
</h1>

<p>
Expand Down Expand Up @@ -60,7 +62,7 @@ Get Free API: [Try API](https://memos-dashboard.openmem.net/quickstart/?source=g

<img src="https://cdn.memtensor.com.cn/img/1762436050812_3tgird_compressed.png" alt="SOTA SCORE">

**MemOS** is an operating system for Large Language Models (LLMs) that enhances them with long-term memory capabilities. It allows LLMs to store, retrieve, and manage information, enabling more context-aware, consistent, and personalized interactions.
**MemOS** is an operating system for Large Language Models (LLMs) that enhances them with long-term memory capabilities. It allows LLMs to store, retrieve, and manage information, enabling more context-aware, consistent, and personalized interactions. **MemOS 2.0** features comprehensive knowledge base management, multi-modal memory support, tool memory for Agent enhancement, and enterprise-grade architecture optimizations.

- **Website**: https://memos.openmem.net/
- **Documentation**: https://memos-docs.openmem.net/home/overview/
Expand All @@ -71,7 +73,8 @@ Get Free API: [Try API](https://memos-dashboard.openmem.net/quickstart/?source=g

Stay up to date with the latest MemOS announcements, releases, and community highlights.


- **2025-12-24** - 🎉 **MemOS v2.0: Stardust (星尘) Release**:
Major upgrade featuring comprehensive Knowledge Base system with automatic document/URL parsing and cross-project sharing; Memory feedback mechanism for correction and precise deletion; Multi-modal memory supporting images and charts; Tool Memory to enhance Agent planning; Full architecture upgrade with Redis Streams multi-level queue scheduler and DB optimizations; New streaming/non-streaming Chat interfaces; Complete MCP upgrade; Lightweight deployment modes (quick & full).
- **2025-11-06** - 🎉 MemOS v1.1.3 (Async Memory & Preference):
Millisecond-level async memory add (support plain-text-memory and
preference memory); enhanced BM25, graph recall, and mixture search; full
Expand Down Expand Up @@ -114,7 +117,19 @@ showcasing its capabilities in **information extraction**, **temporal and cross-
- **Textual Memory**: For storing and retrieving unstructured or structured text knowledge.
- **Activation Memory**: Caches key-value pairs (`KVCacheMemory`) to accelerate LLM inference and context reuse.
- **Parametric Memory**: Stores model adaptation parameters (e.g., LoRA weights).
- **Tool Memory** 🆕: Records Agent tool call trajectories and experiences to improve planning capabilities.
- **📚 Knowledge Base System** 🆕: Build multi-dimensional knowledge bases with automatic document/URL parsing, splitting, and cross-project sharing capabilities.
- **🔧 Memory Controllability** 🆕:
- **Feedback Mechanism**: Use `add_feedback` API to correct, supplement, or replace existing memories with natural language.
- **Precise Deletion**: Delete specific memories by User ID or Memory ID via API or MCP tools.
- **👁️ Multi-Modal Support** 🆕: Support for image understanding and memory, including chart parsing in documents.
- **⚡ Advanced Architecture**:
- **DB Optimization**: Enhanced connection management and batch insertion for high-concurrency scenarios.
- **Advanced Retrieval**: Custom tag and info field filtering with complex logical operations.
- **Redis Streams Scheduler**: Multi-level queue architecture with intelligent orchestration for fair multi-tenant scheduling.
- **Stream & Non-Stream Chat**: Ready-to-use streaming and non-streaming chat interfaces.
- **🔌 Extensible**: Easily extend and customize memory modules, data sources, and LLM integrations.
- **🏂 Lightweight Deployment** 🆕: Support for quick mode and complete mode deployment options.

## 🚀 Getting Started

Expand Down
10 changes: 4 additions & 6 deletions docker/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ OLLAMA_API_BASE=http://localhost:11434 # required when backend=ollama
MOS_RERANKER_BACKEND=http_bge # http_bge | http_bge_strategy | cosine_local
MOS_RERANKER_URL=http://localhost:8001 # required when backend=http_bge*
MOS_RERANKER_MODEL=bge-reranker-v2-m3 # siliconflow → use BAAI/bge-reranker-v2-m3
MOS_RERANKER_HEADERS_EXTRA= # extra headers, JSON string
MOS_RERANKER_HEADERS_EXTRA= # extra headers, JSON string, e.g. {"Authorization":"Bearer your_token"}
MOS_RERANKER_STRATEGY=single_turn
MOS_RERANK_SOURCE= # optional rerank scope, e.g., history/stream/custom

Expand Down Expand Up @@ -93,6 +93,9 @@ NEO4J_DB_NAME=neo4j # required for shared-db mode
MOS_NEO4J_SHARED_DB=false
QDRANT_HOST=localhost
QDRANT_PORT=6333
# For Qdrant Cloud / remote endpoint (takes priority if set):
QDRANT_URL=your_qdrant_url
QDRANT_API_KEY=your_qdrant_key
MILVUS_URI=http://localhost:19530 # required when ENABLE_PREFERENCE_MEMORY=true
MILVUS_USER_NAME=root # same as above
MILVUS_PASSWORD=12345678 # same as above
Expand Down Expand Up @@ -164,11 +167,6 @@ OSS_ACCESS_KEY_ID=
OSS_ACCESS_KEY_SECRET=
OSS_PUBLIC_BASE_URL=

## Logging / external sink
CUSTOM_LOGGER_URL=
CUSTOM_LOGGER_TOKEN=
CUSTOM_LOGGER_WORKERS=2

## SDK / external client
MEMOS_API_KEY=
MEMOS_BASE_URL=https://memos.memtensor.cn/api/openmem/v1
4 changes: 4 additions & 0 deletions docker/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -159,3 +159,7 @@ watchfiles==1.1.0
websockets==15.0.1
xlrd==2.0.2
xlsxwriter==3.2.5
prometheus-client==0.23.1
pymilvus==2.5.12
nltk==3.9.1
rake-nltk==1.0.6
2 changes: 1 addition & 1 deletion docs/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -884,7 +884,7 @@
"type": "string",
"title": "Session Id",
"description": "Session ID for the MOS. This is used to distinguish between different dialogue",
"default": "41bb5e18-252d-4948-918c-07d82aa47086"
"default": "8dcdbd62-c231-4678-a3ae-0946b7d9ce14"
},
"chat_model": {
"$ref": "#/components/schemas/LLMConfigFactory",
Expand Down
65 changes: 65 additions & 0 deletions docs/product-api-tests.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
## Product API smoke tests (local 0.0.0.0:8001)

Source: https://github.com/MemTensor/MemOS/issues/518

### Prerequisites
- Service is running: `python -m uvicorn memos.api.server_api:app --host 0.0.0.0 --port 8001`
- `.env` is configured for Redis, embeddings, and the vector DB (current test setup: Redis reachable, Qdrant Cloud connected).

### 1) /product/add
- Purpose: Write a memory (sync/async).
- Example request (sync):

```bash
curl -s -X POST http://127.0.0.1:8001/product/add \
-H 'Content-Type: application/json' \
-d '{
"user_id": "tester",
"mem_cube_id": "default_cube",
"memory_content": "Apple is a fruit rich in fiber.",
"async_mode": "sync"
}'
```

- Observed result: `200`, message: "Memory added successfully", returns the written `memory_id` and related info.

### 2) /product/get_all
- Purpose: List all memories for the user/type to confirm writes.
- Example request:

```bash
curl -s -X POST http://127.0.0.1:8001/product/get_all \
-H 'Content-Type: application/json' \
-d '{
"user_id": "tester",
"memory_type": "text_mem",
"mem_cube_ids": ["default_cube"]
}'
```

- Observed result: `200`, shows the recently written apple memories (WorkingMemory/LongTermMemory/UserMemory present, `vector_sync=success`).

### 3) /product/search
- Purpose: Vector search memories.
- Example request:

```bash
curl -s -X POST http://127.0.0.1:8001/product/search \
-H 'Content-Type: application/json' \
-d '{
"query": "What fruit is rich in fiber?",
"user_id": "tester",
"mem_cube_id": "default_cube",
"top_k": 5,
"pref_top_k": 3,
"include_preference": false
}'
```

- Observed result: previously returned 400 because payload indexes (e.g., `vector_sync`) were missing in Qdrant. Index creation is now automatic during Qdrant initialization (memory_type/status/vector_sync/user_name).
- If results are empty or errors persist, verify indexes exist (auto-created on restart) or recreate/clean the collection.

### Notes / Next steps
- `/product/add` and `/product/get_all` are healthy.
- `/product/search` still returns empty results even with vectors present; likely related to search filters or vector retrieval.
- Suggested follow-ups: inspect `SearchHandler` flow, filter conditions (user_id/session/cube_name), and vector DB search calls; capture logs or compare with direct `VecDBFactory.search` calls.
55 changes: 41 additions & 14 deletions evaluation/scripts/locomo/locomo_eval.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import json
import logging
import os
import re
import time

import nltk
Expand Down Expand Up @@ -47,6 +48,29 @@ class LLMGrade(BaseModel):
llm_reasoning: str = Field(description="Explain why the answer is correct or incorrect.")


def extract_label_json(text: str) -> str | None:
"""
Extracts a JSON object of the form {"label": "VALUE"} from a given text string.
This function is designed to handle cases where the LLM response contains
natural language alongside a final JSON snippet, ensuring robust parsing.

Supports both single and double quotes around the label value.
Ignores surrounding whitespace and formatting.

Returns:
The full matching JSON string (e.g., '{"label": "CORRECT"}') if found.
None if no valid label JSON is found.
"""
# Regex pattern to match: { "label": "value" } with optional whitespace
# Matches both single and double quotes, allows spaces around keys and values
pattern = r'\{\s*"label"\s*:\s*["\']([^"\']*)["\']\s*\}'
match = re.search(pattern, text)
if match:
# Return the complete matched JSON string for safe json.loads()
return match.group(0)
return None


async def locomo_grader(llm_client, question: str, gold_answer: str, response: str) -> bool:
system_prompt = """
You are an expert grader that determines if answers to questions match a gold standard answer
Expand Down Expand Up @@ -77,20 +101,23 @@ async def locomo_grader(llm_client, question: str, gold_answer: str, response: s

Just return the label CORRECT or WRONG in a json format with the key as "label".
"""

response = await llm_client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": accuracy_prompt},
],
temperature=0,
)
message_content = response.choices[0].message.content
label = json.loads(message_content)["label"]
parsed = LLMGrade(llm_judgment=label, llm_reasoning="")

return parsed.llm_judgment.strip().lower() == "correct"
try:
response = await llm_client.chat.completions.create(
model=os.getenv("EVAL_MODEL", "gpt-4o-mini"),
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": accuracy_prompt},
],
temperature=0,
)
message_content = response.choices[0].message.content
message_content = extract_label_json(text=message_content)
label = json.loads(message_content)["label"]
parsed = LLMGrade(llm_judgment=label, llm_reasoning="")
return parsed.llm_judgment.strip().lower() == "correct"
except Exception as e:
print(f"======== {e}, {response} ===========")
exit()


def calculate_rouge_scores(gold_answer, response):
Expand Down
1 change: 1 addition & 0 deletions evaluation/scripts/long_bench-v2/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# LongBench v2 evaluation scripts
Loading