Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions src/memos/api/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class MemOSClient:

def __init__(self, api_key: str | None = None, base_url: str | None = None):
self.base_url = (
base_url or os.getenv("MEMOS_BASE_URL") or "https://memos.memtensor.cn/api/openmem"
base_url or os.getenv("MEMOS_BASE_URL") or "https://memos.memtensor.cn/api/openmem/v1"
)
api_key = api_key or os.getenv("MEMOS_API_KEY")

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

def get_messages(
def get_message(
self, user_id: str, conversation_id: str | None = None
) -> MemOSGetMessagesResponse:
"""Get messages"""
# Validate required parameters
self._validate_required_params(user_id=user_id)

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

def add(
def add_message(
self, messages: list[dict[str, Any]], user_id: str, conversation_id: str
) -> MemOSAddResponse:
"""Add memories"""
Expand All @@ -66,7 +66,7 @@ def add(
)

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

def search(
def search_memory(
self, query: str, user_id: str, conversation_id: str, memory_limit_number: int = 6
) -> MemOSSearchResponse:
"""Search memories"""
Expand All @@ -90,9 +90,9 @@ def search(
url = f"{self.base_url}/search/memory"
payload = {
"query": query,
"userId": user_id,
"conversationId": conversation_id,
"memoryLimitNumber": memory_limit_number,
"user_id": user_id,
"conversation_id": conversation_id,
"memory_limit_number": memory_limit_number,
}

for retry in range(MAX_RETRY_COUNT):
Expand Down
29 changes: 5 additions & 24 deletions src/memos/api/product_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,50 +186,31 @@ class SuggestionRequest(BaseRequest):
class MessageDetail(BaseModel):
"""Individual message detail model based on actual API response."""

role: str = Field(..., description="Message role (user/assistant)")
content: str = Field(..., description="Message content")
create_time: int | None = Field(
None, alias="createTime", description="Message creation timestamp"
)
update_time: int | None = Field(
None, alias="updateTime", description="Message update timestamp"
)
model_config = {"extra": "allow"}


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

id: str = Field(..., description="Memory ID")
memory_key: str = Field(..., alias="memoryKey", description="Memory key/title")
memory_value: str = Field(..., alias="memoryValue", description="Memory content")
memory_type: str = Field(
..., alias="memoryType", description="Memory type (e.g., WorkingMemory)"
)
memory_time: int | None = Field(None, alias="memoryTime", description="Memory timestamp")
conversation_id: str = Field(..., alias="conversationId", description="Conversation ID")
status: str = Field(..., description="Memory status (e.g., activated)")
confidence: float = Field(..., description="Memory confidence score")
tags: list[str] = Field(default_factory=list, description="Memory tags")
update_time: int = Field(..., alias="updateTime", description="Last update timestamp")
relativity: float = Field(..., description="Memory relativity/similarity score")
model_config = {"extra": "allow"}


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

message_detail_list: list[MessageDetail] = Field(
default_factory=list, alias="messageDetailList", description="List of message details"
default_factory=list, alias="memory_detail_list", description="List of message details"
)


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

memory_detail_list: list[MemoryDetail] = Field(
default_factory=list, alias="memoryDetailList", description="List of memory details"
default_factory=list, alias="memory_detail_list", description="List of memory details"
)
message_detail_list: list[MessageDetail] | None = Field(
None, alias="messageDetailList", description="List of message details (usually None)"
None, alias="message_detail_list", description="List of message details (usually None)"
)


Expand Down
Loading