Skip to content

Commit ee89e68

Browse files
authored
feat:add time step (#326)
* fix time * add timed step for llm * fix:ci code * fix:test * remove
1 parent 5b27384 commit ee89e68

File tree

4 files changed

+33
-31
lines changed

4 files changed

+33
-31
lines changed

src/memos/api/routers/product_router.py

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
import json
2+
import time
23
import traceback
34

4-
from datetime import datetime
5-
from typing import Annotated
6-
7-
from fastapi import APIRouter, Depends, HTTPException
5+
from fastapi import APIRouter, HTTPException
86
from fastapi.responses import StreamingResponse
97

108
from memos.api.config import APIConfig
11-
from memos.api.context.dependencies import G, get_g_object
129
from memos.api.product_models import (
1310
BaseResponse,
1411
ChatCompleteRequest,
@@ -79,18 +76,9 @@ def set_config(config):
7976

8077

8178
@router.post("/users/register", summary="Register a new user", response_model=UserRegisterResponse)
82-
def register_user(user_req: UserRegisterRequest, g: Annotated[G, Depends(get_g_object)]):
79+
def register_user(user_req: UserRegisterRequest):
8380
"""Register a new user with configuration and default cube."""
8481
try:
85-
# Set request-related information in g object
86-
g.user_id = user_req.user_id
87-
g.action = "user_register"
88-
g.timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
89-
90-
logger.info(f"Starting user registration for user_id: {user_req.user_id}")
91-
logger.info(f"Request trace_id: {g.trace_id}")
92-
logger.info(f"Request timestamp: {g.timestamp}")
93-
9482
# Get configuration for the user
9583
user_config, default_mem_cube = APIConfig.create_user_config(
9684
user_name=user_req.user_id, user_id=user_req.user_id
@@ -195,6 +183,7 @@ def get_all_memories(memory_req: GetMemoryRequest):
195183
def create_memory(memory_req: MemoryCreateRequest):
196184
"""Create a new memory for a specific user."""
197185
try:
186+
time_start_add = time.time()
198187
mos_product = get_mos_product_instance()
199188
mos_product.add(
200189
user_id=memory_req.user_id,
@@ -206,6 +195,9 @@ def create_memory(memory_req: MemoryCreateRequest):
206195
user_profile=memory_req.user_profile,
207196
session_id=memory_req.session_id,
208197
)
198+
logger.info(
199+
f"time add api : add time user_id: {memory_req.user_id} time is: {time.time() - time_start_add}"
200+
)
209201
return SimpleResponse(message="Memory created successfully")
210202

211203
except ValueError as err:
@@ -219,6 +211,7 @@ def create_memory(memory_req: MemoryCreateRequest):
219211
def search_memories(search_req: SearchRequest):
220212
"""Search memories for a specific user."""
221213
try:
214+
time_start_search = time.time()
222215
mos_product = get_mos_product_instance()
223216
result = mos_product.search(
224217
query=search_req.query,
@@ -227,6 +220,9 @@ def search_memories(search_req: SearchRequest):
227220
top_k=search_req.top_k,
228221
session_id=search_req.session_id,
229222
)
223+
logger.info(
224+
f"time search api : add time user_id: {search_req.user_id} time is: {time.time() - time_start_search}"
225+
)
230226
return SearchResponse(message="Search completed successfully", data=result)
231227

232228
except ValueError as err:

src/memos/mem_os/core.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,8 @@ def add(
662662
"messages_or_doc_path or memory_content or doc_path must be provided."
663663
)
664664
# TODO: asure that session_id is a valid string
665+
time_start = time.time()
666+
665667
target_session_id = session_id if session_id else self.session_id
666668
target_user_id = user_id if user_id is not None else self.user_id
667669
if mem_cube_id is None:
@@ -674,14 +676,25 @@ def add(
674676
mem_cube_id = accessible_cubes[0].cube_id # TODO not only first
675677
else:
676678
self._validate_cube_access(target_user_id, mem_cube_id)
679+
logger.info(
680+
f"time add: get mem_cube_id time user_id: {target_user_id} time is: {time.time() - time_start}"
681+
)
677682

683+
time_start_0 = time.time()
678684
if mem_cube_id not in self.mem_cubes:
679685
raise ValueError(f"MemCube '{mem_cube_id}' is not loaded. Please register.")
686+
logger.info(
687+
f"time add: get mem_cube_id check in mem_cubes time user_id: {target_user_id} time is: {time.time() - time_start_0}"
688+
)
689+
time_start_1 = time.time()
680690
if (
681691
(messages is not None)
682692
and self.config.enable_textual_memory
683693
and self.mem_cubes[mem_cube_id].text_mem
684694
):
695+
logger.info(
696+
f"time add: messages is not None and enable_textual_memory and text_mem is not None time user_id: {target_user_id} time is: {time.time() - time_start_1}"
697+
)
685698
if self.mem_cubes[mem_cube_id].config.text_mem.backend != "tree_text":
686699
add_memory = []
687700
metadata = TextualMemoryMetadata(
@@ -694,12 +707,15 @@ def add(
694707
self.mem_cubes[mem_cube_id].text_mem.add(add_memory)
695708
else:
696709
messages_list = [messages]
710+
time_start_2 = time.time()
697711
memories = self.mem_reader.get_memory(
698712
messages_list,
699713
type="chat",
700714
info={"user_id": target_user_id, "session_id": target_session_id},
701715
)
702-
716+
logger.info(
717+
f"time add: get mem_reader time user_id: {target_user_id} time is: {time.time() - time_start_2}"
718+
)
703719
mem_ids = []
704720
for mem in memories:
705721
mem_id_list: list[str] = self.mem_cubes[mem_cube_id].text_mem.add(mem)

src/memos/mem_os/product.py

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import json
33
import os
44
import random
5-
import sys
65
import time
76

87
from collections.abc import Generator
@@ -47,6 +46,7 @@
4746
get_memos_prompt,
4847
)
4948
from memos.types import MessageList
49+
from memos.utils import timed
5050

5151

5252
logger = get_logger(__name__)
@@ -258,6 +258,7 @@ def _preload_user_cubes(
258258
except Exception as e:
259259
logger.error(f"Error pre-loading cubes for user {user_id}: {e}", exc_info=True)
260260

261+
@timed
261262
def _load_user_cubes(
262263
self, user_id: str, default_cube_config: GeneralMemCubeConfig | None = None
263264
) -> None:
@@ -289,6 +290,7 @@ def _load_user_cubes(
289290
)
290291
except Exception as e:
291292
logger.error(f"Failed to load cube {cube.cube_id} for user {user_id}: {e}")
293+
logger.info(f"load user {user_id} cubes successfully")
292294

293295
def _ensure_user_instance(self, user_id: str, max_instances: int | None = None) -> None:
294296
"""
@@ -1320,14 +1322,6 @@ def search(
13201322
# Load user cubes if not already loaded
13211323
time_start = time.time()
13221324
self._load_user_cubes(user_id, self.default_cube_config)
1323-
try:
1324-
dict_size = sys.getsizeof(self.mem_cubes)
1325-
size_mb = dict_size / (1024 * 1024)
1326-
logger.info(
1327-
f"now search memcubes_size is : len is {len(self.mem_cubes)} and {size_mb}MB"
1328-
)
1329-
except Exception as e:
1330-
logger.warning(f"Failed to get memcubes size: {e}, ignore it")
13311325
load_user_cubes_time_end = time.time()
13321326
logger.info(
13331327
f"time search: load_user_cubes time user_id: {user_id} time is: {load_user_cubes_time_end - time_start}"
@@ -1376,12 +1370,6 @@ def add(
13761370

13771371
# Load user cubes if not already loaded
13781372
self._load_user_cubes(user_id, self.default_cube_config)
1379-
try:
1380-
dict_size = sys.getsizeof(self.mem_cubes)
1381-
size_mb = dict_size / (1024 * 1024)
1382-
logger.info(f"now add memcubes_size is : {len is len(self.mem_cubes)} and {size_mb}MB")
1383-
except Exception as e:
1384-
logger.warning(f"Failed to get memcubes size: {e}, ignore it")
13851373
result = super().add(
13861374
messages, memory_content, doc_path, mem_cube_id, user_id, session_id=session_id
13871375
)

src/memos/mem_reader/simple_struct.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
SIMPLE_STRUCT_MEM_READER_PROMPT,
2828
SIMPLE_STRUCT_MEM_READER_PROMPT_ZH,
2929
)
30+
from memos.utils import timed
3031

3132

3233
logger = log.get_logger(__name__)
@@ -126,6 +127,7 @@ def __init__(self, config: SimpleStructMemReaderConfig):
126127
self.embedder = EmbedderFactory.from_config(config.embedder)
127128
self.chunker = ChunkerFactory.from_config(config.chunker)
128129

130+
@timed
129131
def _process_chat_data(self, scene_data_info, info):
130132
mem_list = []
131133
for item in scene_data_info:

0 commit comments

Comments
 (0)