async def update_memories_agent( user_id: int, messages: list[dict], existing_memories: list[RetrievedMemory] ): def get_point_id_from_memory_id(memory_id): return existing_memories[memory_id].point_id async def add_memory(memory_ext: str) -> str: """ Add the new_memory into the database. """ embeddings = await generate_embeddings( [memory_text] ) await insert_memories( memories = [ EmbeddedMemory( user_id=user_id, memory_text=memory_text, date=datetime.now().strftime("%Y-%m-%d %H:%m"), embedding=embeddings[0] ) ] ) return f"Memory: '{memory_text}' was added to DB" async def update(memory_id: int, updated_memory_text: str, ): """ Updating memory_id to use updated_memory_text Args: memory_id: integer index of the memory to replace updated_memory_text: Simple atomic factoid to replace the old memory with the new memory """ point_id = get_point_id_from_memory_id(memory_id) await delete_records([point_id]) embeddings = await generate_embeddings( [updated_memory_text] ) await insert_memories( memories = [ EmbeddedMemory( user_id=user_id, memory_text=updated_memory_text, categories=categories, date=datetime.now().strftime("%Y-%m-%d %H:%m"), embedding=embeddings[0] ) ] ) return f"Memory {memory_id} has been updated to: '{updated_memory_text}'" async def noop(): """ Call this is no action is required """ return "No action done" async def delete(memory_ids: list[int]): """ Remove these memory_ids from the database """ await delete_records(memory_ids) return f"Memory {memory_ids} deleted" memory_updater = dspy.ReAct( UpdateMemorySignature, tools=[add_memory, update, delete, noop], max_iters=3 ) out = await memory_updater.acall( messages=messages, existing_memories=memory_ids )