MemoryOS 2.0.30__tar.gz → 2.0.32__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.30 → memoryos-2.0.32}/PKG-INFO +69 -18
- {memoryos-2.0.30 → memoryos-2.0.32}/README.md +68 -17
- {memoryos-2.0.30 → memoryos-2.0.32}/pyproject.toml +1 -1
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/__init__.py +1 -1
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/config.py +22 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/handlers/chat_handler.py +2 -1
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/handlers/component_init.py +9 -1
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/handlers/config_builders.py +20 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/routers/server_router.py +2 -1
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/mem_scheduler.py +19 -4
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/embedders/factory.py +2 -0
- memoryos-2.0.32/src/memos/llms/qwen.py +30 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/analyzer/eval_analyzer.py +13 -6
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/general_modules/init_components_for_scheduler.py +1 -6
- memoryos-2.0.30/src/memos/llms/qwen.py +0 -13
- {memoryos-2.0.30 → memoryos-2.0.32}/LICENSE +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/client.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/context/dependencies.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/exceptions.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/handlers/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/handlers/add_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/handlers/base_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/handlers/cube_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/handlers/feedback_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/handlers/formatters_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/handlers/memory_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/handlers/scheduler_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/handlers/search_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/handlers/suggestion_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/lifecycle.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/mcp_serve.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/middleware/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/middleware/auth.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/middleware/rate_limit.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/middleware/request_context.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/product_models.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/routers/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/routers/admin_router.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/server_api.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/server_api_ext.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/utils/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/api/utils/api_keys.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/chunkers/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/chunkers/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/chunkers/charactertext_chunker.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/chunkers/factory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/chunkers/markdown_chunker.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/chunkers/sentence_chunker.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/chunkers/simple_chunker.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/cli.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/chunker.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/embedder.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/graph_db.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/internet_retriever.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/llm.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/mem_agent.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/mem_chat.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/mem_cube.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/mem_os.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/mem_reader.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/mem_user.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/memory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/parser.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/reranker.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/configs/vec_db.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/context/context.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dependency.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/deprecation.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/README.md +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/contextualization.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/enrichment.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/hook_defs.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/hooks.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/maintenance.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/pipeline/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/pipeline/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/pipeline/diary.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/pipeline/motive.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/pipeline/persistence.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/pipeline/reasoning.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/pipeline/recall.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/plugin.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/prompts/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/prompts/context_binding_prompt.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/prompts/context_summary_prompt.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/prompts/motive_prompt.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/prompts/reasoning_prompt.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/routers/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/routers/diary_router.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/routers/trigger_router.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/routes.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/search.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/signal_store.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/dream/types.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/embedders/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/embedders/ark.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/embedders/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/embedders/cache.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/embedders/ollama.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/embedders/sentence_transformer.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/embedders/universal_api.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/exceptions.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/extras/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/graph_dbs/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/graph_dbs/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/graph_dbs/factory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/graph_dbs/item.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/graph_dbs/neo4j.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/graph_dbs/neo4j_community.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/graph_dbs/polardb.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/graph_dbs/postgres.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/hello_world.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/llms/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/llms/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/llms/deepseek.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/llms/factory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/llms/hf.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/llms/hf_singleton.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/llms/minimax.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/llms/ollama.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/llms/openai.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/llms/openai_new.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/llms/utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/llms/vllm.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/log.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_agent/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_agent/deepsearch_agent.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_agent/factory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_chat/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_chat/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_chat/factory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_chat/simple.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_cube/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_cube/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_cube/general.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_cube/navie.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_cube/utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_feedback/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_feedback/feedback.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_feedback/simple_feedback.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_feedback/utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_os/core.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_os/main.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_os/utils/default_config.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_os/utils/format_utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_os/utils/reference_utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/factory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/memory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/multi_modal_struct.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/read_multi_modal/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/read_multi_modal/assistant_parser.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/read_multi_modal/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/read_multi_modal/file_content_parser.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/read_multi_modal/image_parser.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/read_multi_modal/multi_modal_parser.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/read_multi_modal/string_parser.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/read_multi_modal/system_parser.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/read_multi_modal/text_content_parser.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/read_multi_modal/tool_parser.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/read_multi_modal/user_parser.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/read_multi_modal/utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/read_pref_memory/process_preference_memory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/read_skill_memory/process_skill_memory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/read_skill_memory/upload_skill_memory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/simple_struct.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/strategy_struct.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_reader/utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/analyzer/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/analyzer/api_analyzer.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/analyzer/mos_for_test_scheduler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/analyzer/scheduler_for_eval.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/base_mixins/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/base_mixins/memory_ops.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/base_mixins/queue_ops.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/base_mixins/web_log_ops.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/base_scheduler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/general_modules/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/general_modules/api_misc.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/general_modules/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/general_modules/misc.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/general_modules/scheduler_logger.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/general_modules/task_threads.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/general_scheduler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/memory_manage_modules/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/memory_manage_modules/activation_memory_manager.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/memory_manage_modules/enhancement_pipeline.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/memory_manage_modules/filter_pipeline.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/memory_manage_modules/memory_filter.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/memory_manage_modules/post_processor.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/memory_manage_modules/rerank_pipeline.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/memory_manage_modules/retriever.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/memory_manage_modules/search_pipeline.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/memory_manage_modules/search_service.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/monitors/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/monitors/dispatcher_monitor.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/monitors/general_monitor.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/monitors/task_schedule_monitor.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/optimized_scheduler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/orm_modules/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/orm_modules/api_redis_model.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/orm_modules/base_model.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/orm_modules/monitor_models.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/orm_modules/redis_model.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/scheduler_factory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/schemas/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/schemas/analyzer_schemas.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/schemas/api_schemas.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/schemas/general_schemas.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/schemas/message_schemas.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/schemas/monitor_schemas.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/schemas/task_schemas.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/base_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/context.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/dispatcher.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/handlers/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/handlers/add_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/handlers/answer_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/handlers/feedback_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_dream_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_read_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_reorganize_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/handlers/memory_update_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/handlers/pref_add_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/handlers/query_handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/local_queue.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/orchestrator.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/redis_queue.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/registry.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/task_schedule_modules/task_queue.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/utils/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/utils/api_utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/utils/config_utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/utils/db_utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/utils/filter_utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/utils/metrics.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/utils/misc_utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/utils/monitor_event_utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/utils/status_tracker.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/webservice_modules/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/webservice_modules/rabbitmq_service.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_scheduler/webservice_modules/redis_service.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_user/factory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_user/mysql_persistent_user_manager.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_user/mysql_user_manager.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_user/persistent_factory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_user/persistent_user_manager.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_user/redis_persistent_user_manager.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/mem_user/user_manager.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/activation/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/activation/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/activation/item.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/activation/kv.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/activation/vllmkv.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/factory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/parametric/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/parametric/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/parametric/item.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/parametric/lora.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/general.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/item.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/naive.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/prefer_text_memory/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/prefer_text_memory/adder.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/prefer_text_memory/config.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/prefer_text_memory/extractor.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/prefer_text_memory/factory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/prefer_text_memory/retrievers.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/prefer_text_memory/spliter.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/prefer_text_memory/utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/preference.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/simple_preference.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/simple_tree.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/organize/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/organize/handler.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/organize/manager.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/organize/relation_reason_detector.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/organize/reorganizer.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/retrieve/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/retrieve/advanced_searcher.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/retrieve/bm25_util.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/retrieve/bochasearch.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever_factory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/retrieve/reasoner.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/retrieve/recall.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/retrieve/reranker.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/retrieve/retrieval_mid_structs.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/retrieve/retrieve_utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/retrieve/searcher.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/retrieve/task_goal_parser.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/retrieve/tavilysearch.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/retrieve/utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memories/textual/tree_text_memory/retrieve/xinyusearch.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memos_tools/dinding_report_bot.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memos_tools/lockfree_dict.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memos_tools/notification_service.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memos_tools/notification_utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memos_tools/singleton.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memos_tools/thread_safe_dict.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/memos_tools/thread_safe_dict_segment.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/multi_mem_cube/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/multi_mem_cube/composite_cube.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/multi_mem_cube/single_cube.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/multi_mem_cube/views.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/parsers/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/parsers/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/parsers/factory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/parsers/markitdown.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/plugins/README.md +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/plugins/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/plugins/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/plugins/component_bootstrap.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/plugins/hook_defs.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/plugins/hooks.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/plugins/manager.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/reranker/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/reranker/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/reranker/concat.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/reranker/cosine_local.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/reranker/factory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/reranker/http_bge.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/reranker/http_bge_strategy.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/reranker/noop.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/reranker/strategies/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/reranker/strategies/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/reranker/strategies/concat_background.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/reranker/strategies/concat_docsource.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/reranker/strategies/dialogue_common.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/reranker/strategies/factory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/reranker/strategies/single_turn.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/reranker/strategies/singleturn_outmem.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/search/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/search/search_service.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/settings.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/templates/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/templates/advanced_search_prompts.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/templates/cloud_service_prompt.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/templates/instruction_completion.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/templates/mem_agent_prompts.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/templates/mem_feedback_prompts.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/templates/mem_reader_prompts.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/templates/mem_reader_strategy_prompts.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/templates/mem_scheduler_prompts.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/templates/mem_search_prompts.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/templates/mos_prompts.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/templates/prefer_complete_prompt.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/templates/skill_mem_prompt.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/templates/tool_mem_prompts.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/templates/tree_reorganize_prompts.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/types/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/types/general_types.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/types/openai_chat_completion_types/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/types/openai_chat_completion_types/chat_completion_assistant_message_param.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_image_param.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_input_audio_param.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_param.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_refusal_param.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_text_param.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/types/openai_chat_completion_types/chat_completion_message_custom_tool_call_param.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/types/openai_chat_completion_types/chat_completion_message_function_tool_call_param.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/types/openai_chat_completion_types/chat_completion_message_param.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/types/openai_chat_completion_types/chat_completion_message_tool_call_union_param.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/types/openai_chat_completion_types/chat_completion_system_message_param.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/types/openai_chat_completion_types/chat_completion_tool_message_param.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/types/openai_chat_completion_types/chat_completion_user_message_param.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/utils.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/vec_dbs/__init__.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/vec_dbs/base.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/vec_dbs/factory.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/vec_dbs/item.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/src/memos/vec_dbs/milvus.py +0 -0
- {memoryos-2.0.30 → memoryos-2.0.32}/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.32
|
|
4
4
|
Summary: Intelligence Begins with Memory
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -110,9 +110,16 @@ Description-Content-Type: text/markdown
|
|
|
110
110
|
|
|
111
111
|
|
|
112
112
|
<div align="center">
|
|
113
|
-
<img width="1660"
|
|
113
|
+
<img width="1660" alt="MemOS agent ecosystem: OpenClaw, Hermes, and DeepSeek Harness" src="./assets/readme/memos-agent-ecosystem.png" />
|
|
114
114
|
</div>
|
|
115
115
|
|
|
116
|
+
> [!TIP]
|
|
117
|
+
> **New: Connect MemOS to DeepSeek Harness (`dsh`)**
|
|
118
|
+
>
|
|
119
|
+
> Add automatic recall, background capture, hybrid retrieval, and a local Memory Viewer to DeepSeek Harness—powered by the same MemOS core used across agent ecosystems.
|
|
120
|
+
>
|
|
121
|
+
> **[Get started →](#memos-plugin)**
|
|
122
|
+
|
|
116
123
|
---
|
|
117
124
|
|
|
118
125
|
## 👾 MemOS: Memory Operating System for LLM & AI Agents
|
|
@@ -130,6 +137,9 @@ Description-Content-Type: text/markdown
|
|
|
130
137
|
|
|
131
138
|
### News
|
|
132
139
|
|
|
140
|
+
- **2026-08-17** · 🐋 **MemOS Connects with DeepSeek Harness**
|
|
141
|
+
MemOS now brings persistent memory to **DeepSeek Harness** through both local and cloud plugins. DSH can automatically recall relevant context before a task and retain new experience after a successful turn, without modifying its core.
|
|
142
|
+
|
|
133
143
|
- **2026-07-02** · 🏆 **MemOS Advances Agent and User Memory Benchmarks**
|
|
134
144
|
With MemOS, **OpenClaw** improves average task completion from **36.63% to 50.87%** across five agent tasks. MemOS also achieves **88.83 on LoCoMo** and **89.20 on LongMemEval**, and leads in **OmniMemEval**, a unified evaluation of 14 commercial memory products across ten datasets.
|
|
135
145
|
|
|
@@ -138,7 +148,7 @@ Description-Content-Type: text/markdown
|
|
|
138
148
|
|
|
139
149
|
- **2026-04-10** · 👧🏻 **MemOS Hermes Agent Local Plugin**
|
|
140
150
|
Official Hermes Agent memory plugins launched: Hybrid retrieval (FTS5 + vector), smart dedup, tiered skill evolution, multi-agent collaboration. 100% local, zero cloud dependency.
|
|
141
|
-
|
|
151
|
+
|
|
142
152
|
- **2026-03-08** · 🦞 **MemOS OpenClaw Plugin — Cloud & Local**
|
|
143
153
|
Official OpenClaw memory plugins launched. **Cloud Plugin**: hosted memory service with 72% lower token usage and multi-agent memory sharing ([MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTensor/MemOS-Cloud-OpenClaw-Plugin)). **Local Plugin** (`v1.0.0`): 100% on-device memory with persistent SQLite, hybrid search (FTS5 + vector), task summarization & skill evolution, multi-agent collaboration, and a full Memory Viewer dashboard.
|
|
144
154
|
|
|
@@ -177,12 +187,12 @@ MemOS gives AI agents long-term memory. Common uses:
|
|
|
177
187
|
MemOS is built around four entry points. Pick the one that matches your scenario.
|
|
178
188
|
|
|
179
189
|
|
|
180
|
-
| | Cloud API | Self-Host |
|
|
181
|
-
| ------------ | ----------------------- | ------------------ | ------------------------ |
|
|
182
|
-
| Best for | Your app, fully managed | Teams on own infra | OpenClaw users, zero ops | Hermes
|
|
183
|
-
| Setup | Get an API key | docker compose up | openclaw plugins install | npm install +
|
|
184
|
-
| Infra needed | None (hosted) | Neo4j + Qdrant | None (uses MemOS Cloud) | None (local SQLite)
|
|
185
|
-
| Data lives | MemOS Cloud | Your servers | MemOS Cloud | Your machine
|
|
190
|
+
| | Cloud API | Self-Host | MemOS Cloud Plugin | Local Plugin |
|
|
191
|
+
| ------------ | ----------------------- | ------------------ | ------------------------ | ------------------------------------------------ |
|
|
192
|
+
| Best for | Your app, fully managed | Teams on own infra | OpenClaw users, zero ops | DeepSeek Harness, Hermes, or OpenClaw; on-device |
|
|
193
|
+
| Setup | Get an API key | docker compose up | openclaw plugins install | npm install + agent-specific setup |
|
|
194
|
+
| Infra needed | None (hosted) | Neo4j + Qdrant | None (uses MemOS Cloud) | None (local SQLite) |
|
|
195
|
+
| Data lives | MemOS Cloud | Your servers | MemOS Cloud | Your machine |
|
|
186
196
|
|
|
187
197
|
### ☁️ Use the Cloud API (Hosted)
|
|
188
198
|
|
|
@@ -249,7 +259,7 @@ cd src
|
|
|
249
259
|
uvicorn memos.api.server_api:app --host 0.0.0.0 --port 8000 --workers 1
|
|
250
260
|
```
|
|
251
261
|
|
|
252
|
-
See `
|
|
262
|
+
See [`docker/.env.example-full`](./docker/.env.example-full) for all configuration options (LLM provider, embedder, vector DB, graph DB, scheduler). The full deployment guide is at [https://memos-docs.openmem.net/open_source/getting_started/rest_api_server/](https://memos-docs.openmem.net/open_source/getting_started/rest_api_server/).
|
|
253
263
|
|
|
254
264
|
**Try the API:**
|
|
255
265
|
|
|
@@ -283,18 +293,20 @@ res = requests.post(f"{base}/search", headers=headers, data=json.dumps({
|
|
|
283
293
|
print(res.json())
|
|
284
294
|
```
|
|
285
295
|
|
|
296
|
+
<a id="memos-plugin"></a>
|
|
297
|
+
|
|
286
298
|
### 🧠 MemOS Plugin: Persistent Memory for Your AI Agents ✨
|
|
287
299
|
|
|
288
|
-
|
|
300
|
+
MemOS gives OpenClaw, Hermes, and DeepSeek Harness a shared local memory core; the managed ***MemOS Cloud Plugin*** is available for OpenClaw and DeepSeek Harness 🏃🏻
|
|
289
301
|
|
|
290
302
|
| 🔌 Plugin | 💡 Core Features | 🧩 Resources |
|
|
291
303
|
| ------------------------------------------------------------------------------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
292
304
|
| 🧠 **[memos-local-plugin 2.0](https://github.com/MemTensor/MemOS/tree/main/apps/memos-local-plugin)** | | 🌐 [Website](https://memos-claw.openmem.net/) · 📖 [Docs](https://memos-docs.openmem.net/cn/openclaw/local_plugin) · 🐙 [GitHub](https://github.com/MemTensor/MemOS/tree/main/apps/memos-local-plugin) · 📦 [NPM](https://www.npmjs.com/package/@memtensor/memos-local-plugin) |
|
|
293
|
-
| ☁️ **[
|
|
305
|
+
| ☁️ **[MemOS Cloud Plugin](https://github.com/MemTensor/MemOS/tree/main/apps/MemOS-Cloud-OpenClaw-Plugin)** | | 🖥️ [MemOS Dashboard](https://memos-dashboard.openmem.net/login/) · 📖 [Full Tutorial](https://memos-docs.openmem.net/openclaw/guide#_4-update-plugin) |
|
|
294
306
|
|
|
295
|
-
#### 1.
|
|
307
|
+
#### 1. MemOS Cloud Plugin
|
|
296
308
|
|
|
297
|
-
|
|
309
|
+
Use MemOS Cloud for persistent memory in OpenClaw or DeepSeek Harness — no infrastructure to run.
|
|
298
310
|
|
|
299
311
|
- **Repo:** [MemTensor/MemOS ·](https://github.com/MemTensor/MemOS/tree/main/apps/MemOS-Cloud-OpenClaw-Plugin) `apps/MemOS-Cloud-OpenClaw-Plugin`
|
|
300
312
|
- **NPM:** `[@memtensor/memos-cloud-openclaw-plugin](https://www.npmjs.com/package/@memtensor/memos-cloud-openclaw-plugin)`
|
|
@@ -310,16 +322,55 @@ openclaw gateway restart
|
|
|
310
322
|
|
|
311
323
|
The plugin recalls memories from MemOS Cloud before each agent run and saves new messages back after the run ends.
|
|
312
324
|
|
|
313
|
-
|
|
325
|
+
##### DeepSeek Harness
|
|
326
|
+
|
|
327
|
+
Connect DeepSeek Harness to MemOS Cloud through its native plugin mechanism. Before the first model step of each user request, the plugin recalls relevant cloud memories; after a successful turn, it saves the new user and assistant messages back to MemOS Cloud.
|
|
328
|
+
|
|
329
|
+
1. [Create a MemOS API Key](https://memos-dashboard.openmem.net/cn/apikeys/).
|
|
330
|
+
2. Install the cloud plugin into the default DSH `web` profile:
|
|
331
|
+
|
|
332
|
+
```bash
|
|
333
|
+
npx @deepseek-ai/dsh plugin --profile web add @memtensor/memos-cloud-dsh-plugin@latest
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
3. Add the API Key to `~/.dsh/.credentials.yaml`:
|
|
337
|
+
|
|
338
|
+
```yaml
|
|
339
|
+
MEMOS_API_KEY: mpg-your-key
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
4. Add the minimal plugin configuration to `~/.dsh/settings.yaml`:
|
|
314
343
|
|
|
315
|
-
|
|
344
|
+
```yaml
|
|
345
|
+
memos-cloud:
|
|
346
|
+
apiKeyEnv: MEMOS_API_KEY
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
5. Restart the DSH Web profile:
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
npx @deepseek-ai/dsh web
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
The cloud plugin is fail-open: a temporary MemOS Cloud outage does not interrupt the current DSH task.
|
|
356
|
+
|
|
357
|
+
#### 2. Local Plugin (OpenClaw, Hermes, and DeepSeek Harness)
|
|
358
|
+
|
|
359
|
+
You use DeepSeek Harness, Hermes Agent, or OpenClaw and want 100% on-device memory — nothing leaves your machine.
|
|
316
360
|
|
|
317
361
|
- **Repo:** [MemTensor/MemOS ·](https://github.com/MemTensor/MemOS/tree/main/apps/memos-local-plugin) `apps/memos-local-plugin`
|
|
318
362
|
- **NPM:** `[@memtensor/memos-local-plugin](https://www.npmjs.com/package/@memtensor/memos-local-plugin)`
|
|
319
363
|
- **Docs:** [https://memos-docs.openmem.net/cn/openclaw/local_plugin](https://memos-docs.openmem.net/cn/openclaw/local_plugin)
|
|
364
|
+
- **DeepSeek Harness:** [integration details](./apps/memos-local-plugin/adapters/deepseek-harness/README.md)
|
|
320
365
|
- **Viewer dashboard:** see `apps/memos-local-plugin/viewer/`
|
|
321
366
|
|
|
322
|
-
Install (macOS / Linux):
|
|
367
|
+
Install for DeepSeek Harness (macOS / Linux):
|
|
368
|
+
|
|
369
|
+
```bash
|
|
370
|
+
curl -fsSL https://raw.githubusercontent.com/MemTensor/MemOS/main/apps/memos-local-plugin/install.sh | bash -s -- --agent dsh --profile web
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
Install for OpenClaw or Hermes (macOS / Linux):
|
|
323
374
|
|
|
324
375
|
```bash
|
|
325
376
|
curl -fsSL https://raw.githubusercontent.com/MemTensor/MemOS/main/apps/memos-local-plugin/install.sh | bash
|
|
@@ -331,7 +382,7 @@ Install (Windows PowerShell):
|
|
|
331
382
|
irm https://raw.githubusercontent.com/MemTensor/MemOS/main/apps/memos-local-plugin/install.ps1 -OutFile "$env:TEMP\memos-install.ps1"; powershell -ExecutionPolicy Bypass -File "$env:TEMP\memos-install.ps1"
|
|
332
383
|
```
|
|
333
384
|
|
|
334
|
-
Requires Node.js and an already-installed OpenClaw or Hermes. The installer
|
|
385
|
+
Requires Node.js and an already-installed DeepSeek Harness, OpenClaw, or Hermes. The installer deploys MemOS to the selected agent runtime; the DeepSeek Harness target installs it as an out-of-tree DSH bundle, while the OpenClaw and Hermes targets write the initial `config.yaml` in their respective agent homes.
|
|
335
386
|
|
|
336
387
|
Features: hybrid retrieval (FTS5 + vector), smart dedup, tiered skill evolution (L1 traces / L2 policies / L3 world model), multi-agent collaboration, local-first SQLite storage.
|
|
337
388
|
|
|
@@ -26,9 +26,16 @@
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
<div align="center">
|
|
29
|
-
<img width="1660"
|
|
29
|
+
<img width="1660" alt="MemOS agent ecosystem: OpenClaw, Hermes, and DeepSeek Harness" src="./assets/readme/memos-agent-ecosystem.png" />
|
|
30
30
|
</div>
|
|
31
31
|
|
|
32
|
+
> [!TIP]
|
|
33
|
+
> **New: Connect MemOS to DeepSeek Harness (`dsh`)**
|
|
34
|
+
>
|
|
35
|
+
> Add automatic recall, background capture, hybrid retrieval, and a local Memory Viewer to DeepSeek Harness—powered by the same MemOS core used across agent ecosystems.
|
|
36
|
+
>
|
|
37
|
+
> **[Get started →](#memos-plugin)**
|
|
38
|
+
|
|
32
39
|
---
|
|
33
40
|
|
|
34
41
|
## 👾 MemOS: Memory Operating System for LLM & AI Agents
|
|
@@ -46,6 +53,9 @@
|
|
|
46
53
|
|
|
47
54
|
### News
|
|
48
55
|
|
|
56
|
+
- **2026-08-17** · 🐋 **MemOS Connects with DeepSeek Harness**
|
|
57
|
+
MemOS now brings persistent memory to **DeepSeek Harness** through both local and cloud plugins. DSH can automatically recall relevant context before a task and retain new experience after a successful turn, without modifying its core.
|
|
58
|
+
|
|
49
59
|
- **2026-07-02** · 🏆 **MemOS Advances Agent and User Memory Benchmarks**
|
|
50
60
|
With MemOS, **OpenClaw** improves average task completion from **36.63% to 50.87%** across five agent tasks. MemOS also achieves **88.83 on LoCoMo** and **89.20 on LongMemEval**, and leads in **OmniMemEval**, a unified evaluation of 14 commercial memory products across ten datasets.
|
|
51
61
|
|
|
@@ -54,7 +64,7 @@
|
|
|
54
64
|
|
|
55
65
|
- **2026-04-10** · 👧🏻 **MemOS Hermes Agent Local Plugin**
|
|
56
66
|
Official Hermes Agent memory plugins launched: Hybrid retrieval (FTS5 + vector), smart dedup, tiered skill evolution, multi-agent collaboration. 100% local, zero cloud dependency.
|
|
57
|
-
|
|
67
|
+
|
|
58
68
|
- **2026-03-08** · 🦞 **MemOS OpenClaw Plugin — Cloud & Local**
|
|
59
69
|
Official OpenClaw memory plugins launched. **Cloud Plugin**: hosted memory service with 72% lower token usage and multi-agent memory sharing ([MemOS-Cloud-OpenClaw-Plugin](https://github.com/MemTensor/MemOS-Cloud-OpenClaw-Plugin)). **Local Plugin** (`v1.0.0`): 100% on-device memory with persistent SQLite, hybrid search (FTS5 + vector), task summarization & skill evolution, multi-agent collaboration, and a full Memory Viewer dashboard.
|
|
60
70
|
|
|
@@ -93,12 +103,12 @@ MemOS gives AI agents long-term memory. Common uses:
|
|
|
93
103
|
MemOS is built around four entry points. Pick the one that matches your scenario.
|
|
94
104
|
|
|
95
105
|
|
|
96
|
-
| | Cloud API | Self-Host |
|
|
97
|
-
| ------------ | ----------------------- | ------------------ | ------------------------ |
|
|
98
|
-
| Best for | Your app, fully managed | Teams on own infra | OpenClaw users, zero ops | Hermes
|
|
99
|
-
| Setup | Get an API key | docker compose up | openclaw plugins install | npm install +
|
|
100
|
-
| Infra needed | None (hosted) | Neo4j + Qdrant | None (uses MemOS Cloud) | None (local SQLite)
|
|
101
|
-
| Data lives | MemOS Cloud | Your servers | MemOS Cloud | Your machine
|
|
106
|
+
| | Cloud API | Self-Host | MemOS Cloud Plugin | Local Plugin |
|
|
107
|
+
| ------------ | ----------------------- | ------------------ | ------------------------ | ------------------------------------------------ |
|
|
108
|
+
| Best for | Your app, fully managed | Teams on own infra | OpenClaw users, zero ops | DeepSeek Harness, Hermes, or OpenClaw; on-device |
|
|
109
|
+
| Setup | Get an API key | docker compose up | openclaw plugins install | npm install + agent-specific setup |
|
|
110
|
+
| Infra needed | None (hosted) | Neo4j + Qdrant | None (uses MemOS Cloud) | None (local SQLite) |
|
|
111
|
+
| Data lives | MemOS Cloud | Your servers | MemOS Cloud | Your machine |
|
|
102
112
|
|
|
103
113
|
### ☁️ Use the Cloud API (Hosted)
|
|
104
114
|
|
|
@@ -165,7 +175,7 @@ cd src
|
|
|
165
175
|
uvicorn memos.api.server_api:app --host 0.0.0.0 --port 8000 --workers 1
|
|
166
176
|
```
|
|
167
177
|
|
|
168
|
-
See `
|
|
178
|
+
See [`docker/.env.example-full`](./docker/.env.example-full) for all configuration options (LLM provider, embedder, vector DB, graph DB, scheduler). The full deployment guide is at [https://memos-docs.openmem.net/open_source/getting_started/rest_api_server/](https://memos-docs.openmem.net/open_source/getting_started/rest_api_server/).
|
|
169
179
|
|
|
170
180
|
**Try the API:**
|
|
171
181
|
|
|
@@ -199,18 +209,20 @@ res = requests.post(f"{base}/search", headers=headers, data=json.dumps({
|
|
|
199
209
|
print(res.json())
|
|
200
210
|
```
|
|
201
211
|
|
|
212
|
+
<a id="memos-plugin"></a>
|
|
213
|
+
|
|
202
214
|
### 🧠 MemOS Plugin: Persistent Memory for Your AI Agents ✨
|
|
203
215
|
|
|
204
|
-
|
|
216
|
+
MemOS gives OpenClaw, Hermes, and DeepSeek Harness a shared local memory core; the managed ***MemOS Cloud Plugin*** is available for OpenClaw and DeepSeek Harness 🏃🏻
|
|
205
217
|
|
|
206
218
|
| 🔌 Plugin | 💡 Core Features | 🧩 Resources |
|
|
207
219
|
| ------------------------------------------------------------------------------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
208
220
|
| 🧠 **[memos-local-plugin 2.0](https://github.com/MemTensor/MemOS/tree/main/apps/memos-local-plugin)** | | 🌐 [Website](https://memos-claw.openmem.net/) · 📖 [Docs](https://memos-docs.openmem.net/cn/openclaw/local_plugin) · 🐙 [GitHub](https://github.com/MemTensor/MemOS/tree/main/apps/memos-local-plugin) · 📦 [NPM](https://www.npmjs.com/package/@memtensor/memos-local-plugin) |
|
|
209
|
-
| ☁️ **[
|
|
221
|
+
| ☁️ **[MemOS Cloud Plugin](https://github.com/MemTensor/MemOS/tree/main/apps/MemOS-Cloud-OpenClaw-Plugin)** | | 🖥️ [MemOS Dashboard](https://memos-dashboard.openmem.net/login/) · 📖 [Full Tutorial](https://memos-docs.openmem.net/openclaw/guide#_4-update-plugin) |
|
|
210
222
|
|
|
211
|
-
#### 1.
|
|
223
|
+
#### 1. MemOS Cloud Plugin
|
|
212
224
|
|
|
213
|
-
|
|
225
|
+
Use MemOS Cloud for persistent memory in OpenClaw or DeepSeek Harness — no infrastructure to run.
|
|
214
226
|
|
|
215
227
|
- **Repo:** [MemTensor/MemOS ·](https://github.com/MemTensor/MemOS/tree/main/apps/MemOS-Cloud-OpenClaw-Plugin) `apps/MemOS-Cloud-OpenClaw-Plugin`
|
|
216
228
|
- **NPM:** `[@memtensor/memos-cloud-openclaw-plugin](https://www.npmjs.com/package/@memtensor/memos-cloud-openclaw-plugin)`
|
|
@@ -226,16 +238,55 @@ openclaw gateway restart
|
|
|
226
238
|
|
|
227
239
|
The plugin recalls memories from MemOS Cloud before each agent run and saves new messages back after the run ends.
|
|
228
240
|
|
|
229
|
-
|
|
241
|
+
##### DeepSeek Harness
|
|
242
|
+
|
|
243
|
+
Connect DeepSeek Harness to MemOS Cloud through its native plugin mechanism. Before the first model step of each user request, the plugin recalls relevant cloud memories; after a successful turn, it saves the new user and assistant messages back to MemOS Cloud.
|
|
244
|
+
|
|
245
|
+
1. [Create a MemOS API Key](https://memos-dashboard.openmem.net/cn/apikeys/).
|
|
246
|
+
2. Install the cloud plugin into the default DSH `web` profile:
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
npx @deepseek-ai/dsh plugin --profile web add @memtensor/memos-cloud-dsh-plugin@latest
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
3. Add the API Key to `~/.dsh/.credentials.yaml`:
|
|
253
|
+
|
|
254
|
+
```yaml
|
|
255
|
+
MEMOS_API_KEY: mpg-your-key
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
4. Add the minimal plugin configuration to `~/.dsh/settings.yaml`:
|
|
230
259
|
|
|
231
|
-
|
|
260
|
+
```yaml
|
|
261
|
+
memos-cloud:
|
|
262
|
+
apiKeyEnv: MEMOS_API_KEY
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
5. Restart the DSH Web profile:
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
npx @deepseek-ai/dsh web
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
The cloud plugin is fail-open: a temporary MemOS Cloud outage does not interrupt the current DSH task.
|
|
272
|
+
|
|
273
|
+
#### 2. Local Plugin (OpenClaw, Hermes, and DeepSeek Harness)
|
|
274
|
+
|
|
275
|
+
You use DeepSeek Harness, Hermes Agent, or OpenClaw and want 100% on-device memory — nothing leaves your machine.
|
|
232
276
|
|
|
233
277
|
- **Repo:** [MemTensor/MemOS ·](https://github.com/MemTensor/MemOS/tree/main/apps/memos-local-plugin) `apps/memos-local-plugin`
|
|
234
278
|
- **NPM:** `[@memtensor/memos-local-plugin](https://www.npmjs.com/package/@memtensor/memos-local-plugin)`
|
|
235
279
|
- **Docs:** [https://memos-docs.openmem.net/cn/openclaw/local_plugin](https://memos-docs.openmem.net/cn/openclaw/local_plugin)
|
|
280
|
+
- **DeepSeek Harness:** [integration details](./apps/memos-local-plugin/adapters/deepseek-harness/README.md)
|
|
236
281
|
- **Viewer dashboard:** see `apps/memos-local-plugin/viewer/`
|
|
237
282
|
|
|
238
|
-
Install (macOS / Linux):
|
|
283
|
+
Install for DeepSeek Harness (macOS / Linux):
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
curl -fsSL https://raw.githubusercontent.com/MemTensor/MemOS/main/apps/memos-local-plugin/install.sh | bash -s -- --agent dsh --profile web
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
Install for OpenClaw or Hermes (macOS / Linux):
|
|
239
290
|
|
|
240
291
|
```bash
|
|
241
292
|
curl -fsSL https://raw.githubusercontent.com/MemTensor/MemOS/main/apps/memos-local-plugin/install.sh | bash
|
|
@@ -247,7 +298,7 @@ Install (Windows PowerShell):
|
|
|
247
298
|
irm https://raw.githubusercontent.com/MemTensor/MemOS/main/apps/memos-local-plugin/install.ps1 -OutFile "$env:TEMP\memos-install.ps1"; powershell -ExecutionPolicy Bypass -File "$env:TEMP\memos-install.ps1"
|
|
248
299
|
```
|
|
249
300
|
|
|
250
|
-
Requires Node.js and an already-installed OpenClaw or Hermes. The installer
|
|
301
|
+
Requires Node.js and an already-installed DeepSeek Harness, OpenClaw, or Hermes. The installer deploys MemOS to the selected agent runtime; the DeepSeek Harness target installs it as an out-of-tree DSH bundle, while the OpenClaw and Hermes targets write the initial `config.yaml` in their respective agent homes.
|
|
251
302
|
|
|
252
303
|
Features: hybrid retrieval (FTS5 + vector), smart dedup, tiered skill evolution (L1 traces / L2 policies / L3 world model), multi-agent collaboration, local-first SQLite storage.
|
|
253
304
|
|
|
@@ -463,6 +463,28 @@ class APIConfig:
|
|
|
463
463
|
# Fallback to memreader config (same behavior as before for users who don't customize)
|
|
464
464
|
return APIConfig.get_memreader_config()
|
|
465
465
|
|
|
466
|
+
@staticmethod
|
|
467
|
+
def get_suggestion_llm_config() -> dict[str, Any]:
|
|
468
|
+
"""Get LLM configuration for suggestion query generation.
|
|
469
|
+
|
|
470
|
+
Fallback chain: SUGGESTION_MODEL -> MEMREADER_GENERAL_MODEL -> memreader config.
|
|
471
|
+
"""
|
|
472
|
+
suggestion_model = os.getenv("SUGGESTION_MODEL")
|
|
473
|
+
if suggestion_model:
|
|
474
|
+
return APIConfig._build_provider_llm_config(suggestion_model)
|
|
475
|
+
return APIConfig.get_memreader_general_llm_config()
|
|
476
|
+
|
|
477
|
+
@staticmethod
|
|
478
|
+
def get_scheduler_llm_config() -> dict[str, Any]:
|
|
479
|
+
"""Get LLM configuration for scheduler-owned LLM tasks.
|
|
480
|
+
|
|
481
|
+
Fallback chain: MEMSCHEDULER_MODEL -> MEMREADER_GENERAL_MODEL.
|
|
482
|
+
"""
|
|
483
|
+
scheduler_model = os.getenv("MEMSCHEDULER_MODEL")
|
|
484
|
+
if scheduler_model:
|
|
485
|
+
return APIConfig._build_provider_llm_config(scheduler_model)
|
|
486
|
+
return APIConfig.get_memreader_general_llm_config()
|
|
487
|
+
|
|
466
488
|
@staticmethod
|
|
467
489
|
def get_image_parser_llm_config() -> dict[str, Any]:
|
|
468
490
|
"""Get LLM configuration for image parsing (requires vision model).
|
|
@@ -92,6 +92,7 @@ class ChatHandler(BaseHandler):
|
|
|
92
92
|
|
|
93
93
|
self.chat_llms = chat_llms
|
|
94
94
|
self.playground_chat_llms = playground_chat_llms or chat_llms
|
|
95
|
+
self.suggestion_llm = getattr(dependencies, "suggestion_llm", dependencies.llm)
|
|
95
96
|
self.search_handler = search_handler
|
|
96
97
|
self.add_handler = add_handler
|
|
97
98
|
self.online_bot = online_bot
|
|
@@ -1232,7 +1233,7 @@ class ChatHandler(BaseHandler):
|
|
|
1232
1233
|
},
|
|
1233
1234
|
{"role": "user", "content": further_suggestion_prompt},
|
|
1234
1235
|
]
|
|
1235
|
-
response = self.
|
|
1236
|
+
response = self.suggestion_llm.generate(message_list)
|
|
1236
1237
|
clean_response = clean_json_response(response)
|
|
1237
1238
|
response_json = json.loads(clean_response)
|
|
1238
1239
|
return response_json["query"]
|
|
@@ -21,6 +21,8 @@ from memos.api.handlers.config_builders import (
|
|
|
21
21
|
build_mem_reader_config,
|
|
22
22
|
build_nli_client_config,
|
|
23
23
|
build_reranker_config,
|
|
24
|
+
build_scheduler_llm_config,
|
|
25
|
+
build_suggestion_llm_config,
|
|
24
26
|
)
|
|
25
27
|
from memos.configs.mem_scheduler import SchedulerConfigFactory
|
|
26
28
|
from memos.embedders.factory import EmbedderFactory
|
|
@@ -158,6 +160,8 @@ def init_server() -> dict[str, Any]:
|
|
|
158
160
|
graph_db_config = build_graph_db_config()
|
|
159
161
|
llm_config = build_llm_config()
|
|
160
162
|
feedback_llm_config = build_feedback_llm_config()
|
|
163
|
+
suggestion_llm_config = build_suggestion_llm_config()
|
|
164
|
+
scheduler_llm_config = build_scheduler_llm_config()
|
|
161
165
|
chat_llm_config = build_chat_llm_config()
|
|
162
166
|
playground_chat_llm_config = build_chat_llm_config("PLAYGROUND_CHAT_MODEL_LIST")
|
|
163
167
|
embedder_config = build_embedder_config()
|
|
@@ -173,6 +177,8 @@ def init_server() -> dict[str, Any]:
|
|
|
173
177
|
graph_db = GraphStoreFactory.from_config(graph_db_config)
|
|
174
178
|
llm = LLMFactory.from_config(llm_config)
|
|
175
179
|
feedback_llm = LLMFactory.from_config(feedback_llm_config)
|
|
180
|
+
suggestion_llm = LLMFactory.from_config(suggestion_llm_config)
|
|
181
|
+
scheduler_llm = LLMFactory.from_config(scheduler_llm_config)
|
|
176
182
|
chat_llms = (
|
|
177
183
|
_init_chat_llms(chat_llm_config)
|
|
178
184
|
if os.getenv("ENABLE_CHAT_API", "false") == "true"
|
|
@@ -281,7 +287,7 @@ def init_server() -> dict[str, Any]:
|
|
|
281
287
|
)
|
|
282
288
|
mem_scheduler: OptimizedScheduler = SchedulerFactory.from_config(scheduler_config)
|
|
283
289
|
mem_scheduler.initialize_modules(
|
|
284
|
-
chat_llm=
|
|
290
|
+
chat_llm=scheduler_llm,
|
|
285
291
|
process_llm=mem_reader.general_llm,
|
|
286
292
|
db_engine=BaseDBManager.create_default_sqlite_engine(),
|
|
287
293
|
mem_reader=mem_reader,
|
|
@@ -325,6 +331,8 @@ def init_server() -> dict[str, Any]:
|
|
|
325
331
|
"graph_db": graph_db,
|
|
326
332
|
"mem_reader": mem_reader,
|
|
327
333
|
"llm": llm,
|
|
334
|
+
"suggestion_llm": suggestion_llm,
|
|
335
|
+
"scheduler_llm": scheduler_llm,
|
|
328
336
|
"chat_llms": chat_llms,
|
|
329
337
|
"playground_chat_llms": playground_chat_llms,
|
|
330
338
|
"embedder": embedder,
|
|
@@ -167,6 +167,26 @@ def build_feedback_llm_config() -> dict[str, Any]:
|
|
|
167
167
|
return LLMConfigFactory.model_validate(APIConfig.get_feedback_llm_config())
|
|
168
168
|
|
|
169
169
|
|
|
170
|
+
def build_suggestion_llm_config() -> dict[str, Any]:
|
|
171
|
+
"""
|
|
172
|
+
Build suggestion LLM configuration.
|
|
173
|
+
|
|
174
|
+
Returns:
|
|
175
|
+
Validated suggestion LLM configuration dictionary
|
|
176
|
+
"""
|
|
177
|
+
return LLMConfigFactory.model_validate(APIConfig.get_suggestion_llm_config())
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
def build_scheduler_llm_config() -> dict[str, Any]:
|
|
181
|
+
"""
|
|
182
|
+
Build scheduler LLM configuration.
|
|
183
|
+
|
|
184
|
+
Returns:
|
|
185
|
+
Validated scheduler LLM configuration dictionary
|
|
186
|
+
"""
|
|
187
|
+
return LLMConfigFactory.model_validate(APIConfig.get_scheduler_llm_config())
|
|
188
|
+
|
|
189
|
+
|
|
170
190
|
def build_internet_retriever_config() -> dict[str, Any]:
|
|
171
191
|
"""
|
|
172
192
|
Build internet retriever configuration.
|
|
@@ -97,6 +97,7 @@ cube_handler = CubeHandler(dependencies)
|
|
|
97
97
|
# (These can be accessed from the components dict without unpacking all of them)
|
|
98
98
|
mem_scheduler: BaseScheduler = components["mem_scheduler"]
|
|
99
99
|
llm = components["llm"]
|
|
100
|
+
suggestion_llm = components.get("suggestion_llm", llm)
|
|
100
101
|
naive_mem_cube = components["naive_mem_cube"]
|
|
101
102
|
redis_client = components["redis_client"]
|
|
102
103
|
status_tracker = TaskStatusTracker(redis_client=redis_client)
|
|
@@ -327,7 +328,7 @@ def get_suggestion_queries(suggestion_req: SuggestionRequest):
|
|
|
327
328
|
user_id=suggestion_req.mem_cube_id,
|
|
328
329
|
language=suggestion_req.language,
|
|
329
330
|
message=suggestion_req.message,
|
|
330
|
-
llm=
|
|
331
|
+
llm=suggestion_llm,
|
|
331
332
|
naive_mem_cube=naive_mem_cube,
|
|
332
333
|
)
|
|
333
334
|
|
|
@@ -214,10 +214,22 @@ class OpenAIConfig(BaseConfig, DictConversionMixin, EnvConfigMixin):
|
|
|
214
214
|
|
|
215
215
|
@classmethod
|
|
216
216
|
def from_env(cls) -> "OpenAIConfig":
|
|
217
|
+
default_model = (
|
|
218
|
+
os.getenv("MEMSCHEDULER_MODEL") or os.getenv("MEMREADER_GENERAL_MODEL") or ""
|
|
219
|
+
)
|
|
220
|
+
normalized = default_model.strip().lower()
|
|
221
|
+
is_qwen = normalized.startswith("qwen") or "/qwen" in normalized
|
|
222
|
+
api_key_env = "QWEN_API_KEY" if is_qwen else "OPENAI_API_KEY"
|
|
223
|
+
api_base_env = "QWEN_API_BASE" if is_qwen else "OPENAI_API_BASE"
|
|
224
|
+
default_base_url = (
|
|
225
|
+
"https://dashscope.aliyuncs.com/compatible-mode/v1"
|
|
226
|
+
if is_qwen
|
|
227
|
+
else "https://api.openai.com/v1"
|
|
228
|
+
)
|
|
217
229
|
return cls(
|
|
218
|
-
api_key=os.getenv(
|
|
219
|
-
base_url=os.getenv(
|
|
220
|
-
default_model=
|
|
230
|
+
api_key=os.getenv(api_key_env, ""),
|
|
231
|
+
base_url=os.getenv(api_base_env, default_base_url),
|
|
232
|
+
default_model=default_model,
|
|
221
233
|
)
|
|
222
234
|
|
|
223
235
|
|
|
@@ -354,7 +366,9 @@ class AuthConfig(BaseConfig, DictConversionMixin):
|
|
|
354
366
|
for key in [
|
|
355
367
|
"OPENAI_API_KEY",
|
|
356
368
|
"OPENAI_API_BASE",
|
|
357
|
-
"
|
|
369
|
+
"QWEN_API_KEY",
|
|
370
|
+
"QWEN_API_BASE",
|
|
371
|
+
"MEMSCHEDULER_MODEL",
|
|
358
372
|
]
|
|
359
373
|
)
|
|
360
374
|
if has_openai_env:
|
|
@@ -391,6 +405,7 @@ class AuthConfig(BaseConfig, DictConversionMixin):
|
|
|
391
405
|
os.environ["OPENAI_API_KEY"] = self.openai.api_key
|
|
392
406
|
os.environ["OPENAI_API_BASE"] = self.openai.base_url
|
|
393
407
|
os.environ["MODEL"] = self.openai.default_model
|
|
408
|
+
os.environ["MEMSCHEDULER_MODEL"] = self.openai.default_model
|
|
394
409
|
else:
|
|
395
410
|
logger = logging.getLogger(__name__)
|
|
396
411
|
logger.warning("OpenAI config is not available, skipping environment variable setup")
|
|
@@ -29,6 +29,8 @@ class EmbedderFactory(BaseEmbedder):
|
|
|
29
29
|
raise ValueError(f"Invalid backend: {backend}")
|
|
30
30
|
embedder_class = cls.backend_to_class[backend]
|
|
31
31
|
embedder = embedder_class(config_factory.config)
|
|
32
|
+
if not hasattr(embedder, "config"):
|
|
33
|
+
embedder.config = config_factory.config
|
|
32
34
|
if backend in cls.cacheable_backends and embedding_optimization_enabled():
|
|
33
35
|
return CachingEmbedder(embedder)
|
|
34
36
|
return embedder
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
from memos.configs.llm import QwenLLMConfig
|
|
4
|
+
from memos.llms.openai import OpenAILLM
|
|
5
|
+
from memos.log import get_logger
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
logger = get_logger(__name__)
|
|
9
|
+
|
|
10
|
+
DASHSCOPE_WAIT_TIMEOUT_HEADER = "X-DashScope-Wait-Timeout"
|
|
11
|
+
DASHSCOPE_WAIT_TIMEOUT_SECONDS = "30"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _add_dashscope_wait_timeout_header(
|
|
15
|
+
default_headers: dict[str, Any] | None,
|
|
16
|
+
) -> dict[str, Any]:
|
|
17
|
+
headers = dict(default_headers or {})
|
|
18
|
+
if not any(key.lower() == DASHSCOPE_WAIT_TIMEOUT_HEADER.lower() for key in headers):
|
|
19
|
+
headers[DASHSCOPE_WAIT_TIMEOUT_HEADER] = DASHSCOPE_WAIT_TIMEOUT_SECONDS
|
|
20
|
+
return headers
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class QwenLLM(OpenAILLM):
|
|
24
|
+
"""Qwen (DashScope) LLM class via OpenAI-compatible API."""
|
|
25
|
+
|
|
26
|
+
def __init__(self, config: QwenLLMConfig):
|
|
27
|
+
config = config.model_copy(
|
|
28
|
+
update={"default_headers": _add_dashscope_wait_timeout_header(config.default_headers)}
|
|
29
|
+
)
|
|
30
|
+
super().__init__(config)
|
|
@@ -14,6 +14,7 @@ from typing import Any
|
|
|
14
14
|
|
|
15
15
|
from openai import OpenAI
|
|
16
16
|
|
|
17
|
+
from memos.api.config import APIConfig
|
|
17
18
|
from memos.log import get_logger
|
|
18
19
|
|
|
19
20
|
|
|
@@ -51,13 +52,19 @@ class EvalAnalyzer:
|
|
|
51
52
|
self.output_dir = Path(output_dir)
|
|
52
53
|
self.output_dir.mkdir(parents=True, exist_ok=True)
|
|
53
54
|
|
|
54
|
-
|
|
55
|
+
scheduler_config = APIConfig.get_scheduler_llm_config()["config"]
|
|
56
|
+
self.openai_model = openai_model or scheduler_config["model_name_or_path"]
|
|
57
|
+
if not self.openai_model:
|
|
58
|
+
raise ValueError(
|
|
59
|
+
"No model configured. Set MEMSCHEDULER_MODEL, MEMREADER_GENERAL_MODEL, "
|
|
60
|
+
"or pass openai_model explicitly."
|
|
61
|
+
)
|
|
62
|
+
provider_config = APIConfig._build_provider_llm_config(self.openai_model)["config"]
|
|
63
|
+
|
|
64
|
+
# Initialize OpenAI-compatible client
|
|
55
65
|
self.openai_client = OpenAI(
|
|
56
|
-
api_key=openai_api_key or
|
|
57
|
-
base_url=openai_base_url or
|
|
58
|
-
)
|
|
59
|
-
self.openai_model = openai_model or os.getenv(
|
|
60
|
-
"MEMSCHEDULER_OPENAI_DEFAULT_MODEL", "gpt-4o-mini"
|
|
66
|
+
api_key=openai_api_key or provider_config["api_key"],
|
|
67
|
+
base_url=openai_base_url or provider_config["api_base"],
|
|
61
68
|
)
|
|
62
69
|
|
|
63
70
|
logger.info(f"EvalAnalyzer initialized with model: {self.openai_model}")
|
|
@@ -87,12 +87,7 @@ def build_llm_config() -> dict[str, Any]:
|
|
|
87
87
|
Returns:
|
|
88
88
|
Validated LLM configuration dictionary
|
|
89
89
|
"""
|
|
90
|
-
return LLMConfigFactory.model_validate(
|
|
91
|
-
{
|
|
92
|
-
"backend": "openai",
|
|
93
|
-
"config": APIConfig.get_openai_config(),
|
|
94
|
-
}
|
|
95
|
-
)
|
|
90
|
+
return LLMConfigFactory.model_validate(APIConfig.get_scheduler_llm_config())
|
|
96
91
|
|
|
97
92
|
|
|
98
93
|
def build_feedback_llm_config() -> dict[str, Any]:
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
from memos.configs.llm import QwenLLMConfig
|
|
2
|
-
from memos.llms.openai import OpenAILLM
|
|
3
|
-
from memos.log import get_logger
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
logger = get_logger(__name__)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class QwenLLM(OpenAILLM):
|
|
10
|
-
"""Qwen (DashScope) LLM class via OpenAI-compatible API."""
|
|
11
|
-
|
|
12
|
-
def __init__(self, config: QwenLLMConfig):
|
|
13
|
-
super().__init__(config)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|