Skip to main content

Memory Class 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)
full_session_memoryboolFalseEnable complete chat history persistence
summary_memoryboolFalseEnable automatic session summaries
user_analysis_memoryboolFalseEnable user trait extraction
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="openai/gpt-4o-mini"
)

agent = Agent("openai/gpt-4o", memory=memory)

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

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("openai/gpt-4o", 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="openai/gpt-4o"
)

agent = Agent("openai/gpt-4o", 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")

# Update mode - accumulates traits over time
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="openai/gpt-4o"
)

agent = Agent("openai/gpt-4o", memory=memory)

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