Use this file to discover all available pages before exploring further.
ManagedAgent is deprecated as of PR #1550. New code should use HostedAgent for Anthropic-hosted runs (this page) or LocalAgent for local loops. Existing imports continue to work but emit a DeprecationWarning for non-Anthropic providers.
HostedAgent executes on Anthropic’s managed infrastructure while seamlessly persisting conversation history and session state to your choice of 7 database backends.
Run gpt-4o-mini conversations with SQLite persistence in 5 lines:
from praisonaiagents import Agent, dbfrom praisonai import HostedAgent, HostedAgentConfighosted = HostedAgent( provider="anthropic", config=HostedAgentConfig(model="gpt-4o-mini", system="You are helpful"))agent = Agent( name="Assistant", backend=hosted, db=db(database_url="conversation.db"), session_id="session-1")agent.start("Remember: The sky is blue")
2
Session Resume
Continue conversations after restarts:
# Later process - same session_id resumes conversationagent2 = Agent( name="Assistant", backend=hosted, db=db(database_url="conversation.db"), session_id="session-1" # Same ID = resume)response = agent2.start("What color is the sky?")# Response: "The sky is blue" (remembers from previous session)
from praisonaiagents import Agent, dbfrom praisonai import HostedAgent, HostedAgentConfig# Phase 1: First session (teach facts)hosted = HostedAgent( provider="anthropic", config=HostedAgentConfig(model="gpt-4o-mini", system="You are helpful"))agent = Agent( name="Assistant", backend=hosted, db=db(database_url="sqlite:///my_data.db"), session_id="learning-session")agent.start("Remember: PraisonAI is an AI agent framework")agent.start("Also remember: It supports multiple LLM providers")# Phase 2: Direct verificationimport sqlite3conn = sqlite3.connect("my_data.db")cursor = conn.cursor()cursor.execute("SELECT COUNT(*) FROM messages WHERE session_id = ?", ("learning-session",))message_count = cursor.fetchone()[0]print(f"Messages stored: {message_count}")conn.close()# Phase 3: Session resume (new instance)hosted2 = HostedAgent( provider="anthropic", config=HostedAgentConfig(model="gpt-4o-mini", system="You are helpful"))agent2 = Agent( name="Assistant", backend=hosted2, db=db(database_url="sqlite:///my_data.db"), session_id="learning-session" # Same ID resumes)result = agent2.start("What did I tell you about PraisonAI?")# Result: "You told me that PraisonAI is an AI agent framework and that it supports multiple LLM providers."
Prerequisites: None (built into Python)
Production-ready relational database:
from praisonaiagents import Agent, dbfrom praisonai import HostedAgent, HostedAgentConfigimport psycopg2# Phase 1: First sessionhosted = HostedAgent( provider="anthropic", config=HostedAgentConfig(model="gpt-4o-mini", system="You are an expert assistant"))agent = Agent( name="Expert", backend=hosted, db=db(database_url="postgresql://user:pass@localhost:5432/praisondb"), session_id="expert-session")agent.start("Remember: PostgreSQL is ACID compliant")agent.start("Remember: It supports JSON columns")# Phase 2: Direct verificationconn = psycopg2.connect("postgresql://user:pass@localhost:5432/praisondb")cursor = conn.cursor()cursor.execute("SELECT content FROM messages WHERE session_id = %s", ("expert-session",))messages = cursor.fetchall()print(f"Stored {len(messages)} messages")conn.close()# Phase 3: Resume sessionhosted2 = HostedAgent( provider="anthropic", config=HostedAgentConfig(model="gpt-4o-mini", system="You are an expert assistant"))agent2 = Agent( name="Expert", backend=hosted2, db=db(database_url="postgresql://user:pass@localhost:5432/praisondb"), session_id="expert-session")result = agent2.start("What database features did I mention?")# Result: "You mentioned that PostgreSQL is ACID compliant and supports JSON columns."
from praisonaiagents import Agent, dbfrom praisonai import HostedAgent, HostedAgentConfigimport mysql.connectorhosted = HostedAgent( provider="anthropic", config=HostedAgentConfig(model="gpt-4o-mini", system="You are helpful"))agent = Agent( name="Assistant", backend=hosted, db=db(database_url="mysql://user:pass@localhost:3306/praisondb"), session_id="mysql-session")agent.start("Remember: MySQL is owned by Oracle")# Direct verificationconn = mysql.connector.connect( host="localhost", user="user", password="pass", database="praisondb")cursor = conn.cursor()cursor.execute("SELECT COUNT(*) FROM messages WHERE session_id = %s", ("mysql-session",))count = cursor.fetchone()[0]print(f"Messages: {count}")conn.close()# Resume lateragent2 = Agent( name="Assistant", backend=hosted, db=db(database_url="mysql://user:pass@localhost:3306/praisondb"), session_id="mysql-session")result = agent2.start("Who owns MySQL?")# Result: "MySQL is owned by Oracle."
Prerequisites:
pip install mysql-connector-python# Docker: docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=pass mysql
State storage with conversation store:
from praisonaiagents import Agent, dbfrom praisonai import HostedAgent, HostedAgentConfigimport redishosted = HostedAgent( provider="anthropic", config=HostedAgentConfig(model="gpt-4o-mini", system="You are helpful"))# Redis for state + SQLite for conversationsagent = Agent( name="Assistant", backend=hosted, db=db( database_url="sqlite:///conversations.db", # Conversation store state_url="redis://localhost:6379" # State store ), session_id="redis-session")agent.start("Remember: Redis is in-memory")# Direct verification r = redis.Redis(host="localhost", port=6379, decode_responses=True)state_keys = r.keys("*redis-session*")print(f"State keys: {len(state_keys)}")# Resume sessionagent2 = Agent( name="Assistant", backend=hosted, db=db( database_url="sqlite:///conversations.db", state_url="redis://localhost:6379" ), session_id="redis-session")result = agent2.start("What type of database is Redis?")# Result: "Redis is an in-memory database."
Prerequisites:
pip install redis# Docker: docker run -d -p 6379:6379 redis
Document database for state:
from praisonaiagents import Agent, dbfrom praisonai import HostedAgent, HostedAgentConfigimport pymongohosted = HostedAgent( provider="anthropic", config=HostedAgentConfig(model="gpt-4o-mini", system="You are helpful"))# MongoDB for state + SQLite for conversationsagent = Agent( name="Assistant", backend=hosted, db=db( database_url="sqlite:///conversations.db", # Conversation store state_url="mongodb://localhost:27017/praisondb" # State store ), session_id="mongo-session")agent.start("Remember: MongoDB stores documents")# Direct verificationclient = pymongo.MongoClient("mongodb://localhost:27017/")db_mongo = client["praisondb"]state_count = db_mongo.state.count_documents({"session_id": "mongo-session"})print(f"State documents: {state_count}")# Resume session agent2 = Agent( name="Assistant", backend=hosted, db=db( database_url="sqlite:///conversations.db", state_url="mongodb://localhost:27017/praisondb" ), session_id="mongo-session")result = agent2.start("What does MongoDB store?")# Result: "MongoDB stores documents."
Prerequisites:
pip install pymongo# Docker: docker run -d -p 27017:27017 mongo
Analytics database with conversation store:
from praisonaiagents import Agent, dbfrom praisonai import HostedAgent, HostedAgentConfigimport clickhouse_connecthosted = HostedAgent( provider="anthropic", config=HostedAgentConfig(model="gpt-4o-mini", system="You are helpful"))# ClickHouse for analytics + SQLite for conversationsagent = Agent( name="Assistant", backend=hosted, db=db( database_url="sqlite:///conversations.db", # Conversation store analytics_url="clickhouse://localhost:8123/default" # Analytics store ), session_id="clickhouse-session")agent.start("Remember: ClickHouse is columnar")# Direct verificationclient = clickhouse_connect.get_client(host="localhost", port=8123)result = client.query("SELECT count() FROM analytics WHERE session_id = 'clickhouse-session'")print(f"Analytics rows: {result.result_rows[0][0]}")# Resume sessionagent2 = Agent( name="Assistant", backend=hosted, db=db( database_url="sqlite:///conversations.db", analytics_url="clickhouse://localhost:8123/default" ), session_id="clickhouse-session")result = agent2.start("What type of database is ClickHouse?")# Result: "ClickHouse is a columnar database."
Prerequisites:
pip install clickhouse-connect# Docker: docker run -d -p 8123:8123 clickhouse/clickhouse-server
Zero dependencies with built-in session store:
from praisonaiagents import Agentfrom praisonai import HostedAgent, HostedAgentConfigfrom praisonaiagents.session.store import DefaultSessionStoreimport jsonimport oshosted = HostedAgent( provider="anthropic", config=HostedAgentConfig(model="gpt-4o-mini", system="You are helpful"))# JSON file-based session store (no external deps)store = DefaultSessionStore(directory="./sessions")agent = Agent( name="Assistant", backend=hosted, session_store=store, session_id="json-session")agent.start("Remember: JSON is human-readable")# Direct verificationsession_file = "./sessions/json-session.json"if os.path.exists(session_file): with open(session_file, 'r') as f: data = json.load(f) print(f"Messages stored: {len(data.get('messages', []))}")# Resume sessionagent2 = Agent( name="Assistant", backend=hosted, session_store=DefaultSessionStore(directory="./sessions"), session_id="json-session")result = agent2.start("What format is JSON?")# Result: "JSON is human-readable."
The most common pattern for persistent managed agents:
from praisonaiagents import Agent, dbfrom praisonai import HostedAgent, HostedAgentConfigdef create_agent(session_id: str): hosted = HostedAgent( provider="anthropic", config=HostedAgentConfig( model="gpt-4o-mini", system="You are a helpful assistant with perfect memory" ) ) return Agent( name="PersistentAgent", backend=hosted, db=db(database_url="postgresql://localhost/agentdb"), session_id=session_id )# First conversationagent1 = create_agent("user-123")agent1.start("My name is Alice and I live in Paris")# Later conversation (different process/server restart)agent2 = create_agent("user-123") # Same session_idresponse = agent2.start("What's my name and where do I live?")# Response: "Your name is Alice and you live in Paris."
Multi-Backend Pattern
Use different backends for different data types:
from praisonaiagents import Agent, dbfrom praisonai import HostedAgent, HostedAgentConfighosted = HostedAgent( provider="anthropic", config=HostedAgentConfig(model="gpt-4o-mini"))agent = Agent( name="MultiBackendAgent", backend=hosted, db=db( database_url="postgresql://localhost/conversations", # Conversations state_url="redis://localhost:6379", # Fast state analytics_url="clickhouse://localhost:8123/default" # Analytics ), session_id="multi-backend-session")# All data types are automatically stored in appropriate backendsagent.start("Analyze this data and remember the insights")