diff --git a/config/demo_config_cn.yaml b/config/cli_chat_dash_cn.yaml similarity index 92% rename from config/demo_config_cn.yaml rename to config/cli_chat_dash_cn.yaml index 3bbd9e89..1d8269c5 100644 --- a/config/demo_config_cn.yaml +++ b/config/cli_chat_dash_cn.yaml @@ -2,25 +2,29 @@ global_config: language: cn max_workers: 5 +logger_config: + logger_name: memoryscope + logger_suffix: time + memory_chat: cli_memory_chat: class: chat.cli_memory_chat - memory_service: chat_memory_service + memory_service: memory_scope_service generation_model: dashscope_generation memory_service: - chat_memory_service: - class: memory.service.chat_memory_service + memory_scope_service: + class: memory.service.memory_scope_service memory_operations: read_message: class: memory.operation.frontend_operation workflow: read_message description: "read short memory" - read_memory: + retrieve_memory: class: memory.operation.frontend_operation workflow: set_query,[extract_time|retrieve_obs_ins,semantic_rank],fuse_rerank - description: "read long-term memory" + description: "retrieve long-term memory" list_memory: class: memory.operation.frontend_operation @@ -42,16 +46,16 @@ memory_service: workflow: add_memory description: "add a single observation" - write_memory: - class: memory.operation.write_memory_op + summary_observation_memory: + class: memory.operation.summary_observation_op workflow: info_filter,[get_observation|get_observation_with_time|load_today_memory],contra_repeat,store_memory - description: "write observation memory of the user" + description: "summary user's observation memory" interval_time: 1 - summary_memory: + summary_insight_memory: class: memory.operation.backend_operation workflow: load_obs_and_insight,get_reflection_subject,update_insight,long_contra_repeat,store_memory - description: "summary observation memory of the user" + description: "summary user's insight memory" interval_time: 15 worker: diff --git a/config/demo_config_en.yaml b/config/demo_config_en.yaml deleted file mode 100644 index f84c3e37..00000000 --- a/config/demo_config_en.yaml +++ /dev/null @@ -1,188 +0,0 @@ -global_config: - language: en - max_workers: 5 - -memory_chat: - cli_memory_chat: - class: chat.cli_memory_chat - memory_service: memory_chat_service - generation_model: dashscope_generation - -memory_service: - memory_chat_service: - class: memory.service.chat_memory_service - contextual_msg_count: 6 - memory_operations: - read_message: - class: memory.operation.frontend_operation - workflow: read_message - description: "read short memory" - - read_memory: - class: memory.operation.frontend_operation - workflow: set_query,[extract_time|retrieve_obs_ins,semantic_rank],fuse_rerank - description: "read long-term memory" - - list_memory: - class: memory.operation.frontend_operation - workflow: set_query,retrieve_top_memory,print_memory - description: "read all long-term memory of the user" - - delete_memory: - class: memory.operation.frontend_operation - workflow: set_query,retrieve_all_memory,delete_memory - description: "delete a single long-term memory" - - delete_all: - class: memory.operation.frontend_operation - workflow: set_query,retrieve_all_memory,delete_all - description: "delete all long-term memory" - - add_memory: - class: memory.operation.frontend_operation - workflow: add_memory - description: "add a single observation" - - write_memory: - class: memory.operation.write_memory_op - workflow: info_filter,[get_observation|get_observation_with_time|load_today_memory],contra_repeat,store_memory - description: "write observation memory of the user" - interval_time: 5 - - summary_memory: - class: memory.operation.backend_operation - workflow: load_obs_and_insight,get_reflection_subject,update_insight,long_contra_repeat,store_memory - description: "summary observation memory of the user" - interval_time: 30 - -worker: - dummy: - class: memory.worker.dummy_worker - generation_model: dashscope_generation - embedding_model: dashscope_embedding - rank_model: dashscope_rank - read_message: - class: memory.worker.frontend.read_message_worker - set_query: - class: memory.worker.frontend.set_query_worker - retrieve_obs_ins: - class: memory.worker.frontend.retrieve_memory_worker - retrieve_obs_top_k: 100 - retrieve_ins_top_k: 100 - extract_time: - class: memory.worker.frontend.extract_time_worker - generation_model: dashscope_generation - generation_model_kwargs: - top_k: 1 - semantic_rank: - class: memory.worker.frontend.semantic_rank_worker - rank_model: dashscope_rank - fuse_rerank: - class: memory.worker.frontend.fuse_rerank_worker - fuse_score_threshold: 0.05 - fuse_ratio_dict: - conversation: 0.5 - observation: 1 - obs_customized: 1.2 - insight: 2.0 - fuse_time_ratio: 2.0 - fuse_rerank_top_k: 10 - retrieve_top_memory: - class: memory.worker.frontend.retrieve_memory_worker - retrieve_obs_top_k: 100 - retrieve_ins_top_k: 100 - retrieve_expired_top_k: 100 - print_memory: - class: memory.worker.frontend.print_memory_worker - retrieve_all_memory: - class: memory.worker.frontend.retrieve_memory_worker - retrieve_obs_top_k: 100 - retrieve_ins_top_k: 100 - retrieve_expired_top_k: 100 - delete_memory: - class: memory.worker.write.update_memory_worker - method: delete_memory - delete_all: - class: memory.worker.write.update_memory_worker - method: delete_all - add_memory: - class: memory.worker.write.update_memory_worker - method: from_query - info_filter: - class: memory.worker.write.info_filter_worker - generation_model: dashscope_generation - generation_model_kwargs: - top_k: 1 - load_today_memory: - class: memory.worker.write.load_memory_worker - retrieve_today_top_k: 100 - get_observation: - class: memory.worker.write.get_observation_worker - generation_model: dashscope_generation - generation_model_kwargs: - top_k: 1 - get_observation_with_time: - class: memory.worker.write.get_observation_with_time_worker - generation_model: dashscope_generation - generation_model_kwargs: - top_k: 1 - contra_repeat: - class: memory.worker.write.contra_repeat_worker - generation_model: dashscope_generation - generation_model_kwargs: - top_k: 1 - store_memory: - class: memory.worker.write.update_memory_worker - method: from_memory_key - memory_key: all - load_obs_and_insight: - class: memory.worker.write.load_memory_worker - retrieve_not_reflected_top_k: 100 - retrieve_not_updated_top_k: 100 - retrieve_insight_top_k: 100 - get_reflection_subject: - class: memory.worker.summary.get_reflection_subject_worker - generation_model: dashscope_generation - reflect_obs_cnt_threshold: 10 - generation_model_kwargs: - top_k: 1 - update_insight: - class: memory.worker.summary.update_insight_worker - generation_model: dashscope_generation - generation_model_kwargs: - top_k: 1 - rank_model: dashscope_rank - long_contra_repeat: - class: memory.worker.summary.long_contra_repeat_worker - generation_model: dashscope_generation - generation_model_kwargs: - top_k: 1 - -models: - dashscope_generation: - class: models.llama_index_generation_model - module_name: dashscope_generation - model_name: qwen-max - max_tokens: 2000 - dashscope_embedding: - class: models.llama_index_embedding_model - module_name: dashscope_embedding - model_name: text-embedding-v2 - dashscope_rank: - class: models.llama_index_rank_model - module_name: dashscope_rank - model_name: gte-rerank - dummy_generation: - class: models.dummy_generation_model - module_name: dummy_generation - model_name: dummy_generation_model - -memory_store: - class: storage.llama_index_es_memory_store - embedding_model: dashscope_embedding - index_name: memory_index - es_url: http://localhost:9200 - use_hybrid: true - -monitor: - class: storage.dummy_monitor \ No newline at end of file diff --git a/config/test_config.yaml b/config/test_config.yaml deleted file mode 100644 index d5ee7c77..00000000 --- a/config/test_config.yaml +++ /dev/null @@ -1,152 +0,0 @@ -global_config: - language: cn - max_workers: 5 - -memory_chat: - cli_memory_chat: - class: chat.cli_memory_chat - memory_service: memory_chat_service - generation_model: dashscope_generation - -memory_service: - memory_chat_service: - class: memory.service.chat_memory_service - contextual_msg_count: 6 - memory_operations: - read_message: - class: memory.operation.read_message - description: "read session messages of the user" - read_memory: - class: memory.operation.read_memory - workflow: set_query,[extract_time|retrieve_memory1,semantic_rank],fuse_rerank - description: "read related memories of the user" - list_memory: - class: memory.operation.read_memory - workflow: set_query,retrieve_memory2,print_memory - description: "read all memories of the user" - write_memory: - class: memory.operation.write_memory - workflow: info_filter,load_memory1,[get_observation|get_observation_with_time],contra_repeat,store_memory - description: "write observation memories of the user" - interval_time: 5 - summary_memory: - class: memory.operation.summary_memory - workflow: load_memory2,get_reflection_subject,update_insight,long_contra_repeat,store_memory - description: "summary observation memories of the user" - interval_time: 30 - -worker: - dummy: - class: memory.worker.dummy_worker - generation_model: dashscope_generation - embedding_model: dashscope_embedding - rank_model: dashscope_rank - set_query: - class: memory.worker.read.set_query_worker - retrieve_memory1: - class: memory.worker.read.retrieve_memory_worker - retrieve_obs_top_k: 100 - retrieve_ins_pf_top_k: 100 - retrieve_expired_top_k: 0 - extract_time: - class: memory.worker.read.extract_time_worker - generation_model: dashscope_generation - generation_model_top_k: 1 - semantic_rank: - class: memory.worker.read.semantic_rank_worker - rank_model: dashscope_rank - fuse_rerank: - class: memory.worker.read.fuse_rerank_worker - fuse_score_threshold: 0.1 - fuse_ratio_dict: - conversation: 0.5 - observation: 1 - obs_customized: 1.2 - insight: 2.0 - fuse_time_ratio: 2.0 - fuse_rerank_top_k: 10 - retrieve_memory2: - class: memory.worker.read.retrieve_memory_worker - retrieve_obs_top_k: 100 - retrieve_ins_pf_top_k: 100 - retrieve_expired_top_k: 100 - print_memory: - class: memory.worker.read.print_memory_worker - info_filter: - class: memory.worker.write.info_filter_worker - generation_model: dashscope_generation - preserved_scores: 2,3 - info_filter_msg_max_size: 200 - generation_model_top_k: 1 - load_memory1: - class: memory.worker.write.load_memory_worker - retrieve_not_reflected_top_k: 0 - retrieve_not_updated_top_k: 0 - retrieve_insight_top_k: 0 - today_obs_top_k: 100 - get_observation: - class: memory.worker.write.get_observation_worker - generation_model: dashscope_generation - generation_model_top_k: 1 - get_observation_with_time: - class: memory.worker.write.get_observation_with_time_worker - generation_model: dashscope_generation - generation_model_top_k: 1 - contra_repeat: - class: memory.worker.write.contra_repeat_worker - generation_model: dashscope_generation - generation_model_top_k: 1 - retrieve_top_k: 30 - contra_repeat_max_count: 50 - store_memory: - class: memory.worker.write.store_memory_worker - store_key: all - load_memory2: - class: memory.worker.write.load_memory_worker - retrieve_not_reflected_top_k: 100 - retrieve_not_updated_top_k: 100 - retrieve_insight_top_k: 100 - today_obs_top_k: 0 - get_reflection_subject: - class: memory.worker.summary.get_reflection_subject_worker - retrieve_top_k: 100 - reflect_obs_cnt_threshold: 10 - generation_model_top_k: 1 - update_insight: - class: memory.worker.summary.update_insight_worker - update_insight_threshold: 0.1 - generation_model_top_k: 1 - update_insight_max_thread: 10 - long_contra_repeat: - class: memory.worker.summary.long_contra_repeat_worker - long_contra_repeat_top_k: 2 - long_contra_repeat_threshold: 0.1 - generation_model_top_k: 1 - -models: - dashscope_generation: - class: models.llama_index_generation_model - module_name: dashscope_generation - model_name: qwen-max - dashscope_embedding: - class: models.llama_index_embedding_model - module_name: dashscope_embedding - model_name: text-embedding-v2 - dashscope_rank: - class: models.llama_index_rank_model - module_name: dashscope_rank - model_name: gte-rerank - dummy_generation: - class: models.dummy_generation_model - module_name: dummy_generation - model_name: dummy_generation_model - -memory_store: - class: storage.llama_index_es_memory_store_sync - embedding_model: dashscope_embedding - index_name: memory_index - es_url: http://localhost:9200 - use_hybrid: false - -monitor: - class: storage.dummy_monitor \ No newline at end of file diff --git a/memory_scope/chat/cli_memory_chat.py b/memory_scope/chat/cli_memory_chat.py index e0442665..d3214b9b 100644 --- a/memory_scope/chat/cli_memory_chat.py +++ b/memory_scope/chat/cli_memory_chat.py @@ -160,7 +160,7 @@ class CliMemoryChat(BaseMemoryChat): # Incorporate memory into the system prompt if available system_prompt = self.prompt_handler.system_prompt - memories: str = self.memory_service.read_memory() + memories: str = self.memory_service.retrieve_memory() if memories: memory_prompt = self.prompt_handler.memory_prompt system_prompt = "\n".join([x.strip() for x in [system_prompt, memory_prompt, memories]]) diff --git a/memory_scope/memory/operation/write_memory_op.py b/memory_scope/memory/operation/summary_observation_op.py similarity index 95% rename from memory_scope/memory/operation/write_memory_op.py rename to memory_scope/memory/operation/summary_observation_op.py index 08d8ce6e..47100423 100644 --- a/memory_scope/memory/operation/write_memory_op.py +++ b/memory_scope/memory/operation/summary_observation_op.py @@ -3,10 +3,10 @@ from memory_scope.enumeration.message_role_enum import MessageRoleEnum from memory_scope.memory.operation.backend_operation import BackendOperation -class WriteMemoryOp(BackendOperation): +class SummaryObservationOp(BackendOperation): def __init__(self, **kwargs): - super(WriteMemoryOp, self).__init__(**kwargs) + super(SummaryObservationOp, self).__init__(**kwargs) self.message_lock = kwargs.get("message_lock", None) self.contextual_msg_min_count: int = kwargs.get("contextual_msg_min_count", 0) diff --git a/memory_scope/memory/service/base_memory_service.py b/memory_scope/memory/service/base_memory_service.py index 18c4d81a..e4a7310e 100644 --- a/memory_scope/memory/service/base_memory_service.py +++ b/memory_scope/memory/service/base_memory_service.py @@ -16,7 +16,7 @@ class BaseMemoryService(metaclass=ABCMeta): def __init__(self, memory_operations: Dict[str, dict], - read_memory_key: str = "read_memory", + retrieve_memory_key: str = "retrieve_memory", read_message_key: str = "read_message", **kwargs): """ @@ -25,12 +25,12 @@ class BaseMemoryService(metaclass=ABCMeta): Args: memory_operations (Dict[str, dict]): A dictionary defining available memory operations. - read_memory_key (str): The key indicating a read memory operation. Defaults to "read_memory". + retrieve_memory_key (str): The key indicating a retrieve memory operation. Defaults to "retrieve_memory". read_message_key (str): The key for reading messages. Defaults to "read_message". **kwargs: Additional parameters to customize service behavior. """ self.memory_operations: Dict[str, dict] = memory_operations - self.read_memory_key: str = read_memory_key + self.retrieve_memory_key: str = retrieve_memory_key self.read_message_key: str = read_message_key self._operation_dict: Dict[str, BaseOperation] = {} @@ -73,16 +73,16 @@ class BaseMemoryService(metaclass=ABCMeta): self._op_description_dict = {k: v.description for k, v in self._operation_dict.items()} return self._op_description_dict - def read_memory(self): + def retrieve_memory(self): """ - Executes the operation associated with reading memory. - Asserts that the operation for reading memory has been initialized. + Executes the operation associated with retrieved memory. + Asserts that the operation for retrieved memory has been initialized. Returns: - Any: The result of the read memory operation. + Any: The result of the retrieved memory operation. """ - assert self.read_memory_key in self._operation_dict, f"op={self.read_memory_key} is not inited!" - return self.do_operation(self.read_memory_key) + assert self.retrieve_memory_key in self._operation_dict, f"op={self.retrieve_memory_key} is not inited!" + return self.do_operation(self.retrieve_memory_key) def read_message(self): """ diff --git a/memory_scope/memory/service/chat_memory_service.py b/memory_scope/memory/service/memory_scope_service.py similarity index 99% rename from memory_scope/memory/service/chat_memory_service.py rename to memory_scope/memory/service/memory_scope_service.py index afd95d02..754fa7f6 100644 --- a/memory_scope/memory/service/chat_memory_service.py +++ b/memory_scope/memory/service/memory_scope_service.py @@ -6,7 +6,7 @@ from memory_scope.scheme.message import Message from memory_scope.utils.tool_functions import init_instance_by_config -class ChatMemoryService(BaseMemoryService): +class MemoryScopeService(BaseMemoryService): def __init__(self, history_msg_count: int = 100, contextual_msg_max_count: int = 20, diff --git a/memory_scope/utils/logger.py b/memory_scope/utils/logger.py index bad19709..9be4afcf 100644 --- a/memory_scope/utils/logger.py +++ b/memory_scope/utils/logger.py @@ -14,7 +14,7 @@ class Logger(logging.Logger): level: int = logging.INFO, format_style: str = LOG_FORMAT, date_format_style: str = DATE_FORMAT, - to_stream: bool = True, + to_stream: bool = False, to_file: bool = True, file_mode: str = "w", file_type: str = "log",