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.
- {memoryos-2.0.19 → memoryos-2.0.22}/PKG-INFO +10 -13
- {memoryos-2.0.19 → memoryos-2.0.22}/README.md +9 -12
- {memoryos-2.0.19 → memoryos-2.0.22}/pyproject.toml +6 -2
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/__init__.py +1 -1
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/config.py +8 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/chat_handler.py +7 -1
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/formatters_handler.py +11 -2
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/scheduler_handler.py +39 -7
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/search_handler.py +17 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/suggestion_handler.py +14 -2
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/product_models.py +13 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/mem_reader.py +4 -0
- memoryos-2.0.22/src/memos/dream/README.md +129 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/plugin.py +1 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_os/core.py +1 -1
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/multi_modal_struct.py +2 -2
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_pref_memory/process_preference_memory.py +23 -2
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/simple_struct.py +13 -1
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/searcher.py +79 -21
- memoryos-2.0.22/src/memos/plugins/README.md +448 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/plugins/base.py +1 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/plugins/hook_defs.py +16 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/plugins/manager.py +9 -2
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/search/search_service.py +1 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/prefer_complete_prompt.py +38 -30
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/utils.py +5 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/LICENSE +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/client.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/context/dependencies.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/exceptions.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/add_handler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/base_handler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/component_init.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/config_builders.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/cube_handler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/feedback_handler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/handlers/memory_handler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/mcp_serve.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/middleware/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/middleware/auth.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/middleware/rate_limit.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/middleware/request_context.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/routers/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/routers/admin_router.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/routers/server_router.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/server_api.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/server_api_ext.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/utils/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/api/utils/api_keys.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/chunkers/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/chunkers/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/chunkers/charactertext_chunker.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/chunkers/factory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/chunkers/markdown_chunker.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/chunkers/sentence_chunker.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/chunkers/simple_chunker.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/cli.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/chunker.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/embedder.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/graph_db.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/internet_retriever.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/llm.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/mem_agent.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/mem_chat.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/mem_cube.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/mem_os.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/mem_scheduler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/mem_user.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/memory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/parser.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/reranker.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/configs/vec_db.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/context/context.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dependency.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/deprecation.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/contextualization.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/enrichment.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/hook_defs.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/hooks.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/maintenance.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/pipeline/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/pipeline/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/pipeline/diary.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/pipeline/motive.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/pipeline/persistence.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/pipeline/reasoning.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/pipeline/recall.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/prompts/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/prompts/context_binding_prompt.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/prompts/context_summary_prompt.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/prompts/motive_prompt.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/prompts/reasoning_prompt.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/routers/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/routers/diary_router.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/routers/trigger_router.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/routes.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/search.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/signal_store.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/dream/types.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/embedders/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/embedders/ark.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/embedders/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/embedders/factory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/embedders/ollama.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/embedders/sentence_transformer.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/embedders/universal_api.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/exceptions.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/extras/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/graph_dbs/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/graph_dbs/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/graph_dbs/factory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/graph_dbs/item.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/graph_dbs/neo4j.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/graph_dbs/neo4j_community.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/graph_dbs/polardb.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/graph_dbs/postgres.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/hello_world.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/deepseek.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/factory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/hf.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/hf_singleton.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/minimax.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/ollama.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/openai.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/openai_new.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/qwen.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/llms/vllm.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/log.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_agent/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_agent/deepsearch_agent.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_agent/factory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_chat/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_chat/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_chat/factory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_chat/simple.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_cube/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_cube/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_cube/general.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_cube/navie.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_cube/utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_feedback/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_feedback/feedback.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_feedback/simple_feedback.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_feedback/utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_os/main.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_os/utils/default_config.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_os/utils/format_utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_os/utils/reference_utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/factory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/memory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/assistant_parser.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/file_content_parser.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/image_parser.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/multi_modal_parser.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/string_parser.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/system_parser.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/text_content_parser.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/tool_parser.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/user_parser.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_multi_modal/utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_skill_memory/process_skill_memory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/read_skill_memory/upload_skill_memory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/strategy_struct.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_reader/utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/analyzer/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/analyzer/api_analyzer.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/analyzer/eval_analyzer.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/analyzer/mos_for_test_scheduler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/analyzer/scheduler_for_eval.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/base_mixins/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/base_mixins/memory_ops.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/base_mixins/queue_ops.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/base_mixins/web_log_ops.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/base_scheduler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/general_modules/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/general_modules/api_misc.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/general_modules/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/general_modules/init_components_for_scheduler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/general_modules/misc.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/general_modules/scheduler_logger.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/general_modules/task_threads.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/general_scheduler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/activation_memory_manager.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/enhancement_pipeline.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/filter_pipeline.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/memory_filter.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/post_processor.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/rerank_pipeline.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/retriever.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/search_pipeline.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/memory_manage_modules/search_service.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/monitors/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/monitors/dispatcher_monitor.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/monitors/general_monitor.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/monitors/task_schedule_monitor.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/optimized_scheduler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/orm_modules/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/orm_modules/api_redis_model.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/orm_modules/base_model.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/orm_modules/monitor_models.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/orm_modules/redis_model.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/scheduler_factory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/schemas/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/schemas/analyzer_schemas.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/schemas/api_schemas.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/schemas/general_schemas.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/schemas/message_schemas.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/schemas/monitor_schemas.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/schemas/task_schemas.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/base_handler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/context.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/dispatcher.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/add_handler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/answer_handler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/feedback_handler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_dream_handler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_read_handler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_reorganize_handler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/memory_update_handler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/pref_add_handler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/handlers/query_handler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/local_queue.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/orchestrator.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/redis_queue.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/registry.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/task_schedule_modules/task_queue.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/api_utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/config_utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/db_utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/filter_utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/metrics.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/misc_utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/monitor_event_utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/utils/status_tracker.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/webservice_modules/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/webservice_modules/rabbitmq_service.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_scheduler/webservice_modules/redis_service.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_user/factory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_user/mysql_persistent_user_manager.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_user/mysql_user_manager.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_user/persistent_factory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_user/persistent_user_manager.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_user/redis_persistent_user_manager.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/mem_user/user_manager.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/activation/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/activation/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/activation/item.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/activation/kv.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/activation/vllmkv.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/factory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/parametric/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/parametric/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/parametric/item.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/parametric/lora.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/general.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/item.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/naive.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/prefer_text_memory/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/prefer_text_memory/adder.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/prefer_text_memory/config.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/prefer_text_memory/extractor.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/prefer_text_memory/factory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/prefer_text_memory/retrievers.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/prefer_text_memory/spliter.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/prefer_text_memory/utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/preference.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/simple_preference.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/simple_tree.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/organize/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/organize/handler.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/organize/manager.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/organize/relation_reason_detector.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/organize/reorganizer.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/advanced_searcher.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/bm25_util.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/bochasearch.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever_factory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/reasoner.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/recall.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/reranker.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/retrieval_mid_structs.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/retrieve_utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/task_goal_parser.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/tavilysearch.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memories/textual/tree_text_memory/retrieve/xinyusearch.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memos_tools/dinding_report_bot.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memos_tools/lockfree_dict.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memos_tools/notification_service.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memos_tools/notification_utils.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memos_tools/singleton.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memos_tools/thread_safe_dict.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/memos_tools/thread_safe_dict_segment.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/multi_mem_cube/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/multi_mem_cube/composite_cube.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/multi_mem_cube/single_cube.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/multi_mem_cube/views.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/parsers/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/parsers/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/parsers/factory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/parsers/markitdown.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/plugins/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/plugins/component_bootstrap.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/plugins/hooks.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/concat.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/cosine_local.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/factory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/http_bge.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/http_bge_strategy.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/noop.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/strategies/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/strategies/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/strategies/concat_background.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/strategies/concat_docsource.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/strategies/dialogue_common.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/strategies/factory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/strategies/single_turn.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/reranker/strategies/singleturn_outmem.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/search/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/settings.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/advanced_search_prompts.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/cloud_service_prompt.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/instruction_completion.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/mem_agent_prompts.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/mem_feedback_prompts.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/mem_reader_prompts.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/mem_reader_strategy_prompts.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/mem_scheduler_prompts.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/mem_search_prompts.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/mos_prompts.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/skill_mem_prompt.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/tool_mem_prompts.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/templates/tree_reorganize_prompts.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/general_types.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_assistant_message_param.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_image_param.py +0 -0
- {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
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_param.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_refusal_param.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_text_param.py +0 -0
- {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
- {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
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_message_param.py +0 -0
- {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
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_system_message_param.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_tool_message_param.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/types/openai_chat_completion_types/chat_completion_user_message_param.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/vec_dbs/__init__.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/vec_dbs/base.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/vec_dbs/factory.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/vec_dbs/item.py +0 -0
- {memoryos-2.0.19 → memoryos-2.0.22}/src/memos/vec_dbs/milvus.py +0 -0
- {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.
|
|
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
|
|
107
|
-
<strong
|
|
108
|
-
<strong
|
|
109
|
-
<
|
|
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
|
-
|
|
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
|
|
23
|
-
<strong
|
|
24
|
-
<strong
|
|
25
|
-
<
|
|
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
|
-
|
|
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.
|
|
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
|
|
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
|
|
|
@@ -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 = [
|
|
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
|
-
|
|
197
|
-
item
|
|
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
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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 = [
|
|
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 = [
|
|
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.
|
|
@@ -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(
|
|
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=
|
|
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=
|
|
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
|
-
"
|
|
302
|
+
"memory list": [
|
|
291
303
|
{
|
|
292
304
|
"key": mem_str[:10],
|
|
293
305
|
"memory_type": "UserMemory",
|