11import os
2+ import traceback
23
34from typing import Any
45
5- from fastapi import APIRouter
6+ from fastapi import APIRouter , HTTPException
67
78from memos .api .config import APIConfig
89from memos .api .product_models import (
910 APIADDRequest ,
11+ APIChatCompleteRequest ,
1012 APISearchRequest ,
1113 MemoryResponse ,
1214 SearchResponse ,
2224from memos .llms .factory import LLMFactory
2325from memos .log import get_logger
2426from memos .mem_cube .navie import NaiveMemCube
27+ from memos .mem_os .product_server import MOSServer
2528from memos .mem_reader .factory import MemReaderFactory
2629from memos .memories .textual .tree_text_memory .organize .manager import MemoryManager
2730from memos .memories .textual .tree_text_memory .retrieve .internet_retriever_factory import (
@@ -126,7 +129,11 @@ def init_server():
126129 memory_size = _get_default_memory_size (default_cube_config ),
127130 is_reorganize = getattr (default_cube_config .text_mem .config , "reorganize" , False ),
128131 )
129-
132+ mos_server = MOSServer (
133+ mem_reader = mem_reader ,
134+ llm = llm ,
135+ online_bot = False ,
136+ )
130137 return (
131138 graph_db ,
132139 mem_reader ,
@@ -136,6 +143,7 @@ def init_server():
136143 internet_retriever ,
137144 memory_manager ,
138145 default_cube_config ,
146+ mos_server ,
139147 )
140148
141149
@@ -149,6 +157,7 @@ def init_server():
149157 internet_retriever ,
150158 memory_manager ,
151159 default_cube_config ,
160+ mos_server ,
152161) = init_server ()
153162
154163
@@ -280,3 +289,36 @@ def add_memories(add_req: APIADDRequest):
280289 message = "Memory added successfully" ,
281290 data = response_data ,
282291 )
292+
293+
294+ @router .post ("/chat/complete" , summary = "Chat with MemOS (Complete Response)" )
295+ def chat_complete (chat_req : APIChatCompleteRequest ):
296+ """Chat with MemOS for a specific user. Returns complete response (non-streaming)."""
297+ try :
298+ # Collect all responses from the generator
299+ naive_mem_cube = _create_naive_mem_cube ()
300+ content , references = mos_server .chat (
301+ query = chat_req .query ,
302+ user_id = chat_req .user_id ,
303+ cube_id = chat_req .mem_cube_id ,
304+ mem_cube = naive_mem_cube ,
305+ history = chat_req .history ,
306+ internet_search = chat_req .internet_search ,
307+ moscube = chat_req .moscube ,
308+ base_prompt = chat_req .base_prompt ,
309+ top_k = chat_req .top_k ,
310+ threshold = chat_req .threshold ,
311+ session_id = chat_req .session_id ,
312+ )
313+
314+ # Return the complete response
315+ return {
316+ "message" : "Chat completed successfully" ,
317+ "data" : {"response" : content , "references" : references },
318+ }
319+
320+ except ValueError as err :
321+ raise HTTPException (status_code = 404 , detail = str (traceback .format_exc ())) from err
322+ except Exception as err :
323+ logger .error (f"Failed to start chat: { traceback .format_exc ()} " )
324+ raise HTTPException (status_code = 500 , detail = str (traceback .format_exc ())) from err
0 commit comments