Skip to main content

Memory Class Parameters

Save Flags

Control what is persisted to storage after each run.
ParameterTypeDefaultDescription
full_session_memoryboolFalsePersist complete chat history to storage
summary_memoryboolFalseGenerate and persist session summaries
user_analysis_memoryboolFalseAnalyze and persist user trait profiles

Load Flags

Control what is injected into subsequent runs as context. Each defaults to its corresponding save flag.
ParameterTypeDefaultDescription
load_full_session_memorybool | NoneNoneInject chat history into runs (defaults to full_session_memory)
load_summary_memorybool | NoneNoneInject session summary into runs (defaults to summary_memory)
load_user_analysis_memorybool | NoneNoneInject user profile into runs (defaults to user_analysis_memory)

General Parameters

ParameterTypeDefaultDescription
storageStorage(required)Storage backend for persistence
session_idstr | NoneNoneSession identifier (auto-generated if not provided)
user_idstr | NoneNoneUser identifier (auto-generated if not provided)
num_last_messagesint | NoneNoneLimit history to last N message turns
modelstr | Model | NoneNoneModel for summaries/user analysis
user_profile_schemaBaseModel | NoneNoneCustom Pydantic model for user profiles
dynamic_user_profileboolFalseLet agent create custom profile fields
user_memory_modeLiteral['update', 'replace']'update'How to update user profiles
feed_tool_call_resultsboolFalseInclude tool call results in history
debugboolFalseEnable debug logging
debug_levelint1Debug verbosity (1-2)

Basic Configuration

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

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

memory = Memory(
    storage=storage,
    session_id="session_001",
    user_id="user_123",
    full_session_memory=True,
    summary_memory=True,
    user_analysis_memory=True,
    model="anthropic/claude-sonnet-4-5"
)

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

result = agent.do(Task("Hello! I'm learning Python"))
print(result)

Save/Load Separation

Save everything to storage but only inject summaries and user profiles into subsequent runs. This reduces token usage while preserving full history for auditing or debugging.
from upsonic import Agent, Task
from upsonic.storage.memory import Memory
from upsonic.storage.sqlite import SqliteStorage

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

memory = Memory(
    storage=storage,
    session_id="session_001",
    user_id="user_123",
    full_session_memory=True,         # Save raw chat history
    summary_memory=True,              # Save summaries
    user_analysis_memory=True,        # Save user profiles
    load_full_session_memory=False,   # Don't inject raw history into context
    load_summary_memory=True,         # Inject summary instead
    load_user_analysis_memory=True,   # Inject user profile
    model="anthropic/claude-sonnet-4-5"
)

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

result1 = agent.do(Task("My name is Alice, I work on ML pipelines"))
result2 = agent.do(Task("What do you know about me?"))
print(result2)  # Recalls via summary + user profile, not raw history

Summary-Only Mode

Use summaries without persisting full chat history:
from upsonic import Agent, Task
from upsonic.storage.memory import Memory
from upsonic.storage.sqlite import SqliteStorage

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

memory = Memory(
    storage=storage,
    session_id="session_001",
    full_session_memory=False,  # No raw history saved
    summary_memory=True,        # Only summaries are saved and injected
    model="anthropic/claude-sonnet-4-5"
)

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

result1 = agent.do(Task("The project deadline is next Friday"))
result2 = agent.do(Task("When is the deadline?"))
print(result2)  # Recalls via summary

Message Limiting

Control memory size by limiting message history:
from upsonic import Agent, Task
from upsonic.storage.memory import Memory
from upsonic.storage.sqlite import SqliteStorage

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

memory = Memory(
    storage=storage,
    session_id="session_001",
    full_session_memory=True,
    num_last_messages=10  # Keep only last 10 turns
)

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

result = agent.do(Task("What topics have we discussed?"))
print(result)

Custom User Profile Schema

Define specific fields for user profiles:
from pydantic import BaseModel, Field
from typing import Optional, List
from upsonic import Agent, Task
from upsonic.storage.memory import Memory
from upsonic.storage.sqlite import SqliteStorage

class CustomerProfile(BaseModel):
    name: Optional[str] = Field(None, description="Customer name")
    company: Optional[str] = Field(None, description="Company name")
    role: Optional[str] = Field(None, description="Job role")
    interests: Optional[List[str]] = Field(None, description="Areas of interest")

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

memory = Memory(
    storage=storage,
    session_id="session_001",
    user_id="customer_456",
    user_analysis_memory=True,
    user_profile_schema=CustomerProfile,
    model="anthropic/claude-sonnet-4-5"
)

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

result = agent.do(Task("I'm John from Acme Corp, working as a data engineer"))
print(result)

Update Modes

Control how user profiles are updated:
ModeBehavior
'update'Merge new traits with existing profile
'replace'Replace entire profile with new traits
from upsonic import Agent, Task
from upsonic.storage.memory import Memory
from upsonic.storage.sqlite import SqliteStorage

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

memory = Memory(
    storage=storage,
    session_id="session_001",
    user_id="user_789",
    user_analysis_memory=True,
    user_memory_mode='update',  # Default: merge new with existing
    model="anthropic/claude-sonnet-4-5"
)

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

result = agent.do(Task("I prefer dark mode and use vim"))
print(result)