Skip to content

Commit 1f57a62

Browse files
authored
feat: api client (#334)
1 parent a4de6bd commit 1f57a62

File tree

2 files changed

+14
-33
lines changed

2 files changed

+14
-33
lines changed

src/memos/api/client.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class MemOSClient:
1919

2020
def __init__(self, api_key: str | None = None, base_url: str | None = None):
2121
self.base_url = (
22-
base_url or os.getenv("MEMOS_BASE_URL") or "https://memos.memtensor.cn/api/openmem"
22+
base_url or os.getenv("MEMOS_BASE_URL") or "https://memos.memtensor.cn/api/openmem/v1"
2323
)
2424
api_key = api_key or os.getenv("MEMOS_API_KEY")
2525

@@ -34,15 +34,15 @@ def _validate_required_params(self, **params):
3434
if not param_value:
3535
raise ValueError(f"{param_name} is required")
3636

37-
def get_messages(
37+
def get_message(
3838
self, user_id: str, conversation_id: str | None = None
3939
) -> MemOSGetMessagesResponse:
4040
"""Get messages"""
4141
# Validate required parameters
4242
self._validate_required_params(user_id=user_id)
4343

4444
url = f"{self.base_url}/get/message"
45-
payload = {"userId": user_id, "conversationId": conversation_id}
45+
payload = {"user_id": user_id, "conversation_id": conversation_id}
4646
for retry in range(MAX_RETRY_COUNT):
4747
try:
4848
response = requests.post(
@@ -56,7 +56,7 @@ def get_messages(
5656
if retry == MAX_RETRY_COUNT - 1:
5757
raise
5858

59-
def add(
59+
def add_message(
6060
self, messages: list[dict[str, Any]], user_id: str, conversation_id: str
6161
) -> MemOSAddResponse:
6262
"""Add memories"""
@@ -66,7 +66,7 @@ def add(
6666
)
6767

6868
url = f"{self.base_url}/add/message"
69-
payload = {"messages": messages, "userId": user_id, "conversationId": conversation_id}
69+
payload = {"messages": messages, "user_id": user_id, "conversation_id": conversation_id}
7070
for retry in range(MAX_RETRY_COUNT):
7171
try:
7272
response = requests.post(
@@ -80,7 +80,7 @@ def add(
8080
if retry == MAX_RETRY_COUNT - 1:
8181
raise
8282

83-
def search(
83+
def search_memory(
8484
self, query: str, user_id: str, conversation_id: str, memory_limit_number: int = 6
8585
) -> MemOSSearchResponse:
8686
"""Search memories"""
@@ -90,9 +90,9 @@ def search(
9090
url = f"{self.base_url}/search/memory"
9191
payload = {
9292
"query": query,
93-
"userId": user_id,
94-
"conversationId": conversation_id,
95-
"memoryLimitNumber": memory_limit_number,
93+
"user_id": user_id,
94+
"conversation_id": conversation_id,
95+
"memory_limit_number": memory_limit_number,
9696
}
9797

9898
for retry in range(MAX_RETRY_COUNT):

src/memos/api/product_models.py

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -186,50 +186,31 @@ class SuggestionRequest(BaseRequest):
186186
class MessageDetail(BaseModel):
187187
"""Individual message detail model based on actual API response."""
188188

189-
role: str = Field(..., description="Message role (user/assistant)")
190-
content: str = Field(..., description="Message content")
191-
create_time: int | None = Field(
192-
None, alias="createTime", description="Message creation timestamp"
193-
)
194-
update_time: int | None = Field(
195-
None, alias="updateTime", description="Message update timestamp"
196-
)
189+
model_config = {"extra": "allow"}
197190

198191

199192
class MemoryDetail(BaseModel):
200193
"""Individual memory detail model based on actual API response."""
201194

202-
id: str = Field(..., description="Memory ID")
203-
memory_key: str = Field(..., alias="memoryKey", description="Memory key/title")
204-
memory_value: str = Field(..., alias="memoryValue", description="Memory content")
205-
memory_type: str = Field(
206-
..., alias="memoryType", description="Memory type (e.g., WorkingMemory)"
207-
)
208-
memory_time: int | None = Field(None, alias="memoryTime", description="Memory timestamp")
209-
conversation_id: str = Field(..., alias="conversationId", description="Conversation ID")
210-
status: str = Field(..., description="Memory status (e.g., activated)")
211-
confidence: float = Field(..., description="Memory confidence score")
212-
tags: list[str] = Field(default_factory=list, description="Memory tags")
213-
update_time: int = Field(..., alias="updateTime", description="Last update timestamp")
214-
relativity: float = Field(..., description="Memory relativity/similarity score")
195+
model_config = {"extra": "allow"}
215196

216197

217198
class GetMessagesData(BaseModel):
218199
"""Data model for get messages response based on actual API."""
219200

220201
message_detail_list: list[MessageDetail] = Field(
221-
default_factory=list, alias="messageDetailList", description="List of message details"
202+
default_factory=list, alias="memory_detail_list", description="List of message details"
222203
)
223204

224205

225206
class SearchMemoryData(BaseModel):
226207
"""Data model for search memory response based on actual API."""
227208

228209
memory_detail_list: list[MemoryDetail] = Field(
229-
default_factory=list, alias="memoryDetailList", description="List of memory details"
210+
default_factory=list, alias="memory_detail_list", description="List of memory details"
230211
)
231212
message_detail_list: list[MessageDetail] | None = Field(
232-
None, alias="messageDetailList", description="List of message details (usually None)"
213+
None, alias="message_detail_list", description="List of message details (usually None)"
233214
)
234215

235216

0 commit comments

Comments
 (0)