Skip to content

Commit 6e0a123

Browse files
authored
Merge branch 'feat/demo-product' into feat/demo-product
2 parents 86754c6 + 0dde160 commit 6e0a123

File tree

4 files changed

+52
-26
lines changed

4 files changed

+52
-26
lines changed

src/memos/mem_scheduler/base_scheduler.py

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
from memos.mem_scheduler.modules.retriever import SchedulerRetriever
1818
from memos.mem_scheduler.modules.schemas import (
1919
ACTIVATION_MEMORY_TYPE,
20-
ACTIVATION_MEMORY_VLLM_BACKEND,
2120
ADD_LABEL,
2221
DEFAULT_ACT_MEM_DUMP_PATH,
2322
DEFAULT_CONSUME_INTERVAL_SECONDS,
@@ -33,7 +32,8 @@
3332
TreeTextMemory_SEARCH_METHOD,
3433
)
3534
from memos.mem_scheduler.utils import normalize_name
36-
from memos.memories.activation.kv import KVCacheItem, KVCacheMemory
35+
from memos.memories.activation.kv import KVCacheMemory
36+
from memos.memories.activation.vllmkv import VLLMKVCacheItem, VLLMKVCacheMemory
3737
from memos.memories.textual.tree import TextualMemoryItem, TreeTextMemory
3838
from memos.templates.mem_scheduler_prompts import MEMORY_ASSEMBLY_TEMPLATE
3939

@@ -88,7 +88,6 @@ def __init__(self, config: BaseSchedulerConfig):
8888
self.auth_config_path: str | Path | None = self.config.get("auth_config_path", None)
8989
self.auth_config = None
9090
self.rabbitmq_config = None
91-
self.act_mem_backend = ACTIVATION_MEMORY_VLLM_BACKEND
9291

9392
def initialize_modules(self, chat_llm: BaseLLM, process_llm: BaseLLM | None = None):
9493
if process_llm is None:
@@ -186,8 +185,13 @@ def update_activation_memory(
186185
logger.error("Not Implemented.")
187186

188187
try:
189-
assert isinstance(mem_cube.act_mem, KVCacheMemory)
190-
act_mem: KVCacheMemory = mem_cube.act_mem
188+
if isinstance(mem_cube.act_mem, VLLMKVCacheMemory):
189+
act_mem: VLLMKVCacheMemory = mem_cube.act_mem
190+
elif isinstance(mem_cube.act_mem, KVCacheMemory):
191+
act_mem: KVCacheMemory = mem_cube.act_mem
192+
else:
193+
logger.error("Not Implemented.")
194+
return
191195

192196
text_memory = MEMORY_ASSEMBLY_TEMPLATE.format(
193197
memory_text="".join(
@@ -200,14 +204,17 @@ def update_activation_memory(
200204
)
201205

202206
# huggingface or vllm kv cache
203-
original_cache_items: list[KVCacheItem] = act_mem.get_all()
204-
pre_cache_item: KVCacheItem = original_cache_items[-1]
205-
original_text_memories = pre_cache_item.records.text_memories
206-
act_mem.delete_all()
207-
cache_item: KVCacheItem = act_mem.extract(text_memory)
207+
original_cache_items: list[VLLMKVCacheItem] = act_mem.get_all()
208+
original_text_memories = []
209+
if len(original_cache_items) > 0:
210+
pre_cache_item: VLLMKVCacheItem = original_cache_items[-1]
211+
original_text_memories = pre_cache_item.records.text_memories
212+
act_mem.delete_all()
213+
214+
cache_item = act_mem.extract(text_memory)
208215
cache_item.records.text_memories = new_text_memories
209216

210-
act_mem.add(cache_item)
217+
act_mem.add([cache_item])
211218
act_mem.dump(self.act_mem_dump_path)
212219

213220
self.log_activation_memory_update(
@@ -219,10 +226,11 @@ def update_activation_memory(
219226
)
220227

221228
except Exception as e:
222-
logger.warning(f"MOS-based activation memory update failed: {e}")
229+
logger.warning(f"MOS-based activation memory update failed: {e}", exc_info=True)
223230

224231
def update_activation_memory_periodically(
225232
self,
233+
interval_seconds: int,
226234
user_id: str,
227235
mem_cube_id: str,
228236
mem_cube: GeneralMemCube,
@@ -231,8 +239,10 @@ def update_activation_memory_periodically(
231239

232240
if self.monitor.timed_trigger(
233241
last_time=self.monitor._last_activation_mem_update_time,
234-
interval_seconds=self.monitor.act_mem_update_interval,
242+
interval_seconds=interval_seconds,
235243
):
244+
logger.info(f"Updating activation memory for user {user_id} and mem_cube {mem_cube_id}")
245+
236246
self.monitor.update_memory_monitors(
237247
user_id=user_id, mem_cube_id=mem_cube_id, mem_cube=mem_cube
238248
)
@@ -241,10 +251,24 @@ def update_activation_memory_periodically(
241251
m.memory_text for m in self.monitor.activation_memory_monitors[user_id][mem_cube_id]
242252
]
243253

254+
logger.info(
255+
f"Collected {len(new_activation_memories)} new memory entries for processing"
256+
)
257+
244258
self.update_activation_memory(new_memories=new_activation_memories, mem_cube=mem_cube)
245259

246260
self.monitor._last_activation_mem_update_time = datetime.now()
247261

262+
logger.debug(
263+
f"Activation memory update completed at {self.monitor._last_activation_mem_update_time}"
264+
)
265+
else:
266+
logger.info(
267+
f"Skipping update - {interval_seconds} second interval not yet reached. "
268+
f"Last update time is {self.monitor._last_activation_mem_update_time} and now is"
269+
f"{datetime.now()}"
270+
)
271+
248272
def submit_messages(self, messages: ScheduleMessageItem | list[ScheduleMessageItem]):
249273
"""Submit multiple messages to the message queue."""
250274
if isinstance(messages, ScheduleMessageItem):

src/memos/mem_scheduler/general_scheduler.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,10 @@ def _answer_message_consumer(self, messages: list[ScheduleMessageItem]) -> None:
8282
# for status update
8383
self._set_current_context_from_message(msg=messages[0])
8484

85+
# update acivation memories
8586
if self.enable_act_memory_update:
8687
self.update_activation_memory_periodically(
88+
interval_seconds=self.monitor.act_mem_update_interval,
8789
user_id=user_id,
8890
mem_cube_id=mem_cube_id,
8991
mem_cube=messages[0].mem_cube,
@@ -105,13 +107,6 @@ def _add_message_consumer(self, messages: list[ScheduleMessageItem]) -> None:
105107
# for status update
106108
self._set_current_context_from_message(msg=messages[0])
107109

108-
if self.enable_act_memory_update:
109-
self.update_activation_memory_periodically(
110-
user_id=user_id,
111-
mem_cube_id=mem_cube_id,
112-
mem_cube=messages[0].mem_cube,
113-
)
114-
115110
# submit logs
116111
for msg in messages:
117112
user_inputs = json.loads(msg.content)
@@ -122,6 +117,15 @@ def _add_message_consumer(self, messages: list[ScheduleMessageItem]) -> None:
122117
mem_cube=msg.mem_cube,
123118
)
124119

120+
# update acivation memories
121+
if self.enable_act_memory_update:
122+
self.update_activation_memory_periodically(
123+
interval_seconds=self.monitor.act_mem_update_interval,
124+
user_id=user_id,
125+
mem_cube_id=mem_cube_id,
126+
mem_cube=messages[0].mem_cube,
127+
)
128+
125129
def process_session_turn(
126130
self,
127131
queries: str | list[str],
@@ -146,7 +150,7 @@ def process_session_turn(
146150

147151
text_mem_base = mem_cube.text_mem
148152
if not isinstance(text_mem_base, TreeTextMemory):
149-
logger.error("Not implemented!")
153+
logger.error("Not implemented!", exc_info=True)
150154
return
151155

152156
working_memory: list[TextualMemoryItem] = text_mem_base.get_working_memory()

src/memos/mem_scheduler/modules/retriever.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def search(
5959
else:
6060
raise NotImplementedError(str(type(text_mem_base)))
6161
except Exception as e:
62-
logger.error(f"Fail to search. The exeption is {e}.")
62+
logger.error(f"Fail to search. The exeption is {e}.", exc_info=True)
6363
results = []
6464
return results
6565

@@ -142,6 +142,7 @@ def filter_too_short_memories(
142142
Returns:
143143
List of memories with short entries removed
144144
"""
145+
# TODO: Chinese
145146
if not text_memories:
146147
logging.debug("Received empty memories list in short memory filter")
147148
return []
@@ -209,7 +210,7 @@ def replace_working_memory(
209210
response = extract_json_dict(response)
210211
text_memories_with_new_order = response.get("new_order", [])[:top_k]
211212
except Exception as e:
212-
logger.error(f"Fail to rerank with LLM, Exeption: {e}.")
213+
logger.error(f"Fail to rerank with LLM, Exeption: {e}.", exc_info=True)
213214
text_memories_with_new_order = unique_memory[:top_k]
214215

215216
memories_with_new_order = []

src/memos/mem_scheduler/modules/schemas.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,6 @@
4747
MONITOR_WORKING_MEMORY_TYPE = "MonitorWorkingMemoryType"
4848
MONITOR_ACTIVATION_MEMORY_TYPE = "MonitorActivationMemoryType"
4949

50-
# Backends
51-
ACTIVATION_MEMORY_VLLM_BACKEND = "VLLMForActivationMemory"
52-
ACTIVATION_MEMORY_HF_BACKEND = "HugggingaceForActivationMemory"
5350

5451
# new types
5552
UserID = NewType("UserID", str)

0 commit comments

Comments
 (0)