3131 AckResponse ,
3232 ClientMemoryRecord ,
3333 HealthCheckResponse ,
34+ MemoryMessage ,
3435 MemoryRecord ,
3536 MemoryRecordResults ,
3637 MemoryTypeEnum ,
@@ -675,7 +676,7 @@ async def search_long_term_memory(
675676
676677 try :
677678 response = await self ._client .post (
678- "/v1/memory/search" ,
679+ "/v1/long-term- memory/search" ,
679680 json = payload ,
680681 )
681682 response .raise_for_status ()
@@ -2055,7 +2056,7 @@ async def update_working_memory_data(
20552056 async def append_messages_to_working_memory (
20562057 self ,
20572058 session_id : str ,
2058- messages : list [dict [str , Any ]], # Expect proper message dicts
2059+ messages : list [dict [str , Any ] | MemoryMessage ],
20592060 namespace : str | None = None ,
20602061 model_name : str | None = None ,
20612062 context_window_max : int | None = None ,
@@ -2068,7 +2069,7 @@ async def append_messages_to_working_memory(
20682069
20692070 Args:
20702071 session_id: Target session
2071- messages: List of message dictionaries with 'role' and 'content' keys
2072+ messages: List of message dictionaries or MemoryMessage objects
20722073 namespace: Optional namespace
20732074 model_name: Optional model name for token-based summarization
20742075 context_window_max: Optional direct specification of context window max tokens
@@ -2081,29 +2082,49 @@ async def append_messages_to_working_memory(
20812082 session_id = session_id , namespace = namespace , user_id = user_id
20822083 )
20832084
2084- # Validate new messages have required structure
2085+ # Convert messages to MemoryMessage objects
2086+ converted_messages = []
20852087 for msg in messages :
2086- if not isinstance (msg , dict ) or "role" not in msg or "content" not in msg :
2088+ if isinstance (msg , MemoryMessage ):
2089+ converted_messages .append (msg )
2090+ elif isinstance (msg , dict ):
2091+ if "role" not in msg or "content" not in msg :
2092+ raise ValueError ("All messages must have 'role' and 'content' keys" )
2093+ # Build message kwargs, only including non-None values
2094+ message_kwargs = {
2095+ "role" : msg ["role" ],
2096+ "content" : msg ["content" ],
2097+ }
2098+ if msg .get ("id" ) is not None :
2099+ message_kwargs ["id" ] = msg ["id" ]
2100+ if msg .get ("persisted_at" ) is not None :
2101+ message_kwargs ["persisted_at" ] = msg ["persisted_at" ]
2102+
2103+ converted_messages .append (MemoryMessage (** message_kwargs ))
2104+ else :
20872105 raise ValueError (
2088- "All messages must be dictionaries with 'role' and 'content' keys "
2106+ "All messages must be dictionaries or MemoryMessage objects "
20892107 )
20902108
2091- # Get existing messages (already in proper dict format from get_working_memory)
2109+ # Get existing messages
20922110 existing_messages = []
20932111 if existing_memory and existing_memory .messages :
20942112 existing_messages = existing_memory .messages
20952113
2096- final_messages = existing_messages + messages
2114+ final_messages = existing_messages + converted_messages
20972115
20982116 # Create updated working memory
2099- working_memory = WorkingMemory (
2100- session_id = session_id ,
2101- namespace = namespace or self .config .default_namespace ,
2102- messages = final_messages ,
2103- memories = existing_memory .memories if existing_memory else [],
2104- data = existing_memory .data if existing_memory else {},
2105- context = existing_memory .context if existing_memory else None ,
2106- user_id = existing_memory .user_id if existing_memory else None ,
2117+ working_memory = (
2118+ existing_memory .model_copy (
2119+ update = {"messages" : final_messages },
2120+ )
2121+ if existing_memory
2122+ else WorkingMemory (
2123+ session_id = session_id ,
2124+ namespace = namespace or self .config .default_namespace ,
2125+ messages = final_messages ,
2126+ user_id = user_id or None ,
2127+ )
21072128 )
21082129
21092130 return await self .put_working_memory (
@@ -2198,7 +2219,6 @@ async def memory_prompt(
21982219 payload ["long_term_search" ] = long_term_search
21992220
22002221 try :
2201- print ("Payload: " , payload )
22022222 response = await self ._client .post (
22032223 "/v1/memory/prompt" ,
22042224 json = payload ,
0 commit comments