> ## 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.

# Attributes

> Configuration options for the Memory class

## 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

```python theme={null}
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.

```python theme={null}
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:

```python theme={null}
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:

```python theme={null}
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:

```python theme={null}
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 |

```python theme={null}
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)
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.