MemoryOS 0.2.1__py3-none-any.whl → 0.2.2__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 (74) hide show
  1. {memoryos-0.2.1.dist-info → memoryos-0.2.2.dist-info}/METADATA +2 -1
  2. {memoryos-0.2.1.dist-info → memoryos-0.2.2.dist-info}/RECORD +72 -55
  3. memos/__init__.py +1 -1
  4. memos/api/config.py +156 -65
  5. memos/api/context/context.py +147 -0
  6. memos/api/context/dependencies.py +90 -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 +6 -0
  11. memos/configs/mem_os.py +5 -0
  12. memos/configs/mem_reader.py +9 -0
  13. memos/configs/mem_scheduler.py +18 -4
  14. memos/configs/mem_user.py +58 -0
  15. memos/graph_dbs/base.py +9 -1
  16. memos/graph_dbs/factory.py +2 -0
  17. memos/graph_dbs/nebular.py +1364 -0
  18. memos/graph_dbs/neo4j.py +4 -4
  19. memos/log.py +1 -1
  20. memos/mem_cube/utils.py +13 -6
  21. memos/mem_os/core.py +140 -30
  22. memos/mem_os/main.py +1 -1
  23. memos/mem_os/product.py +266 -152
  24. memos/mem_os/utils/format_utils.py +314 -67
  25. memos/mem_reader/simple_struct.py +13 -5
  26. memos/mem_scheduler/base_scheduler.py +220 -250
  27. memos/mem_scheduler/general_scheduler.py +193 -73
  28. memos/mem_scheduler/modules/base.py +5 -5
  29. memos/mem_scheduler/modules/dispatcher.py +6 -9
  30. memos/mem_scheduler/modules/misc.py +81 -16
  31. memos/mem_scheduler/modules/monitor.py +52 -41
  32. memos/mem_scheduler/modules/rabbitmq_service.py +9 -7
  33. memos/mem_scheduler/modules/retriever.py +108 -191
  34. memos/mem_scheduler/modules/scheduler_logger.py +255 -0
  35. memos/mem_scheduler/mos_for_test_scheduler.py +16 -19
  36. memos/mem_scheduler/schemas/__init__.py +0 -0
  37. memos/mem_scheduler/schemas/general_schemas.py +43 -0
  38. memos/mem_scheduler/schemas/message_schemas.py +148 -0
  39. memos/mem_scheduler/schemas/monitor_schemas.py +329 -0
  40. memos/mem_scheduler/utils/__init__.py +0 -0
  41. memos/mem_scheduler/utils/filter_utils.py +176 -0
  42. memos/mem_scheduler/utils/misc_utils.py +61 -0
  43. memos/mem_user/factory.py +94 -0
  44. memos/mem_user/mysql_persistent_user_manager.py +271 -0
  45. memos/mem_user/mysql_user_manager.py +500 -0
  46. memos/mem_user/persistent_factory.py +96 -0
  47. memos/mem_user/user_manager.py +4 -4
  48. memos/memories/activation/item.py +4 -0
  49. memos/memories/textual/base.py +1 -1
  50. memos/memories/textual/general.py +35 -91
  51. memos/memories/textual/item.py +5 -33
  52. memos/memories/textual/tree.py +13 -7
  53. memos/memories/textual/tree_text_memory/organize/conflict.py +4 -2
  54. memos/memories/textual/tree_text_memory/organize/relation_reason_detector.py +47 -43
  55. memos/memories/textual/tree_text_memory/organize/reorganizer.py +8 -5
  56. memos/memories/textual/tree_text_memory/retrieve/internet_retriever.py +6 -3
  57. memos/memories/textual/tree_text_memory/retrieve/internet_retriever_factory.py +2 -0
  58. memos/memories/textual/tree_text_memory/retrieve/retrieval_mid_structs.py +2 -0
  59. memos/memories/textual/tree_text_memory/retrieve/searcher.py +46 -23
  60. memos/memories/textual/tree_text_memory/retrieve/task_goal_parser.py +42 -15
  61. memos/memories/textual/tree_text_memory/retrieve/utils.py +11 -7
  62. memos/memories/textual/tree_text_memory/retrieve/xinyusearch.py +62 -58
  63. memos/memos_tools/dinding_report_bot.py +422 -0
  64. memos/memos_tools/notification_service.py +44 -0
  65. memos/memos_tools/notification_utils.py +96 -0
  66. memos/settings.py +3 -1
  67. memos/templates/mem_reader_prompts.py +2 -1
  68. memos/templates/mem_scheduler_prompts.py +41 -7
  69. memos/templates/mos_prompts.py +87 -0
  70. memos/mem_scheduler/modules/schemas.py +0 -328
  71. memos/mem_scheduler/utils.py +0 -75
  72. {memoryos-0.2.1.dist-info → memoryos-0.2.2.dist-info}/LICENSE +0 -0
  73. {memoryos-0.2.1.dist-info → memoryos-0.2.2.dist-info}/WHEEL +0 -0
  74. {memoryos-0.2.1.dist-info → memoryos-0.2.2.dist-info}/entry_points.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: MemoryOS
3
- Version: 0.2.1
3
+ Version: 0.2.2
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"
@@ -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=blgeBv5sWJsUH1-ogxcdLcGQS026hGxEw8SgMz-2bgw,575
2
+ memos/api/config.py,sha256=mhkCy5tRHWN2YFJqw4xe99bHL2DAX97nFWZL5kNW6KQ,23704
3
+ memos/api/context/context.py,sha256=3nvI7musq6IlTMyrXgflRHcuLUwtGGIAg-PO6S0uRRQ,4150
4
+ memos/api/context/dependencies.py,sha256=byLwmFsocQufcmi5WFg2j6XjWv9k4PCozCV7uRdCO3M,2468
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=D56niQmQ7tIZinXVIYf4Y2dkPLOVKufluq4rjC04aPY,3261
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=aZJsroq6nVPbTTf8KSH0HvuSfmuVMZcUESkeRiR5nZw,6505
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=-43dDEjHVedXPi0XK0gZmnLBLkS5V6F3j0TemYRCqn0,7236
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=pgAKkTiXkNCeEc2unu5BlMqngemJFOuvXRA2oMJTeH8,48799
49
+ memos/graph_dbs/neo4j.py,sha256=Mbd7uxO55-qkfLGzFNzqpi9izWXKUgTRTxYfGqGQKEE,42159
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=7JEy21hHSPhN-meQnBaEiz7N_nJAb7EZciwD953f_-E,2235
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,39 +68,49 @@ 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
73
+ memos/mem_os/core.py,sha256=7tOH5Vl3IR5N5U-VTiV39tPR8gDUcKLp5gmKXBZlbxo,43709
74
+ memos/mem_os/main.py,sha256=u2XViCGB-4OT3AD8RwOqK4g2lXXD_JRfzANxOQxktMw,24522
75
+ memos/mem_os/product.py,sha256=qJRgQFWJUvE275oy5MtP9cdvX_JhhW1xpY9DXqAhmJo,53350
72
76
  memos/mem_os/utils/default_config.py,sha256=TDijwxXGfcxJeq8jO7f7paCio91dJE9pQDkKlRt39n8,12273
73
- memos/mem_os/utils/format_utils.py,sha256=6WffvfVdvxlll65IngqF2AogmT53sD01KNVi5Dbm-io,41891
77
+ memos/mem_os/utils/format_utils.py,sha256=6YrgOEGrWIAGJIAHMPELyK39caQ3R5D8HXRO17nlbVs,51027
74
78
  memos/mem_reader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
79
  memos/mem_reader/base.py,sha256=SSuaD3J88XbHsME1Qa-EAgZ57xApPHPHppMSeeS3JZ4,957
76
80
  memos/mem_reader/factory.py,sha256=emKnId9BhScSkqCZyLSLWntixnU3wAMIOVdsRpHldJA,766
77
81
  memos/mem_reader/memory.py,sha256=f3fAjrs8Jf6mBZWTgzkEZle7XjDwTJHxM1L2sOb85Tg,13288
78
- memos/mem_reader/simple_struct.py,sha256=TlK2w14xPm14yrjCkfTcJSc0OYOIRWHp6k8JWB9coKE,9740
82
+ memos/mem_reader/simple_struct.py,sha256=cZ-yaR95n8PkSRQJVPZ4pWZ8V_nECX8miZyDFIQwymk,10209
79
83
  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
84
+ memos/mem_scheduler/base_scheduler.py,sha256=euGAuiMJGVwsTc5r7NmpLB7lcp1F_lVGeeTdvugl_qo,22589
85
+ memos/mem_scheduler/general_scheduler.py,sha256=8fQc9NN7mVYaQ3PuWRyiW5Owpqa7egeJEVjeXekXKRo,12526
82
86
  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
87
+ memos/mem_scheduler/modules/base.py,sha256=oU9hPl5Jm9zeS9QwwCSg8PBiZlmab5nQAqCpaqHLZ4Y,3057
88
+ memos/mem_scheduler/modules/dispatcher.py,sha256=CxY3N7S8JjnfaxNTFwBff9FH9LiO2HkFTdK8JHHiEdQ,6127
89
+ memos/mem_scheduler/modules/misc.py,sha256=qtHx_M3O0p01-bdje5xp4YbTYcU6rpoRsDvPikxOU-s,3574
90
+ memos/mem_scheduler/modules/monitor.py,sha256=sAfbA2tSENYVH4IINcybzHcSHFbouOScIt9vlRrzoVQ,11216
91
+ memos/mem_scheduler/modules/rabbitmq_service.py,sha256=nncbOFEm5b1fXqRNsQGJ76olwcbMnejzNo1vM3OPyHY,12600
88
92
  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
93
+ memos/mem_scheduler/modules/retriever.py,sha256=OQq8Z7o-fjqrc0Tqh1CRO16U1sNgjNoU_hhPum407sA,7262
94
+ memos/mem_scheduler/modules/scheduler_logger.py,sha256=UJak8Izff5eCQG1LW3m00BJvDgI-KneeP3Nefmx5r3Y,9792
95
+ memos/mem_scheduler/mos_for_test_scheduler.py,sha256=AYMdrIXLrSjfGM-xAVIm_8gaMuoalo6WfsYLLdrYwY8,5706
92
96
  memos/mem_scheduler/scheduler_factory.py,sha256=pw6FKO0EuxFRipMnD22DvcjbM6pdmVfJmRjUvdTaU5E,800
93
- memos/mem_scheduler/utils.py,sha256=qVh868AhVHlKbBLdQ6ilDE17U5A20tMmhqhi26vfnFU,2382
97
+ memos/mem_scheduler/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
+ memos/mem_scheduler/schemas/general_schemas.py,sha256=u3Z6OSNzlngLF6ERg3R6K6HvVLqVLN3xqs02_3i3f9Q,1276
99
+ memos/mem_scheduler/schemas/message_schemas.py,sha256=5SL47b2GAbpDtLwHU0CFDEojoFTvvUS-VCzdoBHRq3Y,5914
100
+ memos/mem_scheduler/schemas/monitor_schemas.py,sha256=CAdu8y5rhT8ejRH1MoULrT23eMTlSrHJecltNgReXNU,12332
101
+ memos/mem_scheduler/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
+ memos/mem_scheduler/utils/filter_utils.py,sha256=GsEsVjB6zZbF2gITxXN1DWTLoLG-d8A3TFnGzy1uIaQ,6286
103
+ memos/mem_scheduler/utils/misc_utils.py,sha256=-oH4wdnZgSw-apQmTODw-10p2pEteoEsrBfmKqsiHIQ,1447
104
+ memos/mem_user/factory.py,sha256=zdC-208YYU4dpUaMpICzNbhMTiLaJDxLJoq4bl-6YiU,2956
105
+ memos/mem_user/mysql_persistent_user_manager.py,sha256=fSndxW6MR7u9ImWCPq-gsuFb2TYX1BXF6Kkv1FCS6Fw,9257
106
+ memos/mem_user/mysql_user_manager.py,sha256=gpNYr9XZhtr1fVV-y5zsduEOKStqAFUSf5BE0B6WQKM,16285
107
+ memos/mem_user/persistent_factory.py,sha256=0_k3KgvVESOAoD35ecwY77Dam-rfaFlly9oL-eMFmhk,3170
94
108
  memos/mem_user/persistent_user_manager.py,sha256=oKQ6uXlT6v-bWTe99E5mNoPvs9FOxPtaMzNL4zujzP0,8760
95
- memos/mem_user/user_manager.py,sha256=9XIt4Q2HA1fhh9dbjKRAXh-GTdT43WGYSx-IsST7jZM,15654
109
+ memos/mem_user/user_manager.py,sha256=-Dwo8oR0AbnCGY9s3utm2ZqOvTJCpDTF5hlkvPRNiqA,15654
96
110
  memos/memories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
111
  memos/memories/activation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
112
  memos/memories/activation/base.py,sha256=kiC35AOnuofgYMzLxZyVULsfOoVq03BGvi6AXtNvF-I,1151
99
- memos/memories/activation/item.py,sha256=j1cpz5NLMYIKnA1rOicRIEzWSfINe_HBesdINGI6oSw,1563
113
+ memos/memories/activation/item.py,sha256=6XXMRN7CXzENMgHzRfAmpNfDxEVDvH1BmoqFrFDQncw,1717
100
114
  memos/memories/activation/kv.py,sha256=SnYA8pYo8HU9fqjlk3aFhiIR0T7TBdf8ssEWrkVBbdM,8263
101
115
  memos/memories/activation/vllmkv.py,sha256=QM6Y8a3dhqGa08_5rbE-JTR4EakNgoEEVfLdVcvmgms,7765
102
116
  memos/memories/base.py,sha256=Sr-dEuDc982WwdVREQ2nL8L6rUc0KZPTaBJeYdgx8h8,577
@@ -106,38 +120,41 @@ memos/memories/parametric/base.py,sha256=RQK2LeaMRr2rVbfoa0M7RJx4r0dGD_uBXt73eiz
106
120
  memos/memories/parametric/item.py,sha256=9FcY7kf53Uvl5FGXn23o2c0dI_9aUcYjUqTxKOMlbuI,219
107
121
  memos/memories/parametric/lora.py,sha256=TqSI2OjmFi-XXCeM-MchSwh1sAhOwL7_JnOwSy9qpis,1397
108
122
  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
123
+ memos/memories/textual/base.py,sha256=OzWzZR3edfBPa3nu2qsWXWTSt04_2W2jSmJa2Iv78Hs,2817
124
+ memos/memories/textual/general.py,sha256=5fOZqen5FCbLJuCnRAZSZhPMe4PZ1EVhu9kYZ5FV6p4,8856
125
+ memos/memories/textual/item.py,sha256=xhyjuL6QfZaf33OaWb2v96QWlZ01_WLkWkWKDh5N9LU,5249
112
126
  memos/memories/textual/naive.py,sha256=Z_gfbxI6cQGJ_raOTQic4fnpo493Xq3yEQ8qDV4xplo,6954
113
- memos/memories/textual/tree.py,sha256=94pBYJaFa9tYIdwz9Whapt5U7OxYBsN8mxbgh_dAQxw,13602
127
+ memos/memories/textual/tree.py,sha256=8K_x5zv3CV8kmQa6lfhXk4OgcmbRUtSy8hZ7JvbJFmU,13787
114
128
  memos/memories/textual/tree_text_memory/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
129
  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
130
+ memos/memories/textual/tree_text_memory/organize/conflict.py,sha256=_vJ_NpEDk368omnTdjojql0f9XgztU2TbiFbZtlBVuY,8682
117
131
  memos/memories/textual/tree_text_memory/organize/manager.py,sha256=H1ks4etHfBHlWwYCDoEGIrUclAQdGsLaLBSZlxZ-hr4,13591
118
132
  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/relation_reason_detector.py,sha256=N4mCyphCRieezrJRfm0uh4DFeatBDctSM-1I7mnstuE,8784
134
+ memos/memories/textual/tree_text_memory/organize/reorganizer.py,sha256=eCFONhtd-o2f_LRXbkDg6gIpJRpDKhG1z_RbRHE2-eg,24031
121
135
  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
136
+ memos/memories/textual/tree_text_memory/retrieve/internet_retriever.py,sha256=aD2bujlVBWzDa9ZfB9vdB9Hq2erCpc426AVcolItWIM,8656
137
+ memos/memories/textual/tree_text_memory/retrieve/internet_retriever_factory.py,sha256=QAYwo5FYMtzkOnJG_Ht9CpG83wl5s77dgyz0XbyVrQk,3314
124
138
  memos/memories/textual/tree_text_memory/retrieve/reasoner.py,sha256=5csoGjviFbN9RJ8dm3B6kjvoC8xbPD8UMiGusefHaf0,2228
125
139
  memos/memories/textual/tree_text_memory/retrieve/recall.py,sha256=UEnwou53deoUFUpf63DFxJMoRPEctIz29NYT56FpXYs,5773
126
140
  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
141
+ memos/memories/textual/tree_text_memory/retrieve/retrieval_mid_structs.py,sha256=CvGfdwtOwC78OWKb1nOg_tsPualirsRfbtA58_kxNpA,433
142
+ memos/memories/textual/tree_text_memory/retrieve/searcher.py,sha256=fbsKB34dS2W4rCaCtZ7RyatlsUyuY_JtOwfTG1PDxrU,9540
143
+ memos/memories/textual/tree_text_memory/retrieve/task_goal_parser.py,sha256=6QVfBPx26ESehcLYwM1qTUrOaisFIcR2s11Tw-f4AW8,3547
144
+ memos/memories/textual/tree_text_memory/retrieve/utils.py,sha256=KgR8zoQTmcz8Xu5MHViFNFlbWFd08cGv6t5-eslSlbM,2052
145
+ memos/memories/textual/tree_text_memory/retrieve/xinyusearch.py,sha256=x-nlZJ84shgAq9FqQR3YvE6iTMY_B7Pc0YaiGEqM1rc,10518
146
+ memos/memos_tools/dinding_report_bot.py,sha256=kXmooO_wUpwErT6Obql-SQu8lbt0XnM_58znIeQt734,14735
147
+ memos/memos_tools/notification_service.py,sha256=CZ7tZI6m0A063ON0MVEOUb9uontggvrvBLOMzorD0cI,1125
148
+ memos/memos_tools/notification_utils.py,sha256=5J8GUqgf3h8uo1qFvrWawtcqTtu1irxCfSVsFOQfO3I,2380
132
149
  memos/parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
133
150
  memos/parsers/base.py,sha256=AWgWIZzReDiTqiv6z08_9aG2KHVzc4Bdr0Lowz0mWVI,435
134
151
  memos/parsers/factory.py,sha256=hPKTR0wVgMQ5Z9ZL-a9FyHWCpz9UcrG2oSEDYBAoB3g,704
135
152
  memos/parsers/markitdown.py,sha256=SDwmZYC6LyiwdU79yuj6mWNMkQx9YrZzZEHU-4JzBwQ,863
136
- memos/settings.py,sha256=HYNBFRW0CS2Kh4GmMRMA-Yrh3ZhJno4S4B6gx6P3T30,178
153
+ memos/settings.py,sha256=BYOaqhzReu2yjbwrZqx9-uMwoipkj5Clc6VthnBYOvY,225
137
154
  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
155
+ memos/templates/mem_reader_prompts.py,sha256=DoXWlMFybKvRiieYifo29mdC4nZyXApR-f8DGFD8TKk,9926
156
+ memos/templates/mem_scheduler_prompts.py,sha256=aDy0a-DSDrUEPYmXXNSVyo2Z1DcxmHG_XmNf2JN3Hg4,4547
157
+ memos/templates/mos_prompts.py,sha256=a7ltFsPrp7GiSk8jQifpAqLmQ9sAMkpPi6hh3v32Fig,10149
141
158
  memos/templates/tree_reorganize_prompts.py,sha256=kLlMrZU8yH7WMoVn7XF_AkDA-jF_3KDzIkRrj2OUX50,10892
142
159
  memos/types.py,sha256=N7XBYxDTdc50KEsS6YxHvYgs23ykGsZ-wNnaJBVdVi4,1791
143
160
  memos/vec_dbs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -145,8 +162,8 @@ memos/vec_dbs/base.py,sha256=gbw7Gb_zs8Yx8kJIx6aTM-Ylsb4qLkVOFB-iwNJW6Sw,3564
145
162
  memos/vec_dbs/factory.py,sha256=Noa4caqzPT9b59i2jzdpAHFCSHiMfDmgRox1POkRRfE,710
146
163
  memos/vec_dbs/item.py,sha256=mLrcHF0nWtMCUjScBgaeeSqabQ3vJhKr_6wrU_g25ns,1425
147
164
  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,,
165
+ memoryos-0.2.2.dist-info/LICENSE,sha256=FU-b6N8tVc7dzUZGyNjUIG1Ihnrh2iuBziq4a1Gl8HU,11358
166
+ memoryos-0.2.2.dist-info/METADATA,sha256=086Wkxy3q341GzYo2Ih9clAp5JikfhsnFpxxVLzCoxA,14768
167
+ memoryos-0.2.2.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
168
+ memoryos-0.2.2.dist-info/entry_points.txt,sha256=p54si8po81Yb-NK2lx5Z0lNr8QV7-5IECtkC6c8MJmI,40
169
+ memoryos-0.2.2.dist-info/RECORD,,
memos/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "0.2.1"
1
+ __version__ = "0.2.2"
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
@@ -115,6 +116,48 @@ 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": "xinyu",
124
+ "config": {
125
+ "api_key": os.getenv("XINYU_API_KEY"),
126
+ "search_engine_id": os.getenv("XINYU_SEARCH_ENGINE_ID"),
127
+ "max_results": 15,
128
+ "num_per_request": 10,
129
+ "reader": {
130
+ "backend": "simple_struct",
131
+ "config": {
132
+ "llm": {
133
+ "backend": "openai",
134
+ "config": {
135
+ "model_name_or_path": os.getenv("MEMRADER_MODEL"),
136
+ "temperature": 0.6,
137
+ "max_tokens": 5000,
138
+ "top_p": 0.95,
139
+ "top_k": 20,
140
+ "api_key": "EMPTY",
141
+ "api_base": os.getenv("MEMRADER_API_BASE"),
142
+ "remove_think_prefix": True,
143
+ "extra_body": {"chat_template_kwargs": {"enable_thinking": False}},
144
+ },
145
+ },
146
+ "embedder": APIConfig.get_embedder_config(),
147
+ "chunker": {
148
+ "backend": "sentence",
149
+ "config": {
150
+ "tokenizer_or_token_counter": "gpt2",
151
+ "chunk_size": 512,
152
+ "chunk_overlap": 128,
153
+ "min_sentences_per_chunk": 1,
154
+ },
155
+ },
156
+ },
157
+ },
158
+ },
159
+ }
160
+
118
161
  @staticmethod
119
162
  def get_neo4j_community_config(user_id: str | None = None) -> dict[str, Any]:
120
163
  """Get Neo4j community configuration."""
@@ -126,14 +169,14 @@ class APIConfig:
126
169
  "user_name": f"memos{user_id.replace('-', '')}",
127
170
  "auto_create": True,
128
171
  "use_multi_db": False,
129
- "embedding_dimension": 3072,
172
+ "embedding_dimension": int(os.getenv("EMBEDDING_DIMENSION", 3072)),
130
173
  "vec_config": {
131
174
  # Pass nested config to initialize external vector DB
132
175
  # If you use qdrant, please use Server instead of local mode.
133
176
  "backend": "qdrant",
134
177
  "config": {
135
178
  "collection_name": "neo4j_vec_db",
136
- "vector_dimension": 3072,
179
+ "vector_dimension": int(os.getenv("EMBEDDING_DIMENSION", 3072)),
137
180
  "distance_metric": "cosine",
138
181
  "host": "localhost",
139
182
  "port": 6333,
@@ -159,7 +202,7 @@ class APIConfig:
159
202
  "password": os.getenv("NEO4J_PASSWORD", "12345678"),
160
203
  "auto_create": True,
161
204
  "use_multi_db": True,
162
- "embedding_dimension": 3072,
205
+ "embedding_dimension": int(os.getenv("EMBEDDING_DIMENSION", 3072)),
163
206
  }
164
207
 
165
208
  @staticmethod
@@ -173,7 +216,33 @@ class APIConfig:
173
216
  "user_name": f"memos{user_id.replace('-', '')}",
174
217
  "auto_create": True,
175
218
  "use_multi_db": False,
176
- "embedding_dimension": 3072,
219
+ "embedding_dimension": int(os.getenv("EMBEDDING_DIMENSION", 3072)),
220
+ }
221
+
222
+ @staticmethod
223
+ def get_nebular_config(user_id: str | None = None) -> dict[str, Any]:
224
+ """Get Nebular configuration."""
225
+ return {
226
+ "uri": json.loads(os.getenv("NEBULAR_HOSTS", '["localhost"]')),
227
+ "user": os.getenv("NEBULAR_USER", "root"),
228
+ "password": os.getenv("NEBULAR_PASSWORD", "xxxxxx"),
229
+ "space": os.getenv("NEBULAR_SPACE", "shared-tree-textual-memory"),
230
+ "user_name": f"memos{user_id.replace('-', '')}",
231
+ "use_multi_db": False,
232
+ "auto_create": True,
233
+ "embedding_dimension": int(os.getenv("EMBEDDING_DIMENSION", 3072)),
234
+ }
235
+
236
+ @staticmethod
237
+ def get_mysql_config() -> dict[str, Any]:
238
+ """Get MySQL configuration."""
239
+ return {
240
+ "host": os.getenv("MYSQL_HOST", "localhost"),
241
+ "port": int(os.getenv("MYSQL_PORT", "3306")),
242
+ "username": os.getenv("MYSQL_USERNAME", "root"),
243
+ "password": os.getenv("MYSQL_PASSWORD", "12345678"),
244
+ "database": os.getenv("MYSQL_DATABASE", "memos_users"),
245
+ "charset": os.getenv("MYSQL_CHARSET", "utf8mb4"),
177
246
  }
178
247
 
179
248
  @staticmethod
@@ -212,6 +281,34 @@ class APIConfig:
212
281
  """Check if default cube config is enabled via environment variable."""
213
282
  return os.getenv("MOS_ENABLE_DEFAULT_CUBE_CONFIG", "false").lower() == "true"
214
283
 
284
+ @staticmethod
285
+ def is_dingding_bot_enabled() -> bool:
286
+ """Check if DingDing bot is enabled via environment variable."""
287
+ return os.getenv("ENABLE_DINGDING_BOT", "false").lower() == "true"
288
+
289
+ @staticmethod
290
+ def get_dingding_bot_config() -> dict[str, Any] | None:
291
+ """Get DingDing bot configuration if enabled."""
292
+ if not APIConfig.is_dingding_bot_enabled():
293
+ return None
294
+
295
+ return {
296
+ "enabled": True,
297
+ "access_token_user": os.getenv("DINGDING_ACCESS_TOKEN_USER", ""),
298
+ "secret_user": os.getenv("DINGDING_SECRET_USER", ""),
299
+ "access_token_error": os.getenv("DINGDING_ACCESS_TOKEN_ERROR", ""),
300
+ "secret_error": os.getenv("DINGDING_SECRET_ERROR", ""),
301
+ "robot_code": os.getenv("DINGDING_ROBOT_CODE", ""),
302
+ "app_key": os.getenv("DINGDING_APP_KEY", ""),
303
+ "app_secret": os.getenv("DINGDING_APP_SECRET", ""),
304
+ "oss_endpoint": os.getenv("OSS_ENDPOINT", ""),
305
+ "oss_region": os.getenv("OSS_REGION", ""),
306
+ "oss_bucket_name": os.getenv("OSS_BUCKET_NAME", ""),
307
+ "oss_access_key_id": os.getenv("OSS_ACCESS_KEY_ID", ""),
308
+ "oss_access_key_secret": os.getenv("OSS_ACCESS_KEY_SECRET", ""),
309
+ "oss_public_base_url": os.getenv("OSS_PUBLIC_BASE_URL", ""),
310
+ }
311
+
215
312
  @staticmethod
216
313
  def get_product_default_config() -> dict[str, Any]:
217
314
  """Get default configuration for Product API."""
@@ -224,6 +321,7 @@ class APIConfig:
224
321
  "vllm": vllm_config,
225
322
  }
226
323
  backend = os.getenv("MOS_CHAT_MODEL_PROVIDER", "openai")
324
+ mysql_config = APIConfig.get_mysql_config()
227
325
  config = {
228
326
  "user_id": os.getenv("MOS_USER_ID", "root"),
229
327
  "chat_model": {"backend": backend, "config": backend_model[backend]},
@@ -260,6 +358,13 @@ class APIConfig:
260
358
  else:
261
359
  config["enable_mem_scheduler"] = False
262
360
 
361
+ # Add user manager configuration if enabled
362
+ if os.getenv("MOS_USER_MANAGER_BACKEND", "sqlite").lower() == "mysql":
363
+ config["user_manager"] = {
364
+ "backend": "mysql",
365
+ "config": mysql_config,
366
+ }
367
+
263
368
  return config
264
369
 
265
370
  @staticmethod
@@ -300,9 +405,9 @@ class APIConfig:
300
405
  def create_user_config(user_name: str, user_id: str) -> tuple[MOSConfig, GeneralMemCube]:
301
406
  """Create configuration for a specific user."""
302
407
  openai_config = APIConfig.get_openai_config()
303
-
304
408
  qwen_config = APIConfig.qwen_config()
305
409
  vllm_config = APIConfig.vllm_config()
410
+ mysql_config = APIConfig.get_mysql_config()
306
411
  backend = os.getenv("MOS_CHAT_MODEL_PROVIDER", "openai")
307
412
  backend_model = {
308
413
  "openai": openai_config,
@@ -341,7 +446,6 @@ class APIConfig:
341
446
  "top_k": 30,
342
447
  "max_turns_window": 20,
343
448
  }
344
-
345
449
  # Add scheduler configuration if enabled
346
450
  if APIConfig.is_scheduler_enabled():
347
451
  config_dict["mem_scheduler"] = APIConfig.get_scheduler_config()
@@ -349,11 +453,32 @@ class APIConfig:
349
453
  else:
350
454
  config_dict["enable_mem_scheduler"] = False
351
455
 
456
+ # Add user manager configuration if enabled
457
+ if os.getenv("MOS_USER_MANAGER_BACKEND", "sqlite").lower() == "mysql":
458
+ config_dict["user_manager"] = {
459
+ "backend": "mysql",
460
+ "config": mysql_config,
461
+ }
462
+
352
463
  default_config = MOSConfig(**config_dict)
353
464
 
354
- if os.getenv("NEO4J_BACKEND", "neo4j_community").lower() == "neo4j_community":
355
- neo4j_community_config = APIConfig.get_neo4j_community_config(user_id)
465
+ neo4j_community_config = APIConfig.get_neo4j_community_config(user_id)
466
+ neo4j_config = APIConfig.get_neo4j_config(user_id)
467
+ nebular_config = APIConfig.get_nebular_config(user_id)
468
+ internet_config = (
469
+ APIConfig.get_internet_config()
470
+ if os.getenv("ENABLE_INTERNET", "false").lower() == "true"
471
+ else None
472
+ )
473
+ graph_db_backend_map = {
474
+ "neo4j-community": neo4j_community_config,
475
+ "neo4j": neo4j_config,
476
+ "nebular": nebular_config,
477
+ }
478
+ graph_db_backend = os.getenv("NEO4J_BACKEND", "neo4j-community").lower()
479
+ if graph_db_backend in graph_db_backend_map:
356
480
  # Create MemCube config
481
+
357
482
  default_cube_config = GeneralMemCubeConfig.model_validate(
358
483
  {
359
484
  "user_id": user_id,
@@ -364,10 +489,11 @@ class APIConfig:
364
489
  "extractor_llm": {"backend": "openai", "config": openai_config},
365
490
  "dispatcher_llm": {"backend": "openai", "config": openai_config},
366
491
  "graph_db": {
367
- "backend": "neo4j-community",
368
- "config": neo4j_community_config,
492
+ "backend": graph_db_backend,
493
+ "config": graph_db_backend_map[graph_db_backend],
369
494
  },
370
495
  "embedder": APIConfig.get_embedder_config(),
496
+ "internet_retriever": internet_config,
371
497
  },
372
498
  },
373
499
  "act_mem": {}
@@ -377,31 +503,7 @@ class APIConfig:
377
503
  }
378
504
  )
379
505
  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
-
506
+ raise ValueError(f"Invalid Neo4j backend: {graph_db_backend}")
405
507
  default_mem_cube = GeneralMemCube(default_cube_config)
406
508
  return default_config, default_mem_cube
407
509
 
@@ -416,9 +518,21 @@ class APIConfig:
416
518
  return None
417
519
 
418
520
  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")
521
+ neo4j_community_config = APIConfig.get_neo4j_community_config(user_id="default")
522
+ neo4j_config = APIConfig.get_neo4j_config(user_id="default")
523
+ nebular_config = APIConfig.get_nebular_config(user_id="default")
524
+ graph_db_backend_map = {
525
+ "neo4j-community": neo4j_community_config,
526
+ "neo4j": neo4j_config,
527
+ "nebular": nebular_config,
528
+ }
529
+ internet_config = (
530
+ APIConfig.get_internet_config()
531
+ if os.getenv("ENABLE_INTERNET", "false").lower() == "true"
532
+ else None
533
+ )
534
+ graph_db_backend = os.getenv("NEO4J_BACKEND", "neo4j-community").lower()
535
+ if graph_db_backend in graph_db_backend_map:
422
536
  return GeneralMemCubeConfig.model_validate(
423
537
  {
424
538
  "user_id": "default",
@@ -429,12 +543,13 @@ class APIConfig:
429
543
  "extractor_llm": {"backend": "openai", "config": openai_config},
430
544
  "dispatcher_llm": {"backend": "openai", "config": openai_config},
431
545
  "graph_db": {
432
- "backend": "neo4j-community",
433
- "config": neo4j_community_config,
546
+ "backend": graph_db_backend,
547
+ "config": graph_db_backend_map[graph_db_backend],
434
548
  },
435
549
  "embedder": APIConfig.get_embedder_config(),
436
550
  "reorganize": os.getenv("MOS_ENABLE_REORGANIZE", "false").lower()
437
551
  == "true",
552
+ "internet_retriever": internet_config,
438
553
  },
439
554
  },
440
555
  "act_mem": {}
@@ -444,28 +559,4 @@ class APIConfig:
444
559
  }
445
560
  )
446
561
  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
- )
562
+ raise ValueError(f"Invalid Neo4j backend: {graph_db_backend}")