a digital person for bluesky
1#!/usr/bin/env python3 2""" 3Simple tool to set up the Organon ecosystem group without running the firehose listener. 4""" 5 6import os 7import sys 8from dotenv import load_dotenv 9from letta_client import Letta, SupervisorManager 10from rich.console import Console 11 12# Add parent directory to path for imports 13sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) 14from config_loader import get_config 15 16load_dotenv() 17 18def main(): 19 console = Console() 20 21 try: 22 # Initialize configuration and client 23 config = get_config() 24 25 client = Letta( 26 base_url=config.get('letta.base_url', os.environ.get('LETTA_BASE_URL')), 27 token=config.get('letta.api_key', os.environ.get('LETTA_API_KEY')), 28 timeout=config.get('letta.timeout', 30) 29 ) 30 31 project_id = config.get('letta.project_id', os.environ.get('LETTA_PROJECT_ID')) 32 if not project_id: 33 raise ValueError("Project ID must be set in config.yaml under letta.project_id or as LETTA_PROJECT_ID environment variable") 34 35 # Get Organon central agent 36 console.print("[blue]Finding Organon Central agent...[/blue]") 37 try: 38 organon_agents = client.agents.list(project_id=project_id, name="organon-central") 39 except: 40 # Fallback for self-hosted without project support 41 organon_agents = client.agents.list(name="organon-central") 42 if not organon_agents: 43 console.print("[red]❌ Organon Central agent not found. Run create_organon.py first.[/red]") 44 return 45 46 organon_central_id = organon_agents[0].id 47 console.print(f"[green]✅ Found Organon Central: {organon_central_id[:8]}[/green]") 48 49 # Get Organon shards 50 console.print("[blue]Finding Organon shards...[/blue]") 51 try: 52 shard_agents = client.agents.list(project_id=project_id, tags=["organon-shard"]) 53 except: 54 # Fallback for self-hosted without project support 55 shard_agents = client.agents.list(tags=["organon-shard"]) 56 if not shard_agents: 57 console.print("[red]❌ No Organon shards found. Run create_organon.py to create shards.[/red]") 58 return 59 60 console.print(f"[green]✅ Found {len(shard_agents)} shards:[/green]") 61 for shard in shard_agents: 62 console.print(f"{shard.name} ({shard.id[:8]})") 63 64 # Check if group already exists 65 console.print("[blue]Checking for existing groups...[/blue]") 66 try: 67 groups = client.groups.list(project_id=project_id) 68 except: 69 # Fallback for self-hosted without project support 70 groups = client.groups.list() 71 72 existing_group = None 73 for group in groups: 74 if (group.description and 'organon ecosystem' in group.description.lower()) or \ 75 (hasattr(group, 'manager_config') and group.manager_config and 76 hasattr(group.manager_config, 'manager_agent_id') and 77 group.manager_config.manager_agent_id == organon_central_id): 78 existing_group = group 79 break 80 81 if existing_group: 82 console.print(f"[yellow]Group already exists: {existing_group.id[:12]}[/yellow]") 83 return 84 85 # Create the supervisor group 86 console.print("[blue]Creating Organon ecosystem group...[/blue]") 87 worker_agent_ids = [shard.id for shard in shard_agents] 88 89 group = client.groups.create( 90 agent_ids=worker_agent_ids, 91 description="Supervisor group for the Organon ecosystem with organon-central managing all shards", 92 manager_config=SupervisorManager( 93 manager_agent_id=organon_central_id 94 ) 95 ) 96 97 console.print(f"[green]✅ Created Organon ecosystem group: {group.id[:12]}[/green]") 98 console.print(f" Supervisor: organon-central ({organon_central_id[:8]})") 99 console.print(f" Workers: {len(worker_agent_ids)} shards") 100 101 # Verify the group was actually created 102 console.print("[blue]Verifying group creation...[/blue]") 103 try: 104 retrieved_group = client.groups.retrieve(group_id=group.id) 105 console.print(f"[green]✅ Group verified: {retrieved_group.id[:12]}[/green]") 106 107 # Also check if it shows up in the list 108 try: 109 all_groups = client.groups.list(project_id=project_id) 110 except: 111 all_groups = client.groups.list() 112 found_in_list = any(g.id == group.id for g in all_groups) 113 console.print(f"[{'green' if found_in_list else 'red'}]{'' if found_in_list else ''} Group appears in list: {found_in_list}[/{'green' if found_in_list else 'red'}]") 114 115 except Exception as e: 116 console.print(f"[red]❌ Error verifying group: {e}[/red]") 117 118 console.print("\n[bold green]Setup complete! You can now use:[/bold green]") 119 console.print("• [cyan]python organon/chat_with_organon.py[/cyan] - Chat with the ecosystem") 120 console.print("• [cyan]python organon/list_groups.py[/cyan] - View group status") 121 console.print("• [cyan]python organon/firehose_listener.py[/cyan] - Start the firehose listener") 122 123 except Exception as e: 124 console.print(f"[red]Error: {e}[/red]") 125 sys.exit(1) 126 127if __name__ == "__main__": 128 main()