Skip to content

Commit 3f31e3d

Browse files
author
harvey_xiang
committed
Merge branch 'dev' into feat/add-openai-log
2 parents 25fee6a + 8fc1f27 commit 3f31e3d

File tree

8 files changed

+1101
-108
lines changed

8 files changed

+1101
-108
lines changed

src/memos/api/client.py

Lines changed: 451 additions & 14 deletions
Large diffs are not rendered by default.

src/memos/api/product_models.py

Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -798,6 +798,12 @@ class MemoryDetail(BaseModel):
798798
model_config = {"extra": "allow"}
799799

800800

801+
class FileDetail(BaseModel):
802+
"""Individual file detail model based on actual API response."""
803+
804+
model_config = {"extra": "allow"}
805+
806+
801807
class GetMessagesData(BaseModel):
802808
"""Data model for get messages response based on actual API."""
803809

@@ -806,6 +812,12 @@ class GetMessagesData(BaseModel):
806812
)
807813

808814

815+
class GetCreateKnowledgebaseData(BaseModel):
816+
"""Data model for create knowledgebase response based on actual API."""
817+
818+
id: str = Field(..., description="Knowledgebase id")
819+
820+
809821
class SearchMemoryData(BaseModel):
810822
"""Data model for search memory response based on actual API."""
811823

@@ -815,12 +827,63 @@ class SearchMemoryData(BaseModel):
815827
message_detail_list: list[MessageDetail] | None = Field(
816828
None, alias="message_detail_list", description="List of message details (usually None)"
817829
)
830+
preference_detail_list: list[MessageDetail] | None = Field(
831+
None,
832+
alias="preference_detail_list",
833+
description="List of preference details (usually None)",
834+
)
835+
tool_memory_detail_list: list[MessageDetail] | None = Field(
836+
None,
837+
alias="tool_memory_detail_list",
838+
description="List of tool_memor details (usually None)",
839+
)
840+
preference_note: str = Field(
841+
None, alias="preference_note", description="String of preference_note"
842+
)
843+
844+
845+
class GetKnowledgebaseFileData(BaseModel):
846+
"""Data model for search memory response based on actual API."""
847+
848+
file_detail_list: list[FileDetail] = Field(
849+
default_factory=list, alias="file_detail_list", description="List of files details"
850+
)
851+
852+
853+
class GetMemoryData(BaseModel):
854+
"""Data model for search memory response based on actual API."""
855+
856+
memory_detail_list: list[MemoryDetail] = Field(
857+
default_factory=list, alias="memory_detail_list", description="List of memory details"
858+
)
859+
message_detail_list: list[MessageDetail] | None = Field(
860+
None, alias="message_detail_list", description="List of message details (usually None)"
861+
)
818862

819863

820864
class AddMessageData(BaseModel):
821865
"""Data model for add message response based on actual API."""
822866

823867
success: bool = Field(..., description="Operation success status")
868+
task_id: str = Field(..., description="Operation task_id")
869+
status: str = Field(..., description="Operation task status")
870+
871+
872+
class DeleteMessageData(BaseModel):
873+
"""Data model for delete Message based on actual API."""
874+
875+
success: bool = Field(..., description="Operation success status")
876+
877+
class ChatMessageData(BaseModel):
878+
"""Data model for chat Message based on actual API."""
879+
880+
response: str = Field(..., description="Operation response")
881+
882+
883+
class GetTaskStatusMessageData(BaseModel):
884+
"""Data model for task status Message based on actual API."""
885+
886+
status: str = Field(..., description="Operation task status")
824887

825888

826889
# ─── MemOS Response Models (Similar to OpenAI ChatCompletion) ──────────────────
@@ -851,6 +914,129 @@ def memories(self) -> list[MemoryDetail]:
851914
"""Convenient access to memory list."""
852915
return self.data.memory_detail_list
853916

917+
@property
918+
def preferences(self) -> list[MemoryDetail]:
919+
"""Convenient access to preference list."""
920+
return self.data.preference_detail_list
921+
922+
@property
923+
def tool_memories(self) -> list[MemoryDetail]:
924+
"""Convenient access to tool_memory list."""
925+
return self.data.tool_memory_detail_list
926+
927+
928+
class MemOSDeleteKnowledgebaseResponse(BaseModel):
929+
"""Response model for delete knowledgebase operation based on actual API."""
930+
931+
code: int = Field(..., description="Response status code")
932+
message: str = Field(..., description="Response message")
933+
data: DeleteMessageData = Field(..., description="delete results data")
934+
935+
@property
936+
def success(self) -> bool:
937+
"""Convenient access to success status."""
938+
return self.data.success
939+
940+
941+
class MemOSDeleteMemoryResponse(BaseModel):
942+
"""Response model for delete knowledgebase operation based on actual API."""
943+
944+
code: int = Field(..., description="Response status code")
945+
message: str = Field(..., description="Response message")
946+
data: DeleteMessageData = Field(..., description="delete results data")
947+
948+
@property
949+
def success(self) -> bool:
950+
"""Convenient access to success status."""
951+
return self.data.success
952+
953+
class MemOSChatResponse(BaseModel):
954+
"""Response model for chat operation based on actual API."""
955+
956+
code: int = Field(..., description="Response status code")
957+
message: str = Field(..., description="Response message")
958+
data: ChatMessageData = Field(..., description="chat results data")
959+
960+
@property
961+
def response(self) -> str:
962+
"""Convenient access to success status."""
963+
return self.data.response
964+
965+
966+
class MemOSGetTaskStatusResponse(BaseModel):
967+
"""Response model for get task status operation based on actual API."""
968+
969+
code: int = Field(..., description="Response status code")
970+
message: str = Field(..., description="Response message")
971+
data: list[GetTaskStatusMessageData] = Field(..., description="delete results data")
972+
973+
@property
974+
def data(self) -> list[GetTaskStatusMessageData]:
975+
"""Convenient access to task status."""
976+
return self.data
977+
978+
979+
class MemOSCreateKnowledgebaseResponse(BaseModel):
980+
"""Response model for create knowledgebase operation based on actual API."""
981+
982+
code: int = Field(..., description="Response status code")
983+
message: str = Field(..., description="Response message")
984+
data: GetCreateKnowledgebaseData = Field(..., description="Messages data")
985+
986+
@property
987+
def knowledgebase_id(self) -> str:
988+
"""Convenient access to knowledgebase id."""
989+
return self.data.id
990+
991+
992+
class MemOSAddKnowledgebaseFileResponse(BaseModel):
993+
"""Response model for add knowledgebase-file operation based on actual API."""
994+
995+
code: int = Field(..., description="Response status code")
996+
message: str = Field(..., description="Response message")
997+
data: list[dict[str, Any]]
998+
999+
@property
1000+
def memories(self) -> list[dict[str, Any]]:
1001+
"""Convenient access to memory list."""
1002+
return self.data
1003+
1004+
1005+
class MemOSGetMemoryResponse(BaseModel):
1006+
"""Response model for get memory operation based on actual API."""
1007+
1008+
code: int = Field(..., description="Response status code")
1009+
message: str = Field(..., description="Response message")
1010+
data: SearchMemoryData = Field(..., description="Get results data")
1011+
1012+
@property
1013+
def memories(self) -> list[MemoryDetail]:
1014+
"""Convenient access to memory list."""
1015+
return self.data.memory_detail_list
1016+
1017+
@property
1018+
def preferences(self) -> list[MemoryDetail]:
1019+
"""Convenient access to preference list."""
1020+
return self.data.preference_detail_list
1021+
1022+
@property
1023+
def tool_memories(self) -> list[MemoryDetail]:
1024+
"""Convenient access to tool_memory list."""
1025+
return self.data.tool_memory_detail_list
1026+
1027+
1028+
class MemOSGetKnowledgebaseFileResponse(BaseModel):
1029+
"""Response model for get KnowledgebaseFile operation based on actual API."""
1030+
1031+
code: int = Field(..., description="Response status code")
1032+
message: str = Field(..., description="Response message")
1033+
data: GetKnowledgebaseFileData = Field(..., description="Get results data")
1034+
1035+
@property
1036+
def files(self) -> list[FileDetail]:
1037+
"""Convenient access to file list."""
1038+
return self.data.file_detail_list
1039+
8541040

8551041
class MemOSAddResponse(BaseModel):
8561042
"""Response model for add message operation based on actual API."""
@@ -864,6 +1050,39 @@ def success(self) -> bool:
8641050
"""Convenient access to success status."""
8651051
return self.data.success
8661052

1053+
@property
1054+
def task_id(self) -> str:
1055+
"""Convenient access to task_id status."""
1056+
return self.data.task_id
1057+
1058+
@property
1059+
def status(self) -> str:
1060+
"""Convenient access to status status."""
1061+
return self.data.status
1062+
1063+
1064+
class MemOSAddFeedBackResponse(BaseModel):
1065+
"""Response model for add feedback operation based on actual API."""
1066+
1067+
code: int = Field(..., description="Response status code")
1068+
message: str = Field(..., description="Response message")
1069+
data: AddMessageData = Field(..., description="Add operation data")
1070+
1071+
@property
1072+
def success(self) -> bool:
1073+
"""Convenient access to success status."""
1074+
return self.data.success
1075+
1076+
@property
1077+
def task_id(self) -> str:
1078+
"""Convenient access to task_id status."""
1079+
return self.data.task_id
1080+
1081+
@property
1082+
def status(self) -> str:
1083+
"""Convenient access to status status."""
1084+
return self.data.status
1085+
8671086

8681087
# ─── Scheduler Status Models ───────────────────────────────────────────────────
8691088

0 commit comments

Comments
 (0)