MemoryOS 2.0.5__tar.gz → 2.0.6__tar.gz

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.
Files changed (362) hide show
  1. {memoryos-2.0.5 → memoryos-2.0.6}/PKG-INFO +5 -5
  2. {memoryos-2.0.5 → memoryos-2.0.6}/README.md +4 -4
  3. {memoryos-2.0.5 → memoryos-2.0.6}/pyproject.toml +1 -1
  4. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/__init__.py +1 -1
  5. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/config.py +0 -2
  6. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/handlers/chat_handler.py +3 -0
  7. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/handlers/config_builders.py +1 -0
  8. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/handlers/memory_handler.py +70 -4
  9. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/handlers/search_handler.py +11 -4
  10. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/product_models.py +18 -0
  11. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/routers/server_router.py +0 -10
  12. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/llm.py +1 -0
  13. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/llms/vllm.py +2 -14
  14. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/multi_modal_struct.py +2 -0
  15. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/read_multi_modal/multi_modal_parser.py +4 -0
  16. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/read_skill_memory/process_skill_memory.py +30 -18
  17. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/retrieve/searcher.py +107 -2
  18. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/multi_mem_cube/single_cube.py +24 -3
  19. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/vec_dbs/milvus.py +42 -8
  20. {memoryos-2.0.5 → memoryos-2.0.6}/LICENSE +0 -0
  21. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/README_api.md +0 -0
  22. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/__init__.py +0 -0
  23. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/client.py +0 -0
  24. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/context/dependencies.py +0 -0
  25. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/exceptions.py +0 -0
  26. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/handlers/__init__.py +0 -0
  27. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/handlers/add_handler.py +0 -0
  28. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/handlers/base_handler.py +0 -0
  29. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/handlers/component_init.py +0 -0
  30. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/handlers/feedback_handler.py +0 -0
  31. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/handlers/formatters_handler.py +0 -0
  32. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/handlers/scheduler_handler.py +0 -0
  33. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/handlers/suggestion_handler.py +0 -0
  34. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/mcp_serve.py +0 -0
  35. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/middleware/__init__.py +0 -0
  36. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/middleware/auth.py +0 -0
  37. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/middleware/rate_limit.py +0 -0
  38. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/middleware/request_context.py +0 -0
  39. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/product_api.py +0 -0
  40. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/routers/__init__.py +0 -0
  41. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/routers/admin_router.py +0 -0
  42. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/routers/product_router.py +0 -0
  43. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/server_api.py +0 -0
  44. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/server_api_ext.py +0 -0
  45. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/start_api.py +0 -0
  46. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/utils/__init__.py +0 -0
  47. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/api/utils/api_keys.py +0 -0
  48. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/chunkers/__init__.py +0 -0
  49. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/chunkers/base.py +0 -0
  50. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/chunkers/charactertext_chunker.py +0 -0
  51. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/chunkers/factory.py +0 -0
  52. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/chunkers/markdown_chunker.py +0 -0
  53. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/chunkers/sentence_chunker.py +0 -0
  54. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/chunkers/simple_chunker.py +0 -0
  55. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/cli.py +0 -0
  56. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/__init__.py +0 -0
  57. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/base.py +0 -0
  58. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/chunker.py +0 -0
  59. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/embedder.py +0 -0
  60. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/graph_db.py +0 -0
  61. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/internet_retriever.py +0 -0
  62. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/mem_agent.py +0 -0
  63. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/mem_chat.py +0 -0
  64. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/mem_cube.py +0 -0
  65. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/mem_os.py +0 -0
  66. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/mem_reader.py +0 -0
  67. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/mem_scheduler.py +0 -0
  68. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/mem_user.py +0 -0
  69. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/memory.py +0 -0
  70. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/parser.py +0 -0
  71. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/reranker.py +0 -0
  72. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/utils.py +0 -0
  73. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/configs/vec_db.py +0 -0
  74. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/context/context.py +0 -0
  75. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/dependency.py +0 -0
  76. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/deprecation.py +0 -0
  77. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/embedders/__init__.py +0 -0
  78. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/embedders/ark.py +0 -0
  79. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/embedders/base.py +0 -0
  80. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/embedders/factory.py +0 -0
  81. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/embedders/ollama.py +0 -0
  82. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/embedders/sentence_transformer.py +0 -0
  83. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/embedders/universal_api.py +0 -0
  84. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/exceptions.py +0 -0
  85. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/extras/__init__.py +0 -0
  86. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/extras/nli_model/__init__.py +0 -0
  87. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/extras/nli_model/client.py +0 -0
  88. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/extras/nli_model/server/README.md +0 -0
  89. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/extras/nli_model/server/__init__.py +0 -0
  90. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/extras/nli_model/server/config.py +0 -0
  91. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/extras/nli_model/server/handler.py +0 -0
  92. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/extras/nli_model/server/serve.py +0 -0
  93. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/extras/nli_model/types.py +0 -0
  94. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/graph_dbs/__init__.py +0 -0
  95. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/graph_dbs/base.py +0 -0
  96. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/graph_dbs/factory.py +0 -0
  97. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/graph_dbs/item.py +0 -0
  98. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/graph_dbs/nebular.py +0 -0
  99. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/graph_dbs/neo4j.py +0 -0
  100. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/graph_dbs/neo4j_community.py +0 -0
  101. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/graph_dbs/polardb.py +0 -0
  102. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/graph_dbs/postgres.py +0 -0
  103. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/hello_world.py +0 -0
  104. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/llms/__init__.py +0 -0
  105. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/llms/base.py +0 -0
  106. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/llms/deepseek.py +0 -0
  107. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/llms/factory.py +0 -0
  108. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/llms/hf.py +0 -0
  109. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/llms/hf_singleton.py +0 -0
  110. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/llms/ollama.py +0 -0
  111. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/llms/openai.py +0 -0
  112. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/llms/openai_new.py +0 -0
  113. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/llms/qwen.py +0 -0
  114. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/llms/utils.py +0 -0
  115. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/log.py +0 -0
  116. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_agent/base.py +0 -0
  117. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_agent/deepsearch_agent.py +0 -0
  118. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_agent/factory.py +0 -0
  119. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_chat/__init__.py +0 -0
  120. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_chat/base.py +0 -0
  121. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_chat/factory.py +0 -0
  122. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_chat/simple.py +0 -0
  123. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_cube/__init__.py +0 -0
  124. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_cube/base.py +0 -0
  125. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_cube/general.py +0 -0
  126. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_cube/navie.py +0 -0
  127. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_cube/utils.py +0 -0
  128. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_feedback/base.py +0 -0
  129. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_feedback/feedback.py +0 -0
  130. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_feedback/simple_feedback.py +0 -0
  131. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_feedback/utils.py +0 -0
  132. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_os/client.py +0 -0
  133. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_os/core.py +0 -0
  134. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_os/main.py +0 -0
  135. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_os/product.py +0 -0
  136. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_os/product_server.py +0 -0
  137. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_os/utils/default_config.py +0 -0
  138. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_os/utils/format_utils.py +0 -0
  139. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_os/utils/reference_utils.py +0 -0
  140. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/__init__.py +0 -0
  141. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/base.py +0 -0
  142. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/factory.py +0 -0
  143. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/memory.py +0 -0
  144. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/read_multi_modal/__init__.py +0 -0
  145. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/read_multi_modal/assistant_parser.py +0 -0
  146. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/read_multi_modal/base.py +0 -0
  147. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/read_multi_modal/file_content_parser.py +0 -0
  148. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/read_multi_modal/image_parser.py +0 -0
  149. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/read_multi_modal/string_parser.py +0 -0
  150. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/read_multi_modal/system_parser.py +0 -0
  151. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/read_multi_modal/text_content_parser.py +0 -0
  152. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/read_multi_modal/tool_parser.py +0 -0
  153. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/read_multi_modal/user_parser.py +0 -0
  154. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/read_multi_modal/utils.py +0 -0
  155. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/simple_struct.py +0 -0
  156. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/strategy_struct.py +0 -0
  157. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_reader/utils.py +0 -0
  158. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/__init__.py +0 -0
  159. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/analyzer/__init__.py +0 -0
  160. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/analyzer/api_analyzer.py +0 -0
  161. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/analyzer/eval_analyzer.py +0 -0
  162. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/analyzer/mos_for_test_scheduler.py +0 -0
  163. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/analyzer/scheduler_for_eval.py +0 -0
  164. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/base_mixins/__init__.py +0 -0
  165. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/base_mixins/memory_ops.py +0 -0
  166. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/base_mixins/queue_ops.py +0 -0
  167. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/base_mixins/web_log_ops.py +0 -0
  168. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/base_scheduler.py +0 -0
  169. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/general_modules/__init__.py +0 -0
  170. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/general_modules/api_misc.py +0 -0
  171. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/general_modules/base.py +0 -0
  172. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/general_modules/init_components_for_scheduler.py +0 -0
  173. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/general_modules/misc.py +0 -0
  174. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/general_modules/scheduler_logger.py +0 -0
  175. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/general_modules/task_threads.py +0 -0
  176. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/general_scheduler.py +0 -0
  177. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/memory_manage_modules/__init__.py +0 -0
  178. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/memory_manage_modules/activation_memory_manager.py +0 -0
  179. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/memory_manage_modules/enhancement_pipeline.py +0 -0
  180. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/memory_manage_modules/filter_pipeline.py +0 -0
  181. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/memory_manage_modules/memory_filter.py +0 -0
  182. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/memory_manage_modules/post_processor.py +0 -0
  183. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/memory_manage_modules/rerank_pipeline.py +0 -0
  184. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/memory_manage_modules/retriever.py +0 -0
  185. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/memory_manage_modules/search_pipeline.py +0 -0
  186. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/memory_manage_modules/search_service.py +0 -0
  187. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/monitors/__init__.py +0 -0
  188. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/monitors/dispatcher_monitor.py +0 -0
  189. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/monitors/general_monitor.py +0 -0
  190. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/monitors/task_schedule_monitor.py +0 -0
  191. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/optimized_scheduler.py +0 -0
  192. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/orm_modules/__init__.py +0 -0
  193. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/orm_modules/api_redis_model.py +0 -0
  194. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/orm_modules/base_model.py +0 -0
  195. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/orm_modules/monitor_models.py +0 -0
  196. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/orm_modules/redis_model.py +0 -0
  197. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/scheduler_factory.py +0 -0
  198. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/schemas/__init__.py +0 -0
  199. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/schemas/analyzer_schemas.py +0 -0
  200. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/schemas/api_schemas.py +0 -0
  201. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/schemas/general_schemas.py +0 -0
  202. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/schemas/message_schemas.py +0 -0
  203. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/schemas/monitor_schemas.py +0 -0
  204. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/schemas/task_schemas.py +0 -0
  205. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/__init__.py +0 -0
  206. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/base_handler.py +0 -0
  207. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/context.py +0 -0
  208. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/dispatcher.py +0 -0
  209. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/handlers/__init__.py +0 -0
  210. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/handlers/add_handler.py +0 -0
  211. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/handlers/answer_handler.py +0 -0
  212. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/handlers/feedback_handler.py +0 -0
  213. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_read_handler.py +0 -0
  214. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_reorganize_handler.py +0 -0
  215. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/handlers/memory_update_handler.py +0 -0
  216. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/handlers/pref_add_handler.py +0 -0
  217. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/handlers/query_handler.py +0 -0
  218. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/local_queue.py +0 -0
  219. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/orchestrator.py +0 -0
  220. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/redis_queue.py +0 -0
  221. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/registry.py +0 -0
  222. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/task_schedule_modules/task_queue.py +0 -0
  223. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/utils/__init__.py +0 -0
  224. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/utils/api_utils.py +0 -0
  225. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/utils/config_utils.py +0 -0
  226. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/utils/db_utils.py +0 -0
  227. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/utils/filter_utils.py +0 -0
  228. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/utils/metrics.py +0 -0
  229. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/utils/misc_utils.py +0 -0
  230. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/utils/monitor_event_utils.py +0 -0
  231. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/utils/status_tracker.py +0 -0
  232. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/webservice_modules/__init__.py +0 -0
  233. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/webservice_modules/rabbitmq_service.py +0 -0
  234. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_scheduler/webservice_modules/redis_service.py +0 -0
  235. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_user/factory.py +0 -0
  236. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_user/mysql_persistent_user_manager.py +0 -0
  237. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_user/mysql_user_manager.py +0 -0
  238. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_user/persistent_factory.py +0 -0
  239. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_user/persistent_user_manager.py +0 -0
  240. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_user/redis_persistent_user_manager.py +0 -0
  241. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/mem_user/user_manager.py +0 -0
  242. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/__init__.py +0 -0
  243. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/activation/__init__.py +0 -0
  244. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/activation/base.py +0 -0
  245. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/activation/item.py +0 -0
  246. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/activation/kv.py +0 -0
  247. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/activation/vllmkv.py +0 -0
  248. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/base.py +0 -0
  249. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/factory.py +0 -0
  250. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/parametric/__init__.py +0 -0
  251. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/parametric/base.py +0 -0
  252. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/parametric/item.py +0 -0
  253. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/parametric/lora.py +0 -0
  254. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/__init__.py +0 -0
  255. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/base.py +0 -0
  256. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/general.py +0 -0
  257. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/item.py +0 -0
  258. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/naive.py +0 -0
  259. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/prefer_text_memory/__init__.py +0 -0
  260. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/prefer_text_memory/adder.py +0 -0
  261. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/prefer_text_memory/config.py +0 -0
  262. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/prefer_text_memory/extractor.py +0 -0
  263. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/prefer_text_memory/factory.py +0 -0
  264. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/prefer_text_memory/retrievers.py +0 -0
  265. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/prefer_text_memory/spliter.py +0 -0
  266. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/prefer_text_memory/utils.py +0 -0
  267. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/preference.py +0 -0
  268. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/simple_preference.py +0 -0
  269. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/simple_tree.py +0 -0
  270. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree.py +0 -0
  271. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/__init__.py +0 -0
  272. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/organize/__init__.py +0 -0
  273. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/organize/handler.py +0 -0
  274. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/organize/history_manager.py +0 -0
  275. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/organize/manager.py +0 -0
  276. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/organize/relation_reason_detector.py +0 -0
  277. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/organize/reorganizer.py +0 -0
  278. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/retrieve/__init__.py +0 -0
  279. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/retrieve/advanced_searcher.py +0 -0
  280. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/retrieve/bm25_util.py +0 -0
  281. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/retrieve/bochasearch.py +0 -0
  282. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever.py +0 -0
  283. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever_factory.py +0 -0
  284. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/retrieve/pre_update.py +0 -0
  285. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/retrieve/reasoner.py +0 -0
  286. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/retrieve/recall.py +0 -0
  287. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/retrieve/reranker.py +0 -0
  288. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/retrieve/retrieval_mid_structs.py +0 -0
  289. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/retrieve/retrieve_utils.py +0 -0
  290. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/retrieve/task_goal_parser.py +0 -0
  291. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/retrieve/utils.py +0 -0
  292. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memories/textual/tree_text_memory/retrieve/xinyusearch.py +0 -0
  293. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memos_tools/dinding_report_bot.py +0 -0
  294. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memos_tools/lockfree_dict.py +0 -0
  295. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memos_tools/notification_service.py +0 -0
  296. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memos_tools/notification_utils.py +0 -0
  297. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memos_tools/singleton.py +0 -0
  298. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memos_tools/thread_safe_dict.py +0 -0
  299. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/memos_tools/thread_safe_dict_segment.py +0 -0
  300. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/multi_mem_cube/__init__.py +0 -0
  301. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/multi_mem_cube/composite_cube.py +0 -0
  302. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/multi_mem_cube/views.py +0 -0
  303. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/parsers/__init__.py +0 -0
  304. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/parsers/base.py +0 -0
  305. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/parsers/factory.py +0 -0
  306. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/parsers/markitdown.py +0 -0
  307. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/reranker/__init__.py +0 -0
  308. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/reranker/base.py +0 -0
  309. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/reranker/concat.py +0 -0
  310. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/reranker/cosine_local.py +0 -0
  311. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/reranker/factory.py +0 -0
  312. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/reranker/http_bge.py +0 -0
  313. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/reranker/http_bge_strategy.py +0 -0
  314. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/reranker/noop.py +0 -0
  315. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/reranker/strategies/__init__.py +0 -0
  316. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/reranker/strategies/base.py +0 -0
  317. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/reranker/strategies/concat_background.py +0 -0
  318. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/reranker/strategies/concat_docsource.py +0 -0
  319. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/reranker/strategies/dialogue_common.py +0 -0
  320. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/reranker/strategies/factory.py +0 -0
  321. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/reranker/strategies/single_turn.py +0 -0
  322. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/reranker/strategies/singleturn_outmem.py +0 -0
  323. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/search/__init__.py +0 -0
  324. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/search/search_service.py +0 -0
  325. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/settings.py +0 -0
  326. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/templates/__init__.py +0 -0
  327. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/templates/advanced_search_prompts.py +0 -0
  328. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/templates/cloud_service_prompt.py +0 -0
  329. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/templates/instruction_completion.py +0 -0
  330. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/templates/mem_agent_prompts.py +0 -0
  331. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/templates/mem_feedback_prompts.py +0 -0
  332. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/templates/mem_reader_prompts.py +0 -0
  333. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/templates/mem_reader_strategy_prompts.py +0 -0
  334. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/templates/mem_scheduler_prompts.py +0 -0
  335. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/templates/mem_search_prompts.py +0 -0
  336. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/templates/mos_prompts.py +0 -0
  337. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/templates/prefer_complete_prompt.py +0 -0
  338. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/templates/skill_mem_prompt.py +0 -0
  339. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/templates/tool_mem_prompts.py +0 -0
  340. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/templates/tree_reorganize_prompts.py +0 -0
  341. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/types/__init__.py +0 -0
  342. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/types/general_types.py +0 -0
  343. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/types/openai_chat_completion_types/__init__.py +0 -0
  344. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/types/openai_chat_completion_types/chat_completion_assistant_message_param.py +0 -0
  345. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_image_param.py +0 -0
  346. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_input_audio_param.py +0 -0
  347. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_param.py +0 -0
  348. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_refusal_param.py +0 -0
  349. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_text_param.py +0 -0
  350. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/types/openai_chat_completion_types/chat_completion_message_custom_tool_call_param.py +0 -0
  351. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/types/openai_chat_completion_types/chat_completion_message_function_tool_call_param.py +0 -0
  352. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/types/openai_chat_completion_types/chat_completion_message_param.py +0 -0
  353. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/types/openai_chat_completion_types/chat_completion_message_tool_call_union_param.py +0 -0
  354. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/types/openai_chat_completion_types/chat_completion_system_message_param.py +0 -0
  355. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/types/openai_chat_completion_types/chat_completion_tool_message_param.py +0 -0
  356. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/types/openai_chat_completion_types/chat_completion_user_message_param.py +0 -0
  357. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/utils.py +0 -0
  358. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/vec_dbs/__init__.py +0 -0
  359. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/vec_dbs/base.py +0 -0
  360. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/vec_dbs/factory.py +0 -0
  361. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/vec_dbs/item.py +0 -0
  362. {memoryos-2.0.5 → memoryos-2.0.6}/src/memos/vec_dbs/qdrant.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MemoryOS
3
- Version: 2.0.5
3
+ Version: 2.0.6
4
4
  Summary: Intelligence Begins with Memory
5
5
  License: Apache-2.0
6
6
  License-File: LICENSE
@@ -148,12 +148,12 @@ Get Free API: [Try API](https://memos-dashboard.openmem.net/quickstart/?source=g
148
148
  ## 🦞 Enhanced OpenClaw with MemOS Plugin
149
149
  ![](https://cdn.memtensor.com.cn/img/1770612303123_mnaisk_compressed.png)
150
150
 
151
- - **50-60% lower token usage** – intelligent memory retrieval instead of loading full chat history
152
- - **Persistent cross-session memory** – remembers user preferences accurately, not just recent chatter
153
- - **Faster, more accurate responses** – retrieves the right context without hallucinations
151
+ - [**72% lower token usage**](https://x.com/MemOS_dev/status/2020854044583924111) – intelligent memory retrieval instead of loading full chat history
152
+ - [**Multi-agent memory sharing**](https://x.com/MemOS_dev/status/2020538135487062094)multi-instance agents share memory via same user_id. Automatic context handoff.
153
+
154
+ 🦞 Your lobster now has a working memory system.
154
155
 
155
156
  Get your API key: [MemOS Dashboard](https://memos-dashboard.openmem.net/cn/login/)
156
- Your lobster now has a working memory system.
157
157
  Try it: Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTensor/MemOS-Cloud-OpenClaw-Plugin)
158
158
 
159
159
  ## 📌 MemOS: Memory Operating System for AI Agents
@@ -67,12 +67,12 @@ Get Free API: [Try API](https://memos-dashboard.openmem.net/quickstart/?source=g
67
67
  ## 🦞 Enhanced OpenClaw with MemOS Plugin
68
68
  ![](https://cdn.memtensor.com.cn/img/1770612303123_mnaisk_compressed.png)
69
69
 
70
- - **50-60% lower token usage** – intelligent memory retrieval instead of loading full chat history
71
- - **Persistent cross-session memory** – remembers user preferences accurately, not just recent chatter
72
- - **Faster, more accurate responses** – retrieves the right context without hallucinations
70
+ - [**72% lower token usage**](https://x.com/MemOS_dev/status/2020854044583924111) – intelligent memory retrieval instead of loading full chat history
71
+ - [**Multi-agent memory sharing**](https://x.com/MemOS_dev/status/2020538135487062094)multi-instance agents share memory via same user_id. Automatic context handoff.
72
+
73
+ 🦞 Your lobster now has a working memory system.
73
74
 
74
75
  Get your API key: [MemOS Dashboard](https://memos-dashboard.openmem.net/cn/login/)
75
- Your lobster now has a working memory system.
76
76
  Try it: Full tutorial → [MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTensor/MemOS-Cloud-OpenClaw-Plugin)
77
77
 
78
78
  ## 📌 MemOS: Memory Operating System for AI Agents
@@ -4,7 +4,7 @@
4
4
  ##############################################################################
5
5
 
6
6
  name = "MemoryOS"
7
- version = "2.0.5"
7
+ version = "2.0.6"
8
8
  description = "Intelligence Begins with Memory"
9
9
  license = {text = "Apache-2.0"}
10
10
  readme = "README.md"
@@ -1,4 +1,4 @@
1
- __version__ = "2.0.5"
1
+ __version__ = "2.0.6"
2
2
 
3
3
  from memos.configs.mem_cube import GeneralMemCubeConfig
4
4
  from memos.configs.mem_os import MOSConfig
@@ -335,7 +335,6 @@ class APIConfig:
335
335
  # validation requirements during tests/import.
336
336
  "api_base": os.getenv("MEMRADER_API_BASE", "https://api.openai.com/v1"),
337
337
  "remove_think_prefix": True,
338
- "extra_body": {"chat_template_kwargs": {"enable_thinking": False}},
339
338
  },
340
339
  }
341
340
 
@@ -531,7 +530,6 @@ class APIConfig:
531
530
  "api_key": os.getenv("MEMRADER_API_KEY", "EMPTY"),
532
531
  "api_base": os.getenv("MEMRADER_API_BASE"),
533
532
  "remove_think_prefix": True,
534
- "extra_body": {"chat_template_kwargs": {"enable_thinking": False}},
535
533
  },
536
534
  },
537
535
  "embedder": APIConfig.get_embedder_config(),
@@ -130,6 +130,7 @@ class ChatHandler(BaseHandler):
130
130
  include_preference=chat_req.include_preference,
131
131
  pref_top_k=chat_req.pref_top_k,
132
132
  filter=chat_req.filter,
133
+ relativity=chat_req.relativity,
133
134
  )
134
135
 
135
136
  search_response = self.search_handler.handle_search_memories(search_req)
@@ -269,6 +270,7 @@ class ChatHandler(BaseHandler):
269
270
  include_preference=chat_req.include_preference,
270
271
  pref_top_k=chat_req.pref_top_k,
271
272
  filter=chat_req.filter,
273
+ relativity=chat_req.relativity,
272
274
  )
273
275
 
274
276
  search_response = self.search_handler.handle_search_memories(search_req)
@@ -811,6 +813,7 @@ class ChatHandler(BaseHandler):
811
813
  include_preference=chat_req.include_preference,
812
814
  pref_top_k=chat_req.pref_top_k,
813
815
  filter=chat_req.filter,
816
+ relativity=chat_req.relativity,
814
817
  )
815
818
 
816
819
  search_response = self.search_handler.handle_search_memories(search_req)
@@ -105,6 +105,7 @@ def build_chat_llm_config() -> list[dict[str, Any]]:
105
105
  }
106
106
  ),
107
107
  "support_models": cfg.get("support_models", None),
108
+ "extra_body": cfg.get("extra_body", None),
108
109
  }
109
110
  for cfg in configs
110
111
  ]
@@ -202,6 +202,20 @@ def handle_get_memory(memory_id: str, naive_mem_cube: NaiveMemCube) -> GetMemory
202
202
  # Get the data from whichever memory source succeeded
203
203
  data = (memory or pref).model_dump() if (memory or pref) else None
204
204
 
205
+ if data is not None:
206
+ # For each returned item, tackle with metadata.info project_id /
207
+ # operation / manager_user_id
208
+ metadata = data.get("metadata", None)
209
+ if metadata is not None and isinstance(metadata, dict):
210
+ info = metadata.get("info", None)
211
+ if info is not None and isinstance(info, dict):
212
+ for key in ("project_id", "operation", "manager_user_id"):
213
+ if key not in info:
214
+ continue
215
+ value = info.pop(key)
216
+ if key not in metadata:
217
+ metadata[key] = value
218
+
205
219
  return GetMemoryResponse(
206
220
  message="Memory retrieved successfully"
207
221
  if data
@@ -241,6 +255,25 @@ def handle_get_memory_by_ids(
241
255
  except Exception:
242
256
  continue
243
257
 
258
+ # For each returned item, tackle with metadata.info project_id /
259
+ # operation / manager_user_id
260
+ for item in memories:
261
+ if not isinstance(item, dict):
262
+ continue
263
+ metadata = item.get("metadata")
264
+ if not isinstance(metadata, dict):
265
+ continue
266
+ info = metadata.get("info")
267
+ if not isinstance(info, dict):
268
+ continue
269
+
270
+ for key in ("project_id", "operation", "manager_user_id"):
271
+ if key not in info:
272
+ continue
273
+ value = info.pop(key)
274
+ if key not in metadata:
275
+ metadata[key] = value
276
+
244
277
  return GetMemoryResponse(
245
278
  message="Memories retrieved successfully", code=200, data={"memories": memories}
246
279
  )
@@ -345,6 +378,25 @@ def handle_get_memories(
345
378
  )
346
379
  format_preferences = [format_memory_item(item, save_sources=False) for item in preferences]
347
380
 
381
+ # For each returned item, tackle with metadata.info project_id /
382
+ # operation / manager_user_id
383
+ for item in format_preferences:
384
+ if not isinstance(item, dict):
385
+ continue
386
+ metadata = item.get("metadata")
387
+ if not isinstance(metadata, dict):
388
+ continue
389
+ info = metadata.get("info")
390
+ if not isinstance(info, dict):
391
+ continue
392
+
393
+ for key in ("project_id", "operation", "manager_user_id"):
394
+ if key not in info:
395
+ continue
396
+ value = info.pop(key)
397
+ if key not in metadata:
398
+ metadata[key] = value
399
+
348
400
  results = post_process_pref_mem(
349
401
  results, format_preferences, get_mem_req.mem_cube_id, get_mem_req.include_preference
350
402
  )
@@ -412,6 +464,12 @@ def handle_get_memories_dashboard(
412
464
  get_mem_req: GetMemoryDashboardRequest, naive_mem_cube: NaiveMemCube
413
465
  ) -> GetMemoryResponse:
414
466
  results: dict[str, Any] = {"text_mem": [], "pref_mem": [], "tool_mem": [], "skill_mem": []}
467
+ # for statistics
468
+ total_text_nodes, total_tool_nodes, total_skill_nodes, total_preference_nodes = 0, 0, 0, 0
469
+ total_tool_nodes = 0
470
+ total_skill_nodes = 0
471
+ total_preference_nodes = 0
472
+
415
473
  text_memory_type = ["WorkingMemory", "LongTermMemory", "UserMemory", "OuterMemory"]
416
474
  text_memories_info = naive_mem_cube.text_mem.get_all(
417
475
  user_name=get_mem_req.mem_cube_id,
@@ -421,7 +479,7 @@ def handle_get_memories_dashboard(
421
479
  filter=get_mem_req.filter,
422
480
  memory_type=text_memory_type,
423
481
  )
424
- text_memories, _ = text_memories_info["nodes"], text_memories_info["total_nodes"]
482
+ text_memories, total_text_nodes = text_memories_info["nodes"], text_memories_info["total_nodes"]
425
483
 
426
484
  # Group text memories by cube_id from metadata.user_name
427
485
  text_mem_by_cube: dict[str, list] = {}
@@ -453,7 +511,7 @@ def handle_get_memories_dashboard(
453
511
  filter=get_mem_req.filter,
454
512
  memory_type=["ToolSchemaMemory", "ToolTrajectoryMemory"],
455
513
  )
456
- tool_memories, _ = (
514
+ tool_memories, total_tool_nodes = (
457
515
  tool_memories_info["nodes"],
458
516
  tool_memories_info["total_nodes"],
459
517
  )
@@ -488,7 +546,7 @@ def handle_get_memories_dashboard(
488
546
  filter=get_mem_req.filter,
489
547
  memory_type=["SkillMemory"],
490
548
  )
491
- skill_memories, _ = (
549
+ skill_memories, total_skill_nodes = (
492
550
  skill_memories_info["nodes"],
493
551
  skill_memories_info["total_nodes"],
494
552
  )
@@ -515,7 +573,6 @@ def handle_get_memories_dashboard(
515
573
  ]
516
574
 
517
575
  preferences: list[TextualMemoryItem] = []
518
- total_preference_nodes = 0
519
576
 
520
577
  format_preferences = []
521
578
  if get_mem_req.include_preference and naive_mem_cube.pref_mem is not None:
@@ -578,4 +635,13 @@ def handle_get_memories_dashboard(
578
635
  "skill_mem": results.get("skill_mem", []),
579
636
  }
580
637
 
638
+ # statistics
639
+ statistics = {
640
+ "total_text_nodes": total_text_nodes,
641
+ "total_tool_nodes": total_tool_nodes,
642
+ "total_skill_nodes": total_skill_nodes,
643
+ "total_preference_nodes": total_preference_nodes,
644
+ }
645
+ filtered_results["statistics"] = statistics
646
+
581
647
  return GetMemoryResponse(message="Memories retrieved successfully", data=filtered_results)
@@ -120,11 +120,14 @@ class SearchHandler(BaseHandler):
120
120
  if not isinstance(mem, dict):
121
121
  continue
122
122
  meta = mem.get("metadata", {})
123
- score = meta.get("relativity", 0.0) if isinstance(meta, dict) else 0.0
123
+ if key == "text_mem":
124
+ score = meta.get("relativity", 1.0) if isinstance(meta, dict) else 1.0
125
+ else:
126
+ score = meta.get("score", 1.0) if isinstance(meta, dict) else 1.0
124
127
  try:
125
- score_val = float(score) if score is not None else 0.0
128
+ score_val = float(score) if score is not None else 1.0
126
129
  except (TypeError, ValueError):
127
- score_val = 0.0
130
+ score_val = 1.0
128
131
  if score_val >= relativity:
129
132
  filtered.append(mem)
130
133
 
@@ -220,7 +223,11 @@ class SearchHandler(BaseHandler):
220
223
  # Flatten preference memories
221
224
  for bucket_idx, bucket in enumerate(pref_buckets):
222
225
  for mem in bucket.get("memories", []):
223
- score = mem.get("metadata", {}).get("relativity", 0.0)
226
+ meta = mem.get("metadata", {})
227
+ if isinstance(meta, dict):
228
+ score = meta.get("score", meta.get("relativity", 0.0))
229
+ else:
230
+ score = 0.0
224
231
  flat.append(
225
232
  ("preference", bucket_idx, mem, float(score) if score is not None else 0.0)
226
233
  )
@@ -98,6 +98,15 @@ class ChatRequest(BaseRequest):
98
98
  add_message_on_answer: bool = Field(True, description="Add dialogs to memory after chat")
99
99
  manager_user_id: str | None = Field(None, description="Manager User ID")
100
100
  project_id: str | None = Field(None, description="Project ID")
101
+ relativity: float = Field(
102
+ 0.0,
103
+ ge=0,
104
+ description=(
105
+ "Relevance threshold for recalled memories. "
106
+ "Only memories with metadata.relativity >= relativity will be returned. "
107
+ "Use 0 to disable threshold filtering. Default: 0.3."
108
+ ),
109
+ )
101
110
 
102
111
  # ==== Filter conditions ====
103
112
  filter: dict[str, Any] | None = Field(
@@ -775,6 +784,15 @@ class APIChatCompleteRequest(BaseRequest):
775
784
  add_message_on_answer: bool = Field(True, description="Add dialogs to memory after chat")
776
785
  manager_user_id: str | None = Field(None, description="Manager User ID")
777
786
  project_id: str | None = Field(None, description="Project ID")
787
+ relativity: float = Field(
788
+ 0.0,
789
+ ge=0,
790
+ description=(
791
+ "Relevance threshold for recalled memories. "
792
+ "Only memories with metadata.relativity >= relativity will be returned. "
793
+ "Use 0 to disable threshold filtering. Default: 0.3."
794
+ ),
795
+ )
778
796
 
779
797
  # ==== Filter conditions ====
780
798
  filter: dict[str, Any] | None = Field(
@@ -53,7 +53,6 @@ from memos.api.product_models import (
53
53
  SuggestionResponse,
54
54
  TaskQueueResponse,
55
55
  )
56
- from memos.graph_dbs.polardb import PolarDBGraphDB
57
56
  from memos.log import get_logger
58
57
  from memos.mem_scheduler.base_scheduler import BaseScheduler
59
58
  from memos.mem_scheduler.utils.status_tracker import TaskStatusTracker
@@ -371,15 +370,6 @@ def feedback_memories(feedback_req: APIFeedbackRequest):
371
370
  )
372
371
  def get_user_names_by_memory_ids(request: GetUserNamesByMemoryIdsRequest):
373
372
  """Get user names by memory ids."""
374
- if not isinstance(graph_db, PolarDBGraphDB):
375
- raise HTTPException(
376
- status_code=400,
377
- detail=(
378
- "graph_db must be an instance of PolarDBGraphDB to use "
379
- "get_user_names_by_memory_ids"
380
- f"current graph_db is: {graph_db.__class__.__name__}"
381
- ),
382
- )
383
373
  result = graph_db.get_user_names_by_memory_ids(memory_ids=request.memory_ids)
384
374
  if vector_db:
385
375
  prefs = []
@@ -116,6 +116,7 @@ class VLLMLLMConfig(BaseLLMConfig):
116
116
  default=False,
117
117
  description="Enable reasoning outputs from vLLM",
118
118
  )
119
+ extra_body: Any = Field(default=None, description="Extra options for API")
119
120
 
120
121
 
121
122
  class LLMConfigFactory(BaseConfig):
@@ -111,13 +111,7 @@ class VLLMLLM(BaseLLM):
111
111
  "temperature": kwargs.get("temperature", self.config.temperature),
112
112
  "max_tokens": kwargs.get("max_tokens", self.config.max_tokens),
113
113
  "top_p": kwargs.get("top_p", self.config.top_p),
114
- "extra_body": {
115
- "chat_template_kwargs": {
116
- "enable_thinking": kwargs.get(
117
- "enable_thinking", self.config.enable_thinking
118
- )
119
- }
120
- },
114
+ "extra_body": kwargs.get("extra_body", self.config.extra_body),
121
115
  }
122
116
  if kwargs.get("tools"):
123
117
  completion_kwargs["tools"] = kwargs.get("tools")
@@ -175,13 +169,7 @@ class VLLMLLM(BaseLLM):
175
169
  "max_tokens": kwargs.get("max_tokens", self.config.max_tokens),
176
170
  "top_p": kwargs.get("top_p", self.config.top_p),
177
171
  "stream": True,
178
- "extra_body": {
179
- "chat_template_kwargs": {
180
- "enable_thinking": kwargs.get(
181
- "enable_thinking", self.config.enable_thinking
182
- )
183
- }
184
- },
172
+ "extra_body": kwargs.get("extra_body", self.config.extra_body),
185
173
  }
186
174
 
187
175
  stream = self.client.chat.completions.create(**completion_kwargs)
@@ -646,6 +646,7 @@ class MultiModalStructMemReader(SimpleStructMemReader):
646
646
 
647
647
  return None
648
648
 
649
+ @timed
649
650
  def _process_string_fine(
650
651
  self,
651
652
  fast_memory_items: list[TextualMemoryItem],
@@ -883,6 +884,7 @@ class MultiModalStructMemReader(SimpleStructMemReader):
883
884
  logger.error(f"[MultiModalFine] Error calling LLM for tool trajectory: {e}")
884
885
  return []
885
886
 
887
+ @timed
886
888
  def _process_tool_trajectory_fine(
887
889
  self, fast_memory_items: list[TextualMemoryItem], info: dict[str, Any], **kwargs
888
890
  ) -> list[TextualMemoryItem]:
@@ -11,6 +11,7 @@ from memos.llms.base import BaseLLM
11
11
  from memos.log import get_logger
12
12
  from memos.memories.textual.item import SourceMessage, TextualMemoryItem
13
13
  from memos.types import MessagesType
14
+ from memos.utils import timed
14
15
 
15
16
  from .assistant_parser import AssistantParser
16
17
  from .base import BaseMessageParser
@@ -120,6 +121,7 @@ class MultiModalParser:
120
121
  logger.warning(f"[MultiModalParser] Could not determine parser for message: {message}")
121
122
  return None
122
123
 
124
+ @timed
123
125
  def parse(
124
126
  self,
125
127
  message: MessagesType,
@@ -157,6 +159,7 @@ class MultiModalParser:
157
159
  logger.error(f"[MultiModalParser] Error parsing message: {e}")
158
160
  return []
159
161
 
162
+ @timed
160
163
  def parse_batch(
161
164
  self,
162
165
  messages: list[MessagesType],
@@ -182,6 +185,7 @@ class MultiModalParser:
182
185
  results.append(items)
183
186
  return results
184
187
 
188
+ @timed
185
189
  def process_transfer(
186
190
  self,
187
191
  source: SourceMessage,
@@ -36,6 +36,7 @@ from memos.templates.skill_mem_prompt import (
36
36
  TOOL_GENERATION_PROMPT,
37
37
  )
38
38
  from memos.types import MessageList
39
+ from memos.utils import timed
39
40
 
40
41
 
41
42
  load_dotenv()
@@ -52,6 +53,9 @@ def _generate_content_by_llm(llm: BaseLLM, prompt_template: str, **kwargs) -> An
52
53
  try:
53
54
  prompt = prompt_template.format(**kwargs)
54
55
  response = llm.generate([{"role": "user", "content": prompt}])
56
+ if not response:
57
+ logger.warning("[PROCESS_SKILLS] LLM returned empty or invalid response")
58
+ return {} if "json" in prompt_template.lower() else ""
55
59
  if "json" in prompt_template.lower():
56
60
  response = response.replace("```json", "").replace("```", "").strip()
57
61
  return json.loads(response)
@@ -61,6 +65,7 @@ def _generate_content_by_llm(llm: BaseLLM, prompt_template: str, **kwargs) -> An
61
65
  return {} if "json" in prompt_template.lower() else ""
62
66
 
63
67
 
68
+ @timed
64
69
  def _batch_extract_skills(
65
70
  task_chunks: dict[str, MessageList],
66
71
  related_memories_map: dict[str, list[TextualMemoryItem]],
@@ -94,6 +99,7 @@ def _batch_extract_skills(
94
99
  return results
95
100
 
96
101
 
102
+ @timed
97
103
  def _batch_generate_skill_details(
98
104
  raw_skills_data: list[tuple[dict[str, Any], str, MessageList]],
99
105
  related_skill_memories_map: dict[str, list[TextualMemoryItem]],
@@ -436,6 +442,9 @@ def _extract_skill_memory_by_llm(
436
442
  skills_llm = os.getenv("SKILLS_LLM", None)
437
443
  llm_kwargs = {"model_name_or_path": skills_llm} if skills_llm else {}
438
444
  response_text = llm.generate(prompt, **llm_kwargs)
445
+ if not response_text:
446
+ logger.warning("[PROCESS_SKILLS] LLM returned empty or invalid response")
447
+ continue
439
448
  # Clean up response (remove Markdown code blocks if present)
440
449
  logger.info(f"[Skill Memory]: response_text {response_text}")
441
450
  response_text = response_text.strip()
@@ -561,6 +570,9 @@ def _extract_skill_memory_by_llm_md(
561
570
  skills_llm = os.getenv("SKILLS_LLM", None)
562
571
  llm_kwargs = {"model_name_or_path": skills_llm} if skills_llm else {}
563
572
  response_text = llm.generate(prompt, **llm_kwargs)
573
+ if not response_text:
574
+ logger.warning("[PROCESS_SKILLS] LLM returned empty or invalid response")
575
+ continue
564
576
  # Clean up response (remove Markdown code blocks if present)
565
577
  logger.info(f"[Skill Memory]: response_text {response_text}")
566
578
  response_text = response_text.strip()
@@ -641,26 +653,22 @@ def _rewrite_query(task_type: str, messages: MessageList, llm: BaseLLM, rewrite_
641
653
  )
642
654
  prompt = [{"role": "user", "content": prompt_content}]
643
655
 
644
- # Call LLM to rewrite the query with retry logic
645
- for attempt in range(3):
646
- try:
647
- response_text = llm.generate(prompt)
648
- # Clean up response (remove any markdown formatting if present)
649
- response_text = response_text.strip()
650
- logger.info(f"[PROCESS_SKILLS] Rewritten query for task '{task_type}': {response_text}")
651
- return response_text
652
- except Exception as e:
656
+ # Call LLM to rewrite the query
657
+ try:
658
+ response_text = llm.generate(prompt)
659
+ # Clean up response (remove any markdown formatting if present)
660
+ if response_text and isinstance(response_text, str):
661
+ return response_text.strip()
662
+ else:
653
663
  logger.warning(
654
- f"[PROCESS_SKILLS] LLM query rewrite failed (attempt {attempt + 1}): {e}"
664
+ "[PROCESS_SKILLS] LLM returned empty or invalid response, returning first message content"
655
665
  )
656
- if attempt == 2:
657
- logger.warning(
658
- "[PROCESS_SKILLS] LLM query rewrite failed after 3 retries, returning first message content"
659
- )
660
- return messages[0]["content"] if messages else ""
661
-
662
- # Fallback (should not reach here due to return in exception handling)
663
- return messages[0]["content"] if messages else ""
666
+ return messages[0]["content"] if messages else ""
667
+ except Exception as e:
668
+ logger.warning(
669
+ f"[PROCESS_SKILLS] LLM query rewrite failed: {e}, returning first message content"
670
+ )
671
+ return messages[0]["content"] if messages else ""
664
672
 
665
673
 
666
674
  @require_python_package(
@@ -751,6 +759,7 @@ def _delete_skills(
751
759
  logger.warning(f"Error deleting local file: {e}")
752
760
 
753
761
 
762
+ @timed
754
763
  def _write_skills_to_file(
755
764
  skill_memory: dict[str, Any], info: dict[str, Any], skills_dir_config: dict[str, Any]
756
765
  ) -> str:
@@ -995,6 +1004,7 @@ def _get_skill_file_storage_location() -> str:
995
1004
  return "LOCAL"
996
1005
 
997
1006
 
1007
+ @timed
998
1008
  def process_skill_memory_fine(
999
1009
  fast_memory_items: list[TextualMemoryItem],
1000
1010
  info: dict[str, Any],
@@ -1059,6 +1069,7 @@ def process_skill_memory_fine(
1059
1069
  )
1060
1070
  related_skill_memories_by_task[task_name] = []
1061
1071
 
1072
+ @timed
1062
1073
  def _simple_extract():
1063
1074
  # simple extract skill memory, only one stage
1064
1075
  memories = []
@@ -1091,6 +1102,7 @@ def process_skill_memory_fine(
1091
1102
  )
1092
1103
  return memories
1093
1104
 
1105
+ @timed
1094
1106
  def _full_extract():
1095
1107
  # full extract skill memory, include two stage
1096
1108
  raw_extraction_results = _batch_extract_skills(