redis_managed.py
1 #!/usr/bin/env python3 2 """ 3 ManagedAgent + Redis Persistence — Real conversation with session resume. 4 5 Redis stores state/metadata; SQLite stores conversation history. 6 7 Prerequisites: 8 pip install praisonai praisonaiagents redis 9 export OPENAI_API_KEY="sk-..." 10 # Redis running on localhost:6379 11 """ 12 13 import os 14 import sys 15 import tempfile 16 17 import redis as redis_lib 18 19 if not os.getenv("OPENAI_API_KEY"): 20 sys.exit("ERROR: OPENAI_API_KEY not set.") 21 22 from praisonai import ManagedAgent, LocalManagedConfig, DB 23 from praisonaiagents import Agent 24 25 REDIS_URL = os.getenv("REDIS_URL", "redis://:myredissecret@localhost:6379/0") 26 SQLITE_PATH = os.path.join(tempfile.gettempdir(), "managed_redis_conv.db") 27 print(f"ManagedAgent + Redis Persistence\nRedis: {REDIS_URL}\nSQLite: {SQLITE_PATH}\n") 28 29 # ── Phase 1: Create agent, teach facts ── 30 print("=== Phase 1: First Session ===") 31 32 db = DB(database_url=SQLITE_PATH, state_url=REDIS_URL) 33 managed = ManagedAgent( 34 provider="local", db=db, 35 config=LocalManagedConfig( 36 model="gpt-4o-mini", name="Redis Memory Agent", 37 system="You are a helpful assistant. Remember all facts the user tells you.", 38 ), 39 ) 40 agent = Agent(name="User", backend=managed) 41 42 result1 = agent.run("Remember: My cat Luna is a Siamese who loves tuna treats. Confirm.") 43 print(f"Agent: {result1[:200]}...") 44 print(f"Session ID: {managed.session_id}") 45 46 result2 = agent.run("Also remember: Luna was adopted from a shelter in Portland, Oregon. Confirm.") 47 print(f"Agent: {result2[:200]}...") 48 49 # ── Phase 2: Direct Redis Verification ── 50 print("\n=== Phase 2: Redis Verification ===") 51 rc = redis_lib.Redis(host="localhost", port=6379, password="myredissecret", decode_responses=True) 52 all_keys = rc.keys("*") 53 print(f"Total Redis keys: {len(all_keys)}") 54 55 # ── Phase 3: Destroy instance ── 56 print("\n=== Phase 3: Instance Goes Idle ===") 57 saved_ids = managed.save_ids() 58 print(f"Saved IDs: {saved_ids}") 59 del agent, managed, db 60 print("Agent destroyed.\n") 61 62 # ── Phase 4: Resume — no config needed ── 63 print("=== Phase 4: Resume Session ===") 64 db2 = DB(database_url=SQLITE_PATH, state_url=REDIS_URL) 65 managed2 = ManagedAgent(provider="local", db=db2) 66 managed2.resume_session(saved_ids["session_id"]) 67 print(f"Resumed session: {managed2.session_id}") 68 69 agent2 = Agent(name="User", backend=managed2) 70 result3 = agent2.run("What is my cat's name, breed, favourite treat, and adoption city?") 71 print(f"Agent: {result3[:300]}...") 72 73 # ── Phase 5: Validate ── 74 print("\n=== Phase 5: Validation ===") 75 r = result3.lower() 76 checks = { 77 "Remembers 'Luna'": "luna" in r, 78 "Remembers 'Siamese'": "siamese" in r, 79 "Remembers 'tuna'": "tuna" in r, 80 "Remembers 'Portland'": "portland" in r, 81 "Session ID continuity": managed2.session_id == saved_ids["session_id"], 82 } 83 all_passed = True 84 for check, ok in checks.items(): 85 print(f" [{'PASS' if ok else 'FAIL'}] {check}") 86 if not ok: 87 all_passed = False 88 89 os.unlink(SQLITE_PATH) 90 print(f"\n{'PASS' if all_passed else 'FAIL'}: Redis ManagedAgent persistence test")