Skip to main content
Persist every agent turn to external databases — conversations resume across restarts and you can query run history later.
The user continues a conversation; database hooks persist each turn so the session survives restarts.

Quick Start

1

Simple usage

2

With session continuity

3

CLI with persistence


How It Works

On first chat, the adapter loads prior messages for the session_id. Each turn writes user and agent messages automatically — no manual save calls.

Configuration Options

Pass a db() instance via memory= (or MemoryConfig(db=…, session_id=…) for explicit sessions).

Environment variables

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

Default session ID

If you omit session_id, PraisonAI generates a per-hour ID (UTC):

Docker (local development)


CLI commands


Async-Safe Initialisation

The DatabaseAdapter’s async callbacks (on_agent_start, on_user_message, on_agent_message, on_tool_call, on_agent_end) never block the event loop. Store construction runs off-loop via asyncio.to_thread, so FastAPI handlers, Jupyter notebooks, and async test suites all work without stalls on cold startup.

Transient Failure Handling

When a database is temporarily unavailable (bad config, network blip, cloud auth glitch), the adapter records the failure and waits before re-attempting. This prevents hammering a down backend on every agent callback while still recovering automatically once the backend is back. The cool-down period is configurable via init_retry_cooldown (default 30 seconds):
After a soft init failure (raised during _ainit_stores()), the adapter pauses for init_retry_cooldown seconds before re-running store construction on the next callback. Persistence resumes automatically once the backend becomes reachable — no process restart needed.

Best Practices

Without session_id, PraisonAI generates a per-hour ID. Set MemoryConfig(session_id=…) when users return to the same thread.
Never hardcode database URLs — use os.getenv("PRAISON_CONVERSATION_URL").
praisonai persistence doctor validates connectivity for conversation, state, and knowledge stores.
Conversation history, run traces, and vectors scale differently — configure database_url, state_url, and knowledge_url independently.

Run History

Query persisted runs and traces

Session Persistence

JSON file sessions without a database