MemoryOS 2.0.19__tar.gz → 2.0.22__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 (384) hide show
  1. {memoryos-2.0.19 → memoryos-2.0.22}/PKG-INFO +10 -13
  2. {memoryos-2.0.19 → memoryos-2.0.22}/README.md +9 -12
  3. {memoryos-2.0.19 → memoryos-2.0.22}/pyproject.toml +6 -2
  4. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/__init__.py +1 -1
  5. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/config.py +8 -0
  6. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/chat_handler.py +7 -1
  7. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/formatters_handler.py +11 -2
  8. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/scheduler_handler.py +39 -7
  9. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/search_handler.py +17 -0
  10. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/suggestion_handler.py +14 -2
  11. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/product_models.py +13 -0
  12. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/mem_reader.py +4 -0
  13. memoryos-2.0.22/src/memos/dream/README.md +129 -0
  14. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/plugin.py +1 -0
  15. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_os/core.py +1 -1
  16. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/multi_modal_struct.py +2 -2
  17. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_pref_memory/process_preference_memory.py +23 -2
  18. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/simple_struct.py +13 -1
  19. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/searcher.py +79 -21
  20. memoryos-2.0.22/src/memos/plugins/README.md +448 -0
  21. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/plugins/base.py +1 -0
  22. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/plugins/hook_defs.py +16 -0
  23. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/plugins/manager.py +9 -2
  24. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/search/search_service.py +1 -0
  25. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/prefer_complete_prompt.py +38 -30
  26. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/utils.py +5 -0
  27. {memoryos-2.0.19 → memoryos-2.0.22}/LICENSE +0 -0
  28. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/__init__.py +0 -0
  29. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/client.py +0 -0
  30. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/context/dependencies.py +0 -0
  31. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/exceptions.py +0 -0
  32. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/__init__.py +0 -0
  33. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/add_handler.py +0 -0
  34. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/base_handler.py +0 -0
  35. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/component_init.py +0 -0
  36. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/config_builders.py +0 -0
  37. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/cube_handler.py +0 -0
  38. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/feedback_handler.py +0 -0
  39. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/memory_handler.py +0 -0
  40. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/mcp_serve.py +0 -0
  41. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/middleware/__init__.py +0 -0
  42. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/middleware/auth.py +0 -0
  43. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/middleware/rate_limit.py +0 -0
  44. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/middleware/request_context.py +0 -0
  45. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/routers/__init__.py +0 -0
  46. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/routers/admin_router.py +0 -0
  47. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/routers/server_router.py +0 -0
  48. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/server_api.py +0 -0
  49. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/server_api_ext.py +0 -0
  50. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/utils/__init__.py +0 -0
  51. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/utils/api_keys.py +0 -0
  52. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/chunkers/__init__.py +0 -0
  53. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/chunkers/base.py +0 -0
  54. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/chunkers/charactertext_chunker.py +0 -0
  55. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/chunkers/factory.py +0 -0
  56. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/chunkers/markdown_chunker.py +0 -0
  57. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/chunkers/sentence_chunker.py +0 -0
  58. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/chunkers/simple_chunker.py +0 -0
  59. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/cli.py +0 -0
  60. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/__init__.py +0 -0
  61. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/base.py +0 -0
  62. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/chunker.py +0 -0
  63. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/embedder.py +0 -0
  64. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/graph_db.py +0 -0
  65. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/internet_retriever.py +0 -0
  66. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/llm.py +0 -0
  67. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/mem_agent.py +0 -0
  68. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/mem_chat.py +0 -0
  69. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/mem_cube.py +0 -0
  70. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/mem_os.py +0 -0
  71. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/mem_scheduler.py +0 -0
  72. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/mem_user.py +0 -0
  73. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/memory.py +0 -0
  74. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/parser.py +0 -0
  75. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/reranker.py +0 -0
  76. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/utils.py +0 -0
  77. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/vec_db.py +0 -0
  78. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/context/context.py +0 -0
  79. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dependency.py +0 -0
  80. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/deprecation.py +0 -0
  81. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/__init__.py +0 -0
  82. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/contextualization.py +0 -0
  83. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/enrichment.py +0 -0
  84. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/hook_defs.py +0 -0
  85. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/hooks.py +0 -0
  86. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/maintenance.py +0 -0
  87. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/pipeline/__init__.py +0 -0
  88. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/pipeline/base.py +0 -0
  89. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/pipeline/diary.py +0 -0
  90. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/pipeline/motive.py +0 -0
  91. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/pipeline/persistence.py +0 -0
  92. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/pipeline/reasoning.py +0 -0
  93. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/pipeline/recall.py +0 -0
  94. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/prompts/__init__.py +0 -0
  95. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/prompts/context_binding_prompt.py +0 -0
  96. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/prompts/context_summary_prompt.py +0 -0
  97. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/prompts/motive_prompt.py +0 -0
  98. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/prompts/reasoning_prompt.py +0 -0
  99. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/routers/__init__.py +0 -0
  100. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/routers/diary_router.py +0 -0
  101. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/routers/trigger_router.py +0 -0
  102. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/routes.py +0 -0
  103. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/search.py +0 -0
  104. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/signal_store.py +0 -0
  105. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/types.py +0 -0
  106. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/embedders/__init__.py +0 -0
  107. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/embedders/ark.py +0 -0
  108. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/embedders/base.py +0 -0
  109. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/embedders/factory.py +0 -0
  110. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/embedders/ollama.py +0 -0
  111. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/embedders/sentence_transformer.py +0 -0
  112. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/embedders/universal_api.py +0 -0
  113. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/exceptions.py +0 -0
  114. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/extras/__init__.py +0 -0
  115. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/graph_dbs/__init__.py +0 -0
  116. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/graph_dbs/base.py +0 -0
  117. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/graph_dbs/factory.py +0 -0
  118. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/graph_dbs/item.py +0 -0
  119. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/graph_dbs/neo4j.py +0 -0
  120. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/graph_dbs/neo4j_community.py +0 -0
  121. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/graph_dbs/polardb.py +0 -0
  122. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/graph_dbs/postgres.py +0 -0
  123. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/hello_world.py +0 -0
  124. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/__init__.py +0 -0
  125. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/base.py +0 -0
  126. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/deepseek.py +0 -0
  127. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/factory.py +0 -0
  128. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/hf.py +0 -0
  129. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/hf_singleton.py +0 -0
  130. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/minimax.py +0 -0
  131. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/ollama.py +0 -0
  132. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/openai.py +0 -0
  133. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/openai_new.py +0 -0
  134. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/qwen.py +0 -0
  135. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/utils.py +0 -0
  136. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/vllm.py +0 -0
  137. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/log.py +0 -0
  138. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_agent/base.py +0 -0
  139. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_agent/deepsearch_agent.py +0 -0
  140. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_agent/factory.py +0 -0
  141. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_chat/__init__.py +0 -0
  142. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_chat/base.py +0 -0
  143. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_chat/factory.py +0 -0
  144. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_chat/simple.py +0 -0
  145. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_cube/__init__.py +0 -0
  146. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_cube/base.py +0 -0
  147. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_cube/general.py +0 -0
  148. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_cube/navie.py +0 -0
  149. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_cube/utils.py +0 -0
  150. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_feedback/base.py +0 -0
  151. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_feedback/feedback.py +0 -0
  152. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_feedback/simple_feedback.py +0 -0
  153. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_feedback/utils.py +0 -0
  154. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_os/main.py +0 -0
  155. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_os/utils/default_config.py +0 -0
  156. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_os/utils/format_utils.py +0 -0
  157. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_os/utils/reference_utils.py +0 -0
  158. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/__init__.py +0 -0
  159. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/base.py +0 -0
  160. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/factory.py +0 -0
  161. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/memory.py +0 -0
  162. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/__init__.py +0 -0
  163. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/assistant_parser.py +0 -0
  164. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/base.py +0 -0
  165. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/file_content_parser.py +0 -0
  166. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/image_parser.py +0 -0
  167. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/multi_modal_parser.py +0 -0
  168. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/string_parser.py +0 -0
  169. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/system_parser.py +0 -0
  170. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/text_content_parser.py +0 -0
  171. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/tool_parser.py +0 -0
  172. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/user_parser.py +0 -0
  173. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/utils.py +0 -0
  174. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_skill_memory/process_skill_memory.py +0 -0
  175. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_skill_memory/upload_skill_memory.py +0 -0
  176. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/strategy_struct.py +0 -0
  177. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/utils.py +0 -0
  178. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/__init__.py +0 -0
  179. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/analyzer/__init__.py +0 -0
  180. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/analyzer/api_analyzer.py +0 -0
  181. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/analyzer/eval_analyzer.py +0 -0
  182. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/analyzer/mos_for_test_scheduler.py +0 -0
  183. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/analyzer/scheduler_for_eval.py +0 -0
  184. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/base_mixins/__init__.py +0 -0
  185. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/base_mixins/memory_ops.py +0 -0
  186. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/base_mixins/queue_ops.py +0 -0
  187. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/base_mixins/web_log_ops.py +0 -0
  188. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/base_scheduler.py +0 -0
  189. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/general_modules/__init__.py +0 -0
  190. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/general_modules/api_misc.py +0 -0
  191. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/general_modules/base.py +0 -0
  192. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/general_modules/init_components_for_scheduler.py +0 -0
  193. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/general_modules/misc.py +0 -0
  194. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/general_modules/scheduler_logger.py +0 -0
  195. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/general_modules/task_threads.py +0 -0
  196. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/general_scheduler.py +0 -0
  197. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/__init__.py +0 -0
  198. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/activation_memory_manager.py +0 -0
  199. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/enhancement_pipeline.py +0 -0
  200. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/filter_pipeline.py +0 -0
  201. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/memory_filter.py +0 -0
  202. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/post_processor.py +0 -0
  203. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/rerank_pipeline.py +0 -0
  204. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/retriever.py +0 -0
  205. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/search_pipeline.py +0 -0
  206. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/search_service.py +0 -0
  207. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/monitors/__init__.py +0 -0
  208. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/monitors/dispatcher_monitor.py +0 -0
  209. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/monitors/general_monitor.py +0 -0
  210. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/monitors/task_schedule_monitor.py +0 -0
  211. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/optimized_scheduler.py +0 -0
  212. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/orm_modules/__init__.py +0 -0
  213. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/orm_modules/api_redis_model.py +0 -0
  214. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/orm_modules/base_model.py +0 -0
  215. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/orm_modules/monitor_models.py +0 -0
  216. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/orm_modules/redis_model.py +0 -0
  217. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/scheduler_factory.py +0 -0
  218. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/schemas/__init__.py +0 -0
  219. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/schemas/analyzer_schemas.py +0 -0
  220. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/schemas/api_schemas.py +0 -0
  221. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/schemas/general_schemas.py +0 -0
  222. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/schemas/message_schemas.py +0 -0
  223. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/schemas/monitor_schemas.py +0 -0
  224. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/schemas/task_schemas.py +0 -0
  225. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/__init__.py +0 -0
  226. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/base_handler.py +0 -0
  227. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/context.py +0 -0
  228. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/dispatcher.py +0 -0
  229. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/__init__.py +0 -0
  230. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/add_handler.py +0 -0
  231. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/answer_handler.py +0 -0
  232. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/feedback_handler.py +0 -0
  233. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_dream_handler.py +0 -0
  234. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_read_handler.py +0 -0
  235. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_reorganize_handler.py +0 -0
  236. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/memory_update_handler.py +0 -0
  237. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/pref_add_handler.py +0 -0
  238. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/query_handler.py +0 -0
  239. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/local_queue.py +0 -0
  240. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/orchestrator.py +0 -0
  241. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/redis_queue.py +0 -0
  242. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/registry.py +0 -0
  243. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/task_queue.py +0 -0
  244. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/__init__.py +0 -0
  245. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/api_utils.py +0 -0
  246. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/config_utils.py +0 -0
  247. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/db_utils.py +0 -0
  248. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/filter_utils.py +0 -0
  249. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/metrics.py +0 -0
  250. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/misc_utils.py +0 -0
  251. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/monitor_event_utils.py +0 -0
  252. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/status_tracker.py +0 -0
  253. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/webservice_modules/__init__.py +0 -0
  254. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/webservice_modules/rabbitmq_service.py +0 -0
  255. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/webservice_modules/redis_service.py +0 -0
  256. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_user/factory.py +0 -0
  257. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_user/mysql_persistent_user_manager.py +0 -0
  258. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_user/mysql_user_manager.py +0 -0
  259. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_user/persistent_factory.py +0 -0
  260. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_user/persistent_user_manager.py +0 -0
  261. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_user/redis_persistent_user_manager.py +0 -0
  262. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_user/user_manager.py +0 -0
  263. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/__init__.py +0 -0
  264. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/activation/__init__.py +0 -0
  265. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/activation/base.py +0 -0
  266. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/activation/item.py +0 -0
  267. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/activation/kv.py +0 -0
  268. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/activation/vllmkv.py +0 -0
  269. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/base.py +0 -0
  270. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/factory.py +0 -0
  271. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/parametric/__init__.py +0 -0
  272. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/parametric/base.py +0 -0
  273. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/parametric/item.py +0 -0
  274. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/parametric/lora.py +0 -0
  275. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/__init__.py +0 -0
  276. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/base.py +0 -0
  277. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/general.py +0 -0
  278. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/item.py +0 -0
  279. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/naive.py +0 -0
  280. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/prefer_text_memory/__init__.py +0 -0
  281. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/prefer_text_memory/adder.py +0 -0
  282. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/prefer_text_memory/config.py +0 -0
  283. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/prefer_text_memory/extractor.py +0 -0
  284. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/prefer_text_memory/factory.py +0 -0
  285. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/prefer_text_memory/retrievers.py +0 -0
  286. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/prefer_text_memory/spliter.py +0 -0
  287. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/prefer_text_memory/utils.py +0 -0
  288. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/preference.py +0 -0
  289. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/simple_preference.py +0 -0
  290. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/simple_tree.py +0 -0
  291. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree.py +0 -0
  292. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/__init__.py +0 -0
  293. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/organize/__init__.py +0 -0
  294. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/organize/handler.py +0 -0
  295. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/organize/manager.py +0 -0
  296. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/organize/relation_reason_detector.py +0 -0
  297. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/organize/reorganizer.py +0 -0
  298. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/__init__.py +0 -0
  299. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/advanced_searcher.py +0 -0
  300. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/bm25_util.py +0 -0
  301. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/bochasearch.py +0 -0
  302. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever.py +0 -0
  303. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever_factory.py +0 -0
  304. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/reasoner.py +0 -0
  305. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/recall.py +0 -0
  306. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/reranker.py +0 -0
  307. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/retrieval_mid_structs.py +0 -0
  308. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/retrieve_utils.py +0 -0
  309. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/task_goal_parser.py +0 -0
  310. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/tavilysearch.py +0 -0
  311. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/utils.py +0 -0
  312. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/xinyusearch.py +0 -0
  313. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memos_tools/dinding_report_bot.py +0 -0
  314. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memos_tools/lockfree_dict.py +0 -0
  315. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memos_tools/notification_service.py +0 -0
  316. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memos_tools/notification_utils.py +0 -0
  317. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memos_tools/singleton.py +0 -0
  318. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memos_tools/thread_safe_dict.py +0 -0
  319. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memos_tools/thread_safe_dict_segment.py +0 -0
  320. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/multi_mem_cube/__init__.py +0 -0
  321. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/multi_mem_cube/composite_cube.py +0 -0
  322. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/multi_mem_cube/single_cube.py +0 -0
  323. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/multi_mem_cube/views.py +0 -0
  324. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/parsers/__init__.py +0 -0
  325. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/parsers/base.py +0 -0
  326. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/parsers/factory.py +0 -0
  327. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/parsers/markitdown.py +0 -0
  328. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/plugins/__init__.py +0 -0
  329. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/plugins/component_bootstrap.py +0 -0
  330. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/plugins/hooks.py +0 -0
  331. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/__init__.py +0 -0
  332. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/base.py +0 -0
  333. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/concat.py +0 -0
  334. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/cosine_local.py +0 -0
  335. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/factory.py +0 -0
  336. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/http_bge.py +0 -0
  337. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/http_bge_strategy.py +0 -0
  338. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/noop.py +0 -0
  339. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/strategies/__init__.py +0 -0
  340. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/strategies/base.py +0 -0
  341. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/strategies/concat_background.py +0 -0
  342. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/strategies/concat_docsource.py +0 -0
  343. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/strategies/dialogue_common.py +0 -0
  344. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/strategies/factory.py +0 -0
  345. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/strategies/single_turn.py +0 -0
  346. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/strategies/singleturn_outmem.py +0 -0
  347. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/search/__init__.py +0 -0
  348. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/settings.py +0 -0
  349. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/__init__.py +0 -0
  350. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/advanced_search_prompts.py +0 -0
  351. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/cloud_service_prompt.py +0 -0
  352. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/instruction_completion.py +0 -0
  353. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/mem_agent_prompts.py +0 -0
  354. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/mem_feedback_prompts.py +0 -0
  355. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/mem_reader_prompts.py +0 -0
  356. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/mem_reader_strategy_prompts.py +0 -0
  357. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/mem_scheduler_prompts.py +0 -0
  358. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/mem_search_prompts.py +0 -0
  359. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/mos_prompts.py +0 -0
  360. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/skill_mem_prompt.py +0 -0
  361. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/tool_mem_prompts.py +0 -0
  362. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/tree_reorganize_prompts.py +0 -0
  363. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/__init__.py +0 -0
  364. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/general_types.py +0 -0
  365. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/__init__.py +0 -0
  366. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_assistant_message_param.py +0 -0
  367. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_image_param.py +0 -0
  368. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_input_audio_param.py +0 -0
  369. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_param.py +0 -0
  370. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_refusal_param.py +0 -0
  371. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_text_param.py +0 -0
  372. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_message_custom_tool_call_param.py +0 -0
  373. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_message_function_tool_call_param.py +0 -0
  374. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_message_param.py +0 -0
  375. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_message_tool_call_union_param.py +0 -0
  376. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_system_message_param.py +0 -0
  377. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_tool_message_param.py +0 -0
  378. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_user_message_param.py +0 -0
  379. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/vec_dbs/__init__.py +0 -0
  380. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/vec_dbs/base.py +0 -0
  381. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/vec_dbs/factory.py +0 -0
  382. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/vec_dbs/item.py +0 -0
  383. {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/vec_dbs/milvus.py +0 -0
  384. {memoryos-2.0.19 → memoryos-2.0.22}/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.19
3
+ Version: 2.0.22
4
4
  Summary: Intelligence Begins with Memory
5
5
  License: Apache-2.0
6
6
  License-File: LICENSE
@@ -103,10 +103,10 @@ Description-Content-Type: text/markdown
103
103
  </p>
104
104
 
105
105
  <p align="center">
106
- <strong>🎯 +43.70% Accuracy vs. OpenAI Memory</strong><br/>
107
- <strong>🏆 Top-tier Long-term Memory + Personalization</strong><br/>
108
- <strong>💰 Saves 35.24% Memory Tokens</strong><br/>
109
- <sub>LoCoMo 75.80 LongMemEval +40.43% PrefEval-10 +2568% • PersonaMem +40.75%</sub>
106
+ <strong>🏆 Leading Performance Across Agent and User Memory Benchmarks</strong><br/>
107
+ <strong>🤖 OpenClaw Task Completion Improves from 36.63% to 50.87%</strong><br/>
108
+ <strong>🎯 92.34 on LoCoMo and 93.40 on LongMemEval</strong><br/>
109
+ <strong>📊 Unified Evaluation Across 14 Commercial Memory Products</strong>
110
110
  <!-- <a href="https://memos.openmem.net/">
111
111
  <img src="https://statics.memtensor.com.cn/memos/github_api_free_banner.gif" alt="MemOS Free API Banner">
112
112
  </a> -->
@@ -155,6 +155,9 @@ Your lobsters and Hermes Agents now have **the best** memory system — choose *
155
155
 
156
156
  ### News
157
157
 
158
+ - **2026-07-02** · 🏆 **MemOS Advances Agent and User Memory Benchmarks**
159
+ With MemOS, **OpenClaw** improves average task completion from **36.63% to 50.87%** across five agent tasks. MemOS also achieves **92.34 on LoCoMo** and **93.40 on LongMemEval**, and leads in **OmniMemEval**, a unified evaluation of 14 commercial memory products across ten datasets.
160
+
158
161
  - **2026-05-09** · 🧠 **memos-local-plugin 2.0**
159
162
  Official local memory plugin for **Hermes Agent** and **OpenClaw**. One core powers self-evolving memory across L1 traces, L2 policies, L3 world models, and crystallized Skills, with local-first storage and feedback-driven retrieval.
160
163
 
@@ -357,14 +360,8 @@ MemOS is a **Memory Operating System** for LLMs and AI agents that unifies store
357
360
 
358
361
  ### What are the benchmark results?
359
362
 
360
- | Benchmark | MemOS Result | Improvement |
361
- |-----------|--------------|-------------|
362
- | LoCoMo | 75.80 | - |
363
- | LongMemEval | +40.43% vs baseline | - |
364
- | PrefEval-10 | +2568% | - |
365
- | PersonaMem | +40.75% | - |
366
- | **vs OpenAI Memory** | +43.70% Accuracy | - |
367
- | **Token Savings** | 35.24% | - |
363
+ MemOS achieves **92.34 on LoCoMo** and **93.40 on LongMemEval** for User Memory, while improving **OpenClaw** average task completion from **36.63% to 50.87%** across five Agent Memory tasks. For details, see [OmniMemEval](https://github.com/MemTensor/OmniMemEval), our unified evaluation framework for benchmarking 14 commercial memory products across ten datasets.
364
+
368
365
 
369
366
  ### How does MemOS compare to other memory solutions?
370
367
 
@@ -19,10 +19,10 @@
19
19
  </p>
20
20
 
21
21
  <p align="center">
22
- <strong>🎯 +43.70% Accuracy vs. OpenAI Memory</strong><br/>
23
- <strong>🏆 Top-tier Long-term Memory + Personalization</strong><br/>
24
- <strong>💰 Saves 35.24% Memory Tokens</strong><br/>
25
- <sub>LoCoMo 75.80 LongMemEval +40.43% PrefEval-10 +2568% • PersonaMem +40.75%</sub>
22
+ <strong>🏆 Leading Performance Across Agent and User Memory Benchmarks</strong><br/>
23
+ <strong>🤖 OpenClaw Task Completion Improves from 36.63% to 50.87%</strong><br/>
24
+ <strong>🎯 92.34 on LoCoMo and 93.40 on LongMemEval</strong><br/>
25
+ <strong>📊 Unified Evaluation Across 14 Commercial Memory Products</strong>
26
26
  <!-- <a href="https://memos.openmem.net/">
27
27
  <img src="https://statics.memtensor.com.cn/memos/github_api_free_banner.gif" alt="MemOS Free API Banner">
28
28
  </a> -->
@@ -71,6 +71,9 @@ Your lobsters and Hermes Agents now have **the best** memory system — choose *
71
71
 
72
72
  ### News
73
73
 
74
+ - **2026-07-02** · 🏆 **MemOS Advances Agent and User Memory Benchmarks**
75
+ With MemOS, **OpenClaw** improves average task completion from **36.63% to 50.87%** across five agent tasks. MemOS also achieves **92.34 on LoCoMo** and **93.40 on LongMemEval**, and leads in **OmniMemEval**, a unified evaluation of 14 commercial memory products across ten datasets.
76
+
74
77
  - **2026-05-09** · 🧠 **memos-local-plugin 2.0**
75
78
  Official local memory plugin for **Hermes Agent** and **OpenClaw**. One core powers self-evolving memory across L1 traces, L2 policies, L3 world models, and crystallized Skills, with local-first storage and feedback-driven retrieval.
76
79
 
@@ -273,14 +276,8 @@ MemOS is a **Memory Operating System** for LLMs and AI agents that unifies store
273
276
 
274
277
  ### What are the benchmark results?
275
278
 
276
- | Benchmark | MemOS Result | Improvement |
277
- |-----------|--------------|-------------|
278
- | LoCoMo | 75.80 | - |
279
- | LongMemEval | +40.43% vs baseline | - |
280
- | PrefEval-10 | +2568% | - |
281
- | PersonaMem | +40.75% | - |
282
- | **vs OpenAI Memory** | +43.70% Accuracy | - |
283
- | **Token Savings** | 35.24% | - |
279
+ MemOS achieves **92.34 on LoCoMo** and **93.40 on LongMemEval** for User Memory, while improving **OpenClaw** average task completion from **36.63% to 50.87%** across five Agent Memory tasks. For details, see [OmniMemEval](https://github.com/MemTensor/OmniMemEval), our unified evaluation framework for benchmarking 14 commercial memory products across ten datasets.
280
+
284
281
 
285
282
  ### How does MemOS compare to other memory solutions?
286
283
 
@@ -4,7 +4,7 @@
4
4
  ##############################################################################
5
5
 
6
6
  name = "MemoryOS"
7
- version = "2.0.19"
7
+ version = "2.0.22"
8
8
  description = "Intelligence Begins with Memory"
9
9
  license = {text = "Apache-2.0"}
10
10
  readme = "README.md"
@@ -89,6 +89,8 @@ mem-user = [
89
89
 
90
90
  # MemReader
91
91
  mem-reader = [
92
+ # chonkie>=1.6 pulls numpy>=2.0; any environment that also has scipy
93
+ # installed must use scipy>=1.13 (older scipy pins numpy<1.27). See #1342.
92
94
  "chonkie (>=1.0.7,<2.0.0)", # Sentence chunking library
93
95
  "markitdown[docx,pdf,pptx,xls,xlsx] (>=0.1.1,<0.2.0)", # Markdown parser for various file formats
94
96
  "langchain-text-splitters (>=1.0.0,<2.0.0)", # markdown chunk for langchain
@@ -193,7 +195,9 @@ zep-cloud = "^2.15.0"
193
195
  rouge-score = "^0.1.2"
194
196
  nltk = "^3.9.1"
195
197
  bert-score = "^0.3.13"
196
- scipy = "^1.10.1"
198
+ # scipy 1.13+ supports numpy 2.x. Older scipy (1.10/1.11/1.12) pins numpy<1.27
199
+ # which collides with chonkie>=1.6 (requires numpy>=2.0.0) — see issue #1342.
200
+ scipy = "^1.13.0"
197
201
  python-dotenv = "^1.1.1"
198
202
  langgraph = "^0.5.1"
199
203
 
@@ -1,4 +1,4 @@
1
- __version__ = "2.0.19"
1
+ __version__ = "2.0.22"
2
2
 
3
3
  from memos.configs.mem_cube import GeneralMemCubeConfig
4
4
  from memos.configs.mem_os import MOSConfig
@@ -979,6 +979,10 @@ class APIConfig:
979
979
  "general_llm": APIConfig.get_memreader_general_llm_config(),
980
980
  # Image parser LLM (requires vision model)
981
981
  "image_parser_llm": APIConfig.get_image_parser_llm_config(),
982
+ # Preference extractor LLM. Reader falls back to general_llm when unset.
983
+ "preference_extractor_llm": APIConfig.get_preference_extractor_llm_config()
984
+ if os.getenv("PREFERENCE_EXTRACTOR_MODEL")
985
+ else None,
982
986
  "embedder": APIConfig.get_embedder_config(),
983
987
  "chunker": {
984
988
  "backend": "sentence",
@@ -1108,6 +1112,10 @@ class APIConfig:
1108
1112
  "general_llm": APIConfig.get_memreader_general_llm_config(),
1109
1113
  # Image parser LLM (requires vision model)
1110
1114
  "image_parser_llm": APIConfig.get_image_parser_llm_config(),
1115
+ # Preference extractor LLM. Reader falls back to general_llm when unset.
1116
+ "preference_extractor_llm": APIConfig.get_preference_extractor_llm_config()
1117
+ if os.getenv("PREFERENCE_EXTRACTOR_MODEL")
1118
+ else None,
1111
1119
  "embedder": APIConfig.get_embedder_config(),
1112
1120
  "chunker": {
1113
1121
  "backend": "sentence",
@@ -1225,7 +1225,13 @@ class ChatHandler(BaseHandler):
1225
1225
  [f"{msg['role']}: {msg['content']}" for msg in current_messages[-2:]]
1226
1226
  )
1227
1227
  further_suggestion_prompt = FURTHER_SUGGESTION_PROMPT.format(dialogue=dialogue_info)
1228
- message_list = [{"role": "system", "content": further_suggestion_prompt}]
1228
+ message_list = [
1229
+ {
1230
+ "role": "system",
1231
+ "content": "You are a helpful assistant that generates suggestion queries based on dialogue context.",
1232
+ },
1233
+ {"role": "user", "content": further_suggestion_prompt},
1234
+ ]
1229
1235
  response = self.llm.generate(message_list)
1230
1236
  clean_response = clean_json_response(response)
1231
1237
  response_json = json.loads(clean_response)
@@ -13,6 +13,13 @@ from memos.templates.instruction_completion import instruct_completion
13
13
 
14
14
  logger = get_logger(__name__)
15
15
 
16
+ __all__ = [
17
+ "format_memory_item",
18
+ "post_process_textual_mem",
19
+ "rerank_knowledge_mem",
20
+ "to_iter",
21
+ ]
22
+
16
23
 
17
24
  def to_iter(running: Any) -> list[Any]:
18
25
  """
@@ -164,6 +171,7 @@ def rerank_knowledge_mem(
164
171
  text_mem: list[dict[str, Any]],
165
172
  top_k: int,
166
173
  file_mem_proportion: float = 0.5,
174
+ strip_conversation_sources: bool = False,
167
175
  ) -> list[dict[str, Any]]:
168
176
  """
169
177
  Rerank knowledge memories and keep conversation memories.
@@ -193,8 +201,9 @@ def rerank_knowledge_mem(
193
201
  item["memory"] = item["metadata"]["sources"][0]["content"]
194
202
  item["metadata"]["sources"] = []
195
203
 
196
- for item in conversation_mem:
197
- item.setdefault("metadata", {})["sources"] = []
204
+ if strip_conversation_sources:
205
+ for item in conversation_mem:
206
+ item.setdefault("metadata", {})["sources"] = []
198
207
 
199
208
  # deduplicate: remove items with duplicate memory content
200
209
  original_count = len(reranked_knowledge_mem)
@@ -146,18 +146,50 @@ def handle_scheduler_allstatus(
146
146
  sched_failed = all_tasks_summary.failed
147
147
  sched_cancelled = all_tasks_summary.cancelled
148
148
 
149
- # If queue monitor is available, prefer its live waiting/in_progress counts
149
+ # If queue monitor is available, prefer its live waiting/in_progress counts.
150
+ #
151
+ # Two queue backends produce different ``queue_status_data`` shapes:
152
+ # - Redis queue: ``{"running": .., "remaining": .., "pending": ..,
153
+ # "<stream_key_prefix>:<user>:<cube>:<label>": {"running": ..,
154
+ # "remaining": .., "pending": ..}, ...}`` — the per-stream entries
155
+ # are nested dicts and their keys start with the scheduler stream
156
+ # prefix (default ``"scheduler:messages:stream:v2.0:"``). The loop
157
+ # below aggregates those per-stream entries.
158
+ # - Local in-memory queue: only the top-level totals
159
+ # ``{"running", "remaining", "pending"}`` are present (see
160
+ # ``TaskScheduleMonitor._get_local_tasks_status``). There are no
161
+ # per-stream keys to enumerate, so the prefix loop would silently
162
+ # collapse the summary to all zeros. Detect that case and fall back
163
+ # to the flat totals so Docker / no-Redis deployments still surface
164
+ # accurate in_progress / waiting / pending counts (issue #1395).
150
165
  if mem_scheduler.task_schedule_monitor:
151
166
  queue_status_data = mem_scheduler.task_schedule_monitor.get_tasks_status() or {}
152
167
  scheduler_waiting = 0
153
168
  scheduler_in_progress = 0
154
169
  scheduler_pending = 0
155
- for key, value in queue_status_data.items():
156
- if not key.startswith("scheduler:"):
157
- continue
158
- scheduler_in_progress += int(value.get("running", 0) or 0)
159
- scheduler_pending += int(value.get("pending", value.get("remaining", 0)) or 0)
160
- scheduler_waiting += int(value.get("remaining", 0) or 0)
170
+ per_stream_keys = [
171
+ key
172
+ for key, value in queue_status_data.items()
173
+ if isinstance(key, str) and key.startswith("scheduler:") and isinstance(value, dict)
174
+ ]
175
+
176
+ if per_stream_keys:
177
+ for key in per_stream_keys:
178
+ value = queue_status_data[key]
179
+ scheduler_in_progress += int(value.get("running", 0) or 0)
180
+ scheduler_pending += int(value.get("pending", value.get("remaining", 0)) or 0)
181
+ scheduler_waiting += int(value.get("remaining", 0) or 0)
182
+ elif not getattr(mem_scheduler, "use_redis_queue", True):
183
+ # Local-queue mode: there are no per-stream keys; use the flat
184
+ # totals from ``_get_local_tasks_status``. ``remaining`` reflects
185
+ # queued depth (waiting / pending) and ``running`` reflects the
186
+ # dispatcher's in-flight count.
187
+ scheduler_in_progress = int(queue_status_data.get("running", 0) or 0)
188
+ scheduler_waiting = int(queue_status_data.get("remaining", 0) or 0)
189
+ scheduler_pending = int(
190
+ queue_status_data.get("pending", queue_status_data.get("remaining", 0)) or 0
191
+ )
192
+
161
193
  sched_waiting = scheduler_waiting
162
194
  sched_in_progress = scheduler_in_progress
163
195
  sched_pending = scheduler_pending
@@ -118,6 +118,23 @@ class SearchHandler(BaseHandler):
118
118
  top_k=search_req_local.top_k,
119
119
  file_mem_proportion=0.5,
120
120
  )
121
+ hooked_results = trigger_hook(
122
+ H.SEARCH_RESULTS_AFTER_RERANK,
123
+ handler=self,
124
+ search_req=search_req_local,
125
+ results=results,
126
+ )
127
+ if hooked_results is not None:
128
+ results = hooked_results
129
+
130
+ hooked_results = trigger_hook(
131
+ H.SEARCH_CONTEXT_RENDER,
132
+ handler=self,
133
+ search_req=search_req_local,
134
+ results=results,
135
+ )
136
+ if hooked_results is not None:
137
+ results = hooked_results
121
138
 
122
139
  self.logger.info(
123
140
  f"[SearchHandler] Final search results: count={len(results)} results={results}"
@@ -49,7 +49,13 @@ def _get_further_suggestion(
49
49
  ]
50
50
  )
51
51
  further_suggestion_prompt = FURTHER_SUGGESTION_PROMPT.format(dialogue=dialogue_info)
52
- message_list = [{"role": "system", "content": further_suggestion_prompt}]
52
+ message_list = [
53
+ {
54
+ "role": "system",
55
+ "content": "You are a helpful assistant that generates suggestion queries based on dialogue context.",
56
+ },
57
+ {"role": "user", "content": further_suggestion_prompt},
58
+ ]
53
59
  response = llm.generate(message_list)
54
60
  clean_response = clean_json_response(response)
55
61
  response_json = json.loads(clean_response)
@@ -111,7 +117,13 @@ def handle_get_suggestion_queries(
111
117
  memories = "\n".join([m.memory[:200] for m in text_mem_results])
112
118
 
113
119
  # Generate suggestions using LLM
114
- message_list = [{"role": "system", "content": suggestion_prompt.format(memories=memories)}]
120
+ message_list = [
121
+ {
122
+ "role": "system",
123
+ "content": "You are a helpful assistant that generates suggestion queries based on the user's recent memories.",
124
+ },
125
+ {"role": "user", "content": suggestion_prompt.format(memories=memories)},
126
+ ]
115
127
  response = llm.generate(message_list)
116
128
  clean_response = clean_json_response(response)
117
129
  response_json = json.loads(clean_response)
@@ -422,6 +422,14 @@ class APISearchRequest(BaseRequest):
422
422
  ),
423
423
  )
424
424
 
425
+ rerank: bool = Field(
426
+ True,
427
+ description=(
428
+ "Whether to apply the textual memory reranker during search. "
429
+ "Set false to return retrieval-order candidates before post-search dedup/formatting."
430
+ ),
431
+ )
432
+
425
433
  pref_top_k: int = Field(
426
434
  6,
427
435
  ge=0,
@@ -464,6 +472,11 @@ class APISearchRequest(BaseRequest):
464
472
  description="Number of skill memories to retrieve (top-K). Default: 3.",
465
473
  )
466
474
 
475
+ context_format: str = Field(
476
+ "memory",
477
+ description="Optional search context format passed through to installed plugins.",
478
+ )
479
+
467
480
  # ==== Filter conditions ====
468
481
  # TODO: maybe add detailed description later
469
482
  filter: dict[str, Any] | None = Field(
@@ -36,6 +36,10 @@ class BaseMemReaderConfig(BaseConfig):
36
36
  default=None,
37
37
  description="Vision LLM for image parsing. Falls back to general_llm if not set.",
38
38
  )
39
+ preference_extractor_llm: LLMConfigFactory | None = Field(
40
+ default=None,
41
+ description="LLM for preference extraction. Falls back to general_llm if not set.",
42
+ )
39
43
  embedder: EmbedderConfigFactory = Field(
40
44
  ..., description="Embedder configuration for the MemReader"
41
45
  )
@@ -0,0 +1,129 @@
1
+ # Dream Plugin
2
+
3
+ Dream is an optional MemOS community feature, currently in beta. It explores how
4
+ an agent can reflect on recently added memories outside the foreground request
5
+ path, then consolidate them into higher-level context, insights, and diary
6
+ entries. The implementation is intentionally lightweight and extensible, and we
7
+ welcome the community to help improve the signal policy, prompts, persistence,
8
+ diary experience, and downstream integrations.
9
+
10
+ ## Status and Enablement
11
+
12
+ Dream is disabled by default.
13
+
14
+ With no plugin environment variables configured, MemOS loads ordinary plugins as
15
+ before, but it does not load the built-in `dream` plugin. Enable it explicitly:
16
+
17
+ ```bash
18
+ MEMOS_ENABLED_PLUGINS=dream
19
+ ```
20
+
21
+ `MEMOS_DISABLED_PLUGINS` has the highest priority, so this keeps Dream disabled:
22
+
23
+ ```bash
24
+ MEMOS_ENABLED_PLUGINS=dream
25
+ MEMOS_DISABLED_PLUGINS=dream
26
+ ```
27
+
28
+ ## Current Capabilities
29
+
30
+ When enabled, the built-in `CommunityDreamPlugin` provides:
31
+
32
+ - signal capture from successful memory add operations;
33
+ - deterministic Dream metadata enrichment during fine extraction;
34
+ - scheduler-driven Dream execution through the `dream.execute` hook;
35
+ - manual cube-level triggering through `POST /dream/trigger/cube`;
36
+ - Dream diary querying through `POST /dream/diary`;
37
+ - `Context` recall merged into normal search results.
38
+
39
+ The default pipeline is:
40
+
41
+ 1. Build or update `Context` nodes from pending memories.
42
+ 2. Form Dream motives from recently added source memories.
43
+ 3. Recall related `UserMemory` and `LongTermMemory` nodes.
44
+ 4. Use the configured LLM to produce at most one insight per motive.
45
+ 5. Generate a human-readable Dream diary entry.
46
+ 6. Persist valid insight actions and diary entries to the graph database.
47
+
48
+ If no LLM is available, Dream can still run the pipeline, but fallback reasoning
49
+ does not write new insight memories because zero-confidence actions are skipped.
50
+
51
+ ## Usage
52
+
53
+ Enable Dream and start the API service:
54
+
55
+ ```bash
56
+ export MEMOS_ENABLED_PLUGINS=dream
57
+ make serve
58
+ ```
59
+
60
+ Check plugin health:
61
+
62
+ ```bash
63
+ curl http://127.0.0.1:8000/dream/diary/health
64
+ ```
65
+
66
+ Manually submit a cube-level Dream task:
67
+
68
+ ```bash
69
+ curl -X POST "http://127.0.0.1:8000/dream/trigger/cube?cube_id=<cube_id>&user_id=<user_id>&user_name=<user_name>"
70
+ ```
71
+
72
+ Query recent Dream diary entries:
73
+
74
+ ```bash
75
+ curl -X POST http://127.0.0.1:8000/dream/diary \
76
+ -H "Content-Type: application/json" \
77
+ -d '{"cube_id": "<cube_id>", "filter": {"limit": 5}}'
78
+ ```
79
+
80
+ Fetch one diary entry:
81
+
82
+ ```bash
83
+ curl -X POST http://127.0.0.1:8000/dream/diary \
84
+ -H "Content-Type: application/json" \
85
+ -d '{"cube_id": "<cube_id>", "filter": {"task_id": "dream_diary_xxx"}}'
86
+ ```
87
+
88
+ ## Configuration
89
+
90
+ Plugin loading:
91
+
92
+ - `MEMOS_ENABLED_PLUGINS=dream`: enable Dream.
93
+ - `MEMOS_DISABLED_PLUGINS=dream`: disable Dream, even if it is also enabled.
94
+
95
+ Dream-specific options:
96
+
97
+ - `MEMOS_DREAM_HEURISTIC_ENRICHER`: defaults to `on`.
98
+ - `MEMOS_DREAM_ENRICH_OVERWRITE`: defaults to `off`.
99
+ - `MEMOS_DREAM_CONTEXT_ENABLED`: defaults to `on`.
100
+ - `MEMOS_DREAM_CONTEXT_SUMMARY_LLM`: defaults to `on`.
101
+ - `MEMOS_DREAM_CONTEXT_BINDING_LLM`: defaults to `on`.
102
+ - `MEMOS_DREAM_CONTEXT_BINDING_MIN_GROUP_SIZE`: defaults to `2`.
103
+ - `MEMOS_DREAM_CONTEXT_BINDING_MAX_GROUP_SIZE`: defaults to `30`.
104
+ - `MEMOS_DREAM_CONTEXT_BINDING_CONFIDENCE_THRESHOLD`: defaults to `0.65`.
105
+
106
+ ## Beta Limitations
107
+
108
+ - Signals are stored in memory and do not survive process restarts.
109
+ - The automatic trigger policy is currently a simple pending-memory threshold.
110
+ - The built-in signal source focuses on new-memory accumulation. Conflict,
111
+ feedback, frequency, and fragmentation signals are extension points.
112
+ - The diary and surfacing experience is still early.
113
+ - Write-back policies for update, merge, archive, and long-term maintenance are
114
+ available as extension directions, not complete product behavior.
115
+
116
+ ## Contributing
117
+
118
+ Dream is designed as a community-building surface. Good places to contribute:
119
+
120
+ - better trigger policies and signal stores;
121
+ - stronger motive formation and recall strategies;
122
+ - safer and more useful reasoning prompts;
123
+ - richer diary generation and user-facing surfacing;
124
+ - memory lifecycle and maintenance policies;
125
+ - alternative `dream` plugin implementations with higher priority.
126
+
127
+ Projects can ship their own plugin with the same logical name (`dream`). When
128
+ multiple providers expose `dream`, the plugin manager keeps the implementation
129
+ with the highest priority.
@@ -46,6 +46,7 @@ class CommunityDreamPlugin(MemOSPlugin):
46
46
  version = "0.1.0"
47
47
  description = "Built-in Dream plugin"
48
48
  priority = 10
49
+ enabled_by_default = False
49
50
 
50
51
  def on_load(self) -> None:
51
52
  self.context: dict[str, Any] = {"shared": {}, "configs": {}}
@@ -1170,7 +1170,7 @@ class MOSCore:
1170
1170
  bool: True if successful, False otherwise.
1171
1171
  """
1172
1172
  # Validate current user has access to this cube
1173
- self._validate_cube_access(cube_id, target_user_id)
1173
+ self._validate_cube_access(self.user_id, cube_id)
1174
1174
 
1175
1175
  # Validate target user exists
1176
1176
  if not self.user_manager.validate_user(target_user_id):
@@ -1035,7 +1035,7 @@ class MultiModalStructMemReader(SimpleStructMemReader):
1035
1035
  process_preference_fine,
1036
1036
  non_file_url_fast_items,
1037
1037
  info,
1038
- self.general_llm,
1038
+ getattr(self, "preference_extractor_llm", self.general_llm),
1039
1039
  self.embedder,
1040
1040
  **kwargs,
1041
1041
  )
@@ -1127,7 +1127,7 @@ class MultiModalStructMemReader(SimpleStructMemReader):
1127
1127
  process_preference_fine,
1128
1128
  non_file_url_nodes,
1129
1129
  info,
1130
- self.general_llm,
1130
+ getattr(self, "preference_extractor_llm", self.general_llm),
1131
1131
  self.embedder,
1132
1132
  **kwargs,
1133
1133
  )
@@ -81,6 +81,19 @@ def _extract_implicit_preference(qa_pair_str: str, llm) -> list[dict[str, Any]]
81
81
  return None
82
82
 
83
83
 
84
+ def _normalize_preference_data(preference_data: dict[str, Any]) -> dict[str, Any] | None:
85
+ preference = str(preference_data.get("preference") or "").strip()
86
+ context_summary = str(preference_data.get("context_summary") or "").strip()
87
+
88
+ if not preference or not context_summary:
89
+ return None
90
+
91
+ normalized_data = preference_data.copy()
92
+ normalized_data["preference"] = preference
93
+ normalized_data["context_summary"] = context_summary
94
+ return normalized_data
95
+
96
+
84
97
  def _create_preference_memory_item(
85
98
  preference_data: dict[str, Any],
86
99
  preference_type: str,
@@ -167,8 +180,12 @@ def _process_single_chunk_explicit(
167
180
 
168
181
  memories = []
169
182
  for pref in explicit_pref:
183
+ normalized_pref = _normalize_preference_data(pref)
184
+ if not normalized_pref:
185
+ continue
186
+
170
187
  memory = _create_preference_memory_item(
171
- preference_data=pref,
188
+ preference_data=normalized_pref,
172
189
  preference_type="explicit_preference",
173
190
  fast_item=fast_item,
174
191
  info=info,
@@ -198,8 +215,12 @@ def _process_single_chunk_implicit(
198
215
 
199
216
  memories = []
200
217
  for pref in implicit_pref:
218
+ normalized_pref = _normalize_preference_data(pref)
219
+ if not normalized_pref:
220
+ continue
221
+
201
222
  memory = _create_preference_memory_item(
202
- preference_data=pref,
223
+ preference_data=normalized_pref,
203
224
  preference_type="implicit_preference",
204
225
  fast_item=fast_item,
205
226
  info=info,
@@ -184,6 +184,12 @@ class SimpleStructMemReader(BaseMemReader, ABC):
184
184
  if config.general_llm is not None
185
185
  else self.llm
186
186
  )
187
+ preference_extractor_llm_config = getattr(config, "preference_extractor_llm", None)
188
+ self.preference_extractor_llm = (
189
+ LLMFactory.from_config(preference_extractor_llm_config)
190
+ if preference_extractor_llm_config is not None
191
+ else self.general_llm
192
+ )
187
193
  self.qwen_llm = None
188
194
  qwen_llm_config = getattr(config, "qwen_llm", None)
189
195
  if qwen_llm_config:
@@ -286,8 +292,14 @@ class SimpleStructMemReader(BaseMemReader, ABC):
286
292
  response_json = self._safe_parse(response_text)
287
293
 
288
294
  if not response_json:
295
+ # NOTE: the key MUST be ``"memory list"`` (with a space) — the
296
+ # downstream consumers in ``_process_chat_data`` /
297
+ # ``_process_transfer_chat_data`` read via
298
+ # ``resp.get("memory list", [])``. A typo here drops the
299
+ # salvaged item silently and causes ``/product/add`` to return
300
+ # 200 with zero memories written to Neo4j (bug #1355).
289
301
  return {
290
- "memory_list": [
302
+ "memory list": [
291
303
  {
292
304
  "key": mem_str[:10],
293
305
  "memory_type": "UserMemory",