Skip to content

Commit 5ff29d1

Browse files
Nyakult2RantfridayLCaralHsi
authored
memos online api eval scripts and readme (#403)
* feat: check nodes existence * feat: use different template for different language input * feat: use different template for different language input * fix: eval script * feat: memos-api eval scripts * feat: mem reader * feat: 实现äºprefeval memos-api evaluation scripts * refactor:format code * feat: add PersonaMem eval scripts * docs(evaluation): update PersonaMem eval readme * feat:memos-api ingest batch message * feat: refactor search * feat: refactor search * update: add api for memory * feat: add memory api return memory and memory type * refactor(server):重构服务器路由模块以优化内存管理 * format: ruff format code * feat(server): 增加LLM最大令牌数 * test * fix: user query embedding for search * count memory_size by user * fix(server):修复记忆读取逻辑中的列表展开问题 * feat(nebular):优化图数据库查询性能 * refactor(memory): - 移除了对 `_refresh_memory_size` 方法的调用- 保留原有逻辑以便后续恢复或重构 * feat: remove user idx_memory_user_name * feat(graph):优化Nebula图数据库查询性能 * feat: rollback remove_oldest_memory * feat:nebula gql add index * feat: align code * feat: update memos_api * feat: update memos_api * feat: 更新默认选项 * feat:memory client * feat:refactor lme * feat: memu & supermemory client * feat: locomo memu * feat: locomo supermemory * New 'add' and 'process' modes. * feat: lme supermemory & memu * feat: default args * api and local * api and local * memobase fix * memos fix * default args * fix memos-api search data * prefeval pipeline * fix lme memos-api * personamem pipeline * personamem pipeline * lme scrips * align dev * format code * refactor: remove old files * format code * pm and prefeval pipeline * format code * format code * pm and prefeval pipeline * pm and prefeval pipeline * pm and prefeval pipeline * format code * format code * pref pipeline * add search response mode * add search response mode * update readme and example * update mem0 api * pm mem0 * fix MEMOBASE api * update pm and prefeval pipepline for frames * update pm and prefeval readme * format code * fix memobase api * fix memobase api * format code * format code * fix format * fix format * fix format * mem0 api * memos batch add * add memos-api-online * add memos-api-online update readme * rollback manager * memos online api pref mem --------- Co-authored-by: 2Rant <[email protected]> Co-authored-by: fridayL <[email protected]> Co-authored-by: CaralHsi <[email protected]>
1 parent 3680286 commit 5ff29d1

File tree

12 files changed

+198
-79
lines changed

12 files changed

+198
-79
lines changed

evaluation/README.md

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,32 @@ This repository provides tools and scripts for evaluating the LoCoMo dataset usi
2222
2. Copy the `configs-example/` directory to a new directory named `configs/`, and modify the configuration files inside it as needed. This directory contains model and API-specific settings.
2323

2424
## Setup MemOS
25+
### local server
2526
```bash
26-
#start server
27+
# modify {project_dir}/.env file and start server
2728
uvicorn memos.api.server_api:app --host 0.0.0.0 --port 8001 --workers 8
2829

29-
# modify .env file
30+
# configure {project_dir}/evaluation/.env file
3031
MEMOS_URL="http://127.0.0.1:8001"
3132
```
33+
### online service
34+
```bash
35+
# get your api key at https://memos-dashboard.openmem.net/cn/quickstart/
36+
# configure {project_dir}/evaluation/.env file
37+
MEMOS_KEY="Token mpg-xxxxx"
38+
MEMOS_ONLINE_URL="https://memos.memtensor.cn/api/openmem/v1"
39+
40+
```
41+
42+
## Supported frameworks
43+
We support `memos-api` and `memos-api-online` in our scripts.
44+
And give unofficial implementations for the following memory frameworks:`zep`, `mem0`, `memobase`, `supermemory`, `memu`.
45+
46+
3247
## Evaluation Scripts
3348

3449
### LoCoMo Evaluation
35-
⚙️ To evaluate the **LoCoMo** dataset using one of the supported memory frameworks — `memos`, `mem0`, or `zep`run the following [script](./scripts/run_locomo_eval.sh):
50+
⚙️ To evaluate the **LoCoMo** dataset using one of the supported memory frameworks — run the following [script](./scripts/run_locomo_eval.sh):
3651

3752
```bash
3853
# Edit the configuration in ./scripts/run_locomo_eval.sh
@@ -53,7 +68,7 @@ First prepare the dataset `longmemeval_s` from https://huggingface.co/datasets/x
5368
```
5469

5570
### PrefEval Evaluation
56-
To evaluate the **Prefeval** dataset using one of the supported memory frameworks — `memos`, `mem0`, or `zep`run the following [script](./scripts/run_prefeval_eval.sh):
71+
To evaluate the **Prefeval** dataset using one of the supported memory frameworks — run the following [script](./scripts/run_prefeval_eval.sh):
5772

5873
```bash
5974
# Edit the configuration in ./scripts/run_prefeval_eval.sh

evaluation/scripts/locomo/locomo_eval.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,15 @@ async def limited_task(task):
363363
parser.add_argument(
364364
"--lib",
365365
type=str,
366-
choices=["mem0", "mem0_graph", "openai", "memos-api", "memobase"],
366+
choices=[
367+
"mem0",
368+
"mem0_graph",
369+
"memos-api",
370+
"memos-api-online",
371+
"memobase",
372+
"memu",
373+
"supermemory",
374+
],
367375
default="memos-api",
368376
)
369377
parser.add_argument(

evaluation/scripts/locomo/locomo_ingestion.py

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,26 +44,33 @@ def ingest_session(client, session, frame, version, metadata):
4444
speaker_a_messages.append({"role": "assistant", "content": data})
4545
speaker_b_messages.append({"role": "user", "content": data})
4646

47-
if frame == "memos-api":
47+
if "memos-api" in frame:
4848
for m in speaker_a_messages:
4949
m["chat_time"] = iso_date
5050
for m in speaker_b_messages:
5151
m["chat_time"] = iso_date
52-
client.add(speaker_a_messages, speaker_a_user_id, f"{conv_id}_{metadata['session_key']}")
53-
client.add(speaker_b_messages, speaker_b_user_id, f"{conv_id}_{metadata['session_key']}")
52+
client.add(
53+
speaker_a_messages,
54+
speaker_a_user_id,
55+
f"{conv_id}_{metadata['session_key']}",
56+
batch_size=2,
57+
)
58+
client.add(
59+
speaker_b_messages,
60+
speaker_b_user_id,
61+
f"{conv_id}_{metadata['session_key']}",
62+
batch_size=2,
63+
)
5464
elif "mem0" in frame:
55-
for i in range(0, len(speaker_a_messages), 2):
56-
batch_messages_a = speaker_a_messages[i : i + 2]
57-
batch_messages_b = speaker_b_messages[i : i + 2]
58-
client.add(batch_messages_a, speaker_a_user_id, timestamp)
59-
client.add(batch_messages_b, speaker_b_user_id, timestamp)
65+
client.add(speaker_a_messages, speaker_a_user_id, timestamp, batch_size=2)
66+
client.add(speaker_b_messages, speaker_b_user_id, timestamp, batch_size=2)
6067
elif frame == "memobase":
6168
for m in speaker_a_messages:
6269
m["created_at"] = iso_date
6370
for m in speaker_b_messages:
6471
m["created_at"] = iso_date
65-
client.add(speaker_a_messages, speaker_a_user_id)
66-
client.add(speaker_b_messages, speaker_b_user_id)
72+
client.add(speaker_a_messages, speaker_a_user_id, batch_size=2)
73+
client.add(speaker_b_messages, speaker_b_user_id, batch_size=2)
6774
elif frame == "memu":
6875
client.add(speaker_a_messages, speaker_a_user_id, iso_date)
6976
client.add(speaker_b_messages, speaker_b_user_id, iso_date)
@@ -103,6 +110,10 @@ def process_user(conv_idx, frame, locomo_df, version):
103110
from utils.client import MemosApiClient
104111

105112
client = MemosApiClient()
113+
elif frame == "memos-api-online":
114+
from utils.client import MemosApiOnlineClient
115+
116+
client = MemosApiOnlineClient()
106117
elif frame == "memobase":
107118
from utils.client import MemobaseClient
108119

@@ -187,7 +198,15 @@ def main(frame, version="default", num_workers=4):
187198
parser.add_argument(
188199
"--lib",
189200
type=str,
190-
choices=["mem0", "mem0_graph", "memos-api", "memobase", "memu", "supermemory"],
201+
choices=[
202+
"mem0",
203+
"mem0_graph",
204+
"memos-api",
205+
"memos-api-online",
206+
"memobase",
207+
"memu",
208+
"supermemory",
209+
],
191210
default="memos-api",
192211
)
193212
parser.add_argument(

evaluation/scripts/locomo/locomo_metric.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,15 @@
99
parser.add_argument(
1010
"--lib",
1111
type=str,
12-
choices=["mem0", "mem0_graph", "openai", "memos-api", "memobase"],
12+
choices=[
13+
"mem0",
14+
"mem0_graph",
15+
"memos-api",
16+
"memos-api-online",
17+
"memobase",
18+
"memu",
19+
"supermemory",
20+
],
1321
default="memos-api",
1422
)
1523
parser.add_argument(

evaluation/scripts/locomo/locomo_responses.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,15 @@ async def main(frame, version="default"):
134134
parser.add_argument(
135135
"--lib",
136136
type=str,
137-
choices=["mem0", "mem0_graph", "openai", "memos-api", "memobase"],
137+
choices=[
138+
"mem0",
139+
"mem0_graph",
140+
"memos-api",
141+
"memos-api-online",
142+
"memobase",
143+
"memu",
144+
"supermemory",
145+
],
138146
default="memos-api",
139147
)
140148
parser.add_argument(

evaluation/scripts/locomo/locomo_search.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ def search_query(client, query, metadata, frame, version, top_k=20):
198198
context, duration_ms = mem0_graph_search(
199199
client, query, speaker_a_user_id, speaker_b_user_id, top_k, speaker_a, speaker_b
200200
)
201-
elif frame == "memos-api":
201+
elif "memos-api" in frame:
202202
context, duration_ms = memos_api_search(
203203
client, query, speaker_a_user_id, speaker_b_user_id, top_k, speaker_a, speaker_b
204204
)
@@ -257,6 +257,10 @@ def process_user(conv_idx, locomo_df, frame, version, top_k=20, num_workers=1):
257257
from utils.client import MemosApiClient
258258

259259
client = MemosApiClient()
260+
elif frame == "memos-api-online":
261+
from utils.client import MemosApiOnlineClient
262+
263+
client = MemosApiOnlineClient()
260264
elif frame == "memobase":
261265
from utils.client import MemobaseClient
262266

@@ -336,7 +340,15 @@ def main(frame, version="default", num_workers=1, top_k=20):
336340
parser.add_argument(
337341
"--lib",
338342
type=str,
339-
choices=["mem0", "mem0_graph", "memos-api", "memobase", "memu", "supermemory"],
343+
choices=[
344+
"mem0",
345+
"mem0_graph",
346+
"memos-api",
347+
"memos-api-online",
348+
"memobase",
349+
"memu",
350+
"supermemory",
351+
],
340352
default="memos-api",
341353
)
342354
parser.add_argument(

evaluation/scripts/longmemeval/lme_eval.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,15 @@ async def main(frame, version, nlp_options, num_runs=3, num_workers=5):
344344
parser.add_argument(
345345
"--lib",
346346
type=str,
347-
choices=["mem0", "mem0_graph", "memos-api", "memobase", "memu", "supermemory"],
347+
choices=[
348+
"mem0",
349+
"mem0_graph",
350+
"memos-api",
351+
"memos-api-online",
352+
"memobase",
353+
"memu",
354+
"supermemory",
355+
],
348356
default="memos-api",
349357
)
350358
parser.add_argument(
@@ -355,7 +363,7 @@ async def main(frame, version, nlp_options, num_runs=3, num_workers=5):
355363
type=str,
356364
nargs="+",
357365
default=["lexical"],
358-
choices=["lexical", "semantic"],
366+
choices=["lexical"],
359367
help="NLP options to use for evaluation.",
360368
)
361369
parser.add_argument(

evaluation/scripts/longmemeval/lme_ingestion.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def ingest_session(session, date, user_id, session_id, frame, client):
1818
if "mem0" in frame:
1919
for _idx, msg in enumerate(session):
2020
messages.append({"role": msg["role"], "content": msg["content"][:8000]})
21-
client.add(messages, user_id, int(date.timestamp()))
21+
client.add(messages, user_id, int(date.timestamp()), batch_size=2)
2222
elif frame == "memobase":
2323
for _idx, msg in enumerate(session):
2424
messages.append(
@@ -28,8 +28,8 @@ def ingest_session(session, date, user_id, session_id, frame, client):
2828
"created_at": date.isoformat(),
2929
}
3030
)
31-
client.add(messages, user_id)
32-
elif frame == "memos-api":
31+
client.add(messages, user_id, batch_size=2)
32+
elif "memos-api" in frame:
3333
for msg in session:
3434
messages.append(
3535
{
@@ -39,7 +39,7 @@ def ingest_session(session, date, user_id, session_id, frame, client):
3939
}
4040
)
4141
if messages:
42-
client.add(messages=messages, user_id=user_id, conv_id=session_id)
42+
client.add(messages=messages, user_id=user_id, conv_id=session_id, batch_size=2)
4343
elif frame == "memu":
4444
for _idx, msg in enumerate(session):
4545
messages.append({"role": msg["role"], "content": msg["content"][:8000]})
@@ -80,6 +80,10 @@ def ingest_conv(lme_df, version, conv_idx, frame, success_records, f):
8080
from utils.client import MemosApiClient
8181

8282
client = MemosApiClient()
83+
elif frame == "memos-api-online":
84+
from utils.client import MemosApiOnlineClient
85+
86+
client = MemosApiOnlineClient()
8387
elif frame == "memobase":
8488
from utils.client import MemobaseClient
8589

@@ -167,7 +171,15 @@ def main(frame, version, num_workers=2):
167171
parser.add_argument(
168172
"--lib",
169173
type=str,
170-
choices=["mem0", "mem0_graph", "memos-api", "memobase", "memu", "supermemory"],
174+
choices=[
175+
"mem0",
176+
"mem0_graph",
177+
"memos-api",
178+
"memos-api-online",
179+
"memobase",
180+
"memu",
181+
"supermemory",
182+
],
171183
default="memos-api",
172184
)
173185
parser.add_argument(

evaluation/scripts/longmemeval/lme_metric.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,15 @@ def calculate_scores(data, grade_path, output_path):
258258
parser.add_argument(
259259
"--lib",
260260
type=str,
261-
choices=["mem0", "mem0_graph", "memos-api", "memobase", "memu", "supermemory"],
261+
choices=[
262+
"mem0",
263+
"mem0_graph",
264+
"memos-api",
265+
"memos-api-online",
266+
"memobase",
267+
"memu",
268+
"supermemory",
269+
],
262270
default="memos-api",
263271
)
264272
parser.add_argument(

evaluation/scripts/longmemeval/lme_responses.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,15 @@ def main(frame, version, num_workers=4):
132132
parser.add_argument(
133133
"--lib",
134134
type=str,
135-
choices=["mem0", "mem0_graph", "memos-api", "memobase", "memu", "supermemory"],
135+
choices=[
136+
"mem0",
137+
"mem0_graph",
138+
"memos-api",
139+
"memos-api-online",
140+
"memobase",
141+
"memu",
142+
"supermemory",
143+
],
136144
default="memos-api",
137145
)
138146
parser.add_argument(

0 commit comments

Comments
 (0)