Skip to main content

Overview

Memory enables agents to remember conversations and learn about users across sessions. It maintains chat history, generates summaries, and builds user profiles for personalized interactions. Memory separates saving from loading: save flags control what is persisted to storage, while load flags control what is injected into subsequent runs. This allows fine-grained control — for example, saving full chat history while only injecting summaries to reduce token usage.

Installation

Memory requires a storage backend to persist data. Choose the storage option that fits your deployment needs.
Example: Setting up Memory with SQLiteFor local development and testing, use SQLite storage:
uv pip install "upsonic[sqlite-storage]"
Other storage options:
  • [redis-storage] - Redis for distributed, high-performance systems
  • [postgres-storage] - PostgreSQL for production, multi-node deployments
  • [mongo-storage] - MongoDB for document-based, scalable systems
  • [mem0-storage] - Mem0 Platform integration
For production deployments, PostgreSQL or Redis are recommended. See Storage Options for detailed configuration.

Key Features

  • Conversation History: Persist complete chat history across sessions
  • Session Summaries: Auto-generate condensed conversation summaries
  • User Profiles: Extract and learn user traits from interactions
  • Save/Load Separation: Independently control what is saved vs. what is injected into context
  • Multiple Storage Backends: SQLite, Redis, PostgreSQL, MongoDB, or in-memory
  • Shared Storage: Same storage backend can be used by both Memory and KnowledgeBase for unified persistence
  • Sync & Async Support: Both synchronous and asynchronous storage operations
  • HITL Checkpointing: Automatic checkpoint saving for Human-in-the-Loop resumption

Quick Start

from upsonic import Agent, Task
from upsonic.storage.memory import Memory
from upsonic.storage.sqlite import SqliteStorage

storage = SqliteStorage(db_file="memory.db")

memory = Memory(
    storage=storage,
    session_id="session_001",
    user_id="user_123",
    full_session_memory=True,    # Save chat history
    summary_memory=True,         # Save summaries
    user_analysis_memory=True,   # Save user profiles
    model="anthropic/claude-sonnet-4-5"
)

agent = Agent("anthropic/claude-sonnet-4-5", memory=memory)

result1 = agent.do(Task("My name is Alice and I'm a Python developer"))

result2 = agent.do(Task("What's my name and expertise?"))
print(result2)  # Alice, Python developer

Save vs Load Flags

Each memory type has a save flag and a load flag. By default, the load flag mirrors the save flag.
Save FlagLoad FlagPurpose
full_session_memoryload_full_session_memoryChat history
summary_memoryload_summary_memorySession summaries
user_analysis_memoryload_user_analysis_memoryUser profiles
memory = Memory(
    storage=storage,
    session_id="session_001",
    user_id="user_123",
    full_session_memory=True,         # Save full chat history
    summary_memory=True,              # Save summaries
    user_analysis_memory=True,        # Save user profiles
    load_full_session_memory=False,   # Don't inject raw history
    load_summary_memory=True,         # Inject summary only
    load_user_analysis_memory=True,   # Inject user profile
    model="anthropic/claude-sonnet-4-5"
)

Memory Types

TypePurposeRequires
Conversation MemoryFull chat history persistencesession_id
Summary MemoryCondensed session summariessession_id, model
User Analysis MemoryUser profile extractionuser_id, model

Storage Backends

BackendUse CasePersistence
SqliteStorageLocal development, single-nodeFile-based
RedisStorageDistributed, high-performanceIn-memory + optional persist
PostgresStorageProduction, multi-nodeDatabase
MongoStorageDocument-based, scalableDatabase
InMemoryStorageTesting, ephemeralNone

Storage Integrations

Browse All Memory Storage Backends

SQLite, PostgreSQL, Redis, MongoDB, Mem0, In-Memory, JSON — plus async variants for all backends.