Skip to content

Commit 8819cc5

Browse files
Wang-Daojiyuan.wang
andauthored
Feat/optimize cloud service api (#816)
* add get_user_names_by_memory_ids api * modify delete api --------- Co-authored-by: yuan.wang <[email protected]>
1 parent 03b79a2 commit 8819cc5

File tree

6 files changed

+31
-12
lines changed

6 files changed

+31
-12
lines changed

src/memos/api/handlers/memory_handler.py

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -246,22 +246,17 @@ def handle_delete_memories(delete_mem_req: DeleteMemoryRequest, naive_mem_cube:
246246

247247
try:
248248
if delete_mem_req.memory_ids is not None:
249-
for cube_id in delete_mem_req.writable_cube_ids:
250-
naive_mem_cube.text_mem.delete(delete_mem_req.memory_ids, user_name=cube_id)
249+
naive_mem_cube.text_mem.delete_by_memory_ids(delete_mem_req.memory_ids)
251250
if naive_mem_cube.pref_mem is not None:
252251
naive_mem_cube.pref_mem.delete(delete_mem_req.memory_ids)
253252
elif delete_mem_req.file_ids is not None:
254253
naive_mem_cube.text_mem.delete_by_filter(
255254
writable_cube_ids=delete_mem_req.writable_cube_ids, file_ids=delete_mem_req.file_ids
256255
)
257256
elif delete_mem_req.filter is not None:
258-
# TODO: Implement deletion by filter
259-
# Need to find memories matching filter and delete them
260-
logger.warning("Deletion by filter not implemented yet")
261-
return DeleteMemoryResponse(
262-
message="Deletion by filter not implemented yet",
263-
data={"status": "failure"},
264-
)
257+
naive_mem_cube.text_mem.delete_by_filter(filter=delete_mem_req.filter)
258+
if naive_mem_cube.pref_mem is not None:
259+
naive_mem_cube.pref_mem.delete_by_filter(filter=delete_mem_req.filter)
265260
except Exception as e:
266261
logger.error(f"Failed to delete memories: {e}", exc_info=True)
267262
return DeleteMemoryResponse(

src/memos/api/product_models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -784,7 +784,7 @@ class GetMemoryRequest(BaseRequest):
784784
class DeleteMemoryRequest(BaseRequest):
785785
"""Request model for deleting memories."""
786786

787-
writable_cube_ids: list[str] = Field(..., description="Writable cube IDs")
787+
writable_cube_ids: list[str] = Field(None, description="Writable cube IDs")
788788
memory_ids: list[str] | None = Field(None, description="Memory IDs")
789789
file_ids: list[str] | None = Field(None, description="File IDs")
790790
filter: dict[str, Any] | None = Field(None, description="Filter for the memory")

src/memos/api/routers/server_router.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ def feedback_memories(feedback_req: APIFeedbackRequest):
340340
# =============================================================================
341341

342342

343-
@router.get(
343+
@router.post(
344344
"/get_user_names_by_memory_ids",
345345
summary="Get user names by memory ids",
346346
response_model=GetUserNamesByMemoryIdsResponse,

src/memos/memories/textual/preference.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,15 @@ def delete(self, memory_ids: list[str]) -> None:
314314
for collection_name in collection_list:
315315
self.vector_db.delete(collection_name, memory_ids)
316316

317+
def delete_by_filter(self, filter: dict[str, Any]) -> None:
318+
"""Delete memories by filter.
319+
Args:
320+
filter (dict[str, Any]): Filter criteria.
321+
"""
322+
collection_list = self.vector_db.config.collection_name
323+
for collection_name in collection_list:
324+
self.vector_db.delete_by_filter(collection_name=collection_name, filter=filter)
325+
317326
def delete_with_collection_name(self, collection_name: str, memory_ids: list[str]) -> None:
318327
"""Delete memories by their IDs and collection name.
319328
Args:

src/memos/memories/textual/tree.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,13 @@ def delete(self, memory_ids: list[str], user_name: str | None = None) -> None:
347347
except Exception as e:
348348
logger.warning(f"TreeTextMemory.delete_hard: failed to delete {mid}: {e}")
349349

350+
def delete_by_memory_ids(self, memory_ids: list[str]) -> None:
351+
"""Delete memories by memory_ids."""
352+
try:
353+
self.graph_store.delete_node_by_prams(memory_ids=memory_ids)
354+
except Exception as e:
355+
logger.error(f"An error occurred while deleting memories by memory_ids: {e}")
356+
350357
def delete_all(self) -> None:
351358
"""Delete all memories and their relationships from the graph store."""
352359
try:
@@ -358,7 +365,7 @@ def delete_all(self) -> None:
358365

359366
def delete_by_filter(
360367
self,
361-
writable_cube_ids: list[str],
368+
writable_cube_ids: list[str] | None = None,
362369
file_ids: list[str] | None = None,
363370
filter: dict | None = None,
364371
) -> None:

src/memos/vec_dbs/milvus.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -646,3 +646,11 @@ def delete(self, collection_name: str, ids: list[str]) -> None:
646646
collection_name=collection_name,
647647
ids=ids,
648648
)
649+
650+
def delete_by_filter(self, collection_name: str, filter: dict[str, Any]) -> None:
651+
"""Delete items from the vector database by filter."""
652+
expr = self._dict_to_expr(filter) if filter else ""
653+
self.client.delete(
654+
collection_name=collection_name,
655+
filter=expr,
656+
)

0 commit comments

Comments
 (0)