MemoryOS 2.0.23__tar.gz → 2.0.25__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.23 → memoryos-2.0.25}/PKG-INFO +2 -2
- {memoryos-2.0.23 → memoryos-2.0.25}/README.md +1 -1
- {memoryos-2.0.23 → memoryos-2.0.25}/pyproject.toml +1 -1
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/__init__.py +1 -1
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/client.py +317 -46
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/config.py +95 -84
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/handlers/__init__.py +2 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/handlers/component_init.py +4 -1
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/handlers/config_builders.py +10 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/handlers/search_handler.py +96 -3
- memoryos-2.0.25/src/memos/api/lifecycle.py +26 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/product_models.py +57 -4
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/server_api.py +14 -2
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/server_api_ext.py +14 -3
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/mem_reader.py +6 -1
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/mem_scheduler.py +18 -4
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/parser.py +21 -6
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/embedders/ark.py +2 -1
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/embedders/base.py +55 -0
- memoryos-2.0.25/src/memos/embedders/cache.py +229 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/embedders/factory.py +6 -1
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/embedders/ollama.py +2 -1
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/embedders/sentence_transformer.py +2 -1
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/embedders/universal_api.py +4 -20
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/graph_dbs/polardb.py +64 -7
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/hello_world.py +1 -1
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/log.py +94 -1
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_feedback/feedback.py +21 -7
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/multi_modal_struct.py +10 -2
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/read_multi_modal/file_content_parser.py +47 -3
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/read_multi_modal/multi_modal_parser.py +5 -2
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/analyzer/eval_analyzer.py +3 -3
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/general_modules/init_components_for_scheduler.py +13 -1
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/retrieve/recall.py +95 -5
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/retrieve/searcher.py +2 -8
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/multi_mem_cube/single_cube.py +3 -4
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/reranker/cosine_local.py +9 -1
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/templates/mem_feedback_prompts.py +10 -12
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/templates/mem_reader_prompts.py +34 -12
- {memoryos-2.0.23 → memoryos-2.0.25}/LICENSE +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/context/dependencies.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/exceptions.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/handlers/add_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/handlers/base_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/handlers/chat_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/handlers/cube_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/handlers/feedback_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/handlers/formatters_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/handlers/memory_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/handlers/scheduler_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/handlers/suggestion_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/mcp_serve.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/middleware/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/middleware/auth.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/middleware/rate_limit.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/middleware/request_context.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/routers/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/routers/admin_router.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/routers/server_router.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/utils/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/api/utils/api_keys.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/chunkers/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/chunkers/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/chunkers/charactertext_chunker.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/chunkers/factory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/chunkers/markdown_chunker.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/chunkers/sentence_chunker.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/chunkers/simple_chunker.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/cli.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/chunker.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/embedder.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/graph_db.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/internet_retriever.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/llm.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/mem_agent.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/mem_chat.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/mem_cube.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/mem_os.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/mem_user.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/memory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/reranker.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/configs/vec_db.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/context/context.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dependency.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/deprecation.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/README.md +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/contextualization.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/enrichment.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/hook_defs.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/hooks.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/maintenance.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/pipeline/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/pipeline/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/pipeline/diary.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/pipeline/motive.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/pipeline/persistence.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/pipeline/reasoning.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/pipeline/recall.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/plugin.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/prompts/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/prompts/context_binding_prompt.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/prompts/context_summary_prompt.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/prompts/motive_prompt.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/prompts/reasoning_prompt.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/routers/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/routers/diary_router.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/routers/trigger_router.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/routes.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/search.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/signal_store.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/dream/types.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/embedders/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/exceptions.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/extras/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/graph_dbs/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/graph_dbs/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/graph_dbs/factory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/graph_dbs/item.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/graph_dbs/neo4j.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/graph_dbs/neo4j_community.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/graph_dbs/postgres.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/llms/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/llms/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/llms/deepseek.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/llms/factory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/llms/hf.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/llms/hf_singleton.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/llms/minimax.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/llms/ollama.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/llms/openai.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/llms/openai_new.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/llms/qwen.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/llms/utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/llms/vllm.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_agent/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_agent/deepsearch_agent.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_agent/factory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_chat/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_chat/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_chat/factory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_chat/simple.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_cube/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_cube/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_cube/general.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_cube/navie.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_cube/utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_feedback/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_feedback/simple_feedback.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_feedback/utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_os/core.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_os/main.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_os/utils/default_config.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_os/utils/format_utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_os/utils/reference_utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/factory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/memory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/read_multi_modal/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/read_multi_modal/assistant_parser.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/read_multi_modal/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/read_multi_modal/image_parser.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/read_multi_modal/string_parser.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/read_multi_modal/system_parser.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/read_multi_modal/text_content_parser.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/read_multi_modal/tool_parser.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/read_multi_modal/user_parser.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/read_multi_modal/utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/read_pref_memory/process_preference_memory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/read_skill_memory/process_skill_memory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/read_skill_memory/upload_skill_memory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/simple_struct.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/strategy_struct.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_reader/utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/analyzer/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/analyzer/api_analyzer.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/analyzer/mos_for_test_scheduler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/analyzer/scheduler_for_eval.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/base_mixins/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/base_mixins/memory_ops.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/base_mixins/queue_ops.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/base_mixins/web_log_ops.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/base_scheduler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/general_modules/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/general_modules/api_misc.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/general_modules/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/general_modules/misc.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/general_modules/scheduler_logger.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/general_modules/task_threads.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/general_scheduler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/memory_manage_modules/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/memory_manage_modules/activation_memory_manager.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/memory_manage_modules/enhancement_pipeline.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/memory_manage_modules/filter_pipeline.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/memory_manage_modules/memory_filter.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/memory_manage_modules/post_processor.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/memory_manage_modules/rerank_pipeline.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/memory_manage_modules/retriever.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/memory_manage_modules/search_pipeline.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/memory_manage_modules/search_service.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/monitors/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/monitors/dispatcher_monitor.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/monitors/general_monitor.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/monitors/task_schedule_monitor.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/optimized_scheduler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/orm_modules/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/orm_modules/api_redis_model.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/orm_modules/base_model.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/orm_modules/monitor_models.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/orm_modules/redis_model.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/scheduler_factory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/schemas/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/schemas/analyzer_schemas.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/schemas/api_schemas.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/schemas/general_schemas.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/schemas/message_schemas.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/schemas/monitor_schemas.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/schemas/task_schemas.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/base_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/context.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/dispatcher.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/handlers/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/handlers/add_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/handlers/answer_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/handlers/feedback_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_dream_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_read_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_reorganize_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/handlers/memory_update_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/handlers/pref_add_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/handlers/query_handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/local_queue.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/orchestrator.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/redis_queue.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/registry.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/task_schedule_modules/task_queue.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/utils/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/utils/api_utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/utils/config_utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/utils/db_utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/utils/filter_utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/utils/metrics.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/utils/misc_utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/utils/monitor_event_utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/utils/status_tracker.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/webservice_modules/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/webservice_modules/rabbitmq_service.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_scheduler/webservice_modules/redis_service.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_user/factory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_user/mysql_persistent_user_manager.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_user/mysql_user_manager.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_user/persistent_factory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_user/persistent_user_manager.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_user/redis_persistent_user_manager.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/mem_user/user_manager.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/activation/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/activation/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/activation/item.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/activation/kv.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/activation/vllmkv.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/factory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/parametric/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/parametric/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/parametric/item.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/parametric/lora.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/general.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/item.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/naive.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/prefer_text_memory/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/prefer_text_memory/adder.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/prefer_text_memory/config.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/prefer_text_memory/extractor.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/prefer_text_memory/factory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/prefer_text_memory/retrievers.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/prefer_text_memory/spliter.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/prefer_text_memory/utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/preference.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/simple_preference.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/simple_tree.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/organize/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/organize/handler.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/organize/manager.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/organize/relation_reason_detector.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/organize/reorganizer.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/retrieve/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/retrieve/advanced_searcher.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/retrieve/bm25_util.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/retrieve/bochasearch.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever_factory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/retrieve/reasoner.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/retrieve/reranker.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/retrieve/retrieval_mid_structs.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/retrieve/retrieve_utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/retrieve/task_goal_parser.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/retrieve/tavilysearch.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/retrieve/utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memories/textual/tree_text_memory/retrieve/xinyusearch.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memos_tools/dinding_report_bot.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memos_tools/lockfree_dict.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memos_tools/notification_service.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memos_tools/notification_utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memos_tools/singleton.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memos_tools/thread_safe_dict.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/memos_tools/thread_safe_dict_segment.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/multi_mem_cube/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/multi_mem_cube/composite_cube.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/multi_mem_cube/views.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/parsers/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/parsers/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/parsers/factory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/parsers/markitdown.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/plugins/README.md +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/plugins/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/plugins/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/plugins/component_bootstrap.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/plugins/hook_defs.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/plugins/hooks.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/plugins/manager.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/reranker/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/reranker/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/reranker/concat.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/reranker/factory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/reranker/http_bge.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/reranker/http_bge_strategy.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/reranker/noop.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/reranker/strategies/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/reranker/strategies/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/reranker/strategies/concat_background.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/reranker/strategies/concat_docsource.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/reranker/strategies/dialogue_common.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/reranker/strategies/factory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/reranker/strategies/single_turn.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/reranker/strategies/singleturn_outmem.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/search/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/search/search_service.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/settings.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/templates/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/templates/advanced_search_prompts.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/templates/cloud_service_prompt.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/templates/instruction_completion.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/templates/mem_agent_prompts.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/templates/mem_reader_strategy_prompts.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/templates/mem_scheduler_prompts.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/templates/mem_search_prompts.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/templates/mos_prompts.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/templates/prefer_complete_prompt.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/templates/skill_mem_prompt.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/templates/tool_mem_prompts.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/templates/tree_reorganize_prompts.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/types/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/types/general_types.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/types/openai_chat_completion_types/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/types/openai_chat_completion_types/chat_completion_assistant_message_param.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_image_param.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_input_audio_param.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_param.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_refusal_param.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_text_param.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/types/openai_chat_completion_types/chat_completion_message_custom_tool_call_param.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/types/openai_chat_completion_types/chat_completion_message_function_tool_call_param.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/types/openai_chat_completion_types/chat_completion_message_param.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/types/openai_chat_completion_types/chat_completion_message_tool_call_union_param.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/types/openai_chat_completion_types/chat_completion_system_message_param.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/types/openai_chat_completion_types/chat_completion_tool_message_param.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/types/openai_chat_completion_types/chat_completion_user_message_param.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/utils.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/vec_dbs/__init__.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/vec_dbs/base.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/vec_dbs/factory.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/vec_dbs/item.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/src/memos/vec_dbs/milvus.py +0 -0
- {memoryos-2.0.23 → memoryos-2.0.25}/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.25
|
|
4
4
|
Summary: Intelligence Begins with Memory
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -131,7 +131,7 @@ Description-Content-Type: text/markdown
|
|
|
131
131
|
### News
|
|
132
132
|
|
|
133
133
|
- **2026-07-02** · 🏆 **MemOS Advances Agent and User Memory Benchmarks**
|
|
134
|
-
With MemOS, **OpenClaw** improves average task completion from **36.63% to 50.87%** across five agent tasks. MemOS also achieves **
|
|
134
|
+
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
135
|
|
|
136
136
|
- **2026-05-09** · 🧠 **memos-local-plugin 2.0**
|
|
137
137
|
Official local memory plugin for **Hermes Agent** and **OpenClaw**. One core powers self-evolving memory across L1 traces, L2 policies, L3 world models, and crystallized Skills, with local-first storage and feedback-driven retrieval.
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
### News
|
|
48
48
|
|
|
49
49
|
- **2026-07-02** · 🏆 **MemOS Advances Agent and User Memory Benchmarks**
|
|
50
|
-
With MemOS, **OpenClaw** improves average task completion from **36.63% to 50.87%** across five agent tasks. MemOS also achieves **
|
|
50
|
+
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
51
|
|
|
52
52
|
- **2026-05-09** · 🧠 **memos-local-plugin 2.0**
|
|
53
53
|
Official local memory plugin for **Hermes Agent** and **OpenClaw**. One core powers self-evolving memory across L1 traces, L2 policies, L3 world models, and crystallized Skills, with local-first storage and feedback-driven retrieval.
|
|
@@ -2,7 +2,9 @@ import json
|
|
|
2
2
|
import mimetypes
|
|
3
3
|
import os
|
|
4
4
|
|
|
5
|
+
from collections.abc import Iterator
|
|
5
6
|
from typing import Any
|
|
7
|
+
from urllib.parse import quote
|
|
6
8
|
|
|
7
9
|
import requests
|
|
8
10
|
|
|
@@ -65,17 +67,55 @@ class MemOSClient:
|
|
|
65
67
|
if not param_value:
|
|
66
68
|
raise ValueError(f"{param_name} is required")
|
|
67
69
|
|
|
70
|
+
def _validate_profile_subject(self, user_id: str | None, agent_id: str | None) -> None:
|
|
71
|
+
if bool(user_id) == bool(agent_id):
|
|
72
|
+
raise ValueError("exactly one of user_id or agent_id is required")
|
|
73
|
+
|
|
74
|
+
@staticmethod
|
|
75
|
+
def _normalize_task_status_response(
|
|
76
|
+
response_data: dict[str, Any], task_id: str
|
|
77
|
+
) -> dict[str, Any]:
|
|
78
|
+
data = response_data.get("data")
|
|
79
|
+
if not (isinstance(data, list) and len(data) == 1 and isinstance(data[0], dict)):
|
|
80
|
+
return response_data
|
|
81
|
+
|
|
82
|
+
normalized_data = data[0].copy()
|
|
83
|
+
normalized_data.setdefault("task_id", task_id)
|
|
84
|
+
return {**response_data, "data": normalized_data}
|
|
85
|
+
|
|
86
|
+
def _post_json_dict(
|
|
87
|
+
self, endpoint: str, payload: dict[str, Any], operation: str
|
|
88
|
+
) -> dict[str, Any] | None:
|
|
89
|
+
url = f"{self.base_url}/{endpoint}"
|
|
90
|
+
for retry in range(MAX_RETRY_COUNT):
|
|
91
|
+
try:
|
|
92
|
+
response = requests.post(
|
|
93
|
+
url, data=json.dumps(payload), headers=self.headers, timeout=30
|
|
94
|
+
)
|
|
95
|
+
response.raise_for_status()
|
|
96
|
+
return response.json()
|
|
97
|
+
except Exception as e:
|
|
98
|
+
logger.error(
|
|
99
|
+
"Failed to %s (retry %s/%s): %s",
|
|
100
|
+
operation,
|
|
101
|
+
retry + 1,
|
|
102
|
+
MAX_RETRY_COUNT,
|
|
103
|
+
e,
|
|
104
|
+
)
|
|
105
|
+
if retry == MAX_RETRY_COUNT - 1:
|
|
106
|
+
raise
|
|
107
|
+
|
|
68
108
|
def get_message(
|
|
69
109
|
self,
|
|
70
110
|
user_id: str,
|
|
71
111
|
conversation_id: str | None = None,
|
|
72
|
-
conversation_limit_number: int =
|
|
73
|
-
message_limit_number: int =
|
|
112
|
+
conversation_limit_number: int | None = None,
|
|
113
|
+
message_limit_number: int | None = None,
|
|
74
114
|
source: str | None = None,
|
|
75
115
|
) -> MemOSGetMessagesResponse | None:
|
|
76
116
|
"""Get message"""
|
|
77
117
|
# Validate required parameters
|
|
78
|
-
self._validate_required_params(user_id=user_id)
|
|
118
|
+
self._validate_required_params(user_id=user_id, conversation_id=conversation_id)
|
|
79
119
|
|
|
80
120
|
url = f"{self.base_url}/get/message"
|
|
81
121
|
payload = {
|
|
@@ -102,22 +142,23 @@ class MemOSClient:
|
|
|
102
142
|
def add_message(
|
|
103
143
|
self,
|
|
104
144
|
messages: list[dict[str, Any]],
|
|
105
|
-
user_id: str,
|
|
106
|
-
conversation_id: str,
|
|
145
|
+
user_id: str | list[str] | None = None,
|
|
146
|
+
conversation_id: str | None = None,
|
|
107
147
|
info: dict[str, Any] | None = None,
|
|
108
148
|
source: str | None = None,
|
|
109
149
|
app_id: str | None = None,
|
|
110
|
-
agent_id: str | None = None,
|
|
150
|
+
agent_id: str | list[str] | None = None,
|
|
111
151
|
async_mode: bool = True,
|
|
112
152
|
tags: list[str] | None = None,
|
|
113
153
|
allow_public: bool = False,
|
|
114
154
|
allow_knowledgebase_ids: list[str] | None = None,
|
|
155
|
+
allow_memory_view: list[str] | None = None,
|
|
115
156
|
) -> MemOSAddResponse | None:
|
|
116
157
|
"""Add message"""
|
|
117
158
|
# Validate required parameters
|
|
118
|
-
self._validate_required_params(
|
|
119
|
-
|
|
120
|
-
|
|
159
|
+
self._validate_required_params(messages=messages)
|
|
160
|
+
if not user_id and not agent_id:
|
|
161
|
+
raise ValueError("user_id or agent_id is required")
|
|
121
162
|
|
|
122
163
|
url = f"{self.base_url}/add/message"
|
|
123
164
|
payload = {
|
|
@@ -130,8 +171,9 @@ class MemOSClient:
|
|
|
130
171
|
"agent_id": agent_id,
|
|
131
172
|
"allow_public": allow_public,
|
|
132
173
|
"allow_knowledgebase_ids": allow_knowledgebase_ids,
|
|
174
|
+
"allow_memory_view": allow_memory_view,
|
|
133
175
|
"tags": tags,
|
|
134
|
-
"
|
|
176
|
+
"async_mode": async_mode,
|
|
135
177
|
}
|
|
136
178
|
for retry in range(MAX_RETRY_COUNT):
|
|
137
179
|
try:
|
|
@@ -150,8 +192,9 @@ class MemOSClient:
|
|
|
150
192
|
def search_memory(
|
|
151
193
|
self,
|
|
152
194
|
query: str,
|
|
153
|
-
user_id: str,
|
|
154
|
-
conversation_id: str,
|
|
195
|
+
user_id: str | None = None,
|
|
196
|
+
conversation_id: str | None = None,
|
|
197
|
+
agent_id: str | None = None,
|
|
155
198
|
memory_limit_number: int = 6,
|
|
156
199
|
include_preference: bool = True,
|
|
157
200
|
knowledgebase_ids: list[str] | None = None,
|
|
@@ -160,22 +203,34 @@ class MemOSClient:
|
|
|
160
203
|
include_tool_memory: bool = False,
|
|
161
204
|
preference_limit_number: int = 6,
|
|
162
205
|
tool_memory_limit_number: int = 6,
|
|
206
|
+
relativity: float | None = None,
|
|
207
|
+
include_skill: bool = False,
|
|
208
|
+
skill_limit_number: int = 6,
|
|
209
|
+
include_memory_view: list[str] | None = None,
|
|
210
|
+
context_format: str = "memory",
|
|
163
211
|
) -> MemOSSearchResponse | None:
|
|
164
212
|
"""Search memories"""
|
|
165
213
|
# Validate required parameters
|
|
166
|
-
self._validate_required_params(query=query
|
|
214
|
+
self._validate_required_params(query=query)
|
|
215
|
+
self._validate_profile_subject(user_id, agent_id)
|
|
167
216
|
|
|
168
217
|
url = f"{self.base_url}/search/memory"
|
|
169
218
|
payload = {
|
|
170
219
|
"query": query,
|
|
171
220
|
"user_id": user_id,
|
|
172
221
|
"conversation_id": conversation_id,
|
|
222
|
+
"agent_id": agent_id,
|
|
173
223
|
"memory_limit_number": memory_limit_number,
|
|
174
224
|
"include_preference": include_preference,
|
|
175
225
|
"knowledgebase_ids": knowledgebase_ids,
|
|
176
226
|
"filter": filter,
|
|
177
227
|
"preference_limit_number": preference_limit_number,
|
|
178
228
|
"tool_memory_limit_number": tool_memory_limit_number,
|
|
229
|
+
"relativity": relativity,
|
|
230
|
+
"include_skill": include_skill,
|
|
231
|
+
"skill_limit_number": skill_limit_number,
|
|
232
|
+
"include_memory_view": include_memory_view,
|
|
233
|
+
"context_format": context_format,
|
|
179
234
|
"source": source,
|
|
180
235
|
"include_tool_memory": include_tool_memory,
|
|
181
236
|
}
|
|
@@ -195,16 +250,30 @@ class MemOSClient:
|
|
|
195
250
|
raise
|
|
196
251
|
|
|
197
252
|
def get_memory(
|
|
198
|
-
self,
|
|
253
|
+
self,
|
|
254
|
+
user_id: str | None = None,
|
|
255
|
+
include_preference: bool = True,
|
|
256
|
+
page: int = 1,
|
|
257
|
+
size: int = 10,
|
|
258
|
+
agent_id: str | None = None,
|
|
259
|
+
include_tool_memory: bool = True,
|
|
260
|
+
include_memory_view: list[str] | None = None,
|
|
261
|
+
filter: dict[str, Any] | None = None,
|
|
199
262
|
) -> MemOSGetMemoryResponse | None:
|
|
200
263
|
"""get memories"""
|
|
201
264
|
# Validate required parameters
|
|
202
|
-
self.
|
|
265
|
+
self._validate_profile_subject(user_id, agent_id)
|
|
266
|
+
if size > 50:
|
|
267
|
+
raise ValueError("size must be less than or equal to 50")
|
|
203
268
|
|
|
204
269
|
url = f"{self.base_url}/get/memory"
|
|
205
270
|
payload = {
|
|
206
271
|
"include_preference": include_preference,
|
|
207
272
|
"user_id": user_id,
|
|
273
|
+
"agent_id": agent_id,
|
|
274
|
+
"include_tool_memory": include_tool_memory,
|
|
275
|
+
"include_memory_view": include_memory_view,
|
|
276
|
+
"filter": filter,
|
|
208
277
|
"page": page,
|
|
209
278
|
"size": size,
|
|
210
279
|
}
|
|
@@ -223,17 +292,47 @@ class MemOSClient:
|
|
|
223
292
|
if retry == MAX_RETRY_COUNT - 1:
|
|
224
293
|
raise
|
|
225
294
|
|
|
295
|
+
@staticmethod
|
|
296
|
+
def _iter_sse_data(response: requests.Response) -> Iterator[str]:
|
|
297
|
+
"""Yield decoded data payloads from a Server-Sent Events response."""
|
|
298
|
+
try:
|
|
299
|
+
for line in response.iter_lines(decode_unicode=True):
|
|
300
|
+
if isinstance(line, bytes):
|
|
301
|
+
line = line.decode("utf-8")
|
|
302
|
+
if not line or not line.startswith("data:"):
|
|
303
|
+
continue
|
|
304
|
+
yield line.removeprefix("data:").lstrip()
|
|
305
|
+
finally:
|
|
306
|
+
response.close()
|
|
307
|
+
|
|
308
|
+
def get_memory_by_id(self, memid: str) -> dict[str, Any] | None:
|
|
309
|
+
"""Get one memory detail by its memory ID."""
|
|
310
|
+
self._validate_required_params(memid=memid)
|
|
311
|
+
|
|
312
|
+
url = f"{self.base_url}/get/memory/{quote(memid, safe='')}"
|
|
313
|
+
for retry in range(MAX_RETRY_COUNT):
|
|
314
|
+
try:
|
|
315
|
+
response = requests.get(url, headers=self.headers, timeout=30)
|
|
316
|
+
response.raise_for_status()
|
|
317
|
+
return response.json()
|
|
318
|
+
except Exception as e:
|
|
319
|
+
logger.error(
|
|
320
|
+
"Failed to get memory by ID (retry %s/%s): %s",
|
|
321
|
+
retry + 1,
|
|
322
|
+
MAX_RETRY_COUNT,
|
|
323
|
+
e,
|
|
324
|
+
)
|
|
325
|
+
if retry == MAX_RETRY_COUNT - 1:
|
|
326
|
+
raise
|
|
327
|
+
|
|
226
328
|
def create_knowledgebase(
|
|
227
|
-
self, knowledgebase_name: str, knowledgebase_description: str
|
|
329
|
+
self, knowledgebase_name: str, knowledgebase_description: str | None = None
|
|
228
330
|
) -> MemOSCreateKnowledgebaseResponse | None:
|
|
229
331
|
"""
|
|
230
332
|
Create knowledgebase
|
|
231
333
|
"""
|
|
232
334
|
# Validate required parameters
|
|
233
|
-
self._validate_required_params(
|
|
234
|
-
knowledgebase_name=knowledgebase_name,
|
|
235
|
-
knowledgebase_description=knowledgebase_description,
|
|
236
|
-
)
|
|
335
|
+
self._validate_required_params(knowledgebase_name=knowledgebase_name)
|
|
237
336
|
|
|
238
337
|
url = f"{self.base_url}/create/knowledgebase"
|
|
239
338
|
payload = {
|
|
@@ -313,7 +412,7 @@ class MemOSClient:
|
|
|
313
412
|
raise
|
|
314
413
|
|
|
315
414
|
def add_knowledgebase_file_form(
|
|
316
|
-
self, knowledgebase_id: str, files: list[str]
|
|
415
|
+
self, knowledgebase_id: str, files: list[str], type: str | None = None
|
|
317
416
|
) -> MemOSAddKnowledgebaseFileResponse | None:
|
|
318
417
|
"""
|
|
319
418
|
add knowledgebase-file from form
|
|
@@ -321,12 +420,12 @@ class MemOSClient:
|
|
|
321
420
|
# Validate required parameters
|
|
322
421
|
self._validate_required_params(knowledgebase_id=knowledgebase_id, files=files)
|
|
323
422
|
|
|
324
|
-
def build_file_form_param(file_path):
|
|
423
|
+
def build_file_form_param(file_path: str):
|
|
325
424
|
"""
|
|
326
425
|
form-Automatically generate the structure required for the `files` parameter in requests based on the local file path
|
|
327
426
|
"""
|
|
328
427
|
if not os.path.isfile(file_path):
|
|
329
|
-
logger.warning(
|
|
428
|
+
logger.warning("File %s does not exist", file_path)
|
|
330
429
|
return None
|
|
331
430
|
filename = os.path.basename(file_path)
|
|
332
431
|
|
|
@@ -335,31 +434,47 @@ class MemOSClient:
|
|
|
335
434
|
mime_type = "application/octet-stream"
|
|
336
435
|
return ("file", (filename, open(file_path, "rb"), mime_type))
|
|
337
436
|
|
|
437
|
+
def build_file_form_params() -> list:
|
|
438
|
+
file_params = [
|
|
439
|
+
file_param
|
|
440
|
+
for file_path in files
|
|
441
|
+
if (file_param := build_file_form_param(file_path)) is not None
|
|
442
|
+
]
|
|
443
|
+
if not file_params:
|
|
444
|
+
raise ValueError("files must contain at least one valid file path")
|
|
445
|
+
return file_params
|
|
446
|
+
|
|
338
447
|
url = f"{self.base_url}/add/knowledgebase-file"
|
|
339
448
|
payload = {
|
|
340
449
|
"knowledgebase_id": knowledgebase_id,
|
|
341
450
|
}
|
|
451
|
+
if type is not None:
|
|
452
|
+
payload["type"] = type
|
|
342
453
|
headers = {
|
|
343
454
|
"Authorization": f"Token {self.api_key}",
|
|
344
455
|
}
|
|
345
456
|
for retry in range(MAX_RETRY_COUNT):
|
|
457
|
+
file_params = []
|
|
346
458
|
try:
|
|
459
|
+
file_params = build_file_form_params()
|
|
347
460
|
response = requests.post(
|
|
348
461
|
url,
|
|
349
462
|
params=payload,
|
|
350
463
|
headers=headers,
|
|
351
464
|
timeout=30,
|
|
352
|
-
files=
|
|
465
|
+
files=file_params,
|
|
353
466
|
)
|
|
354
467
|
response.raise_for_status()
|
|
355
468
|
response_data = response.json()
|
|
356
|
-
print(response_data)
|
|
357
469
|
|
|
358
470
|
return MemOSAddKnowledgebaseFileResponse(**response_data)
|
|
359
471
|
except Exception as e:
|
|
360
472
|
logger.error(f"Failed to add knowledgebase-file form (retry {retry + 1}/3): {e}")
|
|
361
473
|
if retry == MAX_RETRY_COUNT - 1:
|
|
362
474
|
raise
|
|
475
|
+
finally:
|
|
476
|
+
for file_param in file_params:
|
|
477
|
+
file_param[1][1].close()
|
|
363
478
|
|
|
364
479
|
def delete_knowledgebase_file(
|
|
365
480
|
self, file_ids: list[str]
|
|
@@ -390,17 +505,27 @@ class MemOSClient:
|
|
|
390
505
|
raise
|
|
391
506
|
|
|
392
507
|
def get_knowledgebase_file(
|
|
393
|
-
self,
|
|
508
|
+
self,
|
|
509
|
+
file_ids: list[str] | None = None,
|
|
510
|
+
knowledgebase_id: str | None = None,
|
|
511
|
+
type: str | None = None,
|
|
512
|
+
page: int | None = None,
|
|
513
|
+
page_size: int | None = None,
|
|
394
514
|
) -> MemOSGetKnowledgebaseFileResponse | None:
|
|
395
515
|
"""
|
|
396
516
|
get knowledgebase-file
|
|
397
517
|
"""
|
|
398
518
|
# Validate required parameters
|
|
399
|
-
|
|
519
|
+
if bool(file_ids) == bool(knowledgebase_id):
|
|
520
|
+
raise ValueError("exactly one of file_ids or knowledgebase_id is required")
|
|
400
521
|
|
|
401
522
|
url = f"{self.base_url}/get/knowledgebase-file"
|
|
402
523
|
payload = {
|
|
403
524
|
"file_ids": file_ids,
|
|
525
|
+
"knowledgebase_id": knowledgebase_id,
|
|
526
|
+
"type": type,
|
|
527
|
+
"page": page,
|
|
528
|
+
"page_size": page_size,
|
|
404
529
|
}
|
|
405
530
|
|
|
406
531
|
for retry in range(MAX_RETRY_COUNT):
|
|
@@ -436,6 +561,7 @@ class MemOSClient:
|
|
|
436
561
|
)
|
|
437
562
|
response.raise_for_status()
|
|
438
563
|
response_data = response.json()
|
|
564
|
+
response_data = self._normalize_task_status_response(response_data, task_id)
|
|
439
565
|
|
|
440
566
|
return MemOSGetTaskStatusResponse(**response_data)
|
|
441
567
|
except Exception as e:
|
|
@@ -446,8 +572,8 @@ class MemOSClient:
|
|
|
446
572
|
def add_feedback(
|
|
447
573
|
self,
|
|
448
574
|
user_id: str,
|
|
449
|
-
conversation_id: str,
|
|
450
|
-
feedback_content: str,
|
|
575
|
+
conversation_id: str | None = None,
|
|
576
|
+
feedback_content: str | None = None,
|
|
451
577
|
agent_id: str | None = None,
|
|
452
578
|
app_id: str | None = None,
|
|
453
579
|
feedback_time: str | None = None,
|
|
@@ -456,9 +582,7 @@ class MemOSClient:
|
|
|
456
582
|
) -> MemOSAddFeedBackResponse | None:
|
|
457
583
|
"""Add feedback"""
|
|
458
584
|
# Validate required parameters
|
|
459
|
-
self._validate_required_params(
|
|
460
|
-
feedback_content=feedback_content, user_id=user_id, conversation_id=conversation_id
|
|
461
|
-
)
|
|
585
|
+
self._validate_required_params(feedback_content=feedback_content, user_id=user_id)
|
|
462
586
|
|
|
463
587
|
url = f"{self.base_url}/add/feedback"
|
|
464
588
|
payload = {
|
|
@@ -486,17 +610,43 @@ class MemOSClient:
|
|
|
486
610
|
raise
|
|
487
611
|
|
|
488
612
|
def delete_memory(
|
|
489
|
-
self,
|
|
613
|
+
self,
|
|
614
|
+
user_ids: list[str] | None = None,
|
|
615
|
+
memory_ids: list[str] | None = None,
|
|
616
|
+
*,
|
|
617
|
+
user_id: str | None = None,
|
|
618
|
+
agent_id: str | None = None,
|
|
619
|
+
filter: dict[str, Any] | None = None,
|
|
620
|
+
memory_type: str | None = None,
|
|
490
621
|
) -> MemOSDeleteMemoryResponse | None:
|
|
491
622
|
"""delete_memory memories"""
|
|
492
|
-
|
|
493
|
-
|
|
623
|
+
if user_id is None and user_ids:
|
|
624
|
+
if len(user_ids) != 1 and not memory_ids:
|
|
625
|
+
raise ValueError("current API supports a single user_id, not multiple user_ids")
|
|
626
|
+
if not memory_ids:
|
|
627
|
+
user_id = user_ids[0]
|
|
628
|
+
|
|
629
|
+
delete_modes = [
|
|
630
|
+
bool(memory_ids),
|
|
631
|
+
bool(user_id),
|
|
632
|
+
bool(agent_id),
|
|
633
|
+
filter is not None,
|
|
634
|
+
]
|
|
635
|
+
if sum(delete_modes) != 1:
|
|
636
|
+
raise ValueError("exactly one delete condition is required")
|
|
494
637
|
|
|
495
638
|
url = f"{self.base_url}/delete/memory"
|
|
496
|
-
payload = {
|
|
497
|
-
|
|
498
|
-
"memory_ids"
|
|
499
|
-
|
|
639
|
+
payload: dict[str, Any] = {}
|
|
640
|
+
if memory_ids:
|
|
641
|
+
payload["memory_ids"] = memory_ids
|
|
642
|
+
if user_id:
|
|
643
|
+
payload["user_id"] = user_id
|
|
644
|
+
if agent_id:
|
|
645
|
+
payload["agent_id"] = agent_id
|
|
646
|
+
if filter is not None:
|
|
647
|
+
payload["filter"] = filter
|
|
648
|
+
if memory_type is not None:
|
|
649
|
+
payload["memory_type"] = memory_type
|
|
500
650
|
|
|
501
651
|
for retry in range(MAX_RETRY_COUNT):
|
|
502
652
|
try:
|
|
@@ -512,6 +662,111 @@ class MemOSClient:
|
|
|
512
662
|
if retry == MAX_RETRY_COUNT - 1:
|
|
513
663
|
raise
|
|
514
664
|
|
|
665
|
+
def update_memory(
|
|
666
|
+
self,
|
|
667
|
+
memory_id: str,
|
|
668
|
+
content: str | None = None,
|
|
669
|
+
title: str | None = None,
|
|
670
|
+
status: str | None = None,
|
|
671
|
+
) -> dict[str, Any] | None:
|
|
672
|
+
"""Update an existing memory."""
|
|
673
|
+
self._validate_required_params(memory_id=memory_id)
|
|
674
|
+
if not content and not title and not status:
|
|
675
|
+
raise ValueError("content, title or status is required")
|
|
676
|
+
|
|
677
|
+
payload = {
|
|
678
|
+
"memory_id": memory_id,
|
|
679
|
+
"content": content,
|
|
680
|
+
"title": title,
|
|
681
|
+
"status": status,
|
|
682
|
+
}
|
|
683
|
+
return self._post_json_dict("update/memory", payload, "update memory")
|
|
684
|
+
|
|
685
|
+
def extract_memory(
|
|
686
|
+
self,
|
|
687
|
+
messages: list[dict[str, Any]],
|
|
688
|
+
extraction_types: list[str] | None = None,
|
|
689
|
+
model: str | None = None,
|
|
690
|
+
) -> dict[str, Any] | None:
|
|
691
|
+
"""Extract memory candidates from conversation messages."""
|
|
692
|
+
self._validate_required_params(messages=messages)
|
|
693
|
+
|
|
694
|
+
payload = {
|
|
695
|
+
"messages": messages,
|
|
696
|
+
"extraction_types": extraction_types,
|
|
697
|
+
"model": model,
|
|
698
|
+
}
|
|
699
|
+
return self._post_json_dict("extract/memory", payload, "extract memory")
|
|
700
|
+
|
|
701
|
+
def rerank(
|
|
702
|
+
self,
|
|
703
|
+
query: str,
|
|
704
|
+
documents: list[str],
|
|
705
|
+
model: str | None = None,
|
|
706
|
+
top_n: int | None = None,
|
|
707
|
+
) -> dict[str, Any] | None:
|
|
708
|
+
"""Rerank documents for a query."""
|
|
709
|
+
self._validate_required_params(query=query, documents=documents)
|
|
710
|
+
if top_n is not None and top_n <= 0:
|
|
711
|
+
raise ValueError("top_n must be greater than 0")
|
|
712
|
+
|
|
713
|
+
payload = {
|
|
714
|
+
"query": query,
|
|
715
|
+
"documents": documents,
|
|
716
|
+
"model": model,
|
|
717
|
+
"top_n": top_n,
|
|
718
|
+
}
|
|
719
|
+
return self._post_json_dict("rerank", payload, "rerank documents")
|
|
720
|
+
|
|
721
|
+
def bind_profile_template(self, bind_list: list[dict[str, Any]]) -> dict[str, Any] | None:
|
|
722
|
+
"""Bind profile templates to user or agent subjects."""
|
|
723
|
+
self._validate_required_params(bind_list=bind_list)
|
|
724
|
+
|
|
725
|
+
payload = {
|
|
726
|
+
"bind_list": bind_list,
|
|
727
|
+
}
|
|
728
|
+
return self._post_json_dict("bind/profile_template", payload, "bind profile template")
|
|
729
|
+
|
|
730
|
+
def edit_profile(
|
|
731
|
+
self,
|
|
732
|
+
profile_template_id: str,
|
|
733
|
+
user_id: str | None = None,
|
|
734
|
+
agent_id: str | None = None,
|
|
735
|
+
metadata: dict[str, Any] | None = None,
|
|
736
|
+
remove_fields: list[str] | None = None,
|
|
737
|
+
) -> dict[str, Any] | None:
|
|
738
|
+
"""Edit a profile instance."""
|
|
739
|
+
self._validate_required_params(profile_template_id=profile_template_id)
|
|
740
|
+
self._validate_profile_subject(user_id, agent_id)
|
|
741
|
+
if metadata is None and not remove_fields:
|
|
742
|
+
raise ValueError("metadata or remove_fields is required")
|
|
743
|
+
|
|
744
|
+
payload = {
|
|
745
|
+
"user_id": user_id,
|
|
746
|
+
"agent_id": agent_id,
|
|
747
|
+
"profile_template_id": profile_template_id,
|
|
748
|
+
"metadata": metadata,
|
|
749
|
+
"remove_fields": remove_fields,
|
|
750
|
+
}
|
|
751
|
+
return self._post_json_dict("edit/profile", payload, "edit profile")
|
|
752
|
+
|
|
753
|
+
def delete_profile(
|
|
754
|
+
self,
|
|
755
|
+
profile_template_id: str,
|
|
756
|
+
user_id: str | None = None,
|
|
757
|
+
agent_id: str | None = None,
|
|
758
|
+
) -> dict[str, Any] | None:
|
|
759
|
+
"""Delete a profile instance."""
|
|
760
|
+
self._validate_required_params(profile_template_id=profile_template_id)
|
|
761
|
+
self._validate_profile_subject(user_id, agent_id)
|
|
762
|
+
|
|
763
|
+
payload = {
|
|
764
|
+
"user_id": user_id,
|
|
765
|
+
"agent_id": agent_id,
|
|
766
|
+
"profile_template_id": profile_template_id,
|
|
767
|
+
}
|
|
768
|
+
return self._post_json_dict("delete/profile", payload, "delete profile")
|
|
769
|
+
|
|
515
770
|
def chat(
|
|
516
771
|
self,
|
|
517
772
|
user_id: str,
|
|
@@ -524,21 +779,26 @@ class MemOSClient:
|
|
|
524
779
|
system_prompt: str | None = None,
|
|
525
780
|
model_name: str | None = None,
|
|
526
781
|
knowledgebase_ids: list[str] | None = None,
|
|
527
|
-
filter: dict[str
|
|
528
|
-
add_message_on_answer: bool =
|
|
782
|
+
filter: dict[str, Any] | None = None,
|
|
783
|
+
add_message_on_answer: bool = True,
|
|
529
784
|
app_id: str | None = None,
|
|
530
785
|
agent_id: str | None = None,
|
|
531
786
|
async_mode: bool = True,
|
|
532
787
|
tags: list[str] | None = None,
|
|
533
|
-
info: dict[str
|
|
788
|
+
info: dict[str, Any] | None = None,
|
|
534
789
|
allow_public: bool = False,
|
|
790
|
+
allow_knowledgebase_ids: list[str] | None = None,
|
|
535
791
|
max_tokens: int = 8192,
|
|
536
|
-
temperature: float | None =
|
|
537
|
-
top_p: float | None =
|
|
792
|
+
temperature: float | None = 0.7,
|
|
793
|
+
top_p: float | None = 0.95,
|
|
538
794
|
include_preference: bool = True,
|
|
539
795
|
preference_limit_number: int = 6,
|
|
540
796
|
memory_limit_number: int = 6,
|
|
541
|
-
|
|
797
|
+
stream: bool = False,
|
|
798
|
+
include_tool_memory: bool = False,
|
|
799
|
+
tool_memory_limit_number: int = 6,
|
|
800
|
+
relativity: float | None = None,
|
|
801
|
+
) -> MemOSChatResponse | Iterator[str] | None:
|
|
542
802
|
"""chat"""
|
|
543
803
|
# Validate required parameters
|
|
544
804
|
self._validate_required_params(
|
|
@@ -565,20 +825,31 @@ class MemOSClient:
|
|
|
565
825
|
"tags": tags,
|
|
566
826
|
"info": info,
|
|
567
827
|
"allow_public": allow_public,
|
|
828
|
+
"allow_knowledgebase_ids": allow_knowledgebase_ids,
|
|
568
829
|
"max_tokens": max_tokens,
|
|
569
830
|
"temperature": temperature,
|
|
570
831
|
"top_p": top_p,
|
|
571
832
|
"include_preference": include_preference,
|
|
572
833
|
"preference_limit_number": preference_limit_number,
|
|
573
834
|
"memory_limit_number": memory_limit_number,
|
|
835
|
+
"stream": stream,
|
|
836
|
+
"include_tool_memory": include_tool_memory,
|
|
837
|
+
"tool_memory_limit_number": tool_memory_limit_number,
|
|
838
|
+
"relativity": relativity,
|
|
574
839
|
}
|
|
575
840
|
|
|
576
841
|
for retry in range(MAX_RETRY_COUNT):
|
|
577
842
|
try:
|
|
578
843
|
response = requests.post(
|
|
579
|
-
url,
|
|
844
|
+
url,
|
|
845
|
+
data=json.dumps(payload),
|
|
846
|
+
headers=self.headers,
|
|
847
|
+
timeout=30,
|
|
848
|
+
stream=stream,
|
|
580
849
|
)
|
|
581
850
|
response.raise_for_status()
|
|
851
|
+
if stream:
|
|
852
|
+
return self._iter_sse_data(response)
|
|
582
853
|
response_data = response.json()
|
|
583
854
|
|
|
584
855
|
return MemOSChatResponse(**response_data)
|