from praisonaiagents import Agentagent = Agent( name="Supabase Agent", instructions="You are a helpful assistant with persistent memory.", db={ "database_url": "https://your-project.supabase.co", "supabase_key": "eyJhbGci..." # From Supabase dashboard })
from praisonaiagents import Agentagent = Agent( name="Supabase Direct Agent", instructions="You are a helpful assistant with SQL persistence.", db={"database_url": "postgresql://postgres:pass@db.xxx.supabase.com:5432/postgres"})
2
Set Environment Variables
# For REST API modeexport SUPABASE_URL="https://your-project.supabase.co"export SUPABASE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."# Or for direct PostgreSQL mode export SUPABASE_DATABASE_URL="postgresql://postgres:pass@db.xxx.supabase.com:5432/postgres"
3
Test Conversation
# Start conversationresult = agent.start("I'm working on a chatbot project using Supabase")print(result)# Later session - memory persistsresult = agent.start("What project was I working on?")print(result) # "You were working on a chatbot project using Supabase"
Uses Supabase’s REST API with automatic schema generation:
from praisonaiagents import Agentagent = Agent( name="REST Agent", instructions="You use Supabase REST API for persistence.", db={ "database_url": "https://xxx.supabase.co", "supabase_key": "eyJhbGci...", # anon or service_role key })# Tables are created automatically via REST APIresult = agent.start("Hello from Supabase REST!")
Required Tables (auto-created):
-- Create in Supabase SQL Editor if not using auto-creationCREATE TABLE praison_sessions ( session_id TEXT PRIMARY KEY, user_id TEXT, agent_id TEXT, name TEXT, state JSONB, metadata JSONB, created_at DOUBLE PRECISION, updated_at DOUBLE PRECISION);CREATE TABLE praison_messages ( id TEXT PRIMARY KEY, session_id TEXT REFERENCES praison_sessions(session_id), role TEXT NOT NULL, content TEXT, tool_calls JSONB, metadata JSONB, created_at DOUBLE PRECISION);
Uses standard PostgreSQL connection through Supabase’s pooler:
from praisonaiagents import Agentagent = Agent( name="Direct Agent", instructions="You use direct PostgreSQL for persistence.", db={"database_url": "postgresql://postgres:pass@db.xxx.supabase.com:6543/postgres"})# Standard PostgreSQL tables with auto-retry for paused projectsresult = agent.start("Hello from Supabase PostgreSQL!")
Free tier projects auto-pause after 1 week of inactivity. PraisonAI handles wake-up automatically:
from praisonai.persistence.conversation.supabase import SupabaseConversationStorestore = SupabaseConversationStore( url="https://paused-project.supabase.co", key="eyJ...", max_retries=5, # Extra retries for wake-up retry_delay=3.0 # Longer delays for project start)# First request may take 30-60 seconds if project was paused# Subsequent requests are fast
-- Enable RLS on tablesALTER TABLE praison_sessions ENABLE ROW LEVEL SECURITY;ALTER TABLE praison_messages ENABLE ROW LEVEL SECURITY;-- Policy: Users can only access their own sessionsCREATE POLICY "Users can access own sessions" ON praison_sessions FOR ALL USING (user_id = auth.uid()::text);-- Policy: Users can access messages from their sessionsCREATE POLICY "Users can access own messages" ON praison_messages FOR ALL USING ( session_id IN ( SELECT session_id FROM praison_sessions WHERE user_id = auth.uid()::text ) );
# Use service_role key for admin access, or implement user authagent = Agent( name="Multi-Tenant Agent", db={ "database_url": "https://xxx.supabase.co", "supabase_key": "eyJ..." # service_role key bypasses RLS })