Integration patterns and best practices for adding persistent memory to LLM agents using the Letta Learning SDK