SQLite

SQLite conversation store setup

SQLite

SQLite is the simplest option for local development and testing.

Installation

bash
pip install "praisonaiagents[tools]"

Quick Start

python
from praisonaiagents import Agent

agent = Agent(
    name="Assistant",
    instructions="You are a helpful assistant.",
    memory={
        "db": "conversations.db",
        "session_id": "my-session"
    }
)

response = agent.start("Hello!")
print(response)

File Path Options

python
from praisonaiagents import Agent

# Current directory
agent = Agent(name="Bot", memory={"db": "mydata.db"})

# Absolute path
agent = Agent(name="Bot", memory={"db": "/home/user/data/conversations.db"})

# Subdirectory
agent = Agent(name="Bot", memory={"db": "./data/conversations.db"})

Environment Variables

bash
export PRAISON_CONVERSATION_URL="mydata.db"
python
import os
from praisonaiagents import Agent

agent = Agent(
    name="Assistant",
    memory={"db": os.getenv("PRAISON_CONVERSATION_URL")}
)

CLI

bash
# Validate connection
praisonai persistence doctor --conversation-url "mydata.db"

# Run with persistence
praisonai persistence run \
    --conversation-url "mydata.db" \
    --session-id "local-session" \
    "Hello!"

When to Use SQLite

✅ Good for:

  • Local development
  • Testing
  • Single-user applications
  • Prototyping

❌ Not recommended for:

  • Production multi-user apps
  • High concurrency
  • Distributed systems

Storage Backend (Advanced)

For training data, sessions, and general persistence, use the SQLiteBackend:

  • Choosing table_name: keep it to letters, digits, and underscores. SQL keywords (select, order) and digit-leading names (9table) are safe — the backend quotes identifiers internally. See Table name rules.
BaseJSONStore
from praisonaiagents.storage import SQLiteBackend, BaseJSONStore

backend = SQLiteBackend(db_path="~/.praisonai/data.db")
store = BaseJSONStore("session.json", backend=backend)
store.save({"messages": ["Hello"]})
data = store.load()
TrainingStorage
from praisonai.train.agents.storage import TrainingStorage
from praisonaiagents.storage import SQLiteBackend

with TrainingStorage(
    session_id="train-123",
    backend=SQLiteBackend(db_path="~/.praisonai/train.db"),
) as storage:
    storage.save_iteration(...)
# Connection closed automatically — safe on Windows, no ResourceWarning
SessionManager
from praisonai.cli.state.sessions import SessionManager
from praisonaiagents.storage import SQLiteBackend

backend = SQLiteBackend(db_path="~/.praisonai/sessions.db")
manager = SessionManager(backend=backend)
sessions = manager.list(limit=10)
RunHistory
from praisonai.recipe.history import RunHistory
from praisonaiagents.storage import SQLiteBackend

backend = SQLiteBackend(db_path="~/.praisonai/runs.db")
history = RunHistory(backend=backend)
MCPToolIndex
from praisonai.mcp_server.tool_index import MCPToolIndex
from praisonaiagents.storage import SQLiteBackend

backend = SQLiteBackend(db_path="~/.praisonai/mcp.db")
index = MCPToolIndex(backend=backend)

CLI Usage

bash
# Training with SQLite backend
praisonai train agents --input "Hello" --storage-backend sqlite --storage-path ~/.praisonai/train.db

# Session list with SQLite backend
praisonai session list --storage-backend sqlite --storage-path ~/.praisonai/sessions.db

See Storage Backends for more details.

Troubleshooting

File permissions:

bash
# Check if directory is writable
touch test.db && rm test.db

Database locked:

  • SQLite only allows one writer at a time
  • Use PostgreSQL for concurrent access