MemoryOS 2.0.12__tar.gz → 2.0.14__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.12 → memoryos-2.0.14}/PKG-INFO +1 -1
- {memoryos-2.0.12 → memoryos-2.0.14}/pyproject.toml +1 -1
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/__init__.py +1 -1
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/config.py +26 -2
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/handlers/add_handler.py +2 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/handlers/component_init.py +26 -7
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/handlers/formatters_handler.py +1 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/server_api.py +10 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/chunkers/sentence_chunker.py +1 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/mem_reader.py +8 -1
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/graph_dbs/polardb.py +6 -20
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_feedback/feedback.py +134 -30
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_os/utils/format_utils.py +13 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/multi_modal_struct.py +189 -215
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/simple_struct.py +10 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/base_mixins/queue_ops.py +24 -1
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/general_modules/init_components_for_scheduler.py +31 -1
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/schemas/task_schemas.py +21 -2
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/task_schedule_modules/dispatcher.py +12 -3
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_read_handler.py +69 -41
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/task_schedule_modules/local_queue.py +23 -7
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/task_schedule_modules/redis_queue.py +131 -41
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/task_schedule_modules/task_queue.py +38 -15
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/item.py +11 -7
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree.py +38 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/organize/manager.py +8 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/multi_mem_cube/composite_cube.py +13 -7
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/multi_mem_cube/single_cube.py +124 -78
- memoryos-2.0.14/src/memos/plugins/__init__.py +20 -0
- memoryos-2.0.14/src/memos/plugins/base.py +75 -0
- memoryos-2.0.14/src/memos/plugins/component_bootstrap.py +30 -0
- memoryos-2.0.14/src/memos/plugins/hook_defs.py +132 -0
- memoryos-2.0.14/src/memos/plugins/hooks.py +150 -0
- memoryos-2.0.14/src/memos/plugins/manager.py +90 -0
- memoryos-2.0.14/src/memos/search/__init__.py +14 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/search/search_service.py +29 -0
- memoryos-2.0.14/src/memos/utils.py +249 -0
- memoryos-2.0.12/src/memos/extras/nli_model/client.py +0 -61
- memoryos-2.0.12/src/memos/extras/nli_model/server/README.md +0 -69
- memoryos-2.0.12/src/memos/extras/nli_model/server/config.py +0 -23
- memoryos-2.0.12/src/memos/extras/nli_model/server/handler.py +0 -186
- memoryos-2.0.12/src/memos/extras/nli_model/server/serve.py +0 -44
- memoryos-2.0.12/src/memos/extras/nli_model/types.py +0 -18
- memoryos-2.0.12/src/memos/memories/textual/tree_text_memory/organize/history_manager.py +0 -168
- memoryos-2.0.12/src/memos/memories/textual/tree_text_memory/retrieve/pre_update.py +0 -264
- memoryos-2.0.12/src/memos/search/__init__.py +0 -4
- memoryos-2.0.12/src/memos/templates/__init__.py +0 -0
- memoryos-2.0.12/src/memos/utils.py +0 -123
- memoryos-2.0.12/src/memos/vec_dbs/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/LICENSE +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/README.md +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/README_api.md +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/client.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/context/dependencies.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/exceptions.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/handlers/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/handlers/base_handler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/handlers/chat_handler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/handlers/config_builders.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/handlers/feedback_handler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/handlers/memory_handler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/handlers/scheduler_handler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/handlers/search_handler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/handlers/suggestion_handler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/mcp_serve.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/middleware/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/middleware/auth.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/middleware/rate_limit.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/middleware/request_context.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/product_models.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/routers/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/routers/admin_router.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/routers/server_router.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/server_api_ext.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/utils/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/api/utils/api_keys.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/chunkers/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/chunkers/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/chunkers/charactertext_chunker.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/chunkers/factory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/chunkers/markdown_chunker.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/chunkers/simple_chunker.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/cli.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/chunker.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/embedder.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/graph_db.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/internet_retriever.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/llm.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/mem_agent.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/mem_chat.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/mem_cube.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/mem_os.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/mem_scheduler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/mem_user.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/memory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/parser.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/reranker.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/utils.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/configs/vec_db.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/context/context.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/dependency.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/deprecation.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/embedders/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/embedders/ark.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/embedders/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/embedders/factory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/embedders/ollama.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/embedders/sentence_transformer.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/embedders/universal_api.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/exceptions.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/extras/__init__.py +0 -0
- {memoryos-2.0.12/src/memos/extras/nli_model → memoryos-2.0.14/src/memos/graph_dbs}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/graph_dbs/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/graph_dbs/factory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/graph_dbs/item.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/graph_dbs/neo4j.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/graph_dbs/neo4j_community.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/graph_dbs/postgres.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/hello_world.py +0 -0
- {memoryos-2.0.12/src/memos/extras/nli_model/server → memoryos-2.0.14/src/memos/llms}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/llms/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/llms/deepseek.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/llms/factory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/llms/hf.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/llms/hf_singleton.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/llms/minimax.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/llms/ollama.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/llms/openai.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/llms/openai_new.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/llms/qwen.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/llms/utils.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/llms/vllm.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/log.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_agent/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_agent/deepsearch_agent.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_agent/factory.py +0 -0
- {memoryos-2.0.12/src/memos/graph_dbs → memoryos-2.0.14/src/memos/mem_chat}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_chat/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_chat/factory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_chat/simple.py +0 -0
- {memoryos-2.0.12/src/memos/llms → memoryos-2.0.14/src/memos/mem_cube}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_cube/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_cube/general.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_cube/navie.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_cube/utils.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_feedback/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_feedback/simple_feedback.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_feedback/utils.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_os/core.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_os/main.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_os/utils/default_config.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_os/utils/reference_utils.py +0 -0
- {memoryos-2.0.12/src/memos/mem_chat → memoryos-2.0.14/src/memos/mem_reader}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/factory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/memory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/read_multi_modal/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/read_multi_modal/assistant_parser.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/read_multi_modal/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/read_multi_modal/file_content_parser.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/read_multi_modal/image_parser.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/read_multi_modal/multi_modal_parser.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/read_multi_modal/string_parser.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/read_multi_modal/system_parser.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/read_multi_modal/text_content_parser.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/read_multi_modal/tool_parser.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/read_multi_modal/user_parser.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/read_multi_modal/utils.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/read_pref_memory/process_preference_memory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/read_skill_memory/process_skill_memory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/strategy_struct.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_reader/utils.py +0 -0
- {memoryos-2.0.12/src/memos/mem_cube → memoryos-2.0.14/src/memos/mem_scheduler}/__init__.py +0 -0
- {memoryos-2.0.12/src/memos/mem_reader → memoryos-2.0.14/src/memos/mem_scheduler/analyzer}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/analyzer/api_analyzer.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/analyzer/eval_analyzer.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/analyzer/mos_for_test_scheduler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/analyzer/scheduler_for_eval.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/base_mixins/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/base_mixins/memory_ops.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/base_mixins/web_log_ops.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/base_scheduler.py +0 -0
- {memoryos-2.0.12/src/memos/mem_scheduler → memoryos-2.0.14/src/memos/mem_scheduler/general_modules}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/general_modules/api_misc.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/general_modules/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/general_modules/misc.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/general_modules/scheduler_logger.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/general_modules/task_threads.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/general_scheduler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/memory_manage_modules/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/memory_manage_modules/activation_memory_manager.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/memory_manage_modules/enhancement_pipeline.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/memory_manage_modules/filter_pipeline.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/memory_manage_modules/memory_filter.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/memory_manage_modules/post_processor.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/memory_manage_modules/rerank_pipeline.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/memory_manage_modules/retriever.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/memory_manage_modules/search_pipeline.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/memory_manage_modules/search_service.py +0 -0
- {memoryos-2.0.12/src/memos/mem_scheduler/analyzer → memoryos-2.0.14/src/memos/mem_scheduler/monitors}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/monitors/dispatcher_monitor.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/monitors/general_monitor.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/monitors/task_schedule_monitor.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/optimized_scheduler.py +0 -0
- {memoryos-2.0.12/src/memos/mem_scheduler/general_modules → memoryos-2.0.14/src/memos/mem_scheduler/orm_modules}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/orm_modules/api_redis_model.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/orm_modules/base_model.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/orm_modules/monitor_models.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/orm_modules/redis_model.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/scheduler_factory.py +0 -0
- {memoryos-2.0.12/src/memos/mem_scheduler/monitors → memoryos-2.0.14/src/memos/mem_scheduler/schemas}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/schemas/analyzer_schemas.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/schemas/api_schemas.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/schemas/general_schemas.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/schemas/message_schemas.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/schemas/monitor_schemas.py +0 -0
- {memoryos-2.0.12/src/memos/mem_scheduler/orm_modules → memoryos-2.0.14/src/memos/mem_scheduler/task_schedule_modules}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/task_schedule_modules/base_handler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/task_schedule_modules/context.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/task_schedule_modules/handlers/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/task_schedule_modules/handlers/add_handler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/task_schedule_modules/handlers/answer_handler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/task_schedule_modules/handlers/feedback_handler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_reorganize_handler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/task_schedule_modules/handlers/memory_update_handler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/task_schedule_modules/handlers/pref_add_handler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/task_schedule_modules/handlers/query_handler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/task_schedule_modules/orchestrator.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/task_schedule_modules/registry.py +0 -0
- {memoryos-2.0.12/src/memos/mem_scheduler/schemas → memoryos-2.0.14/src/memos/mem_scheduler/utils}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/utils/api_utils.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/utils/config_utils.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/utils/db_utils.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/utils/filter_utils.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/utils/metrics.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/utils/misc_utils.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/utils/monitor_event_utils.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/utils/status_tracker.py +0 -0
- {memoryos-2.0.12/src/memos/mem_scheduler/task_schedule_modules → memoryos-2.0.14/src/memos/mem_scheduler/webservice_modules}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/webservice_modules/rabbitmq_service.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_scheduler/webservice_modules/redis_service.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_user/factory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_user/mysql_persistent_user_manager.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_user/mysql_user_manager.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_user/persistent_factory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_user/persistent_user_manager.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_user/redis_persistent_user_manager.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/mem_user/user_manager.py +0 -0
- {memoryos-2.0.12/src/memos/mem_scheduler/utils → memoryos-2.0.14/src/memos/memories}/__init__.py +0 -0
- {memoryos-2.0.12/src/memos/mem_scheduler/webservice_modules → memoryos-2.0.14/src/memos/memories/activation}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/activation/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/activation/item.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/activation/kv.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/activation/vllmkv.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/factory.py +0 -0
- {memoryos-2.0.12/src/memos/memories → memoryos-2.0.14/src/memos/memories/parametric}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/parametric/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/parametric/item.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/parametric/lora.py +0 -0
- {memoryos-2.0.12/src/memos/memories/activation → memoryos-2.0.14/src/memos/memories/textual}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/general.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/naive.py +0 -0
- {memoryos-2.0.12/src/memos/memories/parametric → memoryos-2.0.14/src/memos/memories/textual/prefer_text_memory}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/prefer_text_memory/adder.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/prefer_text_memory/config.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/prefer_text_memory/extractor.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/prefer_text_memory/factory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/prefer_text_memory/retrievers.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/prefer_text_memory/spliter.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/prefer_text_memory/utils.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/preference.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/simple_preference.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/simple_tree.py +0 -0
- {memoryos-2.0.12/src/memos/memories/textual → memoryos-2.0.14/src/memos/memories/textual/tree_text_memory}/__init__.py +0 -0
- {memoryos-2.0.12/src/memos/memories/textual/prefer_text_memory → memoryos-2.0.14/src/memos/memories/textual/tree_text_memory/organize}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/organize/handler.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/organize/relation_reason_detector.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/organize/reorganizer.py +0 -0
- {memoryos-2.0.12/src/memos/memories/textual/tree_text_memory → memoryos-2.0.14/src/memos/memories/textual/tree_text_memory/retrieve}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/retrieve/advanced_searcher.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/retrieve/bm25_util.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/retrieve/bochasearch.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever_factory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/retrieve/reasoner.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/retrieve/recall.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/retrieve/reranker.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/retrieve/retrieval_mid_structs.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/retrieve/retrieve_utils.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/retrieve/searcher.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/retrieve/task_goal_parser.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/retrieve/tavilysearch.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/retrieve/utils.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memories/textual/tree_text_memory/retrieve/xinyusearch.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memos_tools/dinding_report_bot.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memos_tools/lockfree_dict.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memos_tools/notification_service.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memos_tools/notification_utils.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memos_tools/singleton.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memos_tools/thread_safe_dict.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/memos_tools/thread_safe_dict_segment.py +0 -0
- {memoryos-2.0.12/src/memos/memories/textual/tree_text_memory/organize → memoryos-2.0.14/src/memos/multi_mem_cube}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/multi_mem_cube/views.py +0 -0
- {memoryos-2.0.12/src/memos/memories/textual/tree_text_memory/retrieve → memoryos-2.0.14/src/memos/parsers}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/parsers/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/parsers/factory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/parsers/markitdown.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/reranker/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/reranker/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/reranker/concat.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/reranker/cosine_local.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/reranker/factory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/reranker/http_bge.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/reranker/http_bge_strategy.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/reranker/noop.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/reranker/strategies/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/reranker/strategies/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/reranker/strategies/concat_background.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/reranker/strategies/concat_docsource.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/reranker/strategies/dialogue_common.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/reranker/strategies/factory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/reranker/strategies/single_turn.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/reranker/strategies/singleturn_outmem.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/settings.py +0 -0
- {memoryos-2.0.12/src/memos/multi_mem_cube → memoryos-2.0.14/src/memos/templates}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/templates/advanced_search_prompts.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/templates/cloud_service_prompt.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/templates/instruction_completion.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/templates/mem_agent_prompts.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/templates/mem_feedback_prompts.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/templates/mem_reader_prompts.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/templates/mem_reader_strategy_prompts.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/templates/mem_scheduler_prompts.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/templates/mem_search_prompts.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/templates/mos_prompts.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/templates/prefer_complete_prompt.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/templates/skill_mem_prompt.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/templates/tool_mem_prompts.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/templates/tree_reorganize_prompts.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/types/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/types/general_types.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/types/openai_chat_completion_types/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/types/openai_chat_completion_types/chat_completion_assistant_message_param.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_image_param.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_input_audio_param.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_param.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_refusal_param.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_text_param.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/types/openai_chat_completion_types/chat_completion_message_custom_tool_call_param.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/types/openai_chat_completion_types/chat_completion_message_function_tool_call_param.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/types/openai_chat_completion_types/chat_completion_message_param.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/types/openai_chat_completion_types/chat_completion_message_tool_call_union_param.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/types/openai_chat_completion_types/chat_completion_system_message_param.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/types/openai_chat_completion_types/chat_completion_tool_message_param.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/types/openai_chat_completion_types/chat_completion_user_message_param.py +0 -0
- {memoryos-2.0.12/src/memos/parsers → memoryos-2.0.14/src/memos/vec_dbs}/__init__.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/vec_dbs/base.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/vec_dbs/factory.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/vec_dbs/item.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/vec_dbs/milvus.py +0 -0
- {memoryos-2.0.12 → memoryos-2.0.14}/src/memos/vec_dbs/qdrant.py +0 -0
|
@@ -369,6 +369,26 @@ class APIConfig:
|
|
|
369
369
|
|
|
370
370
|
return {"backend": "openai", "config": config}
|
|
371
371
|
|
|
372
|
+
@staticmethod
|
|
373
|
+
def get_qwen_llm_config() -> dict[str, Any] | None:
|
|
374
|
+
if not os.getenv("QWEN_API_KEY"):
|
|
375
|
+
return None
|
|
376
|
+
return {
|
|
377
|
+
"backend": "qwen",
|
|
378
|
+
"config": {
|
|
379
|
+
"model_name_or_path": os.getenv("QWEN_MODEL", "qwen-flash"),
|
|
380
|
+
"temperature": float(os.getenv("QWEN_TEMPERATURE", "0.8")),
|
|
381
|
+
"max_tokens": int(os.getenv("QWEN_MAX_TOKENS", "8000")),
|
|
382
|
+
"top_p": float(os.getenv("QWEN_TOP_P", "0.9")),
|
|
383
|
+
"top_k": int(os.getenv("QWEN_TOP_K", "50")),
|
|
384
|
+
"remove_think_prefix": os.getenv("QWEN_REMOVE_THINK_PREFIX", "true").lower()
|
|
385
|
+
== "true",
|
|
386
|
+
"api_key": os.getenv("QWEN_API_KEY", ""),
|
|
387
|
+
"api_base": os.getenv("QWEN_API_BASE", ""),
|
|
388
|
+
"model_schema": os.getenv("QWEN_MODEL_SCHEMA", "memos.configs.llm.QwenLLMConfig"),
|
|
389
|
+
},
|
|
390
|
+
}
|
|
391
|
+
|
|
372
392
|
@staticmethod
|
|
373
393
|
def get_memreader_general_llm_config() -> dict[str, Any]:
|
|
374
394
|
"""Get general LLM configuration for non-chat/doc tasks.
|
|
@@ -639,6 +659,7 @@ class APIConfig:
|
|
|
639
659
|
|
|
640
660
|
return config
|
|
641
661
|
|
|
662
|
+
@staticmethod
|
|
642
663
|
def get_internet_config() -> dict[str, Any]:
|
|
643
664
|
"""Get internet retriever configuration.
|
|
644
665
|
|
|
@@ -705,8 +726,9 @@ class APIConfig:
|
|
|
705
726
|
|
|
706
727
|
@staticmethod
|
|
707
728
|
def get_nli_config() -> dict[str, Any]:
|
|
708
|
-
"""Get
|
|
729
|
+
"""Get relation-judge configuration for memory-version candidate matching."""
|
|
709
730
|
return {
|
|
731
|
+
"provider": os.getenv("MEM_VERSION_RELATION_JUDGE_PROVIDER", "llm"),
|
|
710
732
|
"base_url": os.getenv("NLI_MODEL_BASE_URL", "http://localhost:32532"),
|
|
711
733
|
}
|
|
712
734
|
|
|
@@ -872,7 +894,7 @@ class APIConfig:
|
|
|
872
894
|
),
|
|
873
895
|
"context_window_size": int(os.getenv("MOS_SCHEDULER_CONTEXT_WINDOW_SIZE", "5")),
|
|
874
896
|
"thread_pool_max_workers": int(
|
|
875
|
-
os.getenv("MOS_SCHEDULER_THREAD_POOL_MAX_WORKERS", "
|
|
897
|
+
os.getenv("MOS_SCHEDULER_THREAD_POOL_MAX_WORKERS", "50")
|
|
876
898
|
),
|
|
877
899
|
"consume_interval_seconds": float(
|
|
878
900
|
os.getenv("MOS_SCHEDULER_CONSUME_INTERVAL_SECONDS", "0.01")
|
|
@@ -952,6 +974,7 @@ class APIConfig:
|
|
|
952
974
|
"backend": reader_config["backend"],
|
|
953
975
|
"config": {
|
|
954
976
|
"llm": APIConfig.get_memreader_config(),
|
|
977
|
+
"qwen_llm": APIConfig.get_qwen_llm_config(),
|
|
955
978
|
# General LLM for non-chat/doc tasks (hallucination filter, rewrite, merge, etc.)
|
|
956
979
|
"general_llm": APIConfig.get_memreader_general_llm_config(),
|
|
957
980
|
# Image parser LLM (requires vision model)
|
|
@@ -986,6 +1009,7 @@ class APIConfig:
|
|
|
986
1009
|
"SKILLS_LOCAL_DIR", "/tmp/upload_skill_memory/"
|
|
987
1010
|
),
|
|
988
1011
|
},
|
|
1012
|
+
"memory_version_switch": os.getenv("MEM_READER_MEM_VERSION_SWITCH", "off"),
|
|
989
1013
|
},
|
|
990
1014
|
},
|
|
991
1015
|
"enable_textual_memory": True,
|
|
@@ -15,6 +15,7 @@ from memos.memories.textual.item import (
|
|
|
15
15
|
from memos.multi_mem_cube.composite_cube import CompositeCubeView
|
|
16
16
|
from memos.multi_mem_cube.single_cube import SingleCubeView
|
|
17
17
|
from memos.multi_mem_cube.views import MemCubeView
|
|
18
|
+
from memos.plugins.hooks import hookable
|
|
18
19
|
from memos.types import MessageList
|
|
19
20
|
|
|
20
21
|
|
|
@@ -37,6 +38,7 @@ class AddHandler(BaseHandler):
|
|
|
37
38
|
"naive_mem_cube", "mem_reader", "mem_scheduler", "feedback_server"
|
|
38
39
|
)
|
|
39
40
|
|
|
41
|
+
@hookable("add")
|
|
40
42
|
def handle_add_memories(self, add_req: APIADDRequest) -> MemoryResponse:
|
|
41
43
|
"""
|
|
42
44
|
Main handler for add memories endpoint.
|
|
@@ -32,14 +32,14 @@ from memos.mem_reader.factory import MemReaderFactory
|
|
|
32
32
|
from memos.mem_scheduler.orm_modules.base_model import BaseDBManager
|
|
33
33
|
from memos.mem_scheduler.scheduler_factory import SchedulerFactory
|
|
34
34
|
from memos.memories.textual.simple_tree import SimpleTreeTextMemory
|
|
35
|
-
from memos.memories.textual.tree_text_memory.organize.history_manager import MemoryHistoryManager
|
|
36
35
|
from memos.memories.textual.tree_text_memory.organize.manager import MemoryManager
|
|
37
36
|
from memos.memories.textual.tree_text_memory.retrieve.retrieve_utils import FastTokenizer
|
|
37
|
+
from memos.plugins.component_bootstrap import build_plugin_context
|
|
38
|
+
from memos.plugins.manager import plugin_manager
|
|
38
39
|
|
|
39
40
|
|
|
40
41
|
if TYPE_CHECKING:
|
|
41
42
|
from memos.memories.textual.tree import TreeTextMemory
|
|
42
|
-
from memos.extras.nli_model.client import NLIClient
|
|
43
43
|
from memos.mem_agent.deepsearch_agent import DeepSearchMemAgent
|
|
44
44
|
from memos.memories.textual.tree_text_memory.retrieve.internet_retriever_factory import (
|
|
45
45
|
InternetRetrieverFactory,
|
|
@@ -122,6 +122,12 @@ def init_server() -> dict[str, Any]:
|
|
|
122
122
|
existing code that uses the components.
|
|
123
123
|
"""
|
|
124
124
|
logger.info("Initializing MemOS server components...")
|
|
125
|
+
logger.info(
|
|
126
|
+
"[INIT_SERVER] env_MEMSCHEDULER_STREAM_KEY_PREFIX=%s, env_MEMSCHEDULER_REDIS_STREAM_KEY_PREFIX=%s, env_POLAR_DB_DB_NAME=%s",
|
|
127
|
+
os.getenv("MEMSCHEDULER_STREAM_KEY_PREFIX"),
|
|
128
|
+
os.getenv("MEMSCHEDULER_REDIS_STREAM_KEY_PREFIX"),
|
|
129
|
+
os.getenv("POLAR_DB_DB_NAME"),
|
|
130
|
+
)
|
|
125
131
|
|
|
126
132
|
# Initialize Redis client first as it is a core dependency for features like scheduler status tracking
|
|
127
133
|
if os.getenv("MEMSCHEDULER_USE_REDIS_QUEUE", "False").lower() == "true":
|
|
@@ -169,10 +175,25 @@ def init_server() -> dict[str, Any]:
|
|
|
169
175
|
else None
|
|
170
176
|
)
|
|
171
177
|
embedder = EmbedderFactory.from_config(embedder_config)
|
|
172
|
-
|
|
173
|
-
|
|
178
|
+
|
|
179
|
+
plugin_context = build_plugin_context(
|
|
180
|
+
graph_db=graph_db,
|
|
181
|
+
embedder=embedder,
|
|
182
|
+
default_cube_config=default_cube_config,
|
|
183
|
+
nli_client_config=nli_client_config,
|
|
184
|
+
mem_reader_config=mem_reader_config,
|
|
185
|
+
reranker_config=reranker_config,
|
|
186
|
+
feedback_reranker_config=feedback_reranker_config,
|
|
187
|
+
internet_retriever_config=internet_retriever_config,
|
|
188
|
+
)
|
|
189
|
+
plugin_manager.discover()
|
|
190
|
+
plugin_manager.init_components(plugin_context)
|
|
191
|
+
|
|
174
192
|
# Pass graph_db to mem_reader for recall operations (deduplication, conflict detection)
|
|
175
|
-
mem_reader = MemReaderFactory.from_config(
|
|
193
|
+
mem_reader = MemReaderFactory.from_config(
|
|
194
|
+
mem_reader_config,
|
|
195
|
+
graph_db=graph_db,
|
|
196
|
+
)
|
|
176
197
|
reranker = RerankerFactory.from_config(reranker_config)
|
|
177
198
|
feedback_reranker = RerankerFactory.from_config(feedback_reranker_config)
|
|
178
199
|
internet_retriever = InternetRetrieverFactory.from_config(
|
|
@@ -303,6 +324,4 @@ def init_server() -> dict[str, Any]:
|
|
|
303
324
|
"feedback_server": feedback_server,
|
|
304
325
|
"redis_client": redis_client,
|
|
305
326
|
"deepsearch_agent": deepsearch_agent,
|
|
306
|
-
"nli_client": nli_client,
|
|
307
|
-
"memory_history_manager": memory_history_manager,
|
|
308
327
|
}
|
|
@@ -141,6 +141,7 @@ def separate_knowledge_and_conversation_mem(memories: list[dict[str, Any]]):
|
|
|
141
141
|
sources = item.get("metadata", {}).get("sources", [])
|
|
142
142
|
if (
|
|
143
143
|
item["metadata"]["memory_type"] != "RawFileMemory"
|
|
144
|
+
and sources
|
|
144
145
|
and len(sources) > 0
|
|
145
146
|
and "type" in sources[0]
|
|
146
147
|
and sources[0]["type"] == "file"
|
|
@@ -9,13 +9,21 @@ from starlette.staticfiles import StaticFiles
|
|
|
9
9
|
from memos.api.exceptions import APIExceptionHandler
|
|
10
10
|
from memos.api.middleware.request_context import RequestContextMiddleware
|
|
11
11
|
from memos.api.routers.server_router import router as server_router
|
|
12
|
+
from memos.plugins.manager import plugin_manager
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
load_dotenv()
|
|
15
16
|
|
|
17
|
+
plugin_manager.discover()
|
|
18
|
+
|
|
16
19
|
# Configure logging
|
|
17
20
|
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
|
|
18
21
|
logger = logging.getLogger(__name__)
|
|
22
|
+
logger.info(
|
|
23
|
+
"[SERVER_API] load_dotenv completed. env_MEMSCHEDULER_STREAM_KEY_PREFIX=%s, env_MEMSCHEDULER_REDIS_STREAM_KEY_PREFIX=%s",
|
|
24
|
+
os.getenv("MEMSCHEDULER_STREAM_KEY_PREFIX"),
|
|
25
|
+
os.getenv("MEMSCHEDULER_REDIS_STREAM_KEY_PREFIX"),
|
|
26
|
+
)
|
|
19
27
|
|
|
20
28
|
app = FastAPI(
|
|
21
29
|
title="MemOS Server REST APIs",
|
|
@@ -49,6 +57,8 @@ app.exception_handler(HTTPException)(APIExceptionHandler.http_error_handler)
|
|
|
49
57
|
# Fallback for unknown errors
|
|
50
58
|
app.exception_handler(Exception)(APIExceptionHandler.global_exception_handler)
|
|
51
59
|
|
|
60
|
+
plugin_manager.init_app(app)
|
|
61
|
+
|
|
52
62
|
|
|
53
63
|
if __name__ == "__main__":
|
|
54
64
|
import argparse
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
|
-
from typing import Any, ClassVar
|
|
2
|
+
from typing import Any, ClassVar, Literal
|
|
3
3
|
|
|
4
4
|
from pydantic import ConfigDict, Field, field_validator, model_validator
|
|
5
5
|
|
|
@@ -76,6 +76,13 @@ class MultiModalStructMemReaderConfig(BaseMemReaderConfig):
|
|
|
76
76
|
default=None,
|
|
77
77
|
description="Skills directory for the MemReader",
|
|
78
78
|
)
|
|
79
|
+
memory_version_switch: Literal["on", "off"] = Field(
|
|
80
|
+
default="off",
|
|
81
|
+
description="Turn on memory version or off",
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
# Allow passing additional fields without raising validation errors
|
|
85
|
+
model_config = ConfigDict(extra="allow", strict=True)
|
|
79
86
|
|
|
80
87
|
|
|
81
88
|
class StrategyStructMemReaderConfig(BaseMemReaderConfig):
|
|
@@ -899,13 +899,7 @@ class PolarDBGraphDB(BaseGraphDB):
|
|
|
899
899
|
logger.info(
|
|
900
900
|
f" polardb [get_node] get_node completed time in {elapsed_time:.2f}s"
|
|
901
901
|
)
|
|
902
|
-
return self._parse_node(
|
|
903
|
-
{
|
|
904
|
-
"id": id,
|
|
905
|
-
"memory": properties.get("memory", ""),
|
|
906
|
-
**properties,
|
|
907
|
-
}
|
|
908
|
-
)
|
|
902
|
+
return self._parse_node(properties)
|
|
909
903
|
return None
|
|
910
904
|
|
|
911
905
|
except Exception as e:
|
|
@@ -976,15 +970,7 @@ class PolarDBGraphDB(BaseGraphDB):
|
|
|
976
970
|
properties["embedding"] = embedding
|
|
977
971
|
except (json.JSONDecodeError, TypeError):
|
|
978
972
|
logger.warning(f"Failed to parse embedding for node {node_id}")
|
|
979
|
-
nodes.append(
|
|
980
|
-
self._parse_node(
|
|
981
|
-
{
|
|
982
|
-
"id": properties.get("id", node_id),
|
|
983
|
-
"memory": properties.get("memory", ""),
|
|
984
|
-
"metadata": properties,
|
|
985
|
-
}
|
|
986
|
-
)
|
|
987
|
-
)
|
|
973
|
+
nodes.append(self._parse_node(properties))
|
|
988
974
|
return nodes
|
|
989
975
|
|
|
990
976
|
@timed
|
|
@@ -1534,7 +1520,7 @@ class PolarDBGraphDB(BaseGraphDB):
|
|
|
1534
1520
|
user_name_conditions = self._build_user_name_and_kb_ids_conditions_sql(
|
|
1535
1521
|
user_name=user_name,
|
|
1536
1522
|
knowledgebase_ids=knowledgebase_ids,
|
|
1537
|
-
default_user_name=self.
|
|
1523
|
+
default_user_name=self._get_config_value("user_name"),
|
|
1538
1524
|
)
|
|
1539
1525
|
|
|
1540
1526
|
# Add OR condition if we have any user_name conditions
|
|
@@ -1633,7 +1619,7 @@ class PolarDBGraphDB(BaseGraphDB):
|
|
|
1633
1619
|
user_name_conditions = self._build_user_name_and_kb_ids_conditions_sql(
|
|
1634
1620
|
user_name=user_name,
|
|
1635
1621
|
knowledgebase_ids=knowledgebase_ids,
|
|
1636
|
-
default_user_name=self.
|
|
1622
|
+
default_user_name=self._get_config_value("user_name"),
|
|
1637
1623
|
)
|
|
1638
1624
|
|
|
1639
1625
|
# Add OR condition if we have any user_name conditions
|
|
@@ -1751,7 +1737,7 @@ class PolarDBGraphDB(BaseGraphDB):
|
|
|
1751
1737
|
user_name_conditions = self._build_user_name_and_kb_ids_conditions_sql(
|
|
1752
1738
|
user_name=user_name,
|
|
1753
1739
|
knowledgebase_ids=knowledgebase_ids,
|
|
1754
|
-
default_user_name=self.
|
|
1740
|
+
default_user_name=self._get_config_value("user_name"),
|
|
1755
1741
|
)
|
|
1756
1742
|
|
|
1757
1743
|
if user_name_conditions:
|
|
@@ -1873,7 +1859,7 @@ class PolarDBGraphDB(BaseGraphDB):
|
|
|
1873
1859
|
user_name_conditions = self._build_user_name_and_kb_ids_conditions_sql(
|
|
1874
1860
|
user_name=user_name,
|
|
1875
1861
|
knowledgebase_ids=knowledgebase_ids,
|
|
1876
|
-
default_user_name=self.
|
|
1862
|
+
default_user_name=self._get_config_value("user_name"),
|
|
1877
1863
|
)
|
|
1878
1864
|
|
|
1879
1865
|
if user_name_conditions:
|
|
@@ -33,6 +33,8 @@ from memos.memories.textual.tree_text_memory.organize.manager import (
|
|
|
33
33
|
extract_working_binding_ids,
|
|
34
34
|
)
|
|
35
35
|
from memos.memories.textual.tree_text_memory.retrieve.retrieve_utils import StopwordManager
|
|
36
|
+
from memos.plugins.hook_defs import H
|
|
37
|
+
from memos.plugins.hooks import trigger_single_hook
|
|
36
38
|
|
|
37
39
|
|
|
38
40
|
if TYPE_CHECKING:
|
|
@@ -245,6 +247,7 @@ class MemFeedback(BaseMemFeedback):
|
|
|
245
247
|
datetime.now().isoformat()
|
|
246
248
|
)
|
|
247
249
|
to_add_memory.metadata.background = new_memory_item.metadata.background
|
|
250
|
+
to_add_memory.metadata.sources = new_memory_item.metadata.sources
|
|
248
251
|
|
|
249
252
|
added_ids = self._retry_db_operation(
|
|
250
253
|
lambda: self.memory_manager.add([to_add_memory], user_name=user_name, use_batch=False)
|
|
@@ -288,33 +291,43 @@ class MemFeedback(BaseMemFeedback):
|
|
|
288
291
|
new_memory_item.memory = operation["text"]
|
|
289
292
|
new_memory_item.metadata.embedding = self._batch_embed([operation["text"]])[0]
|
|
290
293
|
|
|
291
|
-
if
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
294
|
+
if getattr(self.mem_reader, "memory_version_switch", "off") != "on":
|
|
295
|
+
if memory_type == "WorkingMemory":
|
|
296
|
+
fields = {
|
|
297
|
+
"memory": new_memory_item.memory,
|
|
298
|
+
"key": new_memory_item.metadata.key,
|
|
299
|
+
"tags": new_memory_item.metadata.tags,
|
|
300
|
+
"embedding": new_memory_item.metadata.embedding,
|
|
301
|
+
"background": new_memory_item.metadata.background,
|
|
302
|
+
"covered_history": old_memory_item.id,
|
|
303
|
+
}
|
|
304
|
+
self.graph_store.update_node(old_memory_item.id, fields=fields, user_name=user_name)
|
|
305
|
+
item_id = old_memory_item.id
|
|
306
|
+
else:
|
|
307
|
+
done = self._single_add_operation(
|
|
308
|
+
old_memory_item, new_memory_item, user_id, user_name, async_mode
|
|
309
|
+
)
|
|
310
|
+
item_id = done.get("id")
|
|
311
|
+
self.graph_store.update_node(
|
|
312
|
+
item_id, {"covered_history": old_memory_item.id}, user_name=user_name
|
|
313
|
+
)
|
|
314
|
+
self.graph_store.update_node(
|
|
315
|
+
old_memory_item.id, {"status": "archived"}, user_name=user_name
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
logger.info(
|
|
319
|
+
f"[Memory Feedback UPDATE] New Add:{item_id} | Set archived:{old_memory_item.id} | memory_type: {memory_type}"
|
|
305
320
|
)
|
|
306
|
-
|
|
307
|
-
self.
|
|
308
|
-
|
|
321
|
+
else:
|
|
322
|
+
item_id = self._single_update_operation_with_versions(
|
|
323
|
+
old_memory_item=old_memory_item,
|
|
324
|
+
new_memory_item=new_memory_item,
|
|
325
|
+
user_name=user_name,
|
|
309
326
|
)
|
|
310
|
-
|
|
311
|
-
|
|
327
|
+
logger.info(
|
|
328
|
+
f"[Memory Feedback UPDATE] Updated:{item_id} | history appended | memory_type: {old_memory_item.metadata.memory_type}"
|
|
312
329
|
)
|
|
313
330
|
|
|
314
|
-
logger.info(
|
|
315
|
-
f"[Memory Feedback UPDATE] New Add:{item_id} | Set archived:{old_memory_item.id} | memory_type: {memory_type}"
|
|
316
|
-
)
|
|
317
|
-
|
|
318
331
|
return {
|
|
319
332
|
"id": item_id,
|
|
320
333
|
"text": new_memory_item.memory,
|
|
@@ -323,6 +336,78 @@ class MemFeedback(BaseMemFeedback):
|
|
|
323
336
|
"origin_memory": old_memory_item.memory,
|
|
324
337
|
}
|
|
325
338
|
|
|
339
|
+
def _single_update_operation_with_versions(
|
|
340
|
+
self,
|
|
341
|
+
old_memory_item: TextualMemoryItem,
|
|
342
|
+
new_memory_item: TextualMemoryItem,
|
|
343
|
+
user_name: str,
|
|
344
|
+
) -> str:
|
|
345
|
+
try:
|
|
346
|
+
updated_item, archived_item, archived_metadata, updated_fields = trigger_single_hook(
|
|
347
|
+
H.MEMORY_VERSION_APPLY_FEEDBACK_UPDATE,
|
|
348
|
+
old_item=old_memory_item,
|
|
349
|
+
new_item=new_memory_item,
|
|
350
|
+
user_name=user_name,
|
|
351
|
+
)
|
|
352
|
+
except Exception as e:
|
|
353
|
+
logger.warning(
|
|
354
|
+
"[Memory Feedback UPDATE] history fallback for %s: %s", old_memory_item.id, e
|
|
355
|
+
)
|
|
356
|
+
updated_item = old_memory_item.model_copy(deep=True)
|
|
357
|
+
updated_item.memory = new_memory_item.memory
|
|
358
|
+
updated_item.metadata.key = new_memory_item.metadata.key
|
|
359
|
+
updated_item.metadata.tags = new_memory_item.metadata.tags
|
|
360
|
+
updated_item.metadata.background = new_memory_item.metadata.background
|
|
361
|
+
if getattr(new_memory_item.metadata, "sources", None) is not None:
|
|
362
|
+
current_sources = list(updated_item.metadata.sources or [])
|
|
363
|
+
updated_item.metadata.sources = (
|
|
364
|
+
list(new_memory_item.metadata.sources or []) + current_sources
|
|
365
|
+
)
|
|
366
|
+
if getattr(new_memory_item.metadata, "embedding", None) is not None:
|
|
367
|
+
updated_item.metadata.embedding = new_memory_item.metadata.embedding
|
|
368
|
+
if updated_item.metadata.memory_type == "PreferenceMemory":
|
|
369
|
+
updated_item.metadata.preference = updated_item.memory
|
|
370
|
+
updated_fields = {
|
|
371
|
+
"memory": updated_item.memory,
|
|
372
|
+
"key": updated_item.metadata.key,
|
|
373
|
+
"tags": updated_item.metadata.tags,
|
|
374
|
+
"embedding": updated_item.metadata.embedding,
|
|
375
|
+
"background": updated_item.metadata.background,
|
|
376
|
+
"sources": [
|
|
377
|
+
source.model_dump(exclude_none=True)
|
|
378
|
+
if hasattr(source, "model_dump")
|
|
379
|
+
else source
|
|
380
|
+
for source in (updated_item.metadata.sources or [])
|
|
381
|
+
],
|
|
382
|
+
"covered_history": old_memory_item.id,
|
|
383
|
+
}
|
|
384
|
+
archived_item = None
|
|
385
|
+
archived_metadata = None
|
|
386
|
+
|
|
387
|
+
if archived_item and archived_metadata:
|
|
388
|
+
try:
|
|
389
|
+
self.graph_store.add_node(
|
|
390
|
+
id=archived_item.id,
|
|
391
|
+
memory=archived_item.memory,
|
|
392
|
+
metadata=archived_metadata,
|
|
393
|
+
user_name=user_name,
|
|
394
|
+
)
|
|
395
|
+
except Exception as e:
|
|
396
|
+
logger.warning(
|
|
397
|
+
"[Memory Feedback UPDATE] archive add failed for %s: %s",
|
|
398
|
+
old_memory_item.id,
|
|
399
|
+
e,
|
|
400
|
+
)
|
|
401
|
+
self._retry_db_operation(
|
|
402
|
+
lambda: self.graph_store.update_node(
|
|
403
|
+
id=updated_item.id,
|
|
404
|
+
fields=updated_fields,
|
|
405
|
+
user_name=user_name,
|
|
406
|
+
)
|
|
407
|
+
)
|
|
408
|
+
self._del_working_binding(user_name, [old_memory_item])
|
|
409
|
+
return updated_item.id
|
|
410
|
+
|
|
326
411
|
def _del_working_binding(self, user_name, mem_items: list[TextualMemoryItem]) -> set[str]:
|
|
327
412
|
"""Delete working memory bindings"""
|
|
328
413
|
bindings_to_delete = extract_working_binding_ids(mem_items)
|
|
@@ -331,9 +416,7 @@ class MemFeedback(BaseMemFeedback):
|
|
|
331
416
|
f"[Memory Feedback UPDATE] Extracted {len(bindings_to_delete)} working_binding ids to cleanup: {list(bindings_to_delete)}"
|
|
332
417
|
)
|
|
333
418
|
|
|
334
|
-
delete_ids =
|
|
335
|
-
if bindings_to_delete:
|
|
336
|
-
delete_ids = list({bindings_to_delete})
|
|
419
|
+
delete_ids = list(bindings_to_delete)
|
|
337
420
|
|
|
338
421
|
for mid in delete_ids:
|
|
339
422
|
try:
|
|
@@ -346,6 +429,7 @@ class MemFeedback(BaseMemFeedback):
|
|
|
346
429
|
logger.warning(
|
|
347
430
|
f"[0107 Feedback Core:_del_working_binding] TreeTextMemory.delete_hard: failed to delete {mid}: {e}"
|
|
348
431
|
)
|
|
432
|
+
return bindings_to_delete
|
|
349
433
|
|
|
350
434
|
def semantics_feedback(
|
|
351
435
|
self,
|
|
@@ -476,9 +560,22 @@ class MemFeedback(BaseMemFeedback):
|
|
|
476
560
|
f"[0107 Feedback Core: semantics_feedback] Operation failed for {original_op}: {e}",
|
|
477
561
|
exc_info=True,
|
|
478
562
|
)
|
|
479
|
-
if update_results:
|
|
480
|
-
|
|
481
|
-
|
|
563
|
+
if update_results and getattr(self.mem_reader, "memory_version_switch", "off") != "on":
|
|
564
|
+
archived_ids = [item["archived_id"] for item in update_results]
|
|
565
|
+
archived_items = []
|
|
566
|
+
for aid in archived_ids:
|
|
567
|
+
try:
|
|
568
|
+
node = self.graph_store.get_node(aid, user_name=user_name)
|
|
569
|
+
if node:
|
|
570
|
+
archived_items.append(TextualMemoryItem(**node))
|
|
571
|
+
except Exception as e:
|
|
572
|
+
logger.warning(
|
|
573
|
+
"[Memory Feedback] Failed to fetch archived item %s for working_binding cleanup: %s",
|
|
574
|
+
aid,
|
|
575
|
+
e,
|
|
576
|
+
)
|
|
577
|
+
if archived_items:
|
|
578
|
+
self._del_working_binding(user_name, archived_items)
|
|
482
579
|
|
|
483
580
|
return {"record": {"add": add_results, "update": update_results}}
|
|
484
581
|
|
|
@@ -1066,7 +1163,14 @@ class MemFeedback(BaseMemFeedback):
|
|
|
1066
1163
|
tags=tags,
|
|
1067
1164
|
key=key,
|
|
1068
1165
|
embedding=embedding,
|
|
1069
|
-
sources=[
|
|
1166
|
+
sources=[
|
|
1167
|
+
{
|
|
1168
|
+
"type": "feedback",
|
|
1169
|
+
"role": "user",
|
|
1170
|
+
"chat_time": feedback_time,
|
|
1171
|
+
"content": feedback_content,
|
|
1172
|
+
}
|
|
1173
|
+
],
|
|
1070
1174
|
background=background,
|
|
1071
1175
|
type="fine",
|
|
1072
1176
|
info=info,
|
|
@@ -1399,5 +1399,18 @@ def clean_json_response(response: str) -> str:
|
|
|
1399
1399
|
|
|
1400
1400
|
Returns:
|
|
1401
1401
|
str: Clean JSON string without markdown formatting
|
|
1402
|
+
|
|
1403
|
+
Raises:
|
|
1404
|
+
ValueError: If ``response`` is None. This is almost always an upstream
|
|
1405
|
+
failure (LLM call returned None instead of raising) and surfacing
|
|
1406
|
+
it here is much easier to diagnose than the implicit
|
|
1407
|
+
``AttributeError: 'NoneType' object has no attribute 'replace'``
|
|
1408
|
+
that would otherwise be thrown.
|
|
1402
1409
|
"""
|
|
1410
|
+
if response is None:
|
|
1411
|
+
raise ValueError(
|
|
1412
|
+
"clean_json_response received None — upstream LLM call likely "
|
|
1413
|
+
"failed silently (check timed_with_status / generate() error "
|
|
1414
|
+
"handling)."
|
|
1415
|
+
)
|
|
1403
1416
|
return response.replace("```json", "").replace("```", "").strip()
|