From 8e4aa75a11b7fb2d558a42ee9c79a908139dfef2 Mon Sep 17 00:00:00 2001 From: Elvis <1693372324@qq.com> Date: Tue, 6 Jan 2026 15:53:53 +0800 Subject: [PATCH 1/4] fix: update get_memory sdk --- src/memos/api/client.py | 6 +++- src/memos/api/product_models.py | 54 +++------------------------------ 2 files changed, 10 insertions(+), 50 deletions(-) diff --git a/src/memos/api/client.py b/src/memos/api/client.py index 1129ddddf..91bc86829 100644 --- a/src/memos/api/client.py +++ b/src/memos/api/client.py @@ -177,7 +177,9 @@ def search_memory( if retry == MAX_RETRY_COUNT - 1: raise - def get_memory(self, user_id: str, include_preference: str) -> MemOSGetMemoryResponse | None: + def get_memory( + self, user_id: str, include_preference: bool = True, page: int = 1, size: int = 10 + ) -> MemOSGetMemoryResponse | None: """get memories""" # Validate required parameters self._validate_required_params(include_preference=include_preference, user_id=user_id) @@ -186,6 +188,8 @@ def get_memory(self, user_id: str, include_preference: str) -> MemOSGetMemoryRes payload = { "include_preference": include_preference, "user_id": user_id, + "page": page, + "size": size, } for retry in range(MAX_RETRY_COUNT): diff --git a/src/memos/api/product_models.py b/src/memos/api/product_models.py index ee7a45c2d..5bdc134d9 100644 --- a/src/memos/api/product_models.py +++ b/src/memos/api/product_models.py @@ -319,15 +319,6 @@ class APISearchRequest(BaseRequest): description="Number of textual memories to retrieve (top-K). Default: 10.", ) - dedup: Literal["no", "sim"] | None = Field( - None, - description=( - "Optional dedup option for textual memories. " - "Use 'no' for no dedup, 'sim' for similarity dedup. " - "If None, default exact-text dedup is applied." - ), - ) - pref_top_k: int = Field( 6, ge=0, @@ -772,19 +763,12 @@ class GetMemoryRequest(BaseRequest): mem_cube_id: str = Field(..., description="Cube ID") user_id: str | None = Field(None, description="User ID") include_preference: bool = Field(True, description="Whether to handle preference memory") - page: int | None = Field( - None, - description="Page number (starts from 1). If None, exports all data without pagination.", - ) - page_size: int | None = Field( - None, description="Number of items per page. If None, exports all data without pagination." - ) class DeleteMemoryRequest(BaseRequest): """Request model for deleting memories.""" - writable_cube_ids: list[str] = Field(None, description="Writable cube IDs") + writable_cube_ids: list[str] = Field(..., description="Writable cube IDs") memory_ids: list[str] | None = Field(None, description="Memory IDs") file_ids: list[str] | None = Field(None, description="File IDs") filter: dict[str, Any] | None = Field(None, description="Filter for the memory") @@ -872,8 +856,8 @@ class GetMemoryData(BaseModel): memory_detail_list: list[MemoryDetail] = Field( default_factory=list, alias="memory_detail_list", description="List of memory details" ) - message_detail_list: list[MessageDetail] | None = Field( - None, alias="message_detail_list", description="List of message details (usually None)" + preference_detail_list: list[MessageDetail] | None = Field( + None, alias="preference_detail_list", description="List of preference detail" ) @@ -1025,7 +1009,7 @@ class MemOSGetMemoryResponse(BaseModel): code: int = Field(..., description="Response status code") message: str = Field(..., description="Response message") - data: SearchMemoryData = Field(..., description="Get results data") + data: GetMemoryData = Field(..., description="Get results data") @property def memories(self) -> list[MemoryDetail]: @@ -1033,15 +1017,10 @@ def memories(self) -> list[MemoryDetail]: return self.data.memory_detail_list @property - def preferences(self) -> list[MemoryDetail]: + def preferences(self) -> list[MessageDetail] | None: """Convenient access to preference list.""" return self.data.preference_detail_list - @property - def tool_memories(self) -> list[MemoryDetail]: - """Convenient access to tool_memory list.""" - return self.data.tool_memory_detail_list - class MemOSGetKnowledgebaseFileResponse(BaseModel): """Response model for get KnowledgebaseFile operation based on actual API.""" @@ -1184,26 +1163,3 @@ class AllStatusResponse(BaseResponse[AllStatusResponseData]): """Response model for full scheduler status operations.""" message: str = "Scheduler status summary retrieved successfully" - - -# ─── Internal API Endpoints Models (for internal use) ─────────────────────────────────────────────────── - - -class GetUserNamesByMemoryIdsRequest(BaseRequest): - """Request model for getting user names by memory ids.""" - - memory_ids: list[str] = Field(..., description="Memory IDs") - - -class GetUserNamesByMemoryIdsResponse(BaseResponse[dict[str, str | None]]): - """Response model for getting user names by memory ids.""" - - -class ExistMemCubeIdRequest(BaseRequest): - """Request model for checking if mem cube id exists.""" - - mem_cube_id: str = Field(..., description="Mem cube ID") - - -class ExistMemCubeIdResponse(BaseResponse[dict[str, bool]]): - """Response model for checking if mem cube id exists.""" From 426eee30efc0ecc237de6ff4646c3d19df7aaf50 Mon Sep 17 00:00:00 2001 From: Elvis <1693372324@qq.com> Date: Tue, 6 Jan 2026 16:05:20 +0800 Subject: [PATCH 2/4] fix: update get_memory sdk --- src/memos/api/product_models.py | 41 ++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/memos/api/product_models.py b/src/memos/api/product_models.py index 5bdc134d9..d5f301c9d 100644 --- a/src/memos/api/product_models.py +++ b/src/memos/api/product_models.py @@ -319,6 +319,15 @@ class APISearchRequest(BaseRequest): description="Number of textual memories to retrieve (top-K). Default: 10.", ) + dedup: Literal["no", "sim"] | None = Field( + None, + description=( + "Optional dedup option for textual memories. " + "Use 'no' for no dedup, 'sim' for similarity dedup. " + "If None, default exact-text dedup is applied." + ), + ) + pref_top_k: int = Field( 6, ge=0, @@ -763,12 +772,19 @@ class GetMemoryRequest(BaseRequest): mem_cube_id: str = Field(..., description="Cube ID") user_id: str | None = Field(None, description="User ID") include_preference: bool = Field(True, description="Whether to handle preference memory") + page: int | None = Field( + None, + description="Page number (starts from 1). If None, exports all data without pagination.", + ) + page_size: int | None = Field( + None, description="Number of items per page. If None, exports all data without pagination." + ) class DeleteMemoryRequest(BaseRequest): """Request model for deleting memories.""" - writable_cube_ids: list[str] = Field(..., description="Writable cube IDs") + writable_cube_ids: list[str] = Field(None, description="Writable cube IDs") memory_ids: list[str] | None = Field(None, description="Memory IDs") file_ids: list[str] | None = Field(None, description="File IDs") filter: dict[str, Any] | None = Field(None, description="Filter for the memory") @@ -1163,3 +1179,26 @@ class AllStatusResponse(BaseResponse[AllStatusResponseData]): """Response model for full scheduler status operations.""" message: str = "Scheduler status summary retrieved successfully" + + +# ─── Internal API Endpoints Models (for internal use) ─────────────────────────────────────────────────── + + +class GetUserNamesByMemoryIdsRequest(BaseRequest): + """Request model for getting user names by memory ids.""" + + memory_ids: list[str] = Field(..., description="Memory IDs") + + +class GetUserNamesByMemoryIdsResponse(BaseResponse[dict[str, str | None]]): + """Response model for getting user names by memory ids.""" + + +class ExistMemCubeIdRequest(BaseRequest): + """Request model for checking if mem cube id exists.""" + + mem_cube_id: str = Field(..., description="Mem cube ID") + + +class ExistMemCubeIdResponse(BaseResponse[dict[str, bool]]): + """Response model for checking if mem cube id exists.""" From c89980fba8366d26af79f60ae9eb713112b97a74 Mon Sep 17 00:00:00 2001 From: Elvis <1693372324@qq.com> Date: Tue, 6 Jan 2026 16:10:50 +0800 Subject: [PATCH 3/4] fix: update get_memory sdk --- src/memos/api/product_models.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/memos/api/product_models.py b/src/memos/api/product_models.py index d5f301c9d..ccdea3353 100644 --- a/src/memos/api/product_models.py +++ b/src/memos/api/product_models.py @@ -1025,6 +1025,10 @@ class MemOSGetMemoryResponse(BaseModel): code: int = Field(..., description="Response status code") message: str = Field(..., description="Response message") + total: int = Field(..., description="Response total") + size: int = Field(..., description="Response size") + current: int = Field(..., description="Response current") + pages: int = Field(..., description="Response pages") data: GetMemoryData = Field(..., description="Get results data") @property From a8d64f17c6cc5c088a9675a4e73e2a98e98d61e9 Mon Sep 17 00:00:00 2001 From: Elvis <1693372324@qq.com> Date: Tue, 6 Jan 2026 16:26:45 +0800 Subject: [PATCH 4/4] fix: update get_memory sdk --- src/memos/api/product_models.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/memos/api/product_models.py b/src/memos/api/product_models.py index ccdea3353..d5f301c9d 100644 --- a/src/memos/api/product_models.py +++ b/src/memos/api/product_models.py @@ -1025,10 +1025,6 @@ class MemOSGetMemoryResponse(BaseModel): code: int = Field(..., description="Response status code") message: str = Field(..., description="Response message") - total: int = Field(..., description="Response total") - size: int = Field(..., description="Response size") - current: int = Field(..., description="Response current") - pages: int = Field(..., description="Response pages") data: GetMemoryData = Field(..., description="Get results data") @property