MemoryOS 2.0.16__tar.gz → 2.0.19__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.16 → memoryos-2.0.19}/PKG-INFO +123 -1
- {memoryos-2.0.16 → memoryos-2.0.19}/README.md +122 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/pyproject.toml +4 -1
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/__init__.py +1 -1
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/handlers/chat_handler.py +6 -2
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/handlers/component_init.py +7 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/handlers/config_builders.py +5 -2
- memoryos-2.0.19/src/memos/api/handlers/cube_handler.py +128 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/handlers/search_handler.py +126 -1
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/mcp_serve.py +8 -1
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/product_models.py +65 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/routers/server_router.py +62 -4
- memoryos-2.0.19/src/memos/dream/contextualization.py +765 -0
- memoryos-2.0.19/src/memos/dream/enrichment.py +284 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/pipeline/__init__.py +2 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/pipeline/base.py +17 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/pipeline/diary.py +65 -3
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/pipeline/persistence.py +1 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/pipeline/recall.py +2 -1
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/plugin.py +15 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/prompts/__init__.py +4 -0
- memoryos-2.0.19/src/memos/dream/prompts/context_binding_prompt.py +31 -0
- memoryos-2.0.19/src/memos/dream/prompts/context_summary_prompt.py +27 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/routers/diary_router.py +2 -1
- memoryos-2.0.19/src/memos/dream/search.py +139 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/types.py +8 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/graph_dbs/polardb.py +6 -1
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/read_multi_modal/image_parser.py +37 -4
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/read_multi_modal/system_parser.py +28 -42
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/read_skill_memory/process_skill_memory.py +4 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/base_mixins/queue_ops.py +5 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/base_mixins/web_log_ops.py +4 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/general_modules/scheduler_logger.py +2 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/schemas/message_schemas.py +21 -1
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/dispatcher.py +8 -3
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/handlers/add_handler.py +8 -8
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/handlers/feedback_handler.py +6 -5
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_read_handler.py +5 -5
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/redis_queue.py +42 -3
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/task_queue.py +4 -1
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/utils/misc_utils.py +6 -30
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/webservice_modules/rabbitmq_service.py +62 -30
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/item.py +1 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/plugins/hook_defs.py +13 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/plugins/manager.py +19 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/LICENSE +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/client.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/config.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/context/dependencies.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/exceptions.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/handlers/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/handlers/add_handler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/handlers/base_handler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/handlers/feedback_handler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/handlers/formatters_handler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/handlers/memory_handler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/handlers/scheduler_handler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/handlers/suggestion_handler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/middleware/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/middleware/auth.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/middleware/rate_limit.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/middleware/request_context.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/routers/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/routers/admin_router.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/server_api.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/server_api_ext.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/utils/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/api/utils/api_keys.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/chunkers/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/chunkers/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/chunkers/charactertext_chunker.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/chunkers/factory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/chunkers/markdown_chunker.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/chunkers/sentence_chunker.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/chunkers/simple_chunker.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/cli.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/chunker.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/embedder.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/graph_db.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/internet_retriever.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/llm.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/mem_agent.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/mem_chat.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/mem_cube.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/mem_os.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/mem_reader.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/mem_scheduler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/mem_user.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/memory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/parser.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/reranker.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/configs/vec_db.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/context/context.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dependency.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/deprecation.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/hook_defs.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/hooks.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/maintenance.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/pipeline/motive.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/pipeline/reasoning.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/prompts/motive_prompt.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/prompts/reasoning_prompt.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/routers/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/routers/trigger_router.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/routes.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/dream/signal_store.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/embedders/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/embedders/ark.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/embedders/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/embedders/factory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/embedders/ollama.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/embedders/sentence_transformer.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/embedders/universal_api.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/exceptions.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/extras/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/graph_dbs/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/graph_dbs/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/graph_dbs/factory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/graph_dbs/item.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/graph_dbs/neo4j.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/graph_dbs/neo4j_community.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/graph_dbs/postgres.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/hello_world.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/llms/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/llms/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/llms/deepseek.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/llms/factory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/llms/hf.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/llms/hf_singleton.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/llms/minimax.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/llms/ollama.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/llms/openai.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/llms/openai_new.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/llms/qwen.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/llms/utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/llms/vllm.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/log.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_agent/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_agent/deepsearch_agent.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_agent/factory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_chat/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_chat/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_chat/factory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_chat/simple.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_cube/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_cube/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_cube/general.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_cube/navie.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_cube/utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_feedback/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_feedback/feedback.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_feedback/simple_feedback.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_feedback/utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_os/core.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_os/main.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_os/utils/default_config.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_os/utils/format_utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_os/utils/reference_utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/factory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/memory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/multi_modal_struct.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/read_multi_modal/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/read_multi_modal/assistant_parser.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/read_multi_modal/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/read_multi_modal/file_content_parser.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/read_multi_modal/multi_modal_parser.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/read_multi_modal/string_parser.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/read_multi_modal/text_content_parser.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/read_multi_modal/tool_parser.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/read_multi_modal/user_parser.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/read_multi_modal/utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/read_pref_memory/process_preference_memory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/read_skill_memory/upload_skill_memory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/simple_struct.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/strategy_struct.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_reader/utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/analyzer/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/analyzer/api_analyzer.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/analyzer/eval_analyzer.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/analyzer/mos_for_test_scheduler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/analyzer/scheduler_for_eval.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/base_mixins/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/base_mixins/memory_ops.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/base_scheduler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/general_modules/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/general_modules/api_misc.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/general_modules/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/general_modules/init_components_for_scheduler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/general_modules/misc.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/general_modules/task_threads.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/general_scheduler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/memory_manage_modules/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/memory_manage_modules/activation_memory_manager.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/memory_manage_modules/enhancement_pipeline.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/memory_manage_modules/filter_pipeline.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/memory_manage_modules/memory_filter.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/memory_manage_modules/post_processor.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/memory_manage_modules/rerank_pipeline.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/memory_manage_modules/retriever.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/memory_manage_modules/search_pipeline.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/memory_manage_modules/search_service.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/monitors/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/monitors/dispatcher_monitor.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/monitors/general_monitor.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/monitors/task_schedule_monitor.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/optimized_scheduler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/orm_modules/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/orm_modules/api_redis_model.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/orm_modules/base_model.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/orm_modules/monitor_models.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/orm_modules/redis_model.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/scheduler_factory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/schemas/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/schemas/analyzer_schemas.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/schemas/api_schemas.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/schemas/general_schemas.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/schemas/monitor_schemas.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/schemas/task_schemas.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/base_handler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/context.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/handlers/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/handlers/answer_handler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_dream_handler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_reorganize_handler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/handlers/memory_update_handler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/handlers/pref_add_handler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/handlers/query_handler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/local_queue.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/orchestrator.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/task_schedule_modules/registry.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/utils/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/utils/api_utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/utils/config_utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/utils/db_utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/utils/filter_utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/utils/metrics.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/utils/monitor_event_utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/utils/status_tracker.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/webservice_modules/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_scheduler/webservice_modules/redis_service.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_user/factory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_user/mysql_persistent_user_manager.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_user/mysql_user_manager.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_user/persistent_factory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_user/persistent_user_manager.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_user/redis_persistent_user_manager.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/mem_user/user_manager.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/activation/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/activation/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/activation/item.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/activation/kv.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/activation/vllmkv.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/factory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/parametric/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/parametric/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/parametric/item.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/parametric/lora.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/general.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/naive.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/prefer_text_memory/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/prefer_text_memory/adder.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/prefer_text_memory/config.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/prefer_text_memory/extractor.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/prefer_text_memory/factory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/prefer_text_memory/retrievers.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/prefer_text_memory/spliter.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/prefer_text_memory/utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/preference.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/simple_preference.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/simple_tree.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/organize/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/organize/handler.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/organize/manager.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/organize/relation_reason_detector.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/organize/reorganizer.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/retrieve/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/retrieve/advanced_searcher.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/retrieve/bm25_util.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/retrieve/bochasearch.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever_factory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/retrieve/reasoner.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/retrieve/recall.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/retrieve/reranker.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/retrieve/retrieval_mid_structs.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/retrieve/retrieve_utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/retrieve/searcher.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/retrieve/task_goal_parser.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/retrieve/tavilysearch.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/retrieve/utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memories/textual/tree_text_memory/retrieve/xinyusearch.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memos_tools/dinding_report_bot.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memos_tools/lockfree_dict.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memos_tools/notification_service.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memos_tools/notification_utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memos_tools/singleton.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memos_tools/thread_safe_dict.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/memos_tools/thread_safe_dict_segment.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/multi_mem_cube/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/multi_mem_cube/composite_cube.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/multi_mem_cube/single_cube.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/multi_mem_cube/views.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/parsers/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/parsers/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/parsers/factory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/parsers/markitdown.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/plugins/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/plugins/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/plugins/component_bootstrap.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/plugins/hooks.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/reranker/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/reranker/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/reranker/concat.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/reranker/cosine_local.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/reranker/factory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/reranker/http_bge.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/reranker/http_bge_strategy.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/reranker/noop.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/reranker/strategies/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/reranker/strategies/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/reranker/strategies/concat_background.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/reranker/strategies/concat_docsource.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/reranker/strategies/dialogue_common.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/reranker/strategies/factory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/reranker/strategies/single_turn.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/reranker/strategies/singleturn_outmem.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/search/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/search/search_service.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/settings.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/templates/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/templates/advanced_search_prompts.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/templates/cloud_service_prompt.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/templates/instruction_completion.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/templates/mem_agent_prompts.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/templates/mem_feedback_prompts.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/templates/mem_reader_prompts.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/templates/mem_reader_strategy_prompts.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/templates/mem_scheduler_prompts.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/templates/mem_search_prompts.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/templates/mos_prompts.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/templates/prefer_complete_prompt.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/templates/skill_mem_prompt.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/templates/tool_mem_prompts.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/templates/tree_reorganize_prompts.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/types/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/types/general_types.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/types/openai_chat_completion_types/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/types/openai_chat_completion_types/chat_completion_assistant_message_param.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_image_param.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_input_audio_param.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_param.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_refusal_param.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_text_param.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/types/openai_chat_completion_types/chat_completion_message_custom_tool_call_param.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/types/openai_chat_completion_types/chat_completion_message_function_tool_call_param.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/types/openai_chat_completion_types/chat_completion_message_param.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/types/openai_chat_completion_types/chat_completion_message_tool_call_union_param.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/types/openai_chat_completion_types/chat_completion_system_message_param.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/types/openai_chat_completion_types/chat_completion_tool_message_param.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/types/openai_chat_completion_types/chat_completion_user_message_param.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/utils.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/vec_dbs/__init__.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/vec_dbs/base.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/vec_dbs/factory.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/vec_dbs/item.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/src/memos/vec_dbs/milvus.py +0 -0
- {memoryos-2.0.16 → memoryos-2.0.19}/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.19
|
|
4
4
|
Summary: Intelligence Begins with Memory
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -134,6 +134,8 @@ Your lobsters and Hermes Agents now have **the best** memory system — choose *
|
|
|
134
134
|
| 🧠 [**memos-local-plugin 2.0**](https://github.com/hijzy/MemOS/tree/main/apps/memos-local-plugin) | <ul><li>One local-first memory core for **Hermes Agent** and **OpenClaw**.</li><li>Self-evolving memory: L1 trace, L2 policy, L3 world model,<br>and crystallized Skills driven by feedback.</li></ul> | 🌐 [Website](https://memos-claw.openmem.net/) · 📖 [Docs](https://memos-docs.openmem.net/cn/openclaw/local_plugin) · 🐙 [GitHub](https://github.com/hijzy/MemOS/tree/main/apps/memos-local-plugin) · 📦 [NPM](https://www.npmjs.com/package/@memtensor/memos-local-plugin) |
|
|
135
135
|
| ☁️ [**OpenClaw Cloud Plugin**](https://x.com/MemOS_dev/status/2019254160919769171?s=20) | <ul><li>[Reduces token usage by 72%.](https://x.com/MemOS_dev/status/2020854044583924111)</li><li>[Multi-agent memory sharing by `user_id`.](https://x.com/MemOS_dev/status/2020538135487062094)</li></ul> | 🖥️ [MemOS Dashboard](https://memos-dashboard.openmem.net/login/) · 📖 [Full Tutorial](https://memos-docs.openmem.net/openclaw/guide#_4-update-plugin) |
|
|
136
136
|
|
|
137
|
+
> **🐳 Docker Deployment Note**: When running memos-local-plugin in Docker containers, you must specify the config location using `MEMOS_HOME` environment variable or `--home` CLI flag. See [Docker Configuration Guide](./apps/memos-local-plugin/README.md#docker-deployment) for details.
|
|
138
|
+
|
|
137
139
|
</div>
|
|
138
140
|
<br>
|
|
139
141
|
|
|
@@ -346,6 +348,126 @@ Your lobsters and Hermes Agents now have **the best** memory system — choose *
|
|
|
346
348
|
|
|
347
349
|
<br>
|
|
348
350
|
|
|
351
|
+
|
|
352
|
+
## FAQ
|
|
353
|
+
|
|
354
|
+
### What is MemOS?
|
|
355
|
+
|
|
356
|
+
MemOS is a **Memory Operating System** for LLMs and AI agents that unifies store/retrieve/manage for long-term memory. It enables context-aware and personalized interactions with knowledge base (KB), multi-modal memory, tool memory, and enterprise-grade optimizations built in.
|
|
357
|
+
|
|
358
|
+
### What are the benchmark results?
|
|
359
|
+
|
|
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% | - |
|
|
368
|
+
|
|
369
|
+
### How does MemOS compare to other memory solutions?
|
|
370
|
+
|
|
371
|
+
| Feature | MemOS | mem0 | LangChain Memory | Letta |
|
|
372
|
+
|---------|-------|------|------------------|-------|
|
|
373
|
+
| Multi-Modal Memory | ✅ Text/Images/Tools | ❌ Text only | ❌ Text only | ❌ Text only |
|
|
374
|
+
| Knowledge Base | ✅ Multi-Cube KB | ❌ No KB | ⚠️ RAG only | ❌ No KB |
|
|
375
|
+
| Memory Feedback | ✅ Natural language | ❌ No | ❌ No | ❌ No |
|
|
376
|
+
| Graph Memory | ✅ Inspectable/Editable | ❌ Black-box | ❌ Black-box | ❌ Limited |
|
|
377
|
+
| Async Ingestion | ✅ MemScheduler | ❌ No | ❌ No | ❌ No |
|
|
378
|
+
| Open Source | ✅ Apache 2.0 | ✅ MIT | ✅ Apache | ✅ MIT |
|
|
379
|
+
| ArXiv Paper | ✅ 2507.03724 | ❌ No | ❌ No | ❌ No |
|
|
380
|
+
|
|
381
|
+
### What are the key features?
|
|
382
|
+
|
|
383
|
+
| Feature | Description |
|
|
384
|
+
|---------|-------------|
|
|
385
|
+
| **Unified Memory API** | Single API for add/retrieve/edit/delete, graph-structured, inspectable |
|
|
386
|
+
| **Multi-Modal Memory** | Text, images, tool traces, personas retrieved together |
|
|
387
|
+
| **Multi-Cube KB** | Composable memory cubes for users/projects/agents |
|
|
388
|
+
| **Async Ingestion** | MemScheduler with millisecond latency |
|
|
389
|
+
| **Memory Feedback** | Natural-language correction/supplement/replacement |
|
|
390
|
+
| **Self-evolving Memory** | L1 traces, L2 policies, L3 world model, crystallized Skills |
|
|
391
|
+
|
|
392
|
+
### What deployment options are available?
|
|
393
|
+
|
|
394
|
+
| Option | Description |
|
|
395
|
+
|--------|-------------|
|
|
396
|
+
| **Cloud API** | Hosted service at memos.openmem.net |
|
|
397
|
+
| **Self-Hosted** | Local/private deployment via Docker |
|
|
398
|
+
| **Quick Mode** | Lightweight deployment |
|
|
399
|
+
| **Full Mode** | Complete deployment |
|
|
400
|
+
|
|
401
|
+
### How do I get started with Cloud API?
|
|
402
|
+
|
|
403
|
+
1. Sign up at [MemOS dashboard](https://memos-dashboard.openmem.net/)
|
|
404
|
+
2. Go to **API Keys** and copy your key
|
|
405
|
+
3. Use the Cloud API for memory operations
|
|
406
|
+
|
|
407
|
+
See [Cloud Getting Started](https://memos-docs.openmem.net/memos_cloud/quick_start/).
|
|
408
|
+
|
|
409
|
+
### How do I self-host MemOS?
|
|
410
|
+
|
|
411
|
+
```bash
|
|
412
|
+
# Clone
|
|
413
|
+
git clone https://github.com/MemTensor/MemOS.git
|
|
414
|
+
cd MemOS
|
|
415
|
+
|
|
416
|
+
# Install dependencies
|
|
417
|
+
pip install -r ./docker/requirements.txt
|
|
418
|
+
|
|
419
|
+
# Configure .env (OPENAI_API_KEY, etc.)
|
|
420
|
+
cp docker/.env.example MemOS/.env
|
|
421
|
+
|
|
422
|
+
# Start service
|
|
423
|
+
# See docs for full setup
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
### What LLM providers are supported?
|
|
427
|
+
|
|
428
|
+
| Provider | Setting |
|
|
429
|
+
|----------|---------|
|
|
430
|
+
| OpenAI | `MOS_CHAT_MODEL_PROVIDER=openai` |
|
|
431
|
+
| Azure OpenAI | `MOS_CHAT_MODEL_PROVIDER=azure` |
|
|
432
|
+
| Qwen (DashScope) | `MOS_CHAT_MODEL_PROVIDER=qwen` |
|
|
433
|
+
| DeepSeek | `MOS_CHAT_MODEL_PROVIDER=deepseek` |
|
|
434
|
+
| MiniMax | `MOS_CHAT_MODEL_PROVIDER=minimax` |
|
|
435
|
+
| Ollama | `MOS_CHAT_MODEL_PROVIDER=ollama` |
|
|
436
|
+
| HuggingFace | `MOS_CHAT_MODEL_PROVIDER=huggingface` |
|
|
437
|
+
| vLLM | `MOS_CHAT_MODEL_PROVIDER=vllm` |
|
|
438
|
+
|
|
439
|
+
### What plugins are available?
|
|
440
|
+
|
|
441
|
+
| Plugin | Purpose |
|
|
442
|
+
|--------|---------|
|
|
443
|
+
| **memos-local-plugin 2.0** | Local-first memory for Hermes Agent & OpenClaw |
|
|
444
|
+
| **OpenClaw Cloud Plugin** | Hosted memory service, 72% token reduction |
|
|
445
|
+
| **OpenClaw Local Plugin** | 100% on-device SQLite memory |
|
|
446
|
+
|
|
447
|
+
### What is the memory architecture?
|
|
448
|
+
|
|
449
|
+
| Layer | Purpose |
|
|
450
|
+
|-------|---------|
|
|
451
|
+
| **L1 Traces** | Raw interaction history |
|
|
452
|
+
| **L2 Policies** | Learned preferences/behaviors |
|
|
453
|
+
| **L3 World Model** | User understanding |
|
|
454
|
+
| **Crystallized Skills** | Reusable patterns |
|
|
455
|
+
|
|
456
|
+
### What license does MemOS use?
|
|
457
|
+
|
|
458
|
+
Apache 2.0 License (see [LICENSE](./LICENSE)).
|
|
459
|
+
|
|
460
|
+
### Where can I get help?
|
|
461
|
+
|
|
462
|
+
| Resource | Link |
|
|
463
|
+
|----------|------|
|
|
464
|
+
| Documentation | [memos-docs.openmem.net](https://memos-docs.openmem.net/home/overview/) |
|
|
465
|
+
| ArXiv Paper | [2507.03724](https://arxiv.org/abs/2507.03724) |
|
|
466
|
+
| Discord | [Join Server](https://discord.gg/Txbx3gebZR) |
|
|
467
|
+
| X/Twitter | [@MemOS_dev](https://x.com/MemOS_dev) |
|
|
468
|
+
| GitHub Issues | [Submit issues](https://github.com/MemTensor/MemOS/issues) |
|
|
469
|
+
| Awesome-AI-Memory | [IAAR-Shanghai/Awesome-AI-Memory](https://github.com/IAAR-Shanghai/Awesome-AI-Memory) |
|
|
470
|
+
|
|
349
471
|
## 📚 Resources
|
|
350
472
|
|
|
351
473
|
- **Awesome-AI-Memory**
|
|
@@ -50,6 +50,8 @@ Your lobsters and Hermes Agents now have **the best** memory system — choose *
|
|
|
50
50
|
| 🧠 [**memos-local-plugin 2.0**](https://github.com/hijzy/MemOS/tree/main/apps/memos-local-plugin) | <ul><li>One local-first memory core for **Hermes Agent** and **OpenClaw**.</li><li>Self-evolving memory: L1 trace, L2 policy, L3 world model,<br>and crystallized Skills driven by feedback.</li></ul> | 🌐 [Website](https://memos-claw.openmem.net/) · 📖 [Docs](https://memos-docs.openmem.net/cn/openclaw/local_plugin) · 🐙 [GitHub](https://github.com/hijzy/MemOS/tree/main/apps/memos-local-plugin) · 📦 [NPM](https://www.npmjs.com/package/@memtensor/memos-local-plugin) |
|
|
51
51
|
| ☁️ [**OpenClaw Cloud Plugin**](https://x.com/MemOS_dev/status/2019254160919769171?s=20) | <ul><li>[Reduces token usage by 72%.](https://x.com/MemOS_dev/status/2020854044583924111)</li><li>[Multi-agent memory sharing by `user_id`.](https://x.com/MemOS_dev/status/2020538135487062094)</li></ul> | 🖥️ [MemOS Dashboard](https://memos-dashboard.openmem.net/login/) · 📖 [Full Tutorial](https://memos-docs.openmem.net/openclaw/guide#_4-update-plugin) |
|
|
52
52
|
|
|
53
|
+
> **🐳 Docker Deployment Note**: When running memos-local-plugin in Docker containers, you must specify the config location using `MEMOS_HOME` environment variable or `--home` CLI flag. See [Docker Configuration Guide](./apps/memos-local-plugin/README.md#docker-deployment) for details.
|
|
54
|
+
|
|
53
55
|
</div>
|
|
54
56
|
<br>
|
|
55
57
|
|
|
@@ -262,6 +264,126 @@ Your lobsters and Hermes Agents now have **the best** memory system — choose *
|
|
|
262
264
|
|
|
263
265
|
<br>
|
|
264
266
|
|
|
267
|
+
|
|
268
|
+
## FAQ
|
|
269
|
+
|
|
270
|
+
### What is MemOS?
|
|
271
|
+
|
|
272
|
+
MemOS is a **Memory Operating System** for LLMs and AI agents that unifies store/retrieve/manage for long-term memory. It enables context-aware and personalized interactions with knowledge base (KB), multi-modal memory, tool memory, and enterprise-grade optimizations built in.
|
|
273
|
+
|
|
274
|
+
### What are the benchmark results?
|
|
275
|
+
|
|
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% | - |
|
|
284
|
+
|
|
285
|
+
### How does MemOS compare to other memory solutions?
|
|
286
|
+
|
|
287
|
+
| Feature | MemOS | mem0 | LangChain Memory | Letta |
|
|
288
|
+
|---------|-------|------|------------------|-------|
|
|
289
|
+
| Multi-Modal Memory | ✅ Text/Images/Tools | ❌ Text only | ❌ Text only | ❌ Text only |
|
|
290
|
+
| Knowledge Base | ✅ Multi-Cube KB | ❌ No KB | ⚠️ RAG only | ❌ No KB |
|
|
291
|
+
| Memory Feedback | ✅ Natural language | ❌ No | ❌ No | ❌ No |
|
|
292
|
+
| Graph Memory | ✅ Inspectable/Editable | ❌ Black-box | ❌ Black-box | ❌ Limited |
|
|
293
|
+
| Async Ingestion | ✅ MemScheduler | ❌ No | ❌ No | ❌ No |
|
|
294
|
+
| Open Source | ✅ Apache 2.0 | ✅ MIT | ✅ Apache | ✅ MIT |
|
|
295
|
+
| ArXiv Paper | ✅ 2507.03724 | ❌ No | ❌ No | ❌ No |
|
|
296
|
+
|
|
297
|
+
### What are the key features?
|
|
298
|
+
|
|
299
|
+
| Feature | Description |
|
|
300
|
+
|---------|-------------|
|
|
301
|
+
| **Unified Memory API** | Single API for add/retrieve/edit/delete, graph-structured, inspectable |
|
|
302
|
+
| **Multi-Modal Memory** | Text, images, tool traces, personas retrieved together |
|
|
303
|
+
| **Multi-Cube KB** | Composable memory cubes for users/projects/agents |
|
|
304
|
+
| **Async Ingestion** | MemScheduler with millisecond latency |
|
|
305
|
+
| **Memory Feedback** | Natural-language correction/supplement/replacement |
|
|
306
|
+
| **Self-evolving Memory** | L1 traces, L2 policies, L3 world model, crystallized Skills |
|
|
307
|
+
|
|
308
|
+
### What deployment options are available?
|
|
309
|
+
|
|
310
|
+
| Option | Description |
|
|
311
|
+
|--------|-------------|
|
|
312
|
+
| **Cloud API** | Hosted service at memos.openmem.net |
|
|
313
|
+
| **Self-Hosted** | Local/private deployment via Docker |
|
|
314
|
+
| **Quick Mode** | Lightweight deployment |
|
|
315
|
+
| **Full Mode** | Complete deployment |
|
|
316
|
+
|
|
317
|
+
### How do I get started with Cloud API?
|
|
318
|
+
|
|
319
|
+
1. Sign up at [MemOS dashboard](https://memos-dashboard.openmem.net/)
|
|
320
|
+
2. Go to **API Keys** and copy your key
|
|
321
|
+
3. Use the Cloud API for memory operations
|
|
322
|
+
|
|
323
|
+
See [Cloud Getting Started](https://memos-docs.openmem.net/memos_cloud/quick_start/).
|
|
324
|
+
|
|
325
|
+
### How do I self-host MemOS?
|
|
326
|
+
|
|
327
|
+
```bash
|
|
328
|
+
# Clone
|
|
329
|
+
git clone https://github.com/MemTensor/MemOS.git
|
|
330
|
+
cd MemOS
|
|
331
|
+
|
|
332
|
+
# Install dependencies
|
|
333
|
+
pip install -r ./docker/requirements.txt
|
|
334
|
+
|
|
335
|
+
# Configure .env (OPENAI_API_KEY, etc.)
|
|
336
|
+
cp docker/.env.example MemOS/.env
|
|
337
|
+
|
|
338
|
+
# Start service
|
|
339
|
+
# See docs for full setup
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
### What LLM providers are supported?
|
|
343
|
+
|
|
344
|
+
| Provider | Setting |
|
|
345
|
+
|----------|---------|
|
|
346
|
+
| OpenAI | `MOS_CHAT_MODEL_PROVIDER=openai` |
|
|
347
|
+
| Azure OpenAI | `MOS_CHAT_MODEL_PROVIDER=azure` |
|
|
348
|
+
| Qwen (DashScope) | `MOS_CHAT_MODEL_PROVIDER=qwen` |
|
|
349
|
+
| DeepSeek | `MOS_CHAT_MODEL_PROVIDER=deepseek` |
|
|
350
|
+
| MiniMax | `MOS_CHAT_MODEL_PROVIDER=minimax` |
|
|
351
|
+
| Ollama | `MOS_CHAT_MODEL_PROVIDER=ollama` |
|
|
352
|
+
| HuggingFace | `MOS_CHAT_MODEL_PROVIDER=huggingface` |
|
|
353
|
+
| vLLM | `MOS_CHAT_MODEL_PROVIDER=vllm` |
|
|
354
|
+
|
|
355
|
+
### What plugins are available?
|
|
356
|
+
|
|
357
|
+
| Plugin | Purpose |
|
|
358
|
+
|--------|---------|
|
|
359
|
+
| **memos-local-plugin 2.0** | Local-first memory for Hermes Agent & OpenClaw |
|
|
360
|
+
| **OpenClaw Cloud Plugin** | Hosted memory service, 72% token reduction |
|
|
361
|
+
| **OpenClaw Local Plugin** | 100% on-device SQLite memory |
|
|
362
|
+
|
|
363
|
+
### What is the memory architecture?
|
|
364
|
+
|
|
365
|
+
| Layer | Purpose |
|
|
366
|
+
|-------|---------|
|
|
367
|
+
| **L1 Traces** | Raw interaction history |
|
|
368
|
+
| **L2 Policies** | Learned preferences/behaviors |
|
|
369
|
+
| **L3 World Model** | User understanding |
|
|
370
|
+
| **Crystallized Skills** | Reusable patterns |
|
|
371
|
+
|
|
372
|
+
### What license does MemOS use?
|
|
373
|
+
|
|
374
|
+
Apache 2.0 License (see [LICENSE](./LICENSE)).
|
|
375
|
+
|
|
376
|
+
### Where can I get help?
|
|
377
|
+
|
|
378
|
+
| Resource | Link |
|
|
379
|
+
|----------|------|
|
|
380
|
+
| Documentation | [memos-docs.openmem.net](https://memos-docs.openmem.net/home/overview/) |
|
|
381
|
+
| ArXiv Paper | [2507.03724](https://arxiv.org/abs/2507.03724) |
|
|
382
|
+
| Discord | [Join Server](https://discord.gg/Txbx3gebZR) |
|
|
383
|
+
| X/Twitter | [@MemOS_dev](https://x.com/MemOS_dev) |
|
|
384
|
+
| GitHub Issues | [Submit issues](https://github.com/MemTensor/MemOS/issues) |
|
|
385
|
+
| Awesome-AI-Memory | [IAAR-Shanghai/Awesome-AI-Memory](https://github.com/IAAR-Shanghai/Awesome-AI-Memory) |
|
|
386
|
+
|
|
265
387
|
## 📚 Resources
|
|
266
388
|
|
|
267
389
|
- **Awesome-AI-Memory**
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
##############################################################################
|
|
5
5
|
|
|
6
6
|
name = "MemoryOS"
|
|
7
|
-
version = "2.0.
|
|
7
|
+
version = "2.0.19"
|
|
8
8
|
description = "Intelligence Begins with Memory"
|
|
9
9
|
license = {text = "Apache-2.0"}
|
|
10
10
|
readme = "README.md"
|
|
@@ -62,6 +62,9 @@ issues = "https://github.com/MemTensor/MemOS/issues"
|
|
|
62
62
|
[project.scripts]
|
|
63
63
|
memos = "memos.cli:main"
|
|
64
64
|
|
|
65
|
+
[project.entry-points."memos.plugins"]
|
|
66
|
+
dream = "memos.dream:CommunityDreamPlugin"
|
|
67
|
+
|
|
65
68
|
[project.optional-dependencies]
|
|
66
69
|
# These are optional dependencies for various features of MemoryOS.
|
|
67
70
|
# Developers install: `poetry install --extras <feature>`. e.g., `poetry install --extras general-mem`
|
|
@@ -60,6 +60,7 @@ class ChatHandler(BaseHandler):
|
|
|
60
60
|
self,
|
|
61
61
|
dependencies: HandlerDependencies,
|
|
62
62
|
chat_llms: dict[str, Any],
|
|
63
|
+
playground_chat_llms: dict[str, Any] | None = None,
|
|
63
64
|
search_handler=None,
|
|
64
65
|
add_handler=None,
|
|
65
66
|
online_bot=None,
|
|
@@ -70,6 +71,7 @@ class ChatHandler(BaseHandler):
|
|
|
70
71
|
Args:
|
|
71
72
|
dependencies: HandlerDependencies instance
|
|
72
73
|
chat_llms: Dictionary mapping model names to LLM instances
|
|
74
|
+
playground_chat_llms: Optional model map for /chat/stream/playground
|
|
73
75
|
search_handler: Optional SearchHandler instance (created if not provided)
|
|
74
76
|
add_handler: Optional AddHandler instance (created if not provided)
|
|
75
77
|
online_bot: Optional DingDing bot function for notifications
|
|
@@ -89,6 +91,7 @@ class ChatHandler(BaseHandler):
|
|
|
89
91
|
add_handler = AddHandler(dependencies)
|
|
90
92
|
|
|
91
93
|
self.chat_llms = chat_llms
|
|
94
|
+
self.playground_chat_llms = playground_chat_llms or chat_llms
|
|
92
95
|
self.search_handler = search_handler
|
|
93
96
|
self.add_handler = add_handler
|
|
94
97
|
self.online_bot = online_bot
|
|
@@ -630,10 +633,11 @@ class ChatHandler(BaseHandler):
|
|
|
630
633
|
|
|
631
634
|
# Step 3: Generate streaming response from LLM
|
|
632
635
|
try:
|
|
633
|
-
|
|
636
|
+
chat_llms = self.playground_chat_llms
|
|
637
|
+
model = next(iter(chat_llms.keys()))
|
|
634
638
|
self.logger.info(f"[PLAYGROUND CHAT] Chat Playground Stream Model: {model}")
|
|
635
639
|
start = time.time()
|
|
636
|
-
response_stream =
|
|
640
|
+
response_stream = chat_llms[model].generate_stream(
|
|
637
641
|
current_messages, model_name_or_path=model
|
|
638
642
|
)
|
|
639
643
|
|
|
@@ -157,6 +157,7 @@ def init_server() -> dict[str, Any]:
|
|
|
157
157
|
graph_db_config = build_graph_db_config()
|
|
158
158
|
llm_config = build_llm_config()
|
|
159
159
|
chat_llm_config = build_chat_llm_config()
|
|
160
|
+
playground_chat_llm_config = build_chat_llm_config("PLAYGROUND_CHAT_MODEL_LIST")
|
|
160
161
|
embedder_config = build_embedder_config()
|
|
161
162
|
nli_client_config = build_nli_client_config()
|
|
162
163
|
mem_reader_config = build_mem_reader_config()
|
|
@@ -174,6 +175,11 @@ def init_server() -> dict[str, Any]:
|
|
|
174
175
|
if os.getenv("ENABLE_CHAT_API", "false") == "true"
|
|
175
176
|
else None
|
|
176
177
|
)
|
|
178
|
+
playground_chat_llms = (
|
|
179
|
+
_init_chat_llms(playground_chat_llm_config)
|
|
180
|
+
if os.getenv("ENABLE_CHAT_API", "false") == "true" and playground_chat_llm_config
|
|
181
|
+
else chat_llms
|
|
182
|
+
)
|
|
177
183
|
embedder = EmbedderFactory.from_config(embedder_config)
|
|
178
184
|
|
|
179
185
|
plugin_context = build_plugin_context(
|
|
@@ -317,6 +323,7 @@ def init_server() -> dict[str, Any]:
|
|
|
317
323
|
"mem_reader": mem_reader,
|
|
318
324
|
"llm": llm,
|
|
319
325
|
"chat_llms": chat_llms,
|
|
326
|
+
"playground_chat_llms": playground_chat_llms,
|
|
320
327
|
"embedder": embedder,
|
|
321
328
|
"reranker": reranker,
|
|
322
329
|
"internet_retriever": internet_retriever,
|
|
@@ -85,14 +85,17 @@ def build_llm_config() -> dict[str, Any]:
|
|
|
85
85
|
)
|
|
86
86
|
|
|
87
87
|
|
|
88
|
-
def build_chat_llm_config() -> list[dict[str, Any]]:
|
|
88
|
+
def build_chat_llm_config(env_name: str = "CHAT_MODEL_LIST") -> list[dict[str, Any]]:
|
|
89
89
|
"""
|
|
90
90
|
Build chat LLM configuration.
|
|
91
91
|
|
|
92
92
|
Returns:
|
|
93
93
|
Validated chat LLM configuration dictionary
|
|
94
|
+
Args:
|
|
95
|
+
env_name: Environment variable that contains the JSON chat model list.
|
|
96
|
+
|
|
94
97
|
"""
|
|
95
|
-
configs = json.loads(os.getenv(
|
|
98
|
+
configs = json.loads(os.getenv(env_name, "[]"))
|
|
96
99
|
return [
|
|
97
100
|
{
|
|
98
101
|
"config_class": LLMConfigFactory.model_validate(
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Cube handler for memory cube management operations.
|
|
3
|
+
|
|
4
|
+
This module handles cube creation and registration through the HTTP API.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from fastapi import HTTPException
|
|
8
|
+
|
|
9
|
+
from memos.api.handlers.base_handler import BaseHandler
|
|
10
|
+
from memos.api.product_models import (
|
|
11
|
+
CreateCubeRequest,
|
|
12
|
+
CreateCubeResponse,
|
|
13
|
+
CreateCubeResponseData,
|
|
14
|
+
RegisterCubeRequest,
|
|
15
|
+
RegisterCubeResponse,
|
|
16
|
+
RegisterCubeResponseData,
|
|
17
|
+
)
|
|
18
|
+
from memos.log import get_logger
|
|
19
|
+
from memos.mem_user.user_manager import UserManager
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
logger = get_logger(__name__)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class CubeHandler(BaseHandler):
|
|
26
|
+
"""Handler for memory cube management operations."""
|
|
27
|
+
|
|
28
|
+
def __init__(self, *args, **kwargs):
|
|
29
|
+
"""Initialize CubeHandler with dependencies."""
|
|
30
|
+
super().__init__(*args, **kwargs)
|
|
31
|
+
# Initialize UserManager for cube operations
|
|
32
|
+
# Use graph_db as the backend for user/cube management
|
|
33
|
+
self.user_manager = UserManager()
|
|
34
|
+
|
|
35
|
+
async def create_cube(self, request: CreateCubeRequest) -> CreateCubeResponse:
|
|
36
|
+
"""Create a new memory cube for a user.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
request: Cube creation request
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
CreateCubeResponse with created cube details
|
|
43
|
+
|
|
44
|
+
Raises:
|
|
45
|
+
HTTPException: If cube creation fails
|
|
46
|
+
"""
|
|
47
|
+
try:
|
|
48
|
+
# Validate owner exists
|
|
49
|
+
if not self.user_manager.validate_user(request.owner_id):
|
|
50
|
+
raise ValueError(f"Owner user '{request.owner_id}' does not exist or is inactive")
|
|
51
|
+
|
|
52
|
+
# Create cube via UserManager
|
|
53
|
+
created_cube_id = self.user_manager.create_cube(
|
|
54
|
+
cube_name=request.cube_name,
|
|
55
|
+
owner_id=request.owner_id,
|
|
56
|
+
cube_path=request.cube_path,
|
|
57
|
+
cube_id=request.cube_id,
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
logger.info(f"Created cube: {created_cube_id} for owner: {request.owner_id}")
|
|
61
|
+
|
|
62
|
+
return CreateCubeResponse(
|
|
63
|
+
code=200,
|
|
64
|
+
message="Cube created successfully",
|
|
65
|
+
data=CreateCubeResponseData(
|
|
66
|
+
cube_id=created_cube_id,
|
|
67
|
+
cube_name=request.cube_name,
|
|
68
|
+
owner_id=request.owner_id,
|
|
69
|
+
),
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
except ValueError as e:
|
|
73
|
+
logger.error(f"Validation error creating cube: {e}")
|
|
74
|
+
raise HTTPException(status_code=400, detail=str(e)) from e
|
|
75
|
+
except Exception as e:
|
|
76
|
+
logger.error(f"Failed to create cube: {e}", exc_info=True)
|
|
77
|
+
raise HTTPException(status_code=500, detail=f"Failed to create cube: {e!s}") from e
|
|
78
|
+
|
|
79
|
+
async def register_cube(self, request: RegisterCubeRequest) -> RegisterCubeResponse:
|
|
80
|
+
"""Register an existing memory cube with the system.
|
|
81
|
+
|
|
82
|
+
Note: This endpoint currently validates the request but the actual registration
|
|
83
|
+
logic requires integration with MOSCore.register_mem_cube(), which is not
|
|
84
|
+
directly available in the API server context. This is a placeholder that
|
|
85
|
+
validates inputs and could be enhanced when the architecture supports it.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
request: Cube registration request
|
|
89
|
+
|
|
90
|
+
Returns:
|
|
91
|
+
RegisterCubeResponse with registration details
|
|
92
|
+
|
|
93
|
+
Raises:
|
|
94
|
+
HTTPException: If registration fails
|
|
95
|
+
"""
|
|
96
|
+
try:
|
|
97
|
+
# Validate user exists if provided
|
|
98
|
+
if request.user_id and not self.user_manager.validate_user(request.user_id):
|
|
99
|
+
raise ValueError(f"User '{request.user_id}' does not exist or is inactive")
|
|
100
|
+
|
|
101
|
+
# Note: Full registration logic requires MOSCore which isn't available
|
|
102
|
+
# in the current API architecture. This validates the request.
|
|
103
|
+
# Future work: integrate with MOSCore.register_mem_cube()
|
|
104
|
+
|
|
105
|
+
# Use provided cube_id or fall back to name_or_path as identifier
|
|
106
|
+
final_cube_id = request.mem_cube_id or request.mem_cube_name_or_path
|
|
107
|
+
|
|
108
|
+
logger.info(f"Cube registration validated: {final_cube_id}")
|
|
109
|
+
logger.warning(
|
|
110
|
+
"register_cube endpoint validates inputs but full registration "
|
|
111
|
+
"requires MOSCore integration (not yet available in API context)"
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
return RegisterCubeResponse(
|
|
115
|
+
code=200,
|
|
116
|
+
message="Cube registration request validated (full registration pending architecture support)",
|
|
117
|
+
data=RegisterCubeResponseData(
|
|
118
|
+
cube_id=final_cube_id,
|
|
119
|
+
cube_name_or_path=request.mem_cube_name_or_path,
|
|
120
|
+
),
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
except ValueError as e:
|
|
124
|
+
logger.error(f"Validation error registering cube: {e}")
|
|
125
|
+
raise HTTPException(status_code=400, detail=str(e)) from e
|
|
126
|
+
except Exception as e:
|
|
127
|
+
logger.error(f"Failed to register cube: {e}", exc_info=True)
|
|
128
|
+
raise HTTPException(status_code=500, detail=f"Failed to register cube: {e!s}") from e
|
|
@@ -7,12 +7,15 @@ using dependency injection for better modularity and testability.
|
|
|
7
7
|
|
|
8
8
|
import copy
|
|
9
9
|
import math
|
|
10
|
+
import os
|
|
10
11
|
|
|
12
|
+
from contextlib import suppress
|
|
11
13
|
from typing import Any
|
|
12
14
|
|
|
13
15
|
from memos.api.handlers.base_handler import BaseHandler, HandlerDependencies
|
|
14
16
|
from memos.api.handlers.formatters_handler import rerank_knowledge_mem
|
|
15
17
|
from memos.api.product_models import APISearchRequest, SearchResponse
|
|
18
|
+
from memos.dream.contextualization import CONTEXT_MEMORY_TYPE
|
|
16
19
|
from memos.log import get_logger
|
|
17
20
|
from memos.memories.textual.tree_text_memory.retrieve.retrieve_utils import (
|
|
18
21
|
cosine_similarity_matrix,
|
|
@@ -20,11 +23,26 @@ from memos.memories.textual.tree_text_memory.retrieve.retrieve_utils import (
|
|
|
20
23
|
from memos.multi_mem_cube.composite_cube import CompositeCubeView
|
|
21
24
|
from memos.multi_mem_cube.single_cube import SingleCubeView
|
|
22
25
|
from memos.multi_mem_cube.views import MemCubeView
|
|
23
|
-
from memos.plugins.
|
|
26
|
+
from memos.plugins.hook_defs import H
|
|
27
|
+
from memos.plugins.hooks import hookable, trigger_hook
|
|
24
28
|
|
|
25
29
|
|
|
26
30
|
logger = get_logger(__name__)
|
|
27
31
|
|
|
32
|
+
_ENV_CONTEXT_RECALL = "MEMOS_DREAM_CONTEXT_RECALL"
|
|
33
|
+
_ENV_CONTEXT_RECALL_TOP_K = "MEMOS_DREAM_CONTEXT_RECALL_TOP_K"
|
|
34
|
+
_DEFAULT_CONTEXT_RECALL_TOP_K = 2
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _env_enabled(name: str, default: str = "off") -> bool:
|
|
38
|
+
return os.getenv(name, default).strip().lower() not in {"0", "false", "no", "off"}
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _env_int(name: str, default: int) -> int:
|
|
42
|
+
with suppress(TypeError, ValueError):
|
|
43
|
+
return int(os.getenv(name, str(default)))
|
|
44
|
+
return default
|
|
45
|
+
|
|
28
46
|
|
|
29
47
|
class SearchHandler(BaseHandler):
|
|
30
48
|
"""
|
|
@@ -71,6 +89,14 @@ class SearchHandler(BaseHandler):
|
|
|
71
89
|
# Search and deduplicate
|
|
72
90
|
cube_view = self._build_cube_view(search_req_local)
|
|
73
91
|
results = cube_view.search_memories(search_req_local)
|
|
92
|
+
hooked_results = trigger_hook(
|
|
93
|
+
H.SEARCH_MEMORY_RESULTS,
|
|
94
|
+
handler=self,
|
|
95
|
+
search_req=search_req_local,
|
|
96
|
+
results=results,
|
|
97
|
+
)
|
|
98
|
+
if hooked_results is not None:
|
|
99
|
+
results = hooked_results
|
|
74
100
|
if not search_req_local.relativity:
|
|
75
101
|
search_req_local.relativity = 0
|
|
76
102
|
self.logger.info(f"[SearchHandler] Relativity filter: {search_req_local.relativity}")
|
|
@@ -102,6 +128,105 @@ class SearchHandler(BaseHandler):
|
|
|
102
128
|
data=results,
|
|
103
129
|
)
|
|
104
130
|
|
|
131
|
+
def _merge_context_recall(
|
|
132
|
+
self, *, results: dict[str, Any], search_req: APISearchRequest
|
|
133
|
+
) -> None:
|
|
134
|
+
if not _env_enabled(_ENV_CONTEXT_RECALL, "off"):
|
|
135
|
+
return
|
|
136
|
+
|
|
137
|
+
top_k = max(0, _env_int(_ENV_CONTEXT_RECALL_TOP_K, _DEFAULT_CONTEXT_RECALL_TOP_K))
|
|
138
|
+
if top_k <= 0:
|
|
139
|
+
return
|
|
140
|
+
|
|
141
|
+
context_buckets = self._recall_context_buckets(search_req=search_req, top_k=top_k)
|
|
142
|
+
if not context_buckets:
|
|
143
|
+
return
|
|
144
|
+
|
|
145
|
+
results.setdefault("text_mem", []).extend(context_buckets)
|
|
146
|
+
|
|
147
|
+
def _recall_context_buckets(
|
|
148
|
+
self, *, search_req: APISearchRequest, top_k: int
|
|
149
|
+
) -> list[dict[str, Any]]:
|
|
150
|
+
graph_db = self.graph_db or getattr(self.searcher, "graph_store", None)
|
|
151
|
+
embedder = self.embedder or getattr(self.searcher, "embedder", None)
|
|
152
|
+
if graph_db is None or embedder is None:
|
|
153
|
+
self.logger.info(
|
|
154
|
+
"[SearchHandler] Context recall skipped: graph_db or embedder unavailable."
|
|
155
|
+
)
|
|
156
|
+
return []
|
|
157
|
+
|
|
158
|
+
try:
|
|
159
|
+
query_embedding = embedder.embed([search_req.query])[0]
|
|
160
|
+
except Exception:
|
|
161
|
+
self.logger.warning("[SearchHandler] Context recall embedding failed.", exc_info=True)
|
|
162
|
+
return []
|
|
163
|
+
|
|
164
|
+
buckets: list[dict[str, Any]] = []
|
|
165
|
+
for cube_id in self._resolve_cube_ids(search_req):
|
|
166
|
+
try:
|
|
167
|
+
hits = graph_db.search_by_embedding(
|
|
168
|
+
query_embedding,
|
|
169
|
+
top_k=top_k,
|
|
170
|
+
scope=CONTEXT_MEMORY_TYPE,
|
|
171
|
+
status="activated",
|
|
172
|
+
user_name=cube_id,
|
|
173
|
+
return_fields=[
|
|
174
|
+
"memory",
|
|
175
|
+
"key",
|
|
176
|
+
"created_at",
|
|
177
|
+
"updated_at",
|
|
178
|
+
"source",
|
|
179
|
+
"internal_info",
|
|
180
|
+
],
|
|
181
|
+
)
|
|
182
|
+
except Exception:
|
|
183
|
+
self.logger.warning(
|
|
184
|
+
"[SearchHandler] Context recall search failed for cube=%s.",
|
|
185
|
+
cube_id,
|
|
186
|
+
exc_info=True,
|
|
187
|
+
)
|
|
188
|
+
continue
|
|
189
|
+
|
|
190
|
+
memories = [self._format_context_hit(hit) for hit in hits or [] if hit.get("memory")]
|
|
191
|
+
if not memories:
|
|
192
|
+
continue
|
|
193
|
+
buckets.append(
|
|
194
|
+
{
|
|
195
|
+
"cube_id": cube_id,
|
|
196
|
+
"memories": memories,
|
|
197
|
+
"total_nodes": len(memories),
|
|
198
|
+
}
|
|
199
|
+
)
|
|
200
|
+
return buckets
|
|
201
|
+
|
|
202
|
+
@staticmethod
|
|
203
|
+
def _format_context_hit(hit: dict[str, Any]) -> dict[str, Any]:
|
|
204
|
+
context_id = str(hit.get("id", ""))
|
|
205
|
+
score = float(hit.get("score", 0.0) or 0.0)
|
|
206
|
+
metadata = {
|
|
207
|
+
"id": context_id,
|
|
208
|
+
"memory": hit.get("memory", ""),
|
|
209
|
+
"memory_type": CONTEXT_MEMORY_TYPE,
|
|
210
|
+
"source": hit.get("source") or "dream",
|
|
211
|
+
"key": hit.get("key", ""),
|
|
212
|
+
"relativity": score,
|
|
213
|
+
"score": score,
|
|
214
|
+
"embedding": [],
|
|
215
|
+
"sources": [],
|
|
216
|
+
"usage": [],
|
|
217
|
+
"ref_id": f"[{context_id.split('-')[0]}]" if context_id else "[context]",
|
|
218
|
+
}
|
|
219
|
+
for field in ("created_at", "updated_at", "internal_info"):
|
|
220
|
+
if hit.get(field) is not None:
|
|
221
|
+
metadata[field] = hit[field]
|
|
222
|
+
|
|
223
|
+
return {
|
|
224
|
+
"id": context_id,
|
|
225
|
+
"memory": hit.get("memory", ""),
|
|
226
|
+
"metadata": metadata,
|
|
227
|
+
"ref_id": metadata["ref_id"],
|
|
228
|
+
}
|
|
229
|
+
|
|
105
230
|
@staticmethod
|
|
106
231
|
def _apply_relativity_threshold(results: dict[str, Any], relativity: float) -> dict[str, Any]:
|
|
107
232
|
if relativity <= 0:
|