Skip to main content
Database persistence keeps conversation history and state across restarts — pick a backend for your scale.
The user returns later; the configured backend restores conversation history and agent state.

Quick Start

1

Simple Usage

2

With Configuration

Hybrid setup — SQL for conversations, Redis for state:

How It Works


Storage Backend Options

The registry supports 12 conversation, 9 state, and 20 knowledge backends — configure each store by URL scheme.
Dedicated guides exist for the most common backends:

SQLite

Local file database for development and single-instance apps

PostgreSQL

Production SQL with JSONB and connection pooling

MySQL

Popular SQL database with broad tooling support

Redis

Fast in-memory state store

MongoDB

Flexible document store for complex state

ClickHouse

Analytics database for large-scale data

JSON Files

Simple file-based storage with cross-platform locking
The registry is the authoritative list, not the docs. Call list_available_backends() at runtime to discover the current set:

Backend Aliases

Configure with either name — the registry resolves aliases before instantiating the factory (PraisonAI PR #2669). PersistenceConfig(state_store="motor").validate() now succeeds and resolves to AsyncMongoDBStateStore. Unknown names still fail loudly, listing the current registry backends.

Configuration Options

Database backends require the praisonai wrapper (pip install praisonai). The core SDK defines DbAdapter; implementations live in praisonai.persistence.

Best Practices

SQLite for development; PostgreSQL or MySQL for multi-user production; Redis for fast state; JSON files for minimal dependencies.
Set session_id="user-123" so conversations resume reliably across restarts.
Never hardcode database URLs — use os.getenv("PRAISON_CONVERSATION_URL").
Conversation history, run traces, and vectors scale differently — configure each URL independently.

Database Persistence (Advanced)

MemoryConfig, CLI commands, and Docker setup

Session Persistence

JSON file sessions without a database