MemoryOS 0.2.1__py3-none-any.whl → 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of MemoryOS might be problematic. Click here for more details.

Files changed (92) hide show
  1. {memoryos-0.2.1.dist-info → memoryos-1.0.0.dist-info}/METADATA +7 -1
  2. {memoryos-0.2.1.dist-info → memoryos-1.0.0.dist-info}/RECORD +87 -64
  3. memos/__init__.py +1 -1
  4. memos/api/config.py +158 -69
  5. memos/api/context/context.py +147 -0
  6. memos/api/context/dependencies.py +101 -0
  7. memos/api/product_models.py +5 -1
  8. memos/api/routers/product_router.py +54 -26
  9. memos/configs/graph_db.py +49 -1
  10. memos/configs/internet_retriever.py +19 -0
  11. memos/configs/mem_os.py +5 -0
  12. memos/configs/mem_reader.py +9 -0
  13. memos/configs/mem_scheduler.py +54 -18
  14. memos/configs/mem_user.py +58 -0
  15. memos/graph_dbs/base.py +38 -3
  16. memos/graph_dbs/factory.py +2 -0
  17. memos/graph_dbs/nebular.py +1612 -0
  18. memos/graph_dbs/neo4j.py +18 -9
  19. memos/log.py +6 -1
  20. memos/mem_cube/utils.py +13 -6
  21. memos/mem_os/core.py +157 -37
  22. memos/mem_os/main.py +2 -2
  23. memos/mem_os/product.py +252 -201
  24. memos/mem_os/utils/default_config.py +1 -1
  25. memos/mem_os/utils/format_utils.py +281 -70
  26. memos/mem_os/utils/reference_utils.py +133 -0
  27. memos/mem_reader/simple_struct.py +13 -5
  28. memos/mem_scheduler/base_scheduler.py +239 -266
  29. memos/mem_scheduler/{modules → general_modules}/base.py +4 -5
  30. memos/mem_scheduler/{modules → general_modules}/dispatcher.py +57 -21
  31. memos/mem_scheduler/general_modules/misc.py +104 -0
  32. memos/mem_scheduler/{modules → general_modules}/rabbitmq_service.py +12 -10
  33. memos/mem_scheduler/{modules → general_modules}/redis_service.py +1 -1
  34. memos/mem_scheduler/general_modules/retriever.py +199 -0
  35. memos/mem_scheduler/general_modules/scheduler_logger.py +261 -0
  36. memos/mem_scheduler/general_scheduler.py +243 -80
  37. memos/mem_scheduler/monitors/__init__.py +0 -0
  38. memos/mem_scheduler/monitors/dispatcher_monitor.py +305 -0
  39. memos/mem_scheduler/{modules/monitor.py → monitors/general_monitor.py} +106 -57
  40. memos/mem_scheduler/mos_for_test_scheduler.py +23 -20
  41. memos/mem_scheduler/schemas/__init__.py +0 -0
  42. memos/mem_scheduler/schemas/general_schemas.py +44 -0
  43. memos/mem_scheduler/schemas/message_schemas.py +149 -0
  44. memos/mem_scheduler/schemas/monitor_schemas.py +337 -0
  45. memos/mem_scheduler/utils/__init__.py +0 -0
  46. memos/mem_scheduler/utils/filter_utils.py +176 -0
  47. memos/mem_scheduler/utils/misc_utils.py +102 -0
  48. memos/mem_user/factory.py +94 -0
  49. memos/mem_user/mysql_persistent_user_manager.py +271 -0
  50. memos/mem_user/mysql_user_manager.py +500 -0
  51. memos/mem_user/persistent_factory.py +96 -0
  52. memos/mem_user/user_manager.py +4 -4
  53. memos/memories/activation/item.py +5 -1
  54. memos/memories/activation/kv.py +20 -8
  55. memos/memories/textual/base.py +2 -2
  56. memos/memories/textual/general.py +36 -92
  57. memos/memories/textual/item.py +5 -33
  58. memos/memories/textual/tree.py +13 -7
  59. memos/memories/textual/tree_text_memory/organize/{conflict.py → handler.py} +34 -50
  60. memos/memories/textual/tree_text_memory/organize/manager.py +8 -96
  61. memos/memories/textual/tree_text_memory/organize/relation_reason_detector.py +49 -43
  62. memos/memories/textual/tree_text_memory/organize/reorganizer.py +107 -142
  63. memos/memories/textual/tree_text_memory/retrieve/bochasearch.py +229 -0
  64. memos/memories/textual/tree_text_memory/retrieve/internet_retriever.py +6 -3
  65. memos/memories/textual/tree_text_memory/retrieve/internet_retriever_factory.py +11 -0
  66. memos/memories/textual/tree_text_memory/retrieve/recall.py +15 -8
  67. memos/memories/textual/tree_text_memory/retrieve/reranker.py +1 -1
  68. memos/memories/textual/tree_text_memory/retrieve/retrieval_mid_structs.py +2 -0
  69. memos/memories/textual/tree_text_memory/retrieve/searcher.py +191 -116
  70. memos/memories/textual/tree_text_memory/retrieve/task_goal_parser.py +47 -15
  71. memos/memories/textual/tree_text_memory/retrieve/utils.py +11 -7
  72. memos/memories/textual/tree_text_memory/retrieve/xinyusearch.py +62 -58
  73. memos/memos_tools/dinding_report_bot.py +422 -0
  74. memos/memos_tools/lockfree_dict.py +120 -0
  75. memos/memos_tools/notification_service.py +44 -0
  76. memos/memos_tools/notification_utils.py +96 -0
  77. memos/memos_tools/thread_safe_dict.py +288 -0
  78. memos/settings.py +3 -1
  79. memos/templates/mem_reader_prompts.py +4 -1
  80. memos/templates/mem_scheduler_prompts.py +62 -15
  81. memos/templates/mos_prompts.py +116 -0
  82. memos/templates/tree_reorganize_prompts.py +24 -17
  83. memos/utils.py +19 -0
  84. memos/mem_scheduler/modules/misc.py +0 -39
  85. memos/mem_scheduler/modules/retriever.py +0 -268
  86. memos/mem_scheduler/modules/schemas.py +0 -328
  87. memos/mem_scheduler/utils.py +0 -75
  88. memos/memories/textual/tree_text_memory/organize/redundancy.py +0 -193
  89. {memoryos-0.2.1.dist-info → memoryos-1.0.0.dist-info}/LICENSE +0 -0
  90. {memoryos-0.2.1.dist-info → memoryos-1.0.0.dist-info}/WHEEL +0 -0
  91. {memoryos-0.2.1.dist-info → memoryos-1.0.0.dist-info}/entry_points.txt +0 -0
  92. /memos/mem_scheduler/{modules → general_modules}/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: MemoryOS
3
- Version: 0.2.1
3
+ Version: 1.0.0
4
4
  Summary: Intelligence Begins with Memory
5
5
  License: Apache-2.0
6
6
  Keywords: memory,llm,language model,memoryOS,agent,kv cache,lora
@@ -35,6 +35,7 @@ Requires-Dist: ollama (>=0.4.8,<0.5.0)
35
35
  Requires-Dist: openai (>=1.77.0,<2.0.0)
36
36
  Requires-Dist: pika (>=1.3.2,<2.0.0) ; extra == "all"
37
37
  Requires-Dist: pika (>=1.3.2,<2.0.0) ; extra == "mem-scheduler"
38
+ Requires-Dist: python-dateutil (>=2.9.0.post0,<3.0.0)
38
39
  Requires-Dist: qdrant-client (>=1.14.2,<2.0.0) ; extra == "all"
39
40
  Requires-Dist: redis (>=6.2.0,<7.0.0) ; extra == "all"
40
41
  Requires-Dist: redis (>=6.2.0,<7.0.0) ; extra == "mem-scheduler"
@@ -309,6 +310,11 @@ MemOS is licensed under the [Apache 2.0 License](./LICENSE).
309
310
 
310
311
  Stay up to date with the latest MemOS announcements, releases, and community highlights.
311
312
 
313
+
314
+ - **2025-08-07** - 🎉 *MemOS v1.0.0 (MemCube Release)*: First MemCube with word game demo, LongMemEval evaluation, BochaAISearchRetriever integration, NebulaGraph support, enhanced search capabilities, and official Playground launch.
315
+ - **2025-07-29** – 🎉 *MemOS v0.2.2 (Nebula Update)*: Internet search+Nebula DB integration, refactored memory scheduler, KV Cache stress tests, MemCube Cookbook release (CN/EN), and 4b/1.7b/0.6b memory ops models.
316
+ - **2025-07-21** – 🎉 *MemOS v0.2.1 (Neo Release)*: Lightweight Neo version with plaintext+KV Cache functionality, Docker/multi-tenant support, MCP expansion, and new Cookbook/Mud game examples.
317
+ - **2025-07-11** – 🎉 *MemOS v0.2.0 (Cross-Platform)*: Added doc search/bilingual UI, MemReader-4B (local deploy), full Win/Mac/Linux support, and playground end-to-end connection.
312
318
  - **2025-07-07** – 🎉 *MemOS 1.0 (Stellar) Preview Release*: A SOTA Memory OS for LLMs is now open-sourced.
313
319
  - **2025-07-04** – 🎉 *MemOS Paper Released*: [MemOS: A Memory OS for AI System](https://arxiv.org/abs/2507.03724) was published on arXiv.
314
320
  - **2025-05-28** – 🎉 *Short Paper Uploaded*: [MemOS: An Operating System for Memory-Augmented Generation (MAG) in Large Language Models](https://arxiv.org/abs/2505.22101) was published on arXiv.
@@ -1,11 +1,13 @@
1
- memos/__init__.py,sha256=3czUjUREtsLbLm6p8dCOw2fODkg70J07DwfEMASGvfk,575
2
- memos/api/config.py,sha256=2GGkj02WjgHAZAH1WWjLdxP0ihi9Fbuk-3cc7DpJbbQ,19634
1
+ memos/__init__.py,sha256=QI66SSrW4g7NoA88QjatThCfb04l9wOgmSamPL1zl1U,575
2
+ memos/api/config.py,sha256=mK-OpSIsS2OBs4HuUTZ8R_oQuFTMQxb_NMrOGjgfJ6g,23605
3
+ memos/api/context/context.py,sha256=HBMeg3-e-rOJXMU7aR0JCsEIECuefEx8eyFT-1sSG9c,4158
4
+ memos/api/context/dependencies.py,sha256=8aa-xciqlG-THJnJ9YqhP5BtVIDIBGYpLQOuXK_DgQA,2652
3
5
  memos/api/exceptions.py,sha256=MfTNXwLwJE7tHwNVTHlJsB3kF14oA0JfA1-S8xrZEus,833
4
6
  memos/api/mcp_serve.py,sha256=GtJDZYx4yxKMs4sCddKJbRAjgsbRunr6S2nAT-KeBMs,21270
5
7
  memos/api/product_api.py,sha256=pDsxxrw6sF03hmh6dGqahJjlWWKvg_GGs2-TZMy3e8I,954
6
- memos/api/product_models.py,sha256=YsD2DnBvwU4TquXnp0DMDwKloAAKhC2GQcfjl122PtY,5217
8
+ memos/api/product_models.py,sha256=HLhC-ggmDERarQCX7o24GEtz31JIKL6P8pgM6-bh2X8,5519
7
9
  memos/api/routers/__init__.py,sha256=nbduRsr-7RkfBIYEBkbYkpB-7GG7QZgNfEQwLHbDXpI,21
8
- memos/api/routers/product_router.py,sha256=yMuNJs9eJ5PMGZR7KNhCfAHO1pUyL5D38N42A0idVM4,14518
10
+ memos/api/routers/product_router.py,sha256=IyblquQN9y2EdtFm-EtEB9MGSpHwV8NfDP1GNv5NYD0,15765
9
11
  memos/api/start_api.py,sha256=vDKS3D8AEwlDAkpWxHiblzVqcQ3cvGSnnpP4Jhjm3GE,14656
10
12
  memos/chunkers/__init__.py,sha256=7lZOTN3e9Yp5XBsDX5wnWJ3tY126cRU9GmfevzJXAtU,67
11
13
  memos/chunkers/base.py,sha256=z0rG5vM7FGremQdSZ_3jlTGbsDtlkWAYWdtSAGqpaR4,655
@@ -16,14 +18,15 @@ memos/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
18
  memos/configs/base.py,sha256=bOOhEU6HGFTq5jne_TXn8Br72rvAfJHYvYllFUPs12A,2588
17
19
  memos/configs/chunker.py,sha256=Ulci0MyhS_FkuV95l7Pr9Vei179aEFEUigwVmtmSDfI,1593
18
20
  memos/configs/embedder.py,sha256=e_aOkUamW2NYSBEzsKkw0jNqHERy5GU3A2cSH5G5y68,2750
19
- memos/configs/graph_db.py,sha256=0LulJMAqzG7cQbpKZYkV_2GFm2l-f4sEyNa7hqDDIQM,4254
20
- memos/configs/internet_retriever.py,sha256=7x1Sp--skifHQqWvcPFiEOkda6HCCocw6HSO5H127jk,3046
21
+ memos/configs/graph_db.py,sha256=800e8PqiXTaOBX-GQHRP9f3Gx-0Ma7fnO0pdA5WHJ0k,5868
22
+ memos/configs/internet_retriever.py,sha256=yWU6avRU9Hqox8hmR0EyILUr4x9wDvcKkhwRwT3PROc,3749
21
23
  memos/configs/llm.py,sha256=cso9ZBOdPzOAcgypp2nPFHdynswdG9MZZ-qdgOTEXL8,4175
22
24
  memos/configs/mem_chat.py,sha256=TjEQHRG1HpLwCBo3hrn5aVK23rykNtV6Be5p4YIg7F4,2571
23
25
  memos/configs/mem_cube.py,sha256=k95dvNxusnyS9w6ciWgNkUXwbHa4HTUEUS-PfPbR0BM,3105
24
- memos/configs/mem_os.py,sha256=bUuyi6boIjjvYzrlFoCSqchbWF37IcA5BQi03feq7bg,2476
25
- memos/configs/mem_reader.py,sha256=m5pRr3DxtmOKBFdbnCki_XgG47oKfcasJNwZGXg9gN4,2022
26
- memos/configs/mem_scheduler.py,sha256=ItXyfpbA4xg2h0CemzZmW8hdESdY-p13yrJOyT6v-yw,5823
26
+ memos/configs/mem_os.py,sha256=FGrBaFWGUdCKkb4MFDRz9hCE7hydLd0XEFgUrqEhQJw,2755
27
+ memos/configs/mem_reader.py,sha256=hTLFdmPhPIY70Fh_s4ptTGJ3LN-B9n111QG1kboxoNk,2307
28
+ memos/configs/mem_scheduler.py,sha256=kLE1JZM2IkzpsEdvJ0D0w3MNbjsqfB_--EvdZomHB5s,7644
29
+ memos/configs/mem_user.py,sha256=U0UzCvTacUOxeajJMfXAWWy3a0l52B4LUhH_L7U1VQ4,2036
27
30
  memos/configs/memory.py,sha256=ksLE6JoRhe0Sc_H-efbFFbjv7kzm9lQ9WMqqrn6WsS8,7171
28
31
  memos/configs/parser.py,sha256=dy-QoevJbCnkJePKgpzR4oziOzYnS4jB6XH-YrpeMns,1145
29
32
  memos/configs/utils.py,sha256=X9NQ6-xURsZROAdS3WT96phVfHcOHgDPOo2Yq68QoKM,242
@@ -39,10 +42,11 @@ memos/embedders/sentence_transformer.py,sha256=QJoW7qMbvAzmMUXzIhMHXVFnDFurfzxdo
39
42
  memos/embedders/universal_api.py,sha256=BpmLL18y2neEAIE4CdC-1qr0uOEOJ6o7V_zycdkJmZk,1270
40
43
  memos/exceptions.py,sha256=UnBoZUYdwb1KoQPE-pXSLT4yOjkwxse9fx0rb_MhEzo,531
41
44
  memos/graph_dbs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
- memos/graph_dbs/base.py,sha256=NxcKKKPUk5VBZj0-vA625rNsQeoqtgSd4CSU0YKNcZw,6871
43
- memos/graph_dbs/factory.py,sha256=ygOS8D_wfQ9ax3frWbSQi7PXFOQnvnU_51EaUM0Ibhg,848
45
+ memos/graph_dbs/base.py,sha256=hW3-2Gg_n178jrb7-T1BSHd42-3_fT5e9lYqqlnImFQ,8259
46
+ memos/graph_dbs/factory.py,sha256=N1NaABiNnYvnsB-L82LrQaLvND5seCabFdSDsD8LoyA,932
44
47
  memos/graph_dbs/item.py,sha256=BfK17hA_hHu7I348jWugP_rb9GS5hpKfgqtYGGHBohk,1450
45
- memos/graph_dbs/neo4j.py,sha256=zRig8-Zgb0QUz-N7NUIyLlNOhGz2coCtWvnd-tRhwhE,42150
48
+ memos/graph_dbs/nebular.py,sha256=TObODgjQvNLzoRDc4UcKcfceIujtOnwZlOfVb4GhcOM,58097
49
+ memos/graph_dbs/neo4j.py,sha256=grPBo91cZln2A9e13WkZk9rPuZSX5VLxERSgXT5p6wM,42605
46
50
  memos/graph_dbs/neo4j_community.py,sha256=6_1_m3gPl4TxGWdLRCu91vHH5G7E6iBteDQ952hQ844,11382
47
51
  memos/hello_world.py,sha256=RV1vXfK1_U_xAvSusqc-4A8wk3yr8WEQ9q88dmBxvnI,3057
48
52
  memos/llms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -56,7 +60,7 @@ memos/llms/openai.py,sha256=yOcdG320q0JFLi7ipHDXoPWpvyeOMFwbzrnXtk2xqec,3832
56
60
  memos/llms/qwen.py,sha256=RFVoC_hxFe4dhCQ583fbTcT1AC3jDrKH0r6cDsZ0Cmo,2459
57
61
  memos/llms/utils.py,sha256=OcbM9iSpFJpio7sTT5wvxVx-JnqjIx7eSgiRk7dt0ZI,292
58
62
  memos/llms/vllm.py,sha256=cBJx61j0InhoOacIinj3EJxFOfWh14a7_GMiFUmsPCk,5624
59
- memos/log.py,sha256=ocQi2NWlpefgxOJi9EoB0as6tXhLA4dmXuVIgZT52FE,2234
63
+ memos/log.py,sha256=qf6x4SAHWm7FsxCpwF400ssPnye7eK8I3_05hXjATY0,2311
60
64
  memos/mem_chat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
65
  memos/mem_chat/base.py,sha256=LICB_mwUkdCVKb_r33GEPbrEr-2v3dEnI54cAvhcEew,830
62
66
  memos/mem_chat/factory.py,sha256=KKCDG9FrpfY2hD3iJ4GM9x8dN09dyhstP1cOUH_knrY,720
@@ -64,40 +68,53 @@ memos/mem_chat/simple.py,sha256=-DRlE8nKZcGuwEubALK-nUf-wWRbGXkDJXUg8Dxhoyo,7919
64
68
  memos/mem_cube/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
69
  memos/mem_cube/base.py,sha256=NoZKz16oO5AAnJ0alcY52Z1c3C1rbGRe8Znz0CCzDnw,864
66
70
  memos/mem_cube/general.py,sha256=w1HbDIM7MD6Pu_Pbv4KHgQlxOMaCHvvJk_tmA9rZ_q8,8370
67
- memos/mem_cube/utils.py,sha256=OrXgkO0pV1Ey6mHoLJo0Ur_JA6VftjVDGja4ZVykTBw,4948
71
+ memos/mem_cube/utils.py,sha256=gDwiRo9VEvaTaRDzjWOGAH13ALRRV9bvUG7A-wy4KTA,5522
68
72
  memos/mem_os/client.py,sha256=0M-WRTlQr7fDAYtq4B8dsMR0PfmyvD-ySMhKcW3Umd0,43
69
- memos/mem_os/core.py,sha256=4_NCg9jyl3vbxtgevlbF9cADaaR-8TWQGT8zcEPrMpk,38761
70
- memos/mem_os/main.py,sha256=d1a2z3V5fOgZPPJLdn9ITsHrRlnSxcGp2HGnpjVxJZw,24530
71
- memos/mem_os/product.py,sha256=4n4SoTPRfi6SAyiTJlLS0QtIc7-0-C-hca4qHuALq6U,47959
72
- memos/mem_os/utils/default_config.py,sha256=TDijwxXGfcxJeq8jO7f7paCio91dJE9pQDkKlRt39n8,12273
73
- memos/mem_os/utils/format_utils.py,sha256=6WffvfVdvxlll65IngqF2AogmT53sD01KNVi5Dbm-io,41891
73
+ memos/mem_os/core.py,sha256=7EsAeI8FLeKrgtMG1GRIwdpGMJLHcN8g1hErkvkyVhc,44214
74
+ memos/mem_os/main.py,sha256=zjgQy80QN70Xt6GHqn5zw-_2jOT6RWMCh9Yx-3zZuyw,24534
75
+ memos/mem_os/product.py,sha256=3ge9x0miUrqYaApxNZ0KYIuocUZKn3-Zz4t3BEQQguA,50719
76
+ memos/mem_os/utils/default_config.py,sha256=OdDCyrE3-duSK0vMfO4AelGUwMt14ffHKMrvki0YKlI,12273
77
+ memos/mem_os/utils/format_utils.py,sha256=QaxImCM0E27l2tkRLzWM1s8vSp3MO_LNaY0APHgV35o,49883
78
+ memos/mem_os/utils/reference_utils.py,sha256=jlyqZrmCKjyeq5czamHH8J--jsJfgL3Np1nFKfKVhJY,5464
74
79
  memos/mem_reader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
80
  memos/mem_reader/base.py,sha256=SSuaD3J88XbHsME1Qa-EAgZ57xApPHPHppMSeeS3JZ4,957
76
81
  memos/mem_reader/factory.py,sha256=emKnId9BhScSkqCZyLSLWntixnU3wAMIOVdsRpHldJA,766
77
82
  memos/mem_reader/memory.py,sha256=f3fAjrs8Jf6mBZWTgzkEZle7XjDwTJHxM1L2sOb85Tg,13288
78
- memos/mem_reader/simple_struct.py,sha256=TlK2w14xPm14yrjCkfTcJSc0OYOIRWHp6k8JWB9coKE,9740
83
+ memos/mem_reader/simple_struct.py,sha256=cZ-yaR95n8PkSRQJVPZ4pWZ8V_nECX8miZyDFIQwymk,10209
79
84
  memos/mem_scheduler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
- memos/mem_scheduler/base_scheduler.py,sha256=dzhUqIx1rhsIhsDo1qmCeqZTwYHUcyiUEhUna3jJSA4,23154
81
- memos/mem_scheduler/general_scheduler.py,sha256=szKvgLXUb9TWxpgAncReXRH9jTzdKa9ip7CQQPLLEQU,7208
82
- memos/mem_scheduler/modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
- memos/mem_scheduler/modules/base.py,sha256=BoEuQFvkcZ9u5Yj619vxQpfjv-2FLNK5_6INW59QvQc,3053
84
- memos/mem_scheduler/modules/dispatcher.py,sha256=LvofkG6vfJN81mnkPuroTwzDHN4Gnc4klV2YfhANZXs,6215
85
- memos/mem_scheduler/modules/misc.py,sha256=sJR9fgvs4BjVdvRKIO6Uww6SlWwHP4vhqrDbaX0IRl8,1357
86
- memos/mem_scheduler/modules/monitor.py,sha256=_SIELwyPbwTRaqp8b0aGktS3DWLT7P-Cmgd8caDynQw,10890
87
- memos/mem_scheduler/modules/rabbitmq_service.py,sha256=HrFZtH-klLykuHmK_m-qRGX1YRcIJ8PfT-Gi2F5mnMI,12507
88
- memos/mem_scheduler/modules/redis_service.py,sha256=g587_DCBEWgfVWRLCu2Jj3Cipp7lWcUVYCRnvGnHYt8,5890
89
- memos/mem_scheduler/modules/retriever.py,sha256=LHFGEonxTVKrk-gC3mWUT3svZrWFmsGKXVlYu3wW5Lk,10477
90
- memos/mem_scheduler/modules/schemas.py,sha256=Fc5S3SLVqHDAuESjdwLPToUdG2uiW-cco2fvHGjMhhE,12031
91
- memos/mem_scheduler/mos_for_test_scheduler.py,sha256=rfmI4UGo5iOn-DN0Vp9f6Ypt_kT3yWYdLgZbehvXY4I,5695
85
+ memos/mem_scheduler/base_scheduler.py,sha256=wxBmdsJUmiufQLEfqflb4EUs9h9JE1EcMdsr_CA-LKE,23255
86
+ memos/mem_scheduler/general_modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
+ memos/mem_scheduler/general_modules/base.py,sha256=j2FfGl5mx0CflHGnzu2fFFfZT_WRAMzmmTW_HUxFRgw,2946
88
+ memos/mem_scheduler/general_modules/dispatcher.py,sha256=weDMAumIFJORJnpIm_8epz5d5pZ3XFx23O_0k-UONww,7375
89
+ memos/mem_scheduler/general_modules/misc.py,sha256=qtHx_M3O0p01-bdje5xp4YbTYcU6rpoRsDvPikxOU-s,3574
90
+ memos/mem_scheduler/general_modules/rabbitmq_service.py,sha256=kXfL8Q7eo8H2OMUDhAotbYG9cpL89HDJ5h7A64caKrw,12620
91
+ memos/mem_scheduler/general_modules/redis_service.py,sha256=oHa9EvrpkknGAeygjmc8tExyCJVOU_7SZU6ScMOT9pY,5898
92
+ memos/mem_scheduler/general_modules/retriever.py,sha256=6BiT-rxdXNnlDJjikQVwuy279W0tePo7tbb6j8c8j6s,7849
93
+ memos/mem_scheduler/general_modules/scheduler_logger.py,sha256=8nzdjCd6I4-KRPwLjdf8eXcSQ0i_-xK6rAbQ3j1-GrA,9985
94
+ memos/mem_scheduler/general_scheduler.py,sha256=oPGSvXKzFVYDr0YFnjS42zFYydHOXqlWd1woZ83CptA,14743
95
+ memos/mem_scheduler/monitors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
+ memos/mem_scheduler/monitors/dispatcher_monitor.py,sha256=xy3fFa_vM5PpVHWweMTh3V3bZmnccWV49x0nBNFAVVw,10930
97
+ memos/mem_scheduler/monitors/general_monitor.py,sha256=pv_T-olU0XTO44-rXgfqX43nmDEp8iq-rwlMyAA0Lxk,12962
98
+ memos/mem_scheduler/mos_for_test_scheduler.py,sha256=kioG5V27V8jfXxFA9OHpKoULNF697eGToVo7z-U3mqQ,5950
92
99
  memos/mem_scheduler/scheduler_factory.py,sha256=pw6FKO0EuxFRipMnD22DvcjbM6pdmVfJmRjUvdTaU5E,800
93
- memos/mem_scheduler/utils.py,sha256=qVh868AhVHlKbBLdQ6ilDE17U5A20tMmhqhi26vfnFU,2382
100
+ memos/mem_scheduler/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
+ memos/mem_scheduler/schemas/general_schemas.py,sha256=r9Ew8KHTVxiDTTLKad1jw12uNMyLltFmn2htplSqbhk,1344
102
+ memos/mem_scheduler/schemas/message_schemas.py,sha256=ahTEY6x8gSXszURne1nKgHCkfEXfKOEXaTKTUsQ9IW0,5977
103
+ memos/mem_scheduler/schemas/monitor_schemas.py,sha256=OvFwchhFCvkHnp8k7NYAQQ5Lq7N0cNKA0mSEasNRLkU,12715
104
+ memos/mem_scheduler/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
+ memos/mem_scheduler/utils/filter_utils.py,sha256=GsEsVjB6zZbF2gITxXN1DWTLoLG-d8A3TFnGzy1uIaQ,6286
106
+ memos/mem_scheduler/utils/misc_utils.py,sha256=zOCpwzCrj0mfiW7BoWiTFEPj-dzdcYZnqMDtKDGO0kc,2765
107
+ memos/mem_user/factory.py,sha256=zdC-208YYU4dpUaMpICzNbhMTiLaJDxLJoq4bl-6YiU,2956
108
+ memos/mem_user/mysql_persistent_user_manager.py,sha256=fSndxW6MR7u9ImWCPq-gsuFb2TYX1BXF6Kkv1FCS6Fw,9257
109
+ memos/mem_user/mysql_user_manager.py,sha256=gpNYr9XZhtr1fVV-y5zsduEOKStqAFUSf5BE0B6WQKM,16285
110
+ memos/mem_user/persistent_factory.py,sha256=0_k3KgvVESOAoD35ecwY77Dam-rfaFlly9oL-eMFmhk,3170
94
111
  memos/mem_user/persistent_user_manager.py,sha256=oKQ6uXlT6v-bWTe99E5mNoPvs9FOxPtaMzNL4zujzP0,8760
95
- memos/mem_user/user_manager.py,sha256=9XIt4Q2HA1fhh9dbjKRAXh-GTdT43WGYSx-IsST7jZM,15654
112
+ memos/mem_user/user_manager.py,sha256=-Dwo8oR0AbnCGY9s3utm2ZqOvTJCpDTF5hlkvPRNiqA,15654
96
113
  memos/memories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
114
  memos/memories/activation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
115
  memos/memories/activation/base.py,sha256=kiC35AOnuofgYMzLxZyVULsfOoVq03BGvi6AXtNvF-I,1151
99
- memos/memories/activation/item.py,sha256=j1cpz5NLMYIKnA1rOicRIEzWSfINe_HBesdINGI6oSw,1563
100
- memos/memories/activation/kv.py,sha256=SnYA8pYo8HU9fqjlk3aFhiIR0T7TBdf8ssEWrkVBbdM,8263
116
+ memos/memories/activation/item.py,sha256=8oo3odhNnvg36NYLobwkehAHj74mo36IcH2MrlXSCEI,1720
117
+ memos/memories/activation/kv.py,sha256=c3rhOowxqmYnUnVKGT1XqsHQurl44Ht98wCDz42laP8,8903
101
118
  memos/memories/activation/vllmkv.py,sha256=QM6Y8a3dhqGa08_5rbE-JTR4EakNgoEEVfLdVcvmgms,7765
102
119
  memos/memories/base.py,sha256=Sr-dEuDc982WwdVREQ2nL8L6rUc0KZPTaBJeYdgx8h8,577
103
120
  memos/memories/factory.py,sha256=Z49DRF_VHQJI2UNiTJ_1ouPqg_iCcuV_Tcg5fXkKxlM,1418
@@ -106,47 +123,53 @@ memos/memories/parametric/base.py,sha256=RQK2LeaMRr2rVbfoa0M7RJx4r0dGD_uBXt73eiz
106
123
  memos/memories/parametric/item.py,sha256=9FcY7kf53Uvl5FGXn23o2c0dI_9aUcYjUqTxKOMlbuI,219
107
124
  memos/memories/parametric/lora.py,sha256=TqSI2OjmFi-XXCeM-MchSwh1sAhOwL7_JnOwSy9qpis,1397
108
125
  memos/memories/textual/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
- memos/memories/textual/base.py,sha256=3XVeuXZY3ZFzZ6zHIE3l5hx7X2PiH7orxvCwrNZ1l3U,2812
110
- memos/memories/textual/general.py,sha256=HlwTVZ91qxIfSjdKwBXj7SiYnDt8R3mvYewFmBxUA9Y,11144
111
- memos/memories/textual/item.py,sha256=8tSsiDztsxfyNXWB1TG2E5a4nhIQcuYMJ_BrnPl6osQ,6323
126
+ memos/memories/textual/base.py,sha256=5AQ0oR1rLd7yiwIKPxt2OmAlL6mWhwUl_U8zuafoDfI,2827
127
+ memos/memories/textual/general.py,sha256=exHPHejBE6jZNLm8pT951sIko8hAqNdOaHZdnNdfzBA,8877
128
+ memos/memories/textual/item.py,sha256=xhyjuL6QfZaf33OaWb2v96QWlZ01_WLkWkWKDh5N9LU,5249
112
129
  memos/memories/textual/naive.py,sha256=Z_gfbxI6cQGJ_raOTQic4fnpo493Xq3yEQ8qDV4xplo,6954
113
- memos/memories/textual/tree.py,sha256=94pBYJaFa9tYIdwz9Whapt5U7OxYBsN8mxbgh_dAQxw,13602
130
+ memos/memories/textual/tree.py,sha256=8K_x5zv3CV8kmQa6lfhXk4OgcmbRUtSy8hZ7JvbJFmU,13787
114
131
  memos/memories/textual/tree_text_memory/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
132
  memos/memories/textual/tree_text_memory/organize/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
116
- memos/memories/textual/tree_text_memory/organize/conflict.py,sha256=8sva5baLVmtoaegRBJYZH71NCQa9uHqpdpZoI2aUazs,8667
117
- memos/memories/textual/tree_text_memory/organize/manager.py,sha256=H1ks4etHfBHlWwYCDoEGIrUclAQdGsLaLBSZlxZ-hr4,13591
118
- memos/memories/textual/tree_text_memory/organize/redundancy.py,sha256=mPIr3lAJ0aU1VR85Aj9UO9kHrX7UT7j3p-AFKoaOooQ,8183
119
- memos/memories/textual/tree_text_memory/organize/relation_reason_detector.py,sha256=hHE7lo0JCSSPl_GYY_P-hryzBU4l92lkO92Fbkd_TS4,8510
120
- memos/memories/textual/tree_text_memory/organize/reorganizer.py,sha256=POY0_DYo1-A2Nui3jpYMJ6OqONSZvMUr4rTzRIE_KnU,23910
133
+ memos/memories/textual/tree_text_memory/organize/handler.py,sha256=l7WuwWvubGzgaOSUBS0VNjSQU2JxtjwLMtKHxpms8NQ,8139
134
+ memos/memories/textual/tree_text_memory/organize/manager.py,sha256=r-0O9hS3y3oQrTaKOulLmbsquk_FW6eEPse6tf7AuVM,9783
135
+ memos/memories/textual/tree_text_memory/organize/relation_reason_detector.py,sha256=udqQEFZb6TiarB-Rya1N7fKiWHtXiLkggh8bFKIlDjU,8816
136
+ memos/memories/textual/tree_text_memory/organize/reorganizer.py,sha256=txBC6uo3fId4RaTJeTJEg4V3Q-jrIP0jBHqVQkjjAqc,22719
121
137
  memos/memories/textual/tree_text_memory/retrieve/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
- memos/memories/textual/tree_text_memory/retrieve/internet_retriever.py,sha256=asSzVcSVOiigN4-4NzFc7wzthGDK6P5sODIDF5W9egA,8467
123
- memos/memories/textual/tree_text_memory/retrieve/internet_retriever_factory.py,sha256=pBlufTc5-mdWcyKR_R0Syev3QPMtV83mydyIw0Saz4o,3192
138
+ memos/memories/textual/tree_text_memory/retrieve/bochasearch.py,sha256=2TjlAJ5vLoOvBTlqRXul6elBUvvPuB9PsYy1xuqX-Ho,8196
139
+ memos/memories/textual/tree_text_memory/retrieve/internet_retriever.py,sha256=aD2bujlVBWzDa9ZfB9vdB9Hq2erCpc426AVcolItWIM,8656
140
+ memos/memories/textual/tree_text_memory/retrieve/internet_retriever_factory.py,sha256=3-hJwpGrAAag7z772QBvW9ZBvNI_od5GO1nRv5Q3GbQ,3767
124
141
  memos/memories/textual/tree_text_memory/retrieve/reasoner.py,sha256=5csoGjviFbN9RJ8dm3B6kjvoC8xbPD8UMiGusefHaf0,2228
125
- memos/memories/textual/tree_text_memory/retrieve/recall.py,sha256=UEnwou53deoUFUpf63DFxJMoRPEctIz29NYT56FpXYs,5773
126
- memos/memories/textual/tree_text_memory/retrieve/reranker.py,sha256=qzXAL51s2YrcyqYhXRzFm4V84h1WADfgaN34lw4qMYg,3701
127
- memos/memories/textual/tree_text_memory/retrieve/retrieval_mid_structs.py,sha256=jZs2S1jtd727gqDKs8clYCOwcqOBnrl_UmFU1FPE0w8,360
128
- memos/memories/textual/tree_text_memory/retrieve/searcher.py,sha256=SNJWtIQQTiBKEiamUCRvTHIazZyWPqrlKXNU9gByn24,8468
129
- memos/memories/textual/tree_text_memory/retrieve/task_goal_parser.py,sha256=mAPxg5P3wmAvRVrutpeE3i2yC1R90egUUGdTWyWmq1U,2653
130
- memos/memories/textual/tree_text_memory/retrieve/utils.py,sha256=JU9_3OTRp1lXHWV6SuRUIO_GjRCPclEu9MrjNZX_kck,1406
131
- memos/memories/textual/tree_text_memory/retrieve/xinyusearch.py,sha256=0bewmGoHE2n-inHDMlHY2wfpGUzTPSRBm9JkGl63rag,10437
142
+ memos/memories/textual/tree_text_memory/retrieve/recall.py,sha256=s8bTlTDsgnuqy-nIZ9-Mnp3LalXKaDqDEwn-GLo6ntw,6108
143
+ memos/memories/textual/tree_text_memory/retrieve/reranker.py,sha256=GIo_ZqA8Oea-L58Md724ak7Oq2fCnLfBWBUvMWiD7mY,3727
144
+ memos/memories/textual/tree_text_memory/retrieve/retrieval_mid_structs.py,sha256=CvGfdwtOwC78OWKb1nOg_tsPualirsRfbtA58_kxNpA,433
145
+ memos/memories/textual/tree_text_memory/retrieve/searcher.py,sha256=_ZEmupkjE9_Hu4X4DeQ1d2qKf2mYBdLRtKRROwqGN1U,10734
146
+ memos/memories/textual/tree_text_memory/retrieve/task_goal_parser.py,sha256=vqgyczpS5As9zmljX9YF7TL0fgpl_T22FN5qV_AbcS8,3733
147
+ memos/memories/textual/tree_text_memory/retrieve/utils.py,sha256=HuN4urTkrmlXJV7X3bw8LneyAt-azgqwlf2eCOev-ts,2072
148
+ memos/memories/textual/tree_text_memory/retrieve/xinyusearch.py,sha256=x-nlZJ84shgAq9FqQR3YvE6iTMY_B7Pc0YaiGEqM1rc,10518
149
+ memos/memos_tools/dinding_report_bot.py,sha256=kXmooO_wUpwErT6Obql-SQu8lbt0XnM_58znIeQt734,14735
150
+ memos/memos_tools/lockfree_dict.py,sha256=A2hFUSyjTIauiXONYzr7zFZfGlOF9J9cqrfzDNBaw_w,3811
151
+ memos/memos_tools/notification_service.py,sha256=CZ7tZI6m0A063ON0MVEOUb9uontggvrvBLOMzorD0cI,1125
152
+ memos/memos_tools/notification_utils.py,sha256=5J8GUqgf3h8uo1qFvrWawtcqTtu1irxCfSVsFOQfO3I,2380
153
+ memos/memos_tools/thread_safe_dict.py,sha256=5hhKndKntYIriTIkmaDaehmojuOMhEkVl4WAc2QLfHM,8252
132
154
  memos/parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
133
155
  memos/parsers/base.py,sha256=AWgWIZzReDiTqiv6z08_9aG2KHVzc4Bdr0Lowz0mWVI,435
134
156
  memos/parsers/factory.py,sha256=hPKTR0wVgMQ5Z9ZL-a9FyHWCpz9UcrG2oSEDYBAoB3g,704
135
157
  memos/parsers/markitdown.py,sha256=SDwmZYC6LyiwdU79yuj6mWNMkQx9YrZzZEHU-4JzBwQ,863
136
- memos/settings.py,sha256=HYNBFRW0CS2Kh4GmMRMA-Yrh3ZhJno4S4B6gx6P3T30,178
158
+ memos/settings.py,sha256=BYOaqhzReu2yjbwrZqx9-uMwoipkj5Clc6VthnBYOvY,225
137
159
  memos/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
- memos/templates/mem_reader_prompts.py,sha256=wDxF3BRfNaJCR9D8SV7d15LbsO3x-HlT5ikzTV9zJJ8,9767
139
- memos/templates/mem_scheduler_prompts.py,sha256=PiJWuVHVTk0dwuVD-nr6131h6NlDfxlRhlnxIa05NAM,3373
140
- memos/templates/mos_prompts.py,sha256=QJrMb4FwMOAVb-SFSCGTuqqzvD_YhBTpdVBvpUIftK0,3595
141
- memos/templates/tree_reorganize_prompts.py,sha256=kLlMrZU8yH7WMoVn7XF_AkDA-jF_3KDzIkRrj2OUX50,10892
160
+ memos/templates/mem_reader_prompts.py,sha256=T6tJaGmHo7fqFxMSo6OOTY-GvITnv-Fa1CydYX40MiM,10095
161
+ memos/templates/mem_scheduler_prompts.py,sha256=ty_H9TARf5sQogHSJoRYQmrS6w0xs51mMcKNjkExdFc,5034
162
+ memos/templates/mos_prompts.py,sha256=sw_jAZOXEgmFHVA2xXfGb4nvhhr4IUkAi-rqFjX-HQ8,13793
163
+ memos/templates/tree_reorganize_prompts.py,sha256=FJRIwT2A4d5EnoPhNuzDFdMWpbNLlJEIfLZP69RBlDM,12112
142
164
  memos/types.py,sha256=N7XBYxDTdc50KEsS6YxHvYgs23ykGsZ-wNnaJBVdVi4,1791
165
+ memos/utils.py,sha256=uB-8_5V16M7yNeAYXOIPaXwxeceUu4d_5yofLA6vbaE,428
143
166
  memos/vec_dbs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
144
167
  memos/vec_dbs/base.py,sha256=gbw7Gb_zs8Yx8kJIx6aTM-Ylsb4qLkVOFB-iwNJW6Sw,3564
145
168
  memos/vec_dbs/factory.py,sha256=Noa4caqzPT9b59i2jzdpAHFCSHiMfDmgRox1POkRRfE,710
146
169
  memos/vec_dbs/item.py,sha256=mLrcHF0nWtMCUjScBgaeeSqabQ3vJhKr_6wrU_g25ns,1425
147
170
  memos/vec_dbs/qdrant.py,sha256=4KAiSZ64Ulz8EeT2o1DpNDRwnKRF4iiaJbZdq-xrn0c,11052
148
- memoryos-0.2.1.dist-info/LICENSE,sha256=FU-b6N8tVc7dzUZGyNjUIG1Ihnrh2iuBziq4a1Gl8HU,11358
149
- memoryos-0.2.1.dist-info/METADATA,sha256=8xi49HjRjLkJIo8Tpvc4W10VbGHEk8TqgUtaFdTVG30,14714
150
- memoryos-0.2.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
151
- memoryos-0.2.1.dist-info/entry_points.txt,sha256=p54si8po81Yb-NK2lx5Z0lNr8QV7-5IECtkC6c8MJmI,40
152
- memoryos-0.2.1.dist-info/RECORD,,
171
+ memoryos-1.0.0.dist-info/LICENSE,sha256=FU-b6N8tVc7dzUZGyNjUIG1Ihnrh2iuBziq4a1Gl8HU,11358
172
+ memoryos-1.0.0.dist-info/METADATA,sha256=uXoscqVd6NEZGEwaGQn3NR-ezJ5RKp0X6n48KANAmAY,15608
173
+ memoryos-1.0.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
174
+ memoryos-1.0.0.dist-info/entry_points.txt,sha256=p54si8po81Yb-NK2lx5Z0lNr8QV7-5IECtkC6c8MJmI,40
175
+ memoryos-1.0.0.dist-info/RECORD,,
memos/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "0.2.1"
1
+ __version__ = "1.0.0"
2
2
 
3
3
  from memos.configs.mem_cube import GeneralMemCubeConfig
4
4
  from memos.configs.mem_os import MOSConfig
memos/api/config.py CHANGED
@@ -1,3 +1,4 @@
1
+ import json
1
2
  import os
2
3
 
3
4
  from typing import Any
@@ -99,9 +100,9 @@ class APIConfig:
99
100
  "backend": "universal_api",
100
101
  "config": {
101
102
  "provider": os.getenv("MOS_EMBEDDER_PROVIDER", "openai"),
102
- "api_key": os.getenv("OPENAI_API_KEY", "sk-xxxx"),
103
+ "api_key": os.getenv("MOS_EMBEDDER_API_KEY", "sk-xxxx"),
103
104
  "model_name_or_path": os.getenv("MOS_EMBEDDER_MODEL", "text-embedding-3-large"),
104
- "base_url": os.getenv("OPENAI_API_BASE", "http://openai.com"),
105
+ "base_url": os.getenv("MOS_EMBEDDER_API_BASE", "http://openai.com"),
105
106
  },
106
107
  }
107
108
  else: # ollama
@@ -115,6 +116,47 @@ class APIConfig:
115
116
  },
116
117
  }
117
118
 
119
+ @staticmethod
120
+ def get_internet_config() -> dict[str, Any]:
121
+ """Get embedder configuration."""
122
+ return {
123
+ "backend": "bocha",
124
+ "config": {
125
+ "api_key": os.getenv("BOCHA_API_KEY"),
126
+ "max_results": 15,
127
+ "num_per_request": 10,
128
+ "reader": {
129
+ "backend": "simple_struct",
130
+ "config": {
131
+ "llm": {
132
+ "backend": "openai",
133
+ "config": {
134
+ "model_name_or_path": os.getenv("MEMRADER_MODEL"),
135
+ "temperature": 0.6,
136
+ "max_tokens": 5000,
137
+ "top_p": 0.95,
138
+ "top_k": 20,
139
+ "api_key": os.getenv("MEMRADER_API_KEY", "EMPTY"),
140
+ "api_base": os.getenv("MEMRADER_API_BASE"),
141
+ "remove_think_prefix": True,
142
+ "extra_body": {"chat_template_kwargs": {"enable_thinking": False}},
143
+ },
144
+ },
145
+ "embedder": APIConfig.get_embedder_config(),
146
+ "chunker": {
147
+ "backend": "sentence",
148
+ "config": {
149
+ "tokenizer_or_token_counter": "gpt2",
150
+ "chunk_size": 512,
151
+ "chunk_overlap": 128,
152
+ "min_sentences_per_chunk": 1,
153
+ },
154
+ },
155
+ },
156
+ },
157
+ },
158
+ }
159
+
118
160
  @staticmethod
119
161
  def get_neo4j_community_config(user_id: str | None = None) -> dict[str, Any]:
120
162
  """Get Neo4j community configuration."""
@@ -126,14 +168,14 @@ class APIConfig:
126
168
  "user_name": f"memos{user_id.replace('-', '')}",
127
169
  "auto_create": True,
128
170
  "use_multi_db": False,
129
- "embedding_dimension": 3072,
171
+ "embedding_dimension": int(os.getenv("EMBEDDING_DIMENSION", 3072)),
130
172
  "vec_config": {
131
173
  # Pass nested config to initialize external vector DB
132
174
  # If you use qdrant, please use Server instead of local mode.
133
175
  "backend": "qdrant",
134
176
  "config": {
135
177
  "collection_name": "neo4j_vec_db",
136
- "vector_dimension": 3072,
178
+ "vector_dimension": int(os.getenv("EMBEDDING_DIMENSION", 3072)),
137
179
  "distance_metric": "cosine",
138
180
  "host": "localhost",
139
181
  "port": 6333,
@@ -159,7 +201,7 @@ class APIConfig:
159
201
  "password": os.getenv("NEO4J_PASSWORD", "12345678"),
160
202
  "auto_create": True,
161
203
  "use_multi_db": True,
162
- "embedding_dimension": 3072,
204
+ "embedding_dimension": int(os.getenv("EMBEDDING_DIMENSION", 3072)),
163
205
  }
164
206
 
165
207
  @staticmethod
@@ -173,7 +215,33 @@ class APIConfig:
173
215
  "user_name": f"memos{user_id.replace('-', '')}",
174
216
  "auto_create": True,
175
217
  "use_multi_db": False,
176
- "embedding_dimension": 3072,
218
+ "embedding_dimension": int(os.getenv("EMBEDDING_DIMENSION", 3072)),
219
+ }
220
+
221
+ @staticmethod
222
+ def get_nebular_config(user_id: str | None = None) -> dict[str, Any]:
223
+ """Get Nebular configuration."""
224
+ return {
225
+ "uri": json.loads(os.getenv("NEBULAR_HOSTS", '["localhost"]')),
226
+ "user": os.getenv("NEBULAR_USER", "root"),
227
+ "password": os.getenv("NEBULAR_PASSWORD", "xxxxxx"),
228
+ "space": os.getenv("NEBULAR_SPACE", "shared-tree-textual-memory"),
229
+ "user_name": f"memos{user_id.replace('-', '')}",
230
+ "use_multi_db": False,
231
+ "auto_create": True,
232
+ "embedding_dimension": int(os.getenv("EMBEDDING_DIMENSION", 3072)),
233
+ }
234
+
235
+ @staticmethod
236
+ def get_mysql_config() -> dict[str, Any]:
237
+ """Get MySQL configuration."""
238
+ return {
239
+ "host": os.getenv("MYSQL_HOST", "localhost"),
240
+ "port": int(os.getenv("MYSQL_PORT", "3306")),
241
+ "username": os.getenv("MYSQL_USERNAME", "root"),
242
+ "password": os.getenv("MYSQL_PASSWORD", "12345678"),
243
+ "database": os.getenv("MYSQL_DATABASE", "memos_users"),
244
+ "charset": os.getenv("MYSQL_CHARSET", "utf8mb4"),
177
245
  }
178
246
 
179
247
  @staticmethod
@@ -183,7 +251,6 @@ class APIConfig:
183
251
  "backend": "general_scheduler",
184
252
  "config": {
185
253
  "top_k": int(os.getenv("MOS_SCHEDULER_TOP_K", "10")),
186
- "top_n": int(os.getenv("MOS_SCHEDULER_TOP_N", "5")),
187
254
  "act_mem_update_interval": int(
188
255
  os.getenv("MOS_SCHEDULER_ACT_MEM_UPDATE_INTERVAL", "300")
189
256
  ),
@@ -198,7 +265,7 @@ class APIConfig:
198
265
  "MOS_SCHEDULER_ENABLE_PARALLEL_DISPATCH", "true"
199
266
  ).lower()
200
267
  == "true",
201
- "enable_act_memory_update": True,
268
+ "enable_activation_memory": True,
202
269
  },
203
270
  }
204
271
 
@@ -212,6 +279,34 @@ class APIConfig:
212
279
  """Check if default cube config is enabled via environment variable."""
213
280
  return os.getenv("MOS_ENABLE_DEFAULT_CUBE_CONFIG", "false").lower() == "true"
214
281
 
282
+ @staticmethod
283
+ def is_dingding_bot_enabled() -> bool:
284
+ """Check if DingDing bot is enabled via environment variable."""
285
+ return os.getenv("ENABLE_DINGDING_BOT", "false").lower() == "true"
286
+
287
+ @staticmethod
288
+ def get_dingding_bot_config() -> dict[str, Any] | None:
289
+ """Get DingDing bot configuration if enabled."""
290
+ if not APIConfig.is_dingding_bot_enabled():
291
+ return None
292
+
293
+ return {
294
+ "enabled": True,
295
+ "access_token_user": os.getenv("DINGDING_ACCESS_TOKEN_USER", ""),
296
+ "secret_user": os.getenv("DINGDING_SECRET_USER", ""),
297
+ "access_token_error": os.getenv("DINGDING_ACCESS_TOKEN_ERROR", ""),
298
+ "secret_error": os.getenv("DINGDING_SECRET_ERROR", ""),
299
+ "robot_code": os.getenv("DINGDING_ROBOT_CODE", ""),
300
+ "app_key": os.getenv("DINGDING_APP_KEY", ""),
301
+ "app_secret": os.getenv("DINGDING_APP_SECRET", ""),
302
+ "oss_endpoint": os.getenv("OSS_ENDPOINT", ""),
303
+ "oss_region": os.getenv("OSS_REGION", ""),
304
+ "oss_bucket_name": os.getenv("OSS_BUCKET_NAME", ""),
305
+ "oss_access_key_id": os.getenv("OSS_ACCESS_KEY_ID", ""),
306
+ "oss_access_key_secret": os.getenv("OSS_ACCESS_KEY_SECRET", ""),
307
+ "oss_public_base_url": os.getenv("OSS_PUBLIC_BASE_URL", ""),
308
+ }
309
+
215
310
  @staticmethod
216
311
  def get_product_default_config() -> dict[str, Any]:
217
312
  """Get default configuration for Product API."""
@@ -224,6 +319,7 @@ class APIConfig:
224
319
  "vllm": vllm_config,
225
320
  }
226
321
  backend = os.getenv("MOS_CHAT_MODEL_PROVIDER", "openai")
322
+ mysql_config = APIConfig.get_mysql_config()
227
323
  config = {
228
324
  "user_id": os.getenv("MOS_USER_ID", "root"),
229
325
  "chat_model": {"backend": backend, "config": backend_model[backend]},
@@ -260,6 +356,13 @@ class APIConfig:
260
356
  else:
261
357
  config["enable_mem_scheduler"] = False
262
358
 
359
+ # Add user manager configuration if enabled
360
+ if os.getenv("MOS_USER_MANAGER_BACKEND", "sqlite").lower() == "mysql":
361
+ config["user_manager"] = {
362
+ "backend": "mysql",
363
+ "config": mysql_config,
364
+ }
365
+
263
366
  return config
264
367
 
265
368
  @staticmethod
@@ -300,9 +403,9 @@ class APIConfig:
300
403
  def create_user_config(user_name: str, user_id: str) -> tuple[MOSConfig, GeneralMemCube]:
301
404
  """Create configuration for a specific user."""
302
405
  openai_config = APIConfig.get_openai_config()
303
-
304
406
  qwen_config = APIConfig.qwen_config()
305
407
  vllm_config = APIConfig.vllm_config()
408
+ mysql_config = APIConfig.get_mysql_config()
306
409
  backend = os.getenv("MOS_CHAT_MODEL_PROVIDER", "openai")
307
410
  backend_model = {
308
411
  "openai": openai_config,
@@ -341,7 +444,6 @@ class APIConfig:
341
444
  "top_k": 30,
342
445
  "max_turns_window": 20,
343
446
  }
344
-
345
447
  # Add scheduler configuration if enabled
346
448
  if APIConfig.is_scheduler_enabled():
347
449
  config_dict["mem_scheduler"] = APIConfig.get_scheduler_config()
@@ -349,11 +451,32 @@ class APIConfig:
349
451
  else:
350
452
  config_dict["enable_mem_scheduler"] = False
351
453
 
454
+ # Add user manager configuration if enabled
455
+ if os.getenv("MOS_USER_MANAGER_BACKEND", "sqlite").lower() == "mysql":
456
+ config_dict["user_manager"] = {
457
+ "backend": "mysql",
458
+ "config": mysql_config,
459
+ }
460
+
352
461
  default_config = MOSConfig(**config_dict)
353
462
 
354
- if os.getenv("NEO4J_BACKEND", "neo4j_community").lower() == "neo4j_community":
355
- neo4j_community_config = APIConfig.get_neo4j_community_config(user_id)
463
+ neo4j_community_config = APIConfig.get_neo4j_community_config(user_id)
464
+ neo4j_config = APIConfig.get_neo4j_config(user_id)
465
+ nebular_config = APIConfig.get_nebular_config(user_id)
466
+ internet_config = (
467
+ APIConfig.get_internet_config()
468
+ if os.getenv("ENABLE_INTERNET", "false").lower() == "true"
469
+ else None
470
+ )
471
+ graph_db_backend_map = {
472
+ "neo4j-community": neo4j_community_config,
473
+ "neo4j": neo4j_config,
474
+ "nebular": nebular_config,
475
+ }
476
+ graph_db_backend = os.getenv("NEO4J_BACKEND", "neo4j-community").lower()
477
+ if graph_db_backend in graph_db_backend_map:
356
478
  # Create MemCube config
479
+
357
480
  default_cube_config = GeneralMemCubeConfig.model_validate(
358
481
  {
359
482
  "user_id": user_id,
@@ -364,10 +487,11 @@ class APIConfig:
364
487
  "extractor_llm": {"backend": "openai", "config": openai_config},
365
488
  "dispatcher_llm": {"backend": "openai", "config": openai_config},
366
489
  "graph_db": {
367
- "backend": "neo4j-community",
368
- "config": neo4j_community_config,
490
+ "backend": graph_db_backend,
491
+ "config": graph_db_backend_map[graph_db_backend],
369
492
  },
370
493
  "embedder": APIConfig.get_embedder_config(),
494
+ "internet_retriever": internet_config,
371
495
  },
372
496
  },
373
497
  "act_mem": {}
@@ -377,31 +501,7 @@ class APIConfig:
377
501
  }
378
502
  )
379
503
  else:
380
- neo4j_config = APIConfig.get_neo4j_config(user_id)
381
- # Create MemCube config
382
- default_cube_config = GeneralMemCubeConfig.model_validate(
383
- {
384
- "user_id": user_id,
385
- "cube_id": f"{user_name}_default_cube",
386
- "text_mem": {
387
- "backend": "tree_text",
388
- "config": {
389
- "extractor_llm": {"backend": "openai", "config": openai_config},
390
- "dispatcher_llm": {"backend": "openai", "config": openai_config},
391
- "graph_db": {
392
- "backend": "neo4j",
393
- "config": neo4j_config,
394
- },
395
- "embedder": APIConfig.get_embedder_config(),
396
- },
397
- },
398
- "act_mem": {}
399
- if os.getenv("ENABLE_ACTIVATION_MEMORY", "false").lower() == "false"
400
- else APIConfig.get_activation_vllm_config(),
401
- "para_mem": {},
402
- }
403
- )
404
-
504
+ raise ValueError(f"Invalid Neo4j backend: {graph_db_backend}")
405
505
  default_mem_cube = GeneralMemCube(default_cube_config)
406
506
  return default_config, default_mem_cube
407
507
 
@@ -416,9 +516,21 @@ class APIConfig:
416
516
  return None
417
517
 
418
518
  openai_config = APIConfig.get_openai_config()
419
-
420
- if os.getenv("NEO4J_BACKEND", "neo4j_community").lower() == "neo4j_community":
421
- neo4j_community_config = APIConfig.get_neo4j_community_config(user_id="default")
519
+ neo4j_community_config = APIConfig.get_neo4j_community_config(user_id="default")
520
+ neo4j_config = APIConfig.get_neo4j_config(user_id="default")
521
+ nebular_config = APIConfig.get_nebular_config(user_id="default")
522
+ graph_db_backend_map = {
523
+ "neo4j-community": neo4j_community_config,
524
+ "neo4j": neo4j_config,
525
+ "nebular": nebular_config,
526
+ }
527
+ internet_config = (
528
+ APIConfig.get_internet_config()
529
+ if os.getenv("ENABLE_INTERNET", "false").lower() == "true"
530
+ else None
531
+ )
532
+ graph_db_backend = os.getenv("NEO4J_BACKEND", "neo4j-community").lower()
533
+ if graph_db_backend in graph_db_backend_map:
422
534
  return GeneralMemCubeConfig.model_validate(
423
535
  {
424
536
  "user_id": "default",
@@ -429,12 +541,13 @@ class APIConfig:
429
541
  "extractor_llm": {"backend": "openai", "config": openai_config},
430
542
  "dispatcher_llm": {"backend": "openai", "config": openai_config},
431
543
  "graph_db": {
432
- "backend": "neo4j-community",
433
- "config": neo4j_community_config,
544
+ "backend": graph_db_backend,
545
+ "config": graph_db_backend_map[graph_db_backend],
434
546
  },
435
547
  "embedder": APIConfig.get_embedder_config(),
436
548
  "reorganize": os.getenv("MOS_ENABLE_REORGANIZE", "false").lower()
437
549
  == "true",
550
+ "internet_retriever": internet_config,
438
551
  },
439
552
  },
440
553
  "act_mem": {}
@@ -444,28 +557,4 @@ class APIConfig:
444
557
  }
445
558
  )
446
559
  else:
447
- neo4j_config = APIConfig.get_neo4j_config(user_id="default")
448
- return GeneralMemCubeConfig.model_validate(
449
- {
450
- "user_id": "default",
451
- "cube_id": "default_cube",
452
- "text_mem": {
453
- "backend": "tree_text",
454
- "config": {
455
- "extractor_llm": {"backend": "openai", "config": openai_config},
456
- "dispatcher_llm": {"backend": "openai", "config": openai_config},
457
- "graph_db": {
458
- "backend": "neo4j",
459
- "config": neo4j_config,
460
- },
461
- "embedder": APIConfig.get_embedder_config(),
462
- "reorganize": os.getenv("MOS_ENABLE_REORGANIZE", "false").lower()
463
- == "true",
464
- },
465
- },
466
- "act_mem": {}
467
- if os.getenv("ENABLE_ACTIVATION_MEMORY", "false").lower() == "false"
468
- else APIConfig.get_activation_vllm_config(),
469
- "para_mem": {},
470
- }
471
- )
560
+ raise ValueError(f"Invalid Neo4j backend: {graph_db_backend}")