MemoryOS 2.0.32__tar.gz → 2.0.33__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.32 → memoryos-2.0.33}/PKG-INFO +1 -1
- {memoryos-2.0.32 → memoryos-2.0.33}/pyproject.toml +1 -1
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/__init__.py +1 -1
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/read_pref_memory/process_preference_memory.py +46 -9
- memoryos-2.0.33/src/memos/mem_reader/source_filter.py +228 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_read_handler.py +2 -2
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/templates/prefer_complete_prompt.py +46 -32
- {memoryos-2.0.32 → memoryos-2.0.33}/LICENSE +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/README.md +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/client.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/config.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/context/dependencies.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/exceptions.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/handlers/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/handlers/add_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/handlers/base_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/handlers/chat_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/handlers/component_init.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/handlers/config_builders.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/handlers/cube_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/handlers/feedback_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/handlers/formatters_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/handlers/memory_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/handlers/scheduler_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/handlers/search_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/handlers/suggestion_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/lifecycle.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/mcp_serve.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/middleware/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/middleware/auth.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/middleware/rate_limit.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/middleware/request_context.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/product_models.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/routers/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/routers/admin_router.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/routers/server_router.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/server_api.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/server_api_ext.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/utils/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/api/utils/api_keys.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/chunkers/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/chunkers/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/chunkers/charactertext_chunker.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/chunkers/factory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/chunkers/markdown_chunker.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/chunkers/sentence_chunker.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/chunkers/simple_chunker.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/cli.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/chunker.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/embedder.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/graph_db.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/internet_retriever.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/llm.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/mem_agent.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/mem_chat.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/mem_cube.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/mem_os.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/mem_reader.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/mem_scheduler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/mem_user.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/memory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/parser.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/reranker.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/configs/vec_db.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/context/context.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dependency.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/deprecation.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/README.md +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/contextualization.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/enrichment.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/hook_defs.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/hooks.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/maintenance.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/pipeline/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/pipeline/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/pipeline/diary.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/pipeline/motive.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/pipeline/persistence.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/pipeline/reasoning.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/pipeline/recall.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/plugin.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/prompts/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/prompts/context_binding_prompt.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/prompts/context_summary_prompt.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/prompts/motive_prompt.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/prompts/reasoning_prompt.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/routers/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/routers/diary_router.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/routers/trigger_router.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/routes.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/search.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/signal_store.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/dream/types.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/embedders/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/embedders/ark.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/embedders/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/embedders/cache.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/embedders/factory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/embedders/ollama.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/embedders/sentence_transformer.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/embedders/universal_api.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/exceptions.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/extras/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/graph_dbs/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/graph_dbs/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/graph_dbs/factory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/graph_dbs/item.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/graph_dbs/neo4j.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/graph_dbs/neo4j_community.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/graph_dbs/polardb.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/graph_dbs/postgres.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/hello_world.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/llms/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/llms/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/llms/deepseek.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/llms/factory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/llms/hf.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/llms/hf_singleton.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/llms/minimax.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/llms/ollama.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/llms/openai.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/llms/openai_new.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/llms/qwen.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/llms/utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/llms/vllm.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/log.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_agent/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_agent/deepsearch_agent.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_agent/factory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_chat/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_chat/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_chat/factory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_chat/simple.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_cube/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_cube/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_cube/general.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_cube/navie.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_cube/utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_feedback/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_feedback/feedback.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_feedback/simple_feedback.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_feedback/utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_os/core.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_os/main.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_os/utils/default_config.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_os/utils/format_utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_os/utils/reference_utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/factory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/memory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/multi_modal_struct.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/read_multi_modal/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/read_multi_modal/assistant_parser.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/read_multi_modal/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/read_multi_modal/file_content_parser.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/read_multi_modal/image_parser.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/read_multi_modal/multi_modal_parser.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/read_multi_modal/string_parser.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/read_multi_modal/system_parser.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/read_multi_modal/text_content_parser.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/read_multi_modal/tool_parser.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/read_multi_modal/user_parser.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/read_multi_modal/utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/read_skill_memory/process_skill_memory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/read_skill_memory/upload_skill_memory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/simple_struct.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/strategy_struct.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_reader/utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/analyzer/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/analyzer/api_analyzer.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/analyzer/eval_analyzer.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/analyzer/mos_for_test_scheduler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/analyzer/scheduler_for_eval.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/base_mixins/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/base_mixins/memory_ops.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/base_mixins/queue_ops.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/base_mixins/web_log_ops.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/base_scheduler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/general_modules/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/general_modules/api_misc.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/general_modules/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/general_modules/init_components_for_scheduler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/general_modules/misc.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/general_modules/scheduler_logger.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/general_modules/task_threads.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/general_scheduler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/memory_manage_modules/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/memory_manage_modules/activation_memory_manager.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/memory_manage_modules/enhancement_pipeline.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/memory_manage_modules/filter_pipeline.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/memory_manage_modules/memory_filter.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/memory_manage_modules/post_processor.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/memory_manage_modules/rerank_pipeline.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/memory_manage_modules/retriever.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/memory_manage_modules/search_pipeline.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/memory_manage_modules/search_service.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/monitors/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/monitors/dispatcher_monitor.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/monitors/general_monitor.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/monitors/task_schedule_monitor.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/optimized_scheduler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/orm_modules/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/orm_modules/api_redis_model.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/orm_modules/base_model.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/orm_modules/monitor_models.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/orm_modules/redis_model.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/scheduler_factory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/schemas/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/schemas/analyzer_schemas.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/schemas/api_schemas.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/schemas/general_schemas.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/schemas/message_schemas.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/schemas/monitor_schemas.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/schemas/task_schemas.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/base_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/context.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/dispatcher.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/handlers/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/handlers/add_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/handlers/answer_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/handlers/feedback_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_dream_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/handlers/mem_reorganize_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/handlers/memory_update_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/handlers/pref_add_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/handlers/query_handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/local_queue.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/orchestrator.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/redis_queue.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/registry.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/task_schedule_modules/task_queue.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/utils/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/utils/api_utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/utils/config_utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/utils/db_utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/utils/filter_utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/utils/metrics.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/utils/misc_utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/utils/monitor_event_utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/utils/status_tracker.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/webservice_modules/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/webservice_modules/rabbitmq_service.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_scheduler/webservice_modules/redis_service.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_user/factory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_user/mysql_persistent_user_manager.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_user/mysql_user_manager.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_user/persistent_factory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_user/persistent_user_manager.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_user/redis_persistent_user_manager.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/mem_user/user_manager.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/activation/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/activation/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/activation/item.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/activation/kv.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/activation/vllmkv.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/factory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/parametric/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/parametric/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/parametric/item.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/parametric/lora.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/general.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/item.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/naive.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/prefer_text_memory/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/prefer_text_memory/adder.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/prefer_text_memory/config.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/prefer_text_memory/extractor.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/prefer_text_memory/factory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/prefer_text_memory/retrievers.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/prefer_text_memory/spliter.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/prefer_text_memory/utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/preference.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/simple_preference.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/simple_tree.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/organize/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/organize/handler.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/organize/manager.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/organize/relation_reason_detector.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/organize/reorganizer.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/retrieve/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/retrieve/advanced_searcher.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/retrieve/bm25_util.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/retrieve/bochasearch.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/retrieve/internet_retriever_factory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/retrieve/reasoner.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/retrieve/recall.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/retrieve/reranker.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/retrieve/retrieval_mid_structs.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/retrieve/retrieve_utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/retrieve/searcher.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/retrieve/task_goal_parser.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/retrieve/tavilysearch.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/retrieve/utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memories/textual/tree_text_memory/retrieve/xinyusearch.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memos_tools/dinding_report_bot.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memos_tools/lockfree_dict.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memos_tools/notification_service.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memos_tools/notification_utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memos_tools/singleton.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memos_tools/thread_safe_dict.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/memos_tools/thread_safe_dict_segment.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/multi_mem_cube/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/multi_mem_cube/composite_cube.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/multi_mem_cube/single_cube.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/multi_mem_cube/views.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/parsers/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/parsers/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/parsers/factory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/parsers/markitdown.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/plugins/README.md +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/plugins/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/plugins/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/plugins/component_bootstrap.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/plugins/hook_defs.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/plugins/hooks.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/plugins/manager.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/reranker/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/reranker/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/reranker/concat.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/reranker/cosine_local.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/reranker/factory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/reranker/http_bge.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/reranker/http_bge_strategy.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/reranker/noop.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/reranker/strategies/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/reranker/strategies/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/reranker/strategies/concat_background.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/reranker/strategies/concat_docsource.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/reranker/strategies/dialogue_common.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/reranker/strategies/factory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/reranker/strategies/single_turn.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/reranker/strategies/singleturn_outmem.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/search/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/search/search_service.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/settings.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/templates/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/templates/advanced_search_prompts.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/templates/cloud_service_prompt.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/templates/instruction_completion.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/templates/mem_agent_prompts.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/templates/mem_feedback_prompts.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/templates/mem_reader_prompts.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/templates/mem_reader_strategy_prompts.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/templates/mem_scheduler_prompts.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/templates/mem_search_prompts.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/templates/mos_prompts.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/templates/skill_mem_prompt.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/templates/tool_mem_prompts.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/templates/tree_reorganize_prompts.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/types/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/types/general_types.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/types/openai_chat_completion_types/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/types/openai_chat_completion_types/chat_completion_assistant_message_param.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_image_param.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_input_audio_param.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_param.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_refusal_param.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/types/openai_chat_completion_types/chat_completion_content_part_text_param.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/types/openai_chat_completion_types/chat_completion_message_custom_tool_call_param.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/types/openai_chat_completion_types/chat_completion_message_function_tool_call_param.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/types/openai_chat_completion_types/chat_completion_message_param.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/types/openai_chat_completion_types/chat_completion_message_tool_call_union_param.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/types/openai_chat_completion_types/chat_completion_system_message_param.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/types/openai_chat_completion_types/chat_completion_tool_message_param.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/types/openai_chat_completion_types/chat_completion_user_message_param.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/utils.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/vec_dbs/__init__.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/vec_dbs/base.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/vec_dbs/factory.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/vec_dbs/item.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/vec_dbs/milvus.py +0 -0
- {memoryos-2.0.32 → memoryos-2.0.33}/src/memos/vec_dbs/qdrant.py +0 -0
|
@@ -10,7 +10,12 @@ from typing import TYPE_CHECKING, Any
|
|
|
10
10
|
from memos.context.context import ContextThreadPoolExecutor
|
|
11
11
|
from memos.log import get_logger
|
|
12
12
|
from memos.mem_reader.read_multi_modal import detect_lang
|
|
13
|
-
from memos.
|
|
13
|
+
from memos.mem_reader.source_filter import MemorySourceFilter
|
|
14
|
+
from memos.memories.textual.item import (
|
|
15
|
+
SourceMessage,
|
|
16
|
+
TextualMemoryItem,
|
|
17
|
+
TreeNodeTextualMemoryMetadata,
|
|
18
|
+
)
|
|
14
19
|
from memos.templates.prefer_complete_prompt import (
|
|
15
20
|
NAIVE_EXPLICIT_PREFERENCE_EXTRACT_PROMPT,
|
|
16
21
|
NAIVE_EXPLICIT_PREFERENCE_EXTRACT_PROMPT_ZH,
|
|
@@ -100,6 +105,7 @@ def _create_preference_memory_item(
|
|
|
100
105
|
fast_item: TextualMemoryItem | None,
|
|
101
106
|
info: dict[str, Any],
|
|
102
107
|
embedder,
|
|
108
|
+
sources_override: list[SourceMessage] | None = None,
|
|
103
109
|
**kwargs,
|
|
104
110
|
) -> TextualMemoryItem:
|
|
105
111
|
"""
|
|
@@ -133,7 +139,13 @@ def _create_preference_memory_item(
|
|
|
133
139
|
embedding = embedder.embed([context_summary])[0] if embedder and context_summary else None
|
|
134
140
|
|
|
135
141
|
# Extract sources from fast_item
|
|
136
|
-
sources =
|
|
142
|
+
sources = (
|
|
143
|
+
sources_override
|
|
144
|
+
if sources_override is not None
|
|
145
|
+
else getattr(fast_item.metadata, "sources", [])
|
|
146
|
+
if fast_item
|
|
147
|
+
else []
|
|
148
|
+
)
|
|
137
149
|
|
|
138
150
|
# Create metadata
|
|
139
151
|
metadata = TreeNodeTextualMemoryMetadata(
|
|
@@ -168,6 +180,7 @@ def _process_single_chunk_explicit(
|
|
|
168
180
|
info: dict[str, Any],
|
|
169
181
|
llm,
|
|
170
182
|
embedder,
|
|
183
|
+
sources_override: list[SourceMessage] | None = None,
|
|
171
184
|
**kwargs,
|
|
172
185
|
) -> list[TextualMemoryItem]:
|
|
173
186
|
"""Process a single chunk for explicit preferences."""
|
|
@@ -190,6 +203,7 @@ def _process_single_chunk_explicit(
|
|
|
190
203
|
fast_item=fast_item,
|
|
191
204
|
info=info,
|
|
192
205
|
embedder=embedder,
|
|
206
|
+
sources_override=sources_override,
|
|
193
207
|
**kwargs,
|
|
194
208
|
)
|
|
195
209
|
memories.append(memory)
|
|
@@ -203,6 +217,7 @@ def _process_single_chunk_implicit(
|
|
|
203
217
|
info: dict[str, Any],
|
|
204
218
|
llm,
|
|
205
219
|
embedder,
|
|
220
|
+
sources_override: list[SourceMessage] | None = None,
|
|
206
221
|
**kwargs,
|
|
207
222
|
) -> list[TextualMemoryItem]:
|
|
208
223
|
"""Process a single chunk for implicit preferences."""
|
|
@@ -225,6 +240,7 @@ def _process_single_chunk_implicit(
|
|
|
225
240
|
fast_item=fast_item,
|
|
226
241
|
info=info,
|
|
227
242
|
embedder=embedder,
|
|
243
|
+
sources_override=sources_override,
|
|
228
244
|
**kwargs,
|
|
229
245
|
)
|
|
230
246
|
memories.append(memory)
|
|
@@ -260,13 +276,20 @@ def process_preference_fine(
|
|
|
260
276
|
return []
|
|
261
277
|
|
|
262
278
|
try:
|
|
263
|
-
# Convert fast_memory_items to messages format
|
|
279
|
+
# Convert fast_memory_items to source-filtered messages format
|
|
280
|
+
source_filter = MemorySourceFilter()
|
|
264
281
|
chunks = []
|
|
265
282
|
for fast_item in fast_memory_items:
|
|
266
|
-
|
|
283
|
+
raw_sources = getattr(fast_item.metadata, "sources", None)
|
|
284
|
+
if raw_sources:
|
|
285
|
+
filtered_sources = source_filter.filter_for_preference(raw_sources)
|
|
286
|
+
mem_str = source_filter.sources_to_prompt_text(filtered_sources)
|
|
287
|
+
else:
|
|
288
|
+
filtered_sources = None
|
|
289
|
+
mem_str = fast_item.memory or ""
|
|
267
290
|
if not mem_str.strip():
|
|
268
291
|
continue
|
|
269
|
-
chunks.append((mem_str, fast_item))
|
|
292
|
+
chunks.append((mem_str, fast_item, filtered_sources))
|
|
270
293
|
|
|
271
294
|
if not chunks:
|
|
272
295
|
return []
|
|
@@ -277,16 +300,30 @@ def process_preference_fine(
|
|
|
277
300
|
futures = {}
|
|
278
301
|
|
|
279
302
|
# Submit explicit extraction tasks
|
|
280
|
-
for chunk, fast_item in chunks:
|
|
303
|
+
for chunk, fast_item, filtered_sources in chunks:
|
|
281
304
|
future = executor.submit(
|
|
282
|
-
_process_single_chunk_explicit,
|
|
305
|
+
_process_single_chunk_explicit,
|
|
306
|
+
chunk,
|
|
307
|
+
fast_item,
|
|
308
|
+
info,
|
|
309
|
+
llm,
|
|
310
|
+
embedder,
|
|
311
|
+
filtered_sources,
|
|
312
|
+
**kwargs,
|
|
283
313
|
)
|
|
284
314
|
futures[future] = ("explicit_preference", chunk)
|
|
285
315
|
|
|
286
316
|
# Submit implicit extraction tasks
|
|
287
|
-
for chunk, fast_item in chunks:
|
|
317
|
+
for chunk, fast_item, filtered_sources in chunks:
|
|
288
318
|
future = executor.submit(
|
|
289
|
-
_process_single_chunk_implicit,
|
|
319
|
+
_process_single_chunk_implicit,
|
|
320
|
+
chunk,
|
|
321
|
+
fast_item,
|
|
322
|
+
info,
|
|
323
|
+
llm,
|
|
324
|
+
embedder,
|
|
325
|
+
filtered_sources,
|
|
326
|
+
**kwargs,
|
|
290
327
|
)
|
|
291
328
|
futures[future] = ("implicit_preference", chunk)
|
|
292
329
|
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"""Source filters shared by memory extraction steps."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import re
|
|
6
|
+
|
|
7
|
+
from dataclasses import dataclass
|
|
8
|
+
from typing import Any, Literal
|
|
9
|
+
|
|
10
|
+
from memos.memories.textual.item import SourceMessage
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
SourceFilterAction = Literal[
|
|
14
|
+
"extract_after_last",
|
|
15
|
+
"strip_after_first",
|
|
16
|
+
"drop_if_present",
|
|
17
|
+
"drop_if_prefix",
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@dataclass(frozen=True)
|
|
22
|
+
class SourceFilterRule:
|
|
23
|
+
name: str
|
|
24
|
+
action: SourceFilterAction
|
|
25
|
+
patterns: tuple[re.Pattern[str], ...]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@dataclass(frozen=True)
|
|
29
|
+
class SourceFilterPolicy:
|
|
30
|
+
allowed_roles: frozenset[str]
|
|
31
|
+
blocked_roles: frozenset[str]
|
|
32
|
+
blocked_source_types: frozenset[str]
|
|
33
|
+
rules: tuple[SourceFilterRule, ...]
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _patterns(*values: str, flags: int = 0) -> tuple[re.Pattern[str], ...]:
|
|
37
|
+
return tuple(re.compile(value, flags) for value in values)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
PREFERENCE_SOURCE_POLICY = SourceFilterPolicy(
|
|
41
|
+
allowed_roles=frozenset({"user"}),
|
|
42
|
+
blocked_roles=frozenset({"assistant", "system", "tool"}),
|
|
43
|
+
blocked_source_types=frozenset({"tool"}),
|
|
44
|
+
rules=(
|
|
45
|
+
SourceFilterRule(
|
|
46
|
+
name="user_query_boundary",
|
|
47
|
+
action="extract_after_last",
|
|
48
|
+
patterns=_patterns(
|
|
49
|
+
r"(?im)(?:^|[ \t])#{1,3}[ \t]*用户(?:的)?(?:消息|问题)(?:为|是)?[ \t]*[::]",
|
|
50
|
+
r"user\u200b原\u200b始\u200bquery\u200b:\u200b\u200b\u200b\u200b",
|
|
51
|
+
r"(?im)(?:^|[ \t])#{1,3}[ \t]*user[ \t]*原始[ \t]*query[ \t]*[::]",
|
|
52
|
+
),
|
|
53
|
+
),
|
|
54
|
+
SourceFilterRule(
|
|
55
|
+
name="trailing_context",
|
|
56
|
+
action="strip_after_first",
|
|
57
|
+
patterns=_patterns(
|
|
58
|
+
r"(?m)^\s{0,3}#{1,3}\s*以下是可能和用户问题关联的对话记忆",
|
|
59
|
+
),
|
|
60
|
+
),
|
|
61
|
+
SourceFilterRule(
|
|
62
|
+
name="stream_transcript",
|
|
63
|
+
action="strip_after_first",
|
|
64
|
+
patterns=_patterns(
|
|
65
|
+
r'data:\s*\{"id"\s*:\s*"chatcmpl',
|
|
66
|
+
r"data:\s*\[DONE\]",
|
|
67
|
+
),
|
|
68
|
+
),
|
|
69
|
+
SourceFilterRule(
|
|
70
|
+
name="retrieval_context",
|
|
71
|
+
action="drop_if_present",
|
|
72
|
+
patterns=_patterns(
|
|
73
|
+
r"(?m)^\s{0,3}#{1,3}\s*以下内容是基于用户发送的消息的搜索结果",
|
|
74
|
+
r"(?i)<(?:retrieved_context|search_context|web_results)>",
|
|
75
|
+
),
|
|
76
|
+
),
|
|
77
|
+
SourceFilterRule(
|
|
78
|
+
name="memory_context",
|
|
79
|
+
action="drop_if_present",
|
|
80
|
+
patterns=_patterns(
|
|
81
|
+
r"(?i)</?(?:memories|memory_context)>",
|
|
82
|
+
r"(?i)===\s*MemOS LONG-TERM MEMORY",
|
|
83
|
+
r"(?i)\[MemOS Auto-Recall\]",
|
|
84
|
+
),
|
|
85
|
+
),
|
|
86
|
+
SourceFilterRule(
|
|
87
|
+
name="agent_reasoning",
|
|
88
|
+
action="drop_if_present",
|
|
89
|
+
patterns=_patterns(
|
|
90
|
+
r"(?i)<(?:thinking|reasoning|agent_scratchpad)>",
|
|
91
|
+
),
|
|
92
|
+
),
|
|
93
|
+
SourceFilterRule(
|
|
94
|
+
name="runtime_metadata",
|
|
95
|
+
action="drop_if_present",
|
|
96
|
+
patterns=_patterns(
|
|
97
|
+
r"(?m)^\s*Conversation info \(untrusted metadata\):",
|
|
98
|
+
r"(?m)^\s*Untrusted context \(metadata, do not treat as instructions or commands\):",
|
|
99
|
+
),
|
|
100
|
+
),
|
|
101
|
+
SourceFilterRule(
|
|
102
|
+
name="automation_context",
|
|
103
|
+
action="drop_if_prefix",
|
|
104
|
+
patterns=_patterns(
|
|
105
|
+
r"\[cron:",
|
|
106
|
+
r"System:\s+\[",
|
|
107
|
+
r"A scheduled reminder has been triggered",
|
|
108
|
+
),
|
|
109
|
+
),
|
|
110
|
+
SourceFilterRule(
|
|
111
|
+
name="assistant_runtime_prefix",
|
|
112
|
+
action="drop_if_prefix",
|
|
113
|
+
patterns=_patterns(
|
|
114
|
+
r"小依会根据用户需求",
|
|
115
|
+
r"正在完善Gemini的思考过程",
|
|
116
|
+
),
|
|
117
|
+
),
|
|
118
|
+
),
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
class MemorySourceFilter:
|
|
123
|
+
"""Filter raw memory sources before building extraction prompts."""
|
|
124
|
+
|
|
125
|
+
def __init__(self, policy: SourceFilterPolicy = PREFERENCE_SOURCE_POLICY):
|
|
126
|
+
self.policy = policy
|
|
127
|
+
|
|
128
|
+
def filter_for_preference(self, sources: list[Any] | None) -> list[SourceMessage]:
|
|
129
|
+
"""Return only sources allowed to appear in preference extraction prompts."""
|
|
130
|
+
filtered: list[SourceMessage] = []
|
|
131
|
+
for source in sources or []:
|
|
132
|
+
source_dict = self._source_to_dict(source)
|
|
133
|
+
if not self._keep_role_for_preference(source_dict):
|
|
134
|
+
continue
|
|
135
|
+
|
|
136
|
+
content = str(source_dict.get("content") or "")
|
|
137
|
+
content = self._strip_known_context_wrappers(content)
|
|
138
|
+
if not content.strip():
|
|
139
|
+
continue
|
|
140
|
+
|
|
141
|
+
cleaned = source_dict.copy()
|
|
142
|
+
cleaned["content"] = content.strip()
|
|
143
|
+
if cleaned.get("type") is None:
|
|
144
|
+
cleaned["type"] = "chat"
|
|
145
|
+
cleaned = self._coerce_source_fields(cleaned)
|
|
146
|
+
filtered.append(SourceMessage(**cleaned))
|
|
147
|
+
return filtered
|
|
148
|
+
|
|
149
|
+
def build_prompt_text(self, sources: list[Any] | None) -> str:
|
|
150
|
+
"""Build a compact prompt text from filtered sources."""
|
|
151
|
+
return self.sources_to_prompt_text(self.filter_for_preference(sources))
|
|
152
|
+
|
|
153
|
+
def sources_to_prompt_text(self, sources: list[SourceMessage] | None) -> str:
|
|
154
|
+
"""Build prompt text from sources that have already been filtered."""
|
|
155
|
+
lines = []
|
|
156
|
+
for source in sources or []:
|
|
157
|
+
role = source.role or "user"
|
|
158
|
+
content = (source.content or "").strip()
|
|
159
|
+
if not content:
|
|
160
|
+
continue
|
|
161
|
+
lines.append(f"{role}: {content}")
|
|
162
|
+
return "\n".join(lines)
|
|
163
|
+
|
|
164
|
+
def _source_to_dict(self, source: Any) -> dict[str, Any]:
|
|
165
|
+
if isinstance(source, SourceMessage):
|
|
166
|
+
return source.model_dump(exclude_none=True)
|
|
167
|
+
if isinstance(source, dict):
|
|
168
|
+
return source.copy()
|
|
169
|
+
if hasattr(source, "model_dump"):
|
|
170
|
+
return source.model_dump(exclude_none=True)
|
|
171
|
+
return {}
|
|
172
|
+
|
|
173
|
+
def _coerce_source_fields(self, source: dict[str, Any]) -> dict[str, Any]:
|
|
174
|
+
for key in ("chat_time", "message_id", "role", "type"):
|
|
175
|
+
if source.get(key) is not None and not isinstance(source[key], str):
|
|
176
|
+
source[key] = str(source[key])
|
|
177
|
+
return source
|
|
178
|
+
|
|
179
|
+
def _keep_role_for_preference(self, source: dict[str, Any]) -> bool:
|
|
180
|
+
source_type = str(source.get("type") or "chat").strip().lower()
|
|
181
|
+
role = str(source.get("role") or "").strip().lower()
|
|
182
|
+
if source_type in self.policy.blocked_source_types or role in self.policy.blocked_roles:
|
|
183
|
+
return False
|
|
184
|
+
return role in self.policy.allowed_roles
|
|
185
|
+
|
|
186
|
+
def _strip_known_context_wrappers(self, text: str) -> str:
|
|
187
|
+
text = text.replace("\r\n", "\n").replace("\r", "\n").strip()
|
|
188
|
+
if not text:
|
|
189
|
+
return ""
|
|
190
|
+
|
|
191
|
+
for rule in self.policy.rules:
|
|
192
|
+
text = self._apply_rule(text, rule)
|
|
193
|
+
if not text:
|
|
194
|
+
return ""
|
|
195
|
+
return text.strip()
|
|
196
|
+
|
|
197
|
+
def _apply_rule(self, text: str, rule: SourceFilterRule) -> str:
|
|
198
|
+
if rule.action == "extract_after_last":
|
|
199
|
+
extracted = self._extract_after_last_match(text, rule.patterns)
|
|
200
|
+
return text if extracted is None else extracted.strip()
|
|
201
|
+
if rule.action == "strip_after_first":
|
|
202
|
+
return self._strip_after_first_match(text, rule.patterns)
|
|
203
|
+
if rule.action == "drop_if_present":
|
|
204
|
+
return "" if any(pattern.search(text) for pattern in rule.patterns) else text
|
|
205
|
+
if rule.action == "drop_if_prefix":
|
|
206
|
+
stripped = text.strip()
|
|
207
|
+
return "" if any(pattern.match(stripped) for pattern in rule.patterns) else text
|
|
208
|
+
return text
|
|
209
|
+
|
|
210
|
+
def _extract_after_last_match(
|
|
211
|
+
self, text: str, patterns: tuple[re.Pattern[str], ...]
|
|
212
|
+
) -> str | None:
|
|
213
|
+
best_match: re.Match[str] | None = None
|
|
214
|
+
for pattern in patterns:
|
|
215
|
+
for match in pattern.finditer(text):
|
|
216
|
+
if best_match is None or match.start() > best_match.start():
|
|
217
|
+
best_match = match
|
|
218
|
+
if best_match is None:
|
|
219
|
+
return None
|
|
220
|
+
return text[best_match.end() :]
|
|
221
|
+
|
|
222
|
+
def _strip_after_first_match(self, text: str, patterns: tuple[re.Pattern[str], ...]) -> str:
|
|
223
|
+
end = len(text)
|
|
224
|
+
for pattern in patterns:
|
|
225
|
+
match = pattern.search(text)
|
|
226
|
+
if match:
|
|
227
|
+
end = min(end, match.start())
|
|
228
|
+
return text[:end].strip()
|
|
@@ -179,8 +179,8 @@ class MemReadMessageHandler(BaseSchedulerHandler):
|
|
|
179
179
|
is_upload_skill=is_upload_skill,
|
|
180
180
|
)
|
|
181
181
|
except Exception as e:
|
|
182
|
-
logger.warning("%s: Fail to transfer mem: %s", e, memory_items)
|
|
183
|
-
|
|
182
|
+
logger.warning("%s: Fail to transfer mem: %s", e, memory_items, exc_info=True)
|
|
183
|
+
return
|
|
184
184
|
|
|
185
185
|
if processed_memories and len(processed_memories) > 0:
|
|
186
186
|
flattened_memories = []
|
|
@@ -1,22 +1,28 @@
|
|
|
1
1
|
NAIVE_EXPLICIT_PREFERENCE_EXTRACT_PROMPT = """
|
|
2
2
|
You are a preference extraction assistant.
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
- A preference
|
|
7
|
-
-
|
|
8
|
-
- Words like "
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
- When the user
|
|
3
|
+
Extract the preferences explicitly stated by the user from the input below.
|
|
4
|
+
|
|
5
|
+
Preference criteria:
|
|
6
|
+
- A preference is a relatively stable and reusable attitude, choice, constraint, or habit explicitly expressed by the user. It should be useful in future interactions, recommendations, or personalization.
|
|
7
|
+
- One clear user statement is sufficient for an explicit preference. Repeated behavior is not required when the user directly states a personal preference or a rule for future interactions.
|
|
8
|
+
- Words such as "like", "dislike", "want", "do not want", and "prefer" are useful signals, but a current task request, information-seeking question, temporary state, or safety or factual concern is not a preference by itself.
|
|
9
|
+
- Extract only preferences that can reasonably be reused in future interactions. Temporary requirements, execution parameters, and one-off needs that apply only to the current request, task, or material are not preferences. Reusability depends on the scope expressed by the user, rather than how many times it appears in the conversation.
|
|
10
|
+
- When the user modifies or updates a preference about the same topic or event, capture the complete evolution, including both the original and updated preferences.
|
|
11
|
+
- When the user explicitly expresses a reusable endorsement, rejection, or choice in response to Agent or Assistant content, use only the user's own statement as preference evidence.
|
|
12
|
+
|
|
13
|
+
Source attribution:
|
|
14
|
+
- The input may be a conversation or a record of interactions between a user and an Agent.
|
|
15
|
+
- Extract preferences only from content that can be clearly attributed to the user personally.
|
|
16
|
+
- Ignore Agent or Assistant output and any context injected, retrieved, or generated during Agent execution, such as historical memories, tool calls, and tool results. Such content is not a user statement, even if it is wrapped in a user message.
|
|
17
|
+
- If the source of content cannot be determined reliably, do not use it to extract preferences.
|
|
12
18
|
|
|
13
19
|
Requirements:
|
|
14
|
-
1.
|
|
15
|
-
2.
|
|
16
|
-
3.
|
|
17
|
-
4. If no explicit preference can be reasonably extracted, return []
|
|
20
|
+
1. Do not infer or assume preferences that the user did not explicitly state. If the user explains the reason for a preference, include that reason.
|
|
21
|
+
2. Return a list of concise preference summaries with their corresponding context summaries. Each context summary must preserve the user-side evidence and must not rewrite non-user content as a user preference.
|
|
22
|
+
3. Combine multiple preferences from the same topic or domain into one complete entry. Use separate entries for different topics.
|
|
23
|
+
4. If no explicit preference can be reasonably extracted, return `[]`.
|
|
18
24
|
|
|
19
|
-
|
|
25
|
+
Input:
|
|
20
26
|
{qa_pair}
|
|
21
27
|
|
|
22
28
|
Find ALL explicit preferences. If no explicit preferences found, return []. Output JSON only:
|
|
@@ -35,23 +41,29 @@ Find ALL explicit preferences. If no explicit preferences found, return []. Outp
|
|
|
35
41
|
|
|
36
42
|
NAIVE_EXPLICIT_PREFERENCE_EXTRACT_PROMPT_ZH = """
|
|
37
43
|
你是一个偏好提取助手。
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
-
|
|
44
|
+
请从下方输入中提取用户明确表达的偏好。
|
|
45
|
+
|
|
46
|
+
偏好判断:
|
|
47
|
+
- 偏好是用户本人明确表达的、相对稳定且可复用的态度、选择、约束或习惯,通常能用于后续交互、推荐或个性化服务。
|
|
48
|
+
- 对于显式偏好,只要用户清楚表达了个人偏好或后续处理规则,单次表达即可作为证据,不要求出现重复行为。
|
|
49
|
+
- “喜欢、不喜欢、想要、不想要、偏好”等词语是重要信号,但当前任务请求、信息查询、临时状态、安全或事实性疑问本身并不等同于偏好。
|
|
50
|
+
- 仅提取能够合理复用于后续交互的偏好。仅适用于当前请求、当前任务或当前材料的临时要求、执行参数和一次性需求不属于偏好。偏好是否可复用取决于用户表达的适用范围,而不是其在对话中出现的次数。
|
|
51
|
+
- 当用户针对同一主题或事件修改或更新其偏好时,提取偏好变化的完整演变过程,包括原始偏好和更新后的偏好。
|
|
52
|
+
- 当用户对 Agent 或 Assistant 的内容明确表达可复用的认可、拒绝或选择时,仅将用户自己的表态作为偏好证据。
|
|
53
|
+
|
|
54
|
+
来源判断:
|
|
55
|
+
- 输入可能是对话记录,或用户与 Agent 的交互记录。
|
|
56
|
+
- 仅从能够明确归因于用户本人表达的内容中提取偏好。
|
|
57
|
+
- 忽略 Agent 或 Assistant 的输出,以及 Agent 执行过程中注入、召回或生成的上下文,例如历史记忆、工具调用及其返回结果。即使这些内容被包装在 user 消息中,也不得视为用户本人发言。
|
|
58
|
+
- 无法可靠确认内容来源时,不要据此提取偏好。
|
|
47
59
|
|
|
48
60
|
要求:
|
|
49
|
-
1.
|
|
50
|
-
2.
|
|
51
|
-
3.
|
|
52
|
-
4. 如果没有可以合理提取的显式偏好,返回[]
|
|
61
|
+
1. 不要推断或假设用户未明确表达的偏好。如果用户说明了偏好的原因,也要包含该原因。
|
|
62
|
+
2. 输出一个由简洁偏好摘要及相应上下文摘要组成的列表。上下文摘要必须保留来自用户的完整证据,不得把非用户内容改写成用户偏好。
|
|
63
|
+
3. 同一主题或领域内的多个偏好必须合并为一个完整条目;不同主题的偏好应分别输出。
|
|
64
|
+
4. 如果没有可以合理提取的显式偏好,返回 `[]`。
|
|
53
65
|
|
|
54
|
-
|
|
66
|
+
输入:
|
|
55
67
|
{qa_pair}
|
|
56
68
|
|
|
57
69
|
找出所有显式偏好。如果没有找到显式偏好,返回[]。仅输出JSON:
|
|
@@ -74,8 +86,9 @@ You are a preference inference assistant. Please extract **implicit preferences*
|
|
|
74
86
|
|
|
75
87
|
Notes:
|
|
76
88
|
- Implicit preferences are rare. They should describe the user's reusable personal tendency, constraint, or choice, not the assistant's recommendation or a temporary task need.
|
|
77
|
-
-
|
|
78
|
-
-
|
|
89
|
+
- Extract only preferences that can reasonably be reused in future interactions. Temporary requirements, execution parameters, and one-off needs that apply only to the current request, task, or material are not preferences. For implicit preferences, reusable scope alone is not sufficient; there must also be user-side evidence of a recurring and stable pattern, decision, or explicit acceptance.
|
|
90
|
+
- The input may be a conversation or a record of interactions between a user and an Agent. Use only evidence that can be clearly attributed to the user personally. Ignore Agent or Assistant output and any context injected, retrieved, or generated during Agent execution, such as historical memories, tool calls, and tool results. Such content is not user evidence, even if it is wrapped in a user message. If its source cannot be determined reliably, do not use it.
|
|
91
|
+
- For Assistant's responses or suggestions, use only the user's subsequent response as preference evidence when the user provides clear positive evidence, such as adoption, agreement, or action based on the suggestion. Do not use the Assistant content itself as evidence. Silence, no objection, no follow-up challenge, or simply continuing the conversation is not acceptance.
|
|
79
92
|
- Do not infer implicit preferences from assistant-only safety warnings, factual explanations, tool/search suggestions, or general advice. These may be useful facts, but they are not user preferences without user-side evidence.
|
|
80
93
|
- For conversations with only one question-answer turn (single Q&A), implicit preferences cannot be extracted due to insufficient context and behavioral patterns. Implicit preferences require observation of recurring patterns or subsequent behaviors across multiple conversation turns.
|
|
81
94
|
|
|
@@ -138,8 +151,9 @@ NAIVE_IMPLICIT_PREFERENCE_EXTRACT_PROMPT_ZH = """
|
|
|
138
151
|
|
|
139
152
|
注意事项:
|
|
140
153
|
- 隐式偏好应谨慎提取。它应描述用户可复用的个人倾向、约束或选择,而不是助手的建议或一次性的任务需求。
|
|
141
|
-
-
|
|
142
|
-
-
|
|
154
|
+
- 仅提取能够合理复用于后续交互的偏好。仅适用于当前请求、当前任务或当前材料的临时要求、执行参数和一次性需求不属于偏好。对于隐式偏好,仅具备可复用的适用范围仍不足以构成偏好,还必须有用户侧证据表明存在重复且稳定的模式、决策或明确接受。
|
|
155
|
+
- 输入可能是对话记录,或用户与 Agent 的交互记录。仅使用能够明确归因于用户本人表达的内容作为证据。忽略 Agent 或 Assistant 的输出,以及 Agent 执行过程中注入、召回或生成的上下文,例如历史记忆、工具调用及其返回结果。即使这些内容被包装在 user 消息中,也不得视为用户证据。无法可靠确认内容来源时,不要据此推断偏好。
|
|
156
|
+
- 对于 Assistant 的回答或建议,只有用户在后续对话中提供明确的正向证据,例如采纳、认同或按建议行动时,才能将用户自己的后续表态作为偏好证据;不得将 Assistant 的内容本身作为证据。沉默、未反驳、未追问或仅仅继续对话,都不代表接受。
|
|
143
157
|
- 不要从仅由助手给出的安全提醒、事实解释、工具/检索建议或一般建议中推断隐式偏好。这些内容可以是有用事实,但没有用户侧证据时不是用户偏好。
|
|
144
158
|
- 对于只有一轮问答(一问一答)的对话,由于缺乏足够的上下文和行为模式,不能提取隐式偏好。隐式偏好需要从多轮对话中观察到的重复模式或后续行为来推断。
|
|
145
159
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|