MemoryOS 1.0.1__py3-none-any.whl → 1.1.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.
- {memoryos-1.0.1.dist-info → memoryos-1.1.2.dist-info}/METADATA +7 -2
- {memoryos-1.0.1.dist-info → memoryos-1.1.2.dist-info}/RECORD +79 -65
- {memoryos-1.0.1.dist-info → memoryos-1.1.2.dist-info}/WHEEL +1 -1
- memos/__init__.py +1 -1
- memos/api/client.py +109 -0
- memos/api/config.py +11 -9
- memos/api/context/dependencies.py +15 -55
- memos/api/middleware/request_context.py +9 -40
- memos/api/product_api.py +2 -3
- memos/api/product_models.py +91 -16
- memos/api/routers/product_router.py +23 -16
- memos/api/start_api.py +10 -0
- memos/configs/graph_db.py +4 -0
- memos/configs/mem_scheduler.py +38 -3
- memos/context/context.py +255 -0
- memos/embedders/factory.py +2 -0
- memos/graph_dbs/nebular.py +230 -232
- memos/graph_dbs/neo4j.py +35 -1
- memos/graph_dbs/neo4j_community.py +7 -0
- memos/llms/factory.py +2 -0
- memos/llms/openai.py +74 -2
- memos/log.py +27 -15
- memos/mem_cube/general.py +3 -1
- memos/mem_os/core.py +60 -22
- memos/mem_os/main.py +3 -6
- memos/mem_os/product.py +35 -11
- memos/mem_reader/factory.py +2 -0
- memos/mem_reader/simple_struct.py +127 -74
- memos/mem_scheduler/analyzer/__init__.py +0 -0
- memos/mem_scheduler/analyzer/mos_for_test_scheduler.py +569 -0
- memos/mem_scheduler/analyzer/scheduler_for_eval.py +280 -0
- memos/mem_scheduler/base_scheduler.py +126 -56
- memos/mem_scheduler/general_modules/dispatcher.py +2 -2
- memos/mem_scheduler/general_modules/misc.py +99 -1
- memos/mem_scheduler/general_modules/scheduler_logger.py +17 -11
- memos/mem_scheduler/general_scheduler.py +40 -88
- memos/mem_scheduler/memory_manage_modules/__init__.py +5 -0
- memos/mem_scheduler/memory_manage_modules/memory_filter.py +308 -0
- memos/mem_scheduler/{general_modules → memory_manage_modules}/retriever.py +34 -7
- memos/mem_scheduler/monitors/dispatcher_monitor.py +9 -8
- memos/mem_scheduler/monitors/general_monitor.py +119 -39
- memos/mem_scheduler/optimized_scheduler.py +124 -0
- memos/mem_scheduler/orm_modules/__init__.py +0 -0
- memos/mem_scheduler/orm_modules/base_model.py +635 -0
- memos/mem_scheduler/orm_modules/monitor_models.py +261 -0
- memos/mem_scheduler/scheduler_factory.py +2 -0
- memos/mem_scheduler/schemas/monitor_schemas.py +96 -29
- memos/mem_scheduler/utils/config_utils.py +100 -0
- memos/mem_scheduler/utils/db_utils.py +33 -0
- memos/mem_scheduler/utils/filter_utils.py +1 -1
- memos/mem_scheduler/webservice_modules/__init__.py +0 -0
- memos/memories/activation/kv.py +2 -1
- memos/memories/textual/item.py +95 -16
- memos/memories/textual/naive.py +1 -1
- memos/memories/textual/tree.py +27 -3
- memos/memories/textual/tree_text_memory/organize/handler.py +4 -2
- memos/memories/textual/tree_text_memory/organize/manager.py +28 -14
- memos/memories/textual/tree_text_memory/organize/relation_reason_detector.py +1 -2
- memos/memories/textual/tree_text_memory/organize/reorganizer.py +75 -23
- memos/memories/textual/tree_text_memory/retrieve/bochasearch.py +7 -5
- memos/memories/textual/tree_text_memory/retrieve/internet_retriever.py +6 -2
- memos/memories/textual/tree_text_memory/retrieve/internet_retriever_factory.py +2 -0
- memos/memories/textual/tree_text_memory/retrieve/recall.py +70 -22
- memos/memories/textual/tree_text_memory/retrieve/searcher.py +101 -33
- memos/memories/textual/tree_text_memory/retrieve/xinyusearch.py +5 -4
- memos/memos_tools/singleton.py +174 -0
- memos/memos_tools/thread_safe_dict.py +22 -0
- memos/memos_tools/thread_safe_dict_segment.py +382 -0
- memos/parsers/factory.py +2 -0
- memos/reranker/concat.py +59 -0
- memos/reranker/cosine_local.py +1 -0
- memos/reranker/factory.py +5 -0
- memos/reranker/http_bge.py +225 -12
- memos/templates/mem_scheduler_prompts.py +242 -0
- memos/types.py +4 -1
- memos/api/context/context.py +0 -147
- memos/api/context/context_thread.py +0 -96
- memos/mem_scheduler/mos_for_test_scheduler.py +0 -146
- {memoryos-1.0.1.dist-info → memoryos-1.1.2.dist-info}/entry_points.txt +0 -0
- {memoryos-1.0.1.dist-info → memoryos-1.1.2.dist-info/licenses}/LICENSE +0 -0
- /memos/mem_scheduler/{general_modules → webservice_modules}/rabbitmq_service.py +0 -0
- /memos/mem_scheduler/{general_modules → webservice_modules}/redis_service.py +0 -0
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: MemoryOS
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.1.2
|
|
4
4
|
Summary: Intelligence Begins with Memory
|
|
5
5
|
License: Apache-2.0
|
|
6
|
+
License-File: LICENSE
|
|
6
7
|
Keywords: memory,llm,language model,memoryOS,agent,kv cache,lora
|
|
7
8
|
Author: MemTensor
|
|
8
9
|
Author-email: MemTensor@memtensor.cn
|
|
@@ -22,6 +23,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
22
23
|
Provides-Extra: all
|
|
23
24
|
Provides-Extra: mem-reader
|
|
24
25
|
Provides-Extra: mem-scheduler
|
|
26
|
+
Provides-Extra: mem-user
|
|
25
27
|
Provides-Extra: tree-mem
|
|
26
28
|
Requires-Dist: chonkie (>=1.0.7,<2.0.0) ; extra == "all"
|
|
27
29
|
Requires-Dist: chonkie (>=1.0.7,<2.0.0) ; extra == "mem-reader"
|
|
@@ -35,6 +37,9 @@ Requires-Dist: ollama (>=0.4.8,<0.5.0)
|
|
|
35
37
|
Requires-Dist: openai (>=1.77.0,<2.0.0)
|
|
36
38
|
Requires-Dist: pika (>=1.3.2,<2.0.0) ; extra == "all"
|
|
37
39
|
Requires-Dist: pika (>=1.3.2,<2.0.0) ; extra == "mem-scheduler"
|
|
40
|
+
Requires-Dist: pymysql (>=1.1.0,<2.0.0)
|
|
41
|
+
Requires-Dist: pymysql (>=1.1.0,<2.0.0) ; extra == "all"
|
|
42
|
+
Requires-Dist: pymysql (>=1.1.0,<2.0.0) ; extra == "mem-user"
|
|
38
43
|
Requires-Dist: python-dateutil (>=2.9.0.post0,<3.0.0)
|
|
39
44
|
Requires-Dist: qdrant-client (>=1.14.2,<2.0.0) ; extra == "all"
|
|
40
45
|
Requires-Dist: redis (>=6.2.0,<7.0.0) ; extra == "all"
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
memos/__init__.py,sha256=
|
|
2
|
-
memos/api/
|
|
3
|
-
memos/api/
|
|
4
|
-
memos/api/context/
|
|
5
|
-
memos/api/context/dependencies.py,sha256=byLwmFsocQufcmi5WFg2j6XjWv9k4PCozCV7uRdCO3M,2468
|
|
1
|
+
memos/__init__.py,sha256=UskX96T9J0ZaLp9Ubx5fFFtJcY6qE1BeLumraYRyFCk,575
|
|
2
|
+
memos/api/client.py,sha256=zaXBRlAlGX28b5xWKilal-zoR2DYLRIYxo47Q3LdEFU,4045
|
|
3
|
+
memos/api/config.py,sha256=SCUtLtYOebne73Bj3QHQR29L1JtftSWR4teTpd8A7gA,24732
|
|
4
|
+
memos/api/context/dependencies.py,sha256=G9vfMVEeQczSd7ma4hlXSk2S8K6txjXHVO27R6FlbjQ,1240
|
|
6
5
|
memos/api/exceptions.py,sha256=MfTNXwLwJE7tHwNVTHlJsB3kF14oA0JfA1-S8xrZEus,833
|
|
7
6
|
memos/api/mcp_serve.py,sha256=GtJDZYx4yxKMs4sCddKJbRAjgsbRunr6S2nAT-KeBMs,21270
|
|
8
|
-
memos/api/middleware/request_context.py,sha256=
|
|
9
|
-
memos/api/product_api.py,sha256=
|
|
10
|
-
memos/api/product_models.py,sha256=
|
|
7
|
+
memos/api/middleware/request_context.py,sha256=RNaeJt1AqmSfCB6lxkp8voyOjum7k6CrMV2w3cZgv10,2088
|
|
8
|
+
memos/api/product_api.py,sha256=OOrrJ8h4BuJWXD8L8wb22E0Zfa73X0PwLC51wF0d5sc,1178
|
|
9
|
+
memos/api/product_models.py,sha256=0yvI2q5Md_j8P4IK7NuqKMs9csm7I0-cFqufvPSrmRM,9292
|
|
11
10
|
memos/api/routers/__init__.py,sha256=nbduRsr-7RkfBIYEBkbYkpB-7GG7QZgNfEQwLHbDXpI,21
|
|
12
|
-
memos/api/routers/product_router.py,sha256=
|
|
13
|
-
memos/api/start_api.py,sha256=
|
|
11
|
+
memos/api/routers/product_router.py,sha256=63FzAgIpSNijSyRspk5ftHwhGzTM5D19IbP23xLU9C0,17568
|
|
12
|
+
memos/api/start_api.py,sha256=gR1vM7tYKiS1VNv9Jya9gvflhxeobFV4AQHTKCeW95Q,15185
|
|
14
13
|
memos/chunkers/__init__.py,sha256=7lZOTN3e9Yp5XBsDX5wnWJ3tY126cRU9GmfevzJXAtU,67
|
|
15
14
|
memos/chunkers/base.py,sha256=z0rG5vM7FGremQdSZ_3jlTGbsDtlkWAYWdtSAGqpaR4,655
|
|
16
15
|
memos/chunkers/factory.py,sha256=ixpYz41GG3SZW-1ynLvfbhOZ0aGnFi2wUIYT4_Uxh30,693
|
|
@@ -20,26 +19,27 @@ memos/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
20
19
|
memos/configs/base.py,sha256=bOOhEU6HGFTq5jne_TXn8Br72rvAfJHYvYllFUPs12A,2588
|
|
21
20
|
memos/configs/chunker.py,sha256=Ulci0MyhS_FkuV95l7Pr9Vei179aEFEUigwVmtmSDfI,1593
|
|
22
21
|
memos/configs/embedder.py,sha256=e_aOkUamW2NYSBEzsKkw0jNqHERy5GU3A2cSH5G5y68,2750
|
|
23
|
-
memos/configs/graph_db.py,sha256=
|
|
22
|
+
memos/configs/graph_db.py,sha256=U_pNInRYW8iB-XG_5jLmPEcGKEmsGJmNIHPBN-m_Y80,5961
|
|
24
23
|
memos/configs/internet_retriever.py,sha256=yWU6avRU9Hqox8hmR0EyILUr4x9wDvcKkhwRwT3PROc,3749
|
|
25
24
|
memos/configs/llm.py,sha256=cso9ZBOdPzOAcgypp2nPFHdynswdG9MZZ-qdgOTEXL8,4175
|
|
26
25
|
memos/configs/mem_chat.py,sha256=TjEQHRG1HpLwCBo3hrn5aVK23rykNtV6Be5p4YIg7F4,2571
|
|
27
26
|
memos/configs/mem_cube.py,sha256=k95dvNxusnyS9w6ciWgNkUXwbHa4HTUEUS-PfPbR0BM,3105
|
|
28
27
|
memos/configs/mem_os.py,sha256=FGrBaFWGUdCKkb4MFDRz9hCE7hydLd0XEFgUrqEhQJw,2755
|
|
29
28
|
memos/configs/mem_reader.py,sha256=hTLFdmPhPIY70Fh_s4ptTGJ3LN-B9n111QG1kboxoNk,2307
|
|
30
|
-
memos/configs/mem_scheduler.py,sha256=
|
|
29
|
+
memos/configs/mem_scheduler.py,sha256=NfukLGW-fm7912tCzvN5NeOFQiALT_kE7fuiVAlTDRY,9158
|
|
31
30
|
memos/configs/mem_user.py,sha256=U0UzCvTacUOxeajJMfXAWWy3a0l52B4LUhH_L7U1VQ4,2036
|
|
32
31
|
memos/configs/memory.py,sha256=wWrDvO67evM4Pn-utqneliIsJlap0ddNhdEH1Vn8HbA,7636
|
|
33
32
|
memos/configs/parser.py,sha256=dy-QoevJbCnkJePKgpzR4oziOzYnS4jB6XH-YrpeMns,1145
|
|
34
33
|
memos/configs/reranker.py,sha256=8IbKPPNUcGq9uGhgXcx41eYjDJr1lZKv89UKrA9v-Ck,459
|
|
35
34
|
memos/configs/utils.py,sha256=X9NQ6-xURsZROAdS3WT96phVfHcOHgDPOo2Yq68QoKM,242
|
|
36
35
|
memos/configs/vec_db.py,sha256=Gjhhda94pyTDjyJGe2Z6rVEqH4FtViiwq1-7QWhjarM,2335
|
|
36
|
+
memos/context/context.py,sha256=3Sj0CW4H16MA2VvkGPrYfPVbRB0TmdUkEZfNrGBYyvc,7806
|
|
37
37
|
memos/dependency.py,sha256=T5jhi9J6EQvx41dP8ma6hdCNn86d1amEP1iMASnrVbA,1842
|
|
38
38
|
memos/deprecation.py,sha256=k2i4bBKqIwu20guwJmPPjOm7reOy19GzLwrTMrIqjPk,7408
|
|
39
39
|
memos/embedders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
40
40
|
memos/embedders/ark.py,sha256=i9dXR_lNXklxT8yUj_GiMIBDMR5tc40ltZMmX3CnJGk,3436
|
|
41
41
|
memos/embedders/base.py,sha256=zOYERcaqBVCyMVndcR6vhFC_O2itEuTM058odDfhTx8,449
|
|
42
|
-
memos/embedders/factory.py,sha256=
|
|
42
|
+
memos/embedders/factory.py,sha256=rZm4WP01_mqTbByv5g7Qc4OUCem4KP8YoEndmZv_9Lw,1110
|
|
43
43
|
memos/embedders/ollama.py,sha256=8lHeMCqxej44ZgeDsPGL-5almxRBWsYYYflu5LeAf7w,2361
|
|
44
44
|
memos/embedders/sentence_transformer.py,sha256=QJoW7qMbvAzmMUXzIhMHXVFnDFurfzxdoVUHIlslzec,1647
|
|
45
45
|
memos/embedders/universal_api.py,sha256=BpmLL18y2neEAIE4CdC-1qr0uOEOJ6o7V_zycdkJmZk,1270
|
|
@@ -48,65 +48,76 @@ memos/graph_dbs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
48
48
|
memos/graph_dbs/base.py,sha256=0NXdXII-UmX_bqUhBVpFdxRURLAK8sIFFZg51J9QzV0,8293
|
|
49
49
|
memos/graph_dbs/factory.py,sha256=N1NaABiNnYvnsB-L82LrQaLvND5seCabFdSDsD8LoyA,932
|
|
50
50
|
memos/graph_dbs/item.py,sha256=BfK17hA_hHu7I348jWugP_rb9GS5hpKfgqtYGGHBohk,1450
|
|
51
|
-
memos/graph_dbs/nebular.py,sha256=
|
|
52
|
-
memos/graph_dbs/neo4j.py,sha256=
|
|
53
|
-
memos/graph_dbs/neo4j_community.py,sha256=
|
|
51
|
+
memos/graph_dbs/nebular.py,sha256=hBDs3p2CLUp2vKOVX0VaVzHbFOh1Mfbngcl-Jlv8zS8,64462
|
|
52
|
+
memos/graph_dbs/neo4j.py,sha256=HI8ZgHJ5dnOQgA4EBtrRo-olGstLZErgnfwn0OepIyg,43872
|
|
53
|
+
memos/graph_dbs/neo4j_community.py,sha256=yvXhM7zvjvhdXHVoT_d2w6OaoK2Tqcl-rzAHuw0Wvgg,11851
|
|
54
54
|
memos/hello_world.py,sha256=RV1vXfK1_U_xAvSusqc-4A8wk3yr8WEQ9q88dmBxvnI,3057
|
|
55
55
|
memos/llms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
56
56
|
memos/llms/base.py,sha256=CF60OpXdSLf-B5bHhQTnomMEkrNCg-SHauu1vo8HpeU,798
|
|
57
57
|
memos/llms/deepseek.py,sha256=gXlInNa9Ts5-qw6nF4yD88vk5-UiW6-1C72DlE8Agok,1992
|
|
58
|
-
memos/llms/factory.py,sha256=
|
|
58
|
+
memos/llms/factory.py,sha256=6mrUKyZ85bE8Bxq9gRPe_tuy_nCafAHuxAPCSUd9hKw,1236
|
|
59
59
|
memos/llms/hf.py,sha256=zWz-7j2VnhOyytBbZnEJyNLezOFdV7vuMF6JRwbz9-g,15280
|
|
60
60
|
memos/llms/hf_singleton.py,sha256=oxG9rSFZT_MhOWImttDVZfRZvxmpwJ8FarjL8NpgpRM,3502
|
|
61
61
|
memos/llms/ollama.py,sha256=r1HMvSvG_m8gFfwLJhTriJdB6VzKEqz9f9JFs2RJGTw,2732
|
|
62
|
-
memos/llms/openai.py,sha256=
|
|
62
|
+
memos/llms/openai.py,sha256=lrNFCzr-8kbPjny7Vaafvt7EYPr71Ify1GlHZUNMqQk,6500
|
|
63
63
|
memos/llms/qwen.py,sha256=RFVoC_hxFe4dhCQ583fbTcT1AC3jDrKH0r6cDsZ0Cmo,2459
|
|
64
64
|
memos/llms/utils.py,sha256=OcbM9iSpFJpio7sTT5wvxVx-JnqjIx7eSgiRk7dt0ZI,292
|
|
65
65
|
memos/llms/vllm.py,sha256=9ZEgTUyRk86Wp2deQH0o1oW2GbHQ7C3evi-McELyT2Q,5792
|
|
66
|
-
memos/log.py,sha256=
|
|
66
|
+
memos/log.py,sha256=Cpq6hHY8ETqOhC_l5xW-6n-qniCJ1TTrpl4yHyTkopQ,6761
|
|
67
67
|
memos/mem_chat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
68
68
|
memos/mem_chat/base.py,sha256=LICB_mwUkdCVKb_r33GEPbrEr-2v3dEnI54cAvhcEew,830
|
|
69
69
|
memos/mem_chat/factory.py,sha256=KKCDG9FrpfY2hD3iJ4GM9x8dN09dyhstP1cOUH_knrY,720
|
|
70
70
|
memos/mem_chat/simple.py,sha256=-DRlE8nKZcGuwEubALK-nUf-wWRbGXkDJXUg8Dxhoyo,7919
|
|
71
71
|
memos/mem_cube/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
72
|
memos/mem_cube/base.py,sha256=NoZKz16oO5AAnJ0alcY52Z1c3C1rbGRe8Znz0CCzDnw,864
|
|
73
|
-
memos/mem_cube/general.py,sha256=
|
|
73
|
+
memos/mem_cube/general.py,sha256=4n7LHe-KmeyZOdl0e4optSC9T7ut8IMcRJQEDC6sYV0,8490
|
|
74
74
|
memos/mem_cube/utils.py,sha256=gDwiRo9VEvaTaRDzjWOGAH13ALRRV9bvUG7A-wy4KTA,5522
|
|
75
75
|
memos/mem_os/client.py,sha256=0M-WRTlQr7fDAYtq4B8dsMR0PfmyvD-ySMhKcW3Umd0,43
|
|
76
|
-
memos/mem_os/core.py,sha256=
|
|
77
|
-
memos/mem_os/main.py,sha256=
|
|
78
|
-
memos/mem_os/product.py,sha256=
|
|
76
|
+
memos/mem_os/core.py,sha256=4qLdqBtL-1Ix5w5ulDtEK7onY6yX_-Kp4T3vF8IVTzM,47494
|
|
77
|
+
memos/mem_os/main.py,sha256=0L4-jqagpd9-5eHIScsyCTjPlOzsPiEwf9ca9r4LcgA,24526
|
|
78
|
+
memos/mem_os/product.py,sha256=msECenlI3z2On3jA4IhHNAwjFofQiYxWF4l_pR0OjL4,59996
|
|
79
79
|
memos/mem_os/utils/default_config.py,sha256=OdDCyrE3-duSK0vMfO4AelGUwMt14ffHKMrvki0YKlI,12273
|
|
80
80
|
memos/mem_os/utils/format_utils.py,sha256=QaxImCM0E27l2tkRLzWM1s8vSp3MO_LNaY0APHgV35o,49883
|
|
81
81
|
memos/mem_os/utils/reference_utils.py,sha256=RtVwcuG3zFaxtMxY4S1_S8XWKQ7hO5UtXMswORBxyy0,6129
|
|
82
82
|
memos/mem_reader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
83
83
|
memos/mem_reader/base.py,sha256=SSuaD3J88XbHsME1Qa-EAgZ57xApPHPHppMSeeS3JZ4,957
|
|
84
|
-
memos/mem_reader/factory.py,sha256=
|
|
84
|
+
memos/mem_reader/factory.py,sha256=FWsNCHgsHrLb3__DP-uIB9oIZiualVY1Q-tEdP-mzXY,849
|
|
85
85
|
memos/mem_reader/memory.py,sha256=f3fAjrs8Jf6mBZWTgzkEZle7XjDwTJHxM1L2sOb85Tg,13288
|
|
86
|
-
memos/mem_reader/simple_struct.py,sha256=
|
|
86
|
+
memos/mem_reader/simple_struct.py,sha256=5YJ701brNJr7MlIPMji4aJ5BEHUe-tfifWeErxB_WuM,14085
|
|
87
87
|
memos/mem_scheduler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
88
|
-
memos/mem_scheduler/
|
|
88
|
+
memos/mem_scheduler/analyzer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
89
|
+
memos/mem_scheduler/analyzer/mos_for_test_scheduler.py,sha256=VDkoBDtFsSqVBbtizjcqCkQVc5EWYa-wZBp-VcPs7R8,24283
|
|
90
|
+
memos/mem_scheduler/analyzer/scheduler_for_eval.py,sha256=ThiSlO9QcQW0TH3bj161zZC7OQm0RQxkYmx_b0-j0_I,9984
|
|
91
|
+
memos/mem_scheduler/base_scheduler.py,sha256=-V5HsZX35qcLAOOwimpiML5QVYVvbk5AygtxEQjGiC4,26356
|
|
89
92
|
memos/mem_scheduler/general_modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
90
93
|
memos/mem_scheduler/general_modules/base.py,sha256=j2FfGl5mx0CflHGnzu2fFFfZT_WRAMzmmTW_HUxFRgw,2946
|
|
91
|
-
memos/mem_scheduler/general_modules/dispatcher.py,sha256=
|
|
92
|
-
memos/mem_scheduler/general_modules/misc.py,sha256=
|
|
93
|
-
memos/mem_scheduler/general_modules/
|
|
94
|
-
memos/mem_scheduler/
|
|
95
|
-
memos/mem_scheduler/
|
|
96
|
-
memos/mem_scheduler/
|
|
97
|
-
memos/mem_scheduler/
|
|
94
|
+
memos/mem_scheduler/general_modules/dispatcher.py,sha256=be8UDzX977rgy6NPrMsG3IzHV9ehq38umb0E7NpcQ6s,7392
|
|
95
|
+
memos/mem_scheduler/general_modules/misc.py,sha256=nQXGJJ6nZMl_ljmXbGIwuLt-9sLHdPkqBvR24ZBaDGs,7087
|
|
96
|
+
memos/mem_scheduler/general_modules/scheduler_logger.py,sha256=F4ZUkc5OBZZF4UwaKybf42UEQxgQz709NybpsUVRjWA,10132
|
|
97
|
+
memos/mem_scheduler/general_scheduler.py,sha256=0JYxo3uqmC9-69N2CHdbLQbXxm_qbLtWe_67BK3hHQ8,12780
|
|
98
|
+
memos/mem_scheduler/memory_manage_modules/__init__.py,sha256=S7IUj-mFYxytsfb072ugQGEpFdnfSsPTcXowsH8Z_Cc,133
|
|
99
|
+
memos/mem_scheduler/memory_manage_modules/memory_filter.py,sha256=K6wI_9ewvVuGY-PMtD6HzVO289ljXshTOTPvXeCd2L4,12440
|
|
100
|
+
memos/mem_scheduler/memory_manage_modules/retriever.py,sha256=Zl5M44lD7pihIwQ0T0iJ5udWL_bNAo-Kvt6jhtdiB1M,8929
|
|
98
101
|
memos/mem_scheduler/monitors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
99
|
-
memos/mem_scheduler/monitors/dispatcher_monitor.py,sha256=
|
|
100
|
-
memos/mem_scheduler/monitors/general_monitor.py,sha256=
|
|
101
|
-
memos/mem_scheduler/
|
|
102
|
-
memos/mem_scheduler/
|
|
102
|
+
memos/mem_scheduler/monitors/dispatcher_monitor.py,sha256=gAPuWoeWVm3338qamo8v7nfT0UVpFkpXb35ZshrTKbo,11177
|
|
103
|
+
memos/mem_scheduler/monitors/general_monitor.py,sha256=6JWXGTuv-udyIe_K0l_rMY1ITL8OgiXxnABGim9YFJ0,16718
|
|
104
|
+
memos/mem_scheduler/optimized_scheduler.py,sha256=J6L366nZBe8a9j6_nwvysUSPTr5mGVT1xi6mo7zHN9E,4997
|
|
105
|
+
memos/mem_scheduler/orm_modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
106
|
+
memos/mem_scheduler/orm_modules/base_model.py,sha256=oyWIL9ISx5qh759h8OPETOk1NKAmpjMX1ObG-uC1J7k,23880
|
|
107
|
+
memos/mem_scheduler/orm_modules/monitor_models.py,sha256=XUQdznlD29NQlRM-q1MSajaJNmBGL9AVa7o1VHuBWLE,9457
|
|
108
|
+
memos/mem_scheduler/scheduler_factory.py,sha256=fUEt9wlTwyhN0jeZO8fVdkbA0VZnV6zsyycw3acKCPI,922
|
|
103
109
|
memos/mem_scheduler/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
104
110
|
memos/mem_scheduler/schemas/general_schemas.py,sha256=r9Ew8KHTVxiDTTLKad1jw12uNMyLltFmn2htplSqbhk,1344
|
|
105
111
|
memos/mem_scheduler/schemas/message_schemas.py,sha256=ahTEY6x8gSXszURne1nKgHCkfEXfKOEXaTKTUsQ9IW0,5977
|
|
106
|
-
memos/mem_scheduler/schemas/monitor_schemas.py,sha256=
|
|
112
|
+
memos/mem_scheduler/schemas/monitor_schemas.py,sha256=wprD-O2LXW4nNVoTT-wR0bx0mH_VP0zW5RBck8NZm7I,15636
|
|
107
113
|
memos/mem_scheduler/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
108
|
-
memos/mem_scheduler/utils/
|
|
114
|
+
memos/mem_scheduler/utils/config_utils.py,sha256=x0Mp0wuoIQtDZkaXXJUTtesLWFq8eyh-hjkLEm4cOTM,3819
|
|
115
|
+
memos/mem_scheduler/utils/db_utils.py,sha256=Fba2OIDlQsYwydUyHlcZh7VFsUeeIkSpO0ogePOofps,1042
|
|
116
|
+
memos/mem_scheduler/utils/filter_utils.py,sha256=RoWrCf-qk2BJdV2-5ftWYM_UEQqYF6QZWtjPzfHskSc,6299
|
|
109
117
|
memos/mem_scheduler/utils/misc_utils.py,sha256=zOCpwzCrj0mfiW7BoWiTFEPj-dzdcYZnqMDtKDGO0kc,2765
|
|
118
|
+
memos/mem_scheduler/webservice_modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
119
|
+
memos/mem_scheduler/webservice_modules/rabbitmq_service.py,sha256=kXfL8Q7eo8H2OMUDhAotbYG9cpL89HDJ5h7A64caKrw,12620
|
|
120
|
+
memos/mem_scheduler/webservice_modules/redis_service.py,sha256=oHa9EvrpkknGAeygjmc8tExyCJVOU_7SZU6ScMOT9pY,5898
|
|
110
121
|
memos/mem_user/factory.py,sha256=zdC-208YYU4dpUaMpICzNbhMTiLaJDxLJoq4bl-6YiU,2956
|
|
111
122
|
memos/mem_user/mysql_persistent_user_manager.py,sha256=fSndxW6MR7u9ImWCPq-gsuFb2TYX1BXF6Kkv1FCS6Fw,9257
|
|
112
123
|
memos/mem_user/mysql_user_manager.py,sha256=Q_3FxNTw8Vf6uPotHk4YUooa8EVo0jBFTFBKJHPm_6o,16331
|
|
@@ -117,7 +128,7 @@ memos/memories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
117
128
|
memos/memories/activation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
118
129
|
memos/memories/activation/base.py,sha256=kiC35AOnuofgYMzLxZyVULsfOoVq03BGvi6AXtNvF-I,1151
|
|
119
130
|
memos/memories/activation/item.py,sha256=8oo3odhNnvg36NYLobwkehAHj74mo36IcH2MrlXSCEI,1720
|
|
120
|
-
memos/memories/activation/kv.py,sha256=
|
|
131
|
+
memos/memories/activation/kv.py,sha256=A1_dlJYrdcsLz_kJRD3dq614mw1FC4uiA_c6WVF54VU,8904
|
|
121
132
|
memos/memories/activation/vllmkv.py,sha256=QM6Y8a3dhqGa08_5rbE-JTR4EakNgoEEVfLdVcvmgms,7765
|
|
122
133
|
memos/memories/base.py,sha256=Sr-dEuDc982WwdVREQ2nL8L6rUc0KZPTaBJeYdgx8h8,577
|
|
123
134
|
memos/memories/factory.py,sha256=Z49DRF_VHQJI2UNiTJ_1ouPqg_iCcuV_Tcg5fXkKxlM,1418
|
|
@@ -128,57 +139,60 @@ memos/memories/parametric/lora.py,sha256=TqSI2OjmFi-XXCeM-MchSwh1sAhOwL7_JnOwSy9
|
|
|
128
139
|
memos/memories/textual/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
129
140
|
memos/memories/textual/base.py,sha256=5AQ0oR1rLd7yiwIKPxt2OmAlL6mWhwUl_U8zuafoDfI,2827
|
|
130
141
|
memos/memories/textual/general.py,sha256=exHPHejBE6jZNLm8pT951sIko8hAqNdOaHZdnNdfzBA,8877
|
|
131
|
-
memos/memories/textual/item.py,sha256=
|
|
132
|
-
memos/memories/textual/naive.py,sha256=
|
|
133
|
-
memos/memories/textual/tree.py,sha256=
|
|
142
|
+
memos/memories/textual/item.py,sha256=uzThiCAKGkIyG0hHL9ywWQNVEq6tr-yMCakoZBW7Dz8,8280
|
|
143
|
+
memos/memories/textual/naive.py,sha256=BjsDp3CdxcQzvKkGr1e_t4qdL_OFemwLjDf37yLRO-4,6964
|
|
144
|
+
memos/memories/textual/tree.py,sha256=Ch-oS_UDXhkYmH8q7pd2QKCF3T2tCyMQOUub-Y3nCu0,16189
|
|
134
145
|
memos/memories/textual/tree_text_memory/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
135
146
|
memos/memories/textual/tree_text_memory/organize/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
136
|
-
memos/memories/textual/tree_text_memory/organize/handler.py,sha256=
|
|
137
|
-
memos/memories/textual/tree_text_memory/organize/manager.py,sha256=
|
|
138
|
-
memos/memories/textual/tree_text_memory/organize/relation_reason_detector.py,sha256=
|
|
139
|
-
memos/memories/textual/tree_text_memory/organize/reorganizer.py,sha256=
|
|
147
|
+
memos/memories/textual/tree_text_memory/organize/handler.py,sha256=zWkmm0ZdQjmuDUbmQkslGvjFrB-CWuq4y2h7uOTeUro,8135
|
|
148
|
+
memos/memories/textual/tree_text_memory/organize/manager.py,sha256=pkFGEi50xs8JA6M-MwB3EjC9vfJwUZ3683cM2L6x-XA,10319
|
|
149
|
+
memos/memories/textual/tree_text_memory/organize/relation_reason_detector.py,sha256=h2vGAp_0l7xd60CIwc0bz5-FNAN9Sju7e_e7vzcj25s,8815
|
|
150
|
+
memos/memories/textual/tree_text_memory/organize/reorganizer.py,sha256=ONktG6-0DPg-PbAudnLfhh0ccah9cdtGr-cJyWxucuI,24581
|
|
140
151
|
memos/memories/textual/tree_text_memory/retrieve/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
141
|
-
memos/memories/textual/tree_text_memory/retrieve/bochasearch.py,sha256=
|
|
142
|
-
memos/memories/textual/tree_text_memory/retrieve/internet_retriever.py,sha256=
|
|
143
|
-
memos/memories/textual/tree_text_memory/retrieve/internet_retriever_factory.py,sha256=
|
|
152
|
+
memos/memories/textual/tree_text_memory/retrieve/bochasearch.py,sha256=7IGL3QHLI74ZJmAIPLFrwxqSXkqubHAKiR7q4po5Tpw,8384
|
|
153
|
+
memos/memories/textual/tree_text_memory/retrieve/internet_retriever.py,sha256=RRViVkwQAlXoqH9_0azIfGr2g2DsAybglXlxJqV27Ns,8719
|
|
154
|
+
memos/memories/textual/tree_text_memory/retrieve/internet_retriever_factory.py,sha256=ob1E-iXjCSSbb6KviZWXAO7LiMt5h9C7xi4bYjC_LiY,3850
|
|
144
155
|
memos/memories/textual/tree_text_memory/retrieve/reasoner.py,sha256=5csoGjviFbN9RJ8dm3B6kjvoC8xbPD8UMiGusefHaf0,2228
|
|
145
|
-
memos/memories/textual/tree_text_memory/retrieve/recall.py,sha256=
|
|
156
|
+
memos/memories/textual/tree_text_memory/retrieve/recall.py,sha256=DnK7aak5eeZpMf6pIwFpkW5IZ92FLtVQEnhf8Qan1Cw,9504
|
|
146
157
|
memos/memories/textual/tree_text_memory/retrieve/reranker.py,sha256=GIo_ZqA8Oea-L58Md724ak7Oq2fCnLfBWBUvMWiD7mY,3727
|
|
147
158
|
memos/memories/textual/tree_text_memory/retrieve/retrieval_mid_structs.py,sha256=CvGfdwtOwC78OWKb1nOg_tsPualirsRfbtA58_kxNpA,433
|
|
148
|
-
memos/memories/textual/tree_text_memory/retrieve/searcher.py,sha256=
|
|
159
|
+
memos/memories/textual/tree_text_memory/retrieve/searcher.py,sha256=gbfjsA6skRslhreDsFuARRTjyI0aZmhF7GpncnOJoBg,14772
|
|
149
160
|
memos/memories/textual/tree_text_memory/retrieve/task_goal_parser.py,sha256=vqgyczpS5As9zmljX9YF7TL0fgpl_T22FN5qV_AbcS8,3733
|
|
150
161
|
memos/memories/textual/tree_text_memory/retrieve/utils.py,sha256=ISdSJEq_HqtPEqmTRQO6dXx7ioDWrbLi7mrrep4iQDw,2191
|
|
151
|
-
memos/memories/textual/tree_text_memory/retrieve/xinyusearch.py,sha256=
|
|
162
|
+
memos/memories/textual/tree_text_memory/retrieve/xinyusearch.py,sha256=2NJTtVeLkqbNwCjwWkPw8haLWeUNpSifGa-BSiPpz9g,10611
|
|
152
163
|
memos/memos_tools/dinding_report_bot.py,sha256=kXmooO_wUpwErT6Obql-SQu8lbt0XnM_58znIeQt734,14735
|
|
153
164
|
memos/memos_tools/lockfree_dict.py,sha256=A2hFUSyjTIauiXONYzr7zFZfGlOF9J9cqrfzDNBaw_w,3811
|
|
154
165
|
memos/memos_tools/notification_service.py,sha256=CZ7tZI6m0A063ON0MVEOUb9uontggvrvBLOMzorD0cI,1125
|
|
155
166
|
memos/memos_tools/notification_utils.py,sha256=uHrDOXEW-WUJcoeR7gVhr2BVjNYUxIjz8cCve5F1PPs,3747
|
|
156
|
-
memos/memos_tools/
|
|
167
|
+
memos/memos_tools/singleton.py,sha256=k7D0cO65gnhWmYeXdQwQ6baBCSWtjH_T0niGE2ORWUw,6288
|
|
168
|
+
memos/memos_tools/thread_safe_dict.py,sha256=bM0UzyO2-1V0Uq94k828vGWTHUSj7oS4cA6K-DCLPus,8534
|
|
169
|
+
memos/memos_tools/thread_safe_dict_segment.py,sha256=zS9Nu06EThlttTrleZYkNN-bR0a3df-6imYWjPZSXTo,12478
|
|
157
170
|
memos/parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
158
171
|
memos/parsers/base.py,sha256=AWgWIZzReDiTqiv6z08_9aG2KHVzc4Bdr0Lowz0mWVI,435
|
|
159
|
-
memos/parsers/factory.py,sha256=
|
|
172
|
+
memos/parsers/factory.py,sha256=yRz-KIPRxBld2KOdHxh92SHQwHIevPzN9nLxqEz_pKY,787
|
|
160
173
|
memos/parsers/markitdown.py,sha256=SDwmZYC6LyiwdU79yuj6mWNMkQx9YrZzZEHU-4JzBwQ,863
|
|
161
174
|
memos/reranker/__init__.py,sha256=bq3LWhVg6LdK50Hx6jOM-eWEaNM0mX4_JuHNfYgUqE0,69
|
|
162
175
|
memos/reranker/base.py,sha256=bl9W-CqtlAs2k7loPvd3TRqq6Illybt6IosqrYw0DHw,573
|
|
163
|
-
memos/reranker/
|
|
164
|
-
memos/reranker/
|
|
165
|
-
memos/reranker/
|
|
176
|
+
memos/reranker/concat.py,sha256=7tZ-3VhkvMkPmUwqyzU4h_0EQ-PMQfdDwNl4B_VHlSA,1768
|
|
177
|
+
memos/reranker/cosine_local.py,sha256=vfDP9FkC0Cw6hvFZOeGlKz3q7J0fpI0Uh9fZFsRFGyY,2988
|
|
178
|
+
memos/reranker/factory.py,sha256=TvumTHbfjLsJs96S0rWHvCsmQJ4naGBMYWLvfJ61QzQ,1505
|
|
179
|
+
memos/reranker/http_bge.py,sha256=fl8HVGqBtPDCw-h84KgoJ0zFJp1vXZKvmS6oiBKnuSk,11357
|
|
166
180
|
memos/reranker/noop.py,sha256=OOy3d_AHydCm5BH4VNHEfq_vDE-D-WBgwSKIp8GQloo,414
|
|
167
181
|
memos/settings.py,sha256=BYOaqhzReu2yjbwrZqx9-uMwoipkj5Clc6VthnBYOvY,225
|
|
168
182
|
memos/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
169
183
|
memos/templates/mem_reader_prompts.py,sha256=B1sWIuZbIQM1zTv-VAWDsHUNLdO1O6fCy9WdhLMq2Aw,26875
|
|
170
|
-
memos/templates/mem_scheduler_prompts.py,sha256=
|
|
184
|
+
memos/templates/mem_scheduler_prompts.py,sha256=GuLTsBSVvilYIU_dZZj7uWFnSSTDhlDxMjNIumRa4wY,14665
|
|
171
185
|
memos/templates/mos_prompts.py,sha256=yqpf8n0ObJPrJjXg4x-Nxsd0_pr0cDhdyCOopI7sgbI,18321
|
|
172
186
|
memos/templates/tree_reorganize_prompts.py,sha256=FJRIwT2A4d5EnoPhNuzDFdMWpbNLlJEIfLZP69RBlDM,12112
|
|
173
|
-
memos/types.py,sha256=
|
|
187
|
+
memos/types.py,sha256=GyeD3nBInBe0TVXjme-mMzhK_TGcWnhnH3HfmVbUM0c,2018
|
|
174
188
|
memos/utils.py,sha256=uB-8_5V16M7yNeAYXOIPaXwxeceUu4d_5yofLA6vbaE,428
|
|
175
189
|
memos/vec_dbs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
176
190
|
memos/vec_dbs/base.py,sha256=gbw7Gb_zs8Yx8kJIx6aTM-Ylsb4qLkVOFB-iwNJW6Sw,3564
|
|
177
191
|
memos/vec_dbs/factory.py,sha256=Noa4caqzPT9b59i2jzdpAHFCSHiMfDmgRox1POkRRfE,710
|
|
178
192
|
memos/vec_dbs/item.py,sha256=mLrcHF0nWtMCUjScBgaeeSqabQ3vJhKr_6wrU_g25ns,1425
|
|
179
193
|
memos/vec_dbs/qdrant.py,sha256=4KAiSZ64Ulz8EeT2o1DpNDRwnKRF4iiaJbZdq-xrn0c,11052
|
|
180
|
-
memoryos-1.
|
|
181
|
-
memoryos-1.
|
|
182
|
-
memoryos-1.
|
|
183
|
-
memoryos-1.
|
|
184
|
-
memoryos-1.
|
|
194
|
+
memoryos-1.1.2.dist-info/METADATA,sha256=g3VA6ZCN6R7jJx55hiQR1gqps_SHSOMBDvJE2lUb7vo,16217
|
|
195
|
+
memoryos-1.1.2.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
196
|
+
memoryos-1.1.2.dist-info/entry_points.txt,sha256=p54si8po81Yb-NK2lx5Z0lNr8QV7-5IECtkC6c8MJmI,40
|
|
197
|
+
memoryos-1.1.2.dist-info/licenses/LICENSE,sha256=FU-b6N8tVc7dzUZGyNjUIG1Ihnrh2iuBziq4a1Gl8HU,11358
|
|
198
|
+
memoryos-1.1.2.dist-info/RECORD,,
|
memos/__init__.py
CHANGED
memos/api/client.py
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
import requests
|
|
7
|
+
|
|
8
|
+
from memos.api.product_models import MemOSAddResponse, MemOSGetMessagesResponse, MemOSSearchResponse
|
|
9
|
+
from memos.log import get_logger
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
logger = get_logger(__name__)
|
|
13
|
+
|
|
14
|
+
MAX_RETRY_COUNT = 3
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class MemOSClient:
|
|
18
|
+
"""MemOS API client"""
|
|
19
|
+
|
|
20
|
+
def __init__(self, api_key: str | None = None, base_url: str | None = None):
|
|
21
|
+
self.base_url = (
|
|
22
|
+
base_url or os.getenv("MEMOS_BASE_URL") or "https://memos.memtensor.cn/api/openmem/v1"
|
|
23
|
+
)
|
|
24
|
+
api_key = api_key or os.getenv("MEMOS_API_KEY")
|
|
25
|
+
|
|
26
|
+
if not api_key:
|
|
27
|
+
raise ValueError("MemOS API key is required")
|
|
28
|
+
|
|
29
|
+
self.headers = {"Content-Type": "application/json", "Authorization": f"Token {api_key}"}
|
|
30
|
+
|
|
31
|
+
def _validate_required_params(self, **params):
|
|
32
|
+
"""Validate required parameters - if passed, they must not be empty"""
|
|
33
|
+
for param_name, param_value in params.items():
|
|
34
|
+
if not param_value:
|
|
35
|
+
raise ValueError(f"{param_name} is required")
|
|
36
|
+
|
|
37
|
+
def get_message(
|
|
38
|
+
self, user_id: str, conversation_id: str | None = None
|
|
39
|
+
) -> MemOSGetMessagesResponse:
|
|
40
|
+
"""Get messages"""
|
|
41
|
+
# Validate required parameters
|
|
42
|
+
self._validate_required_params(user_id=user_id)
|
|
43
|
+
|
|
44
|
+
url = f"{self.base_url}/get/message"
|
|
45
|
+
payload = {"user_id": user_id, "conversation_id": conversation_id}
|
|
46
|
+
for retry in range(MAX_RETRY_COUNT):
|
|
47
|
+
try:
|
|
48
|
+
response = requests.post(
|
|
49
|
+
url, data=json.dumps(payload), headers=self.headers, timeout=30
|
|
50
|
+
)
|
|
51
|
+
response.raise_for_status()
|
|
52
|
+
response_data = response.json()
|
|
53
|
+
return MemOSGetMessagesResponse(**response_data)
|
|
54
|
+
except Exception as e:
|
|
55
|
+
logger.error(f"Failed to get messages (retry {retry + 1}/3): {e}")
|
|
56
|
+
if retry == MAX_RETRY_COUNT - 1:
|
|
57
|
+
raise
|
|
58
|
+
|
|
59
|
+
def add_message(
|
|
60
|
+
self, messages: list[dict[str, Any]], user_id: str, conversation_id: str
|
|
61
|
+
) -> MemOSAddResponse:
|
|
62
|
+
"""Add memories"""
|
|
63
|
+
# Validate required parameters
|
|
64
|
+
self._validate_required_params(
|
|
65
|
+
messages=messages, user_id=user_id, conversation_id=conversation_id
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
url = f"{self.base_url}/add/message"
|
|
69
|
+
payload = {"messages": messages, "user_id": user_id, "conversation_id": conversation_id}
|
|
70
|
+
for retry in range(MAX_RETRY_COUNT):
|
|
71
|
+
try:
|
|
72
|
+
response = requests.post(
|
|
73
|
+
url, data=json.dumps(payload), headers=self.headers, timeout=30
|
|
74
|
+
)
|
|
75
|
+
response.raise_for_status()
|
|
76
|
+
response_data = response.json()
|
|
77
|
+
return MemOSAddResponse(**response_data)
|
|
78
|
+
except Exception as e:
|
|
79
|
+
logger.error(f"Failed to add memory (retry {retry + 1}/3): {e}")
|
|
80
|
+
if retry == MAX_RETRY_COUNT - 1:
|
|
81
|
+
raise
|
|
82
|
+
|
|
83
|
+
def search_memory(
|
|
84
|
+
self, query: str, user_id: str, conversation_id: str, memory_limit_number: int = 6
|
|
85
|
+
) -> MemOSSearchResponse:
|
|
86
|
+
"""Search memories"""
|
|
87
|
+
# Validate required parameters
|
|
88
|
+
self._validate_required_params(query=query, user_id=user_id)
|
|
89
|
+
|
|
90
|
+
url = f"{self.base_url}/search/memory"
|
|
91
|
+
payload = {
|
|
92
|
+
"query": query,
|
|
93
|
+
"user_id": user_id,
|
|
94
|
+
"conversation_id": conversation_id,
|
|
95
|
+
"memory_limit_number": memory_limit_number,
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
for retry in range(MAX_RETRY_COUNT):
|
|
99
|
+
try:
|
|
100
|
+
response = requests.post(
|
|
101
|
+
url, data=json.dumps(payload), headers=self.headers, timeout=30
|
|
102
|
+
)
|
|
103
|
+
response.raise_for_status()
|
|
104
|
+
response_data = response.json()
|
|
105
|
+
return MemOSSearchResponse(**response_data)
|
|
106
|
+
except Exception as e:
|
|
107
|
+
logger.error(f"Failed to search memory (retry {retry + 1}/3): {e}")
|
|
108
|
+
if retry == MAX_RETRY_COUNT - 1:
|
|
109
|
+
raise
|
memos/api/config.py
CHANGED
|
@@ -21,7 +21,7 @@ class APIConfig:
|
|
|
21
21
|
def get_openai_config() -> dict[str, Any]:
|
|
22
22
|
"""Get OpenAI configuration."""
|
|
23
23
|
return {
|
|
24
|
-
"model_name_or_path": os.getenv("
|
|
24
|
+
"model_name_or_path": os.getenv("MOS_CHAT_MODEL", "gpt-4o-mini"),
|
|
25
25
|
"temperature": float(os.getenv("MOS_CHAT_TEMPERATURE", "0.8")),
|
|
26
26
|
"max_tokens": int(os.getenv("MOS_MAX_TOKENS", "1024")),
|
|
27
27
|
"top_p": float(os.getenv("MOS_TOP_P", "0.9")),
|
|
@@ -100,8 +100,10 @@ class APIConfig:
|
|
|
100
100
|
"backend": "http_bge",
|
|
101
101
|
"config": {
|
|
102
102
|
"url": os.getenv("MOS_RERANKER_URL"),
|
|
103
|
-
"model": "bge-reranker-v2-m3",
|
|
103
|
+
"model": os.getenv("MOS_RERANKER_MODEL", "bge-reranker-v2-m3"),
|
|
104
104
|
"timeout": 10,
|
|
105
|
+
"headers_extra": os.getenv("MOS_RERANKER_HEADERS_EXTRA"),
|
|
106
|
+
"rerank_source": os.getenv("MOS_RERANK_SOURCE"),
|
|
105
107
|
},
|
|
106
108
|
}
|
|
107
109
|
else:
|
|
@@ -186,22 +188,22 @@ class APIConfig:
|
|
|
186
188
|
return {
|
|
187
189
|
"uri": os.getenv("NEO4J_URI", "bolt://localhost:7687"),
|
|
188
190
|
"user": os.getenv("NEO4J_USER", "neo4j"),
|
|
189
|
-
"db_name": os.getenv("NEO4J_DB_NAME", "
|
|
191
|
+
"db_name": os.getenv("NEO4J_DB_NAME", "neo4j"),
|
|
190
192
|
"password": os.getenv("NEO4J_PASSWORD", "12345678"),
|
|
191
193
|
"user_name": f"memos{user_id.replace('-', '')}",
|
|
192
|
-
"auto_create":
|
|
194
|
+
"auto_create": False,
|
|
193
195
|
"use_multi_db": False,
|
|
194
|
-
"embedding_dimension": int(os.getenv("EMBEDDING_DIMENSION",
|
|
196
|
+
"embedding_dimension": int(os.getenv("EMBEDDING_DIMENSION", 1024)),
|
|
195
197
|
"vec_config": {
|
|
196
198
|
# Pass nested config to initialize external vector DB
|
|
197
199
|
# If you use qdrant, please use Server instead of local mode.
|
|
198
200
|
"backend": "qdrant",
|
|
199
201
|
"config": {
|
|
200
202
|
"collection_name": "neo4j_vec_db",
|
|
201
|
-
"vector_dimension": int(os.getenv("EMBEDDING_DIMENSION",
|
|
203
|
+
"vector_dimension": int(os.getenv("EMBEDDING_DIMENSION", 1024)),
|
|
202
204
|
"distance_metric": "cosine",
|
|
203
|
-
"host": "localhost",
|
|
204
|
-
"port": 6333,
|
|
205
|
+
"host": os.getenv("QDRANT_HOST", "localhost"),
|
|
206
|
+
"port": int(os.getenv("QDRANT_PORT", "6333")),
|
|
205
207
|
},
|
|
206
208
|
},
|
|
207
209
|
}
|
|
@@ -271,7 +273,7 @@ class APIConfig:
|
|
|
271
273
|
def get_scheduler_config() -> dict[str, Any]:
|
|
272
274
|
"""Get scheduler configuration."""
|
|
273
275
|
return {
|
|
274
|
-
"backend": "
|
|
276
|
+
"backend": "optimized_scheduler",
|
|
275
277
|
"config": {
|
|
276
278
|
"top_k": int(os.getenv("MOS_SCHEDULER_TOP_K", "10")),
|
|
277
279
|
"act_mem_update_interval": int(
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
|
|
3
|
-
from
|
|
4
|
-
|
|
5
|
-
from memos.api.context.context import RequestContext, set_request_context
|
|
3
|
+
from memos.context.context import RequestContext, get_current_context
|
|
6
4
|
|
|
7
5
|
|
|
8
6
|
logger = logging.getLogger(__name__)
|
|
@@ -11,56 +9,17 @@ logger = logging.getLogger(__name__)
|
|
|
11
9
|
G = RequestContext
|
|
12
10
|
|
|
13
11
|
|
|
14
|
-
def
|
|
15
|
-
trace_id: str | None = Header(None, alias="trace-id"),
|
|
16
|
-
x_trace_id: str | None = Header(None, alias="x-trace-id"),
|
|
17
|
-
g_trace_id: str | None = Header(None, alias="g-trace-id"),
|
|
18
|
-
) -> str | None:
|
|
19
|
-
"""
|
|
20
|
-
Extract trace_id from various possible headers.
|
|
21
|
-
|
|
22
|
-
Priority: g-trace-id > x-trace-id > trace-id
|
|
23
|
-
"""
|
|
24
|
-
return g_trace_id or x_trace_id or trace_id
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def get_request_context(
|
|
28
|
-
request: Request, trace_id: str | None = Depends(get_trace_id_from_header)
|
|
29
|
-
) -> RequestContext:
|
|
30
|
-
"""
|
|
31
|
-
Get request context object with trace_id and request metadata.
|
|
32
|
-
|
|
33
|
-
This function creates a RequestContext and automatically sets it
|
|
34
|
-
in the global context for use throughout the request lifecycle.
|
|
35
|
-
"""
|
|
36
|
-
# Create context object
|
|
37
|
-
ctx = RequestContext(trace_id=trace_id)
|
|
38
|
-
|
|
39
|
-
# Set the context globally for this request
|
|
40
|
-
set_request_context(ctx)
|
|
41
|
-
|
|
42
|
-
# Log request start
|
|
43
|
-
logger.info(f"Request started with trace_id: {ctx.trace_id}")
|
|
44
|
-
|
|
45
|
-
# Add request metadata to context
|
|
46
|
-
ctx.set("method", request.method)
|
|
47
|
-
ctx.set("path", request.url.path)
|
|
48
|
-
ctx.set("client_ip", request.client.host if request.client else None)
|
|
49
|
-
|
|
50
|
-
return ctx
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
def get_g_object(trace_id: str | None = Depends(get_trace_id_from_header)) -> G:
|
|
12
|
+
def get_g_object() -> G:
|
|
54
13
|
"""
|
|
55
14
|
Get Flask g-like object for the current request.
|
|
56
|
-
|
|
57
|
-
This creates a RequestContext and sets it globally for access
|
|
58
|
-
throughout the request lifecycle.
|
|
15
|
+
Returns the context created by middleware.
|
|
59
16
|
"""
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
17
|
+
ctx = get_current_context()
|
|
18
|
+
if ctx is None:
|
|
19
|
+
raise RuntimeError(
|
|
20
|
+
"No request context available. Make sure RequestContextMiddleware is properly configured."
|
|
21
|
+
)
|
|
22
|
+
return ctx
|
|
64
23
|
|
|
65
24
|
|
|
66
25
|
def get_current_g() -> G | None:
|
|
@@ -70,8 +29,6 @@ def get_current_g() -> G | None:
|
|
|
70
29
|
Returns:
|
|
71
30
|
The current request's g object if available, None otherwise.
|
|
72
31
|
"""
|
|
73
|
-
from memos.context import get_current_context
|
|
74
|
-
|
|
75
32
|
return get_current_context()
|
|
76
33
|
|
|
77
34
|
|
|
@@ -85,6 +42,9 @@ def require_g() -> G:
|
|
|
85
42
|
Raises:
|
|
86
43
|
RuntimeError: If called outside of a request context.
|
|
87
44
|
"""
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
45
|
+
ctx = get_current_context()
|
|
46
|
+
if ctx is None:
|
|
47
|
+
raise RuntimeError(
|
|
48
|
+
"No request context available. This function must be called within a request handler."
|
|
49
|
+
)
|
|
50
|
+
return ctx
|