Documentation Index
Fetch the complete documentation index at: https://docs.upsonic.ai/llms.txt
Use this file to discover all available pages before exploring further.
Memory Class Parameters
Save Flags
Control what is persisted to storage after each run.
| Parameter | Type | Default | Description |
|---|
full_session_memory | bool | False | Persist complete chat history to storage |
summary_memory | bool | False | Generate and persist session summaries |
user_analysis_memory | bool | False | Analyze and persist user trait profiles |
Load Flags
Control what is injected into subsequent runs as context. Each defaults to its corresponding save flag.
| Parameter | Type | Default | Description |
|---|
load_full_session_memory | bool | None | None | Inject chat history into runs (defaults to full_session_memory) |
load_summary_memory | bool | None | None | Inject session summary into runs (defaults to summary_memory) |
load_user_analysis_memory | bool | None | None | Inject user profile into runs (defaults to user_analysis_memory) |
General Parameters
| Parameter | Type | Default | Description |
|---|
storage | Storage | (required) | Storage backend for persistence |
session_id | str | None | None | Session identifier (auto-generated if not provided) |
user_id | str | None | None | User identifier (auto-generated if not provided) |
num_last_messages | int | None | None | Limit history to last N message turns |
model | str | Model | None | None | Model for summaries/user analysis |
user_profile_schema | BaseModel | None | None | Custom Pydantic model for user profiles |
dynamic_user_profile | bool | False | Let agent create custom profile fields |
user_memory_mode | Literal['update', 'replace'] | 'update' | How to update user profiles |
feed_tool_call_results | bool | False | Include tool call results in history |
debug | bool | False | Enable debug logging |
debug_level | int | 1 | Debug 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:
| Mode | Behavior |
|---|
'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)