a digital person for bluesky
1#!/usr/bin/env python3
2"""
3Direct chat with a specific group ID (bypassing the search logic).
4"""
5
6import os
7import sys
8from dotenv import load_dotenv
9from letta_client import Letta
10from rich.console import Console
11from rich.prompt import Prompt
12from rich.panel import Panel
13
14# Add parent directory to path for imports
15sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
16from config_loader import get_config
17
18load_dotenv()
19
20def main():
21 console = Console()
22
23 if len(sys.argv) != 2:
24 console.print("[red]Usage: python organon/chat_direct.py <group_id>[/red]")
25 console.print("[dim]Example: python organon/chat_direct.py group-0bf1c6[/dim]")
26 sys.exit(1)
27
28 group_id = sys.argv[1]
29
30 try:
31 # Initialize configuration and client
32 config = get_config()
33
34 client = Letta(
35 base_url=config.get('letta.base_url', os.environ.get('LETTA_BASE_URL')),
36 token=config.get('letta.api_key', os.environ.get('LETTA_API_KEY')),
37 timeout=config.get('letta.timeout', 30)
38 )
39
40 # Test if we can access the group
41 try:
42 group = client.groups.retrieve(group_id=group_id)
43 console.print(f"[green]✅ Connected to group: {group_id}[/green]")
44 except Exception as e:
45 console.print(f"[red]❌ Cannot access group {group_id}: {e}[/red]")
46 sys.exit(1)
47
48 console.print(Panel.fit(
49 "[bold green]Direct Organon Group Chat[/bold green]\n"
50 f"Group ID: {group_id}\n"
51 "Type 'exit' or 'quit' to leave",
52 title="🧠 Direct Chat"
53 ))
54
55 while True:
56 user_input = Prompt.ask("\n[bold green]You[/bold green]")
57
58 if user_input.lower() in ['exit', 'quit', 'q']:
59 console.print("[yellow]Goodbye![/yellow]")
60 break
61 elif not user_input.strip():
62 continue
63
64 console.print("[dim]Sending to group...[/dim]")
65
66 try:
67 response = client.groups.messages.send(
68 group_id=group_id,
69 message=user_input
70 )
71
72 console.print("\n[bold]Group Response:[/bold]")
73 if hasattr(response, 'messages') and response.messages:
74 for message in response.messages:
75 content = str(message)
76 if hasattr(message, 'text'):
77 content = message.text
78 elif hasattr(message, 'content'):
79 content = message.content
80
81 console.print(Panel(content, border_style="blue"))
82 else:
83 console.print("[yellow]No response received[/yellow]")
84
85 except Exception as e:
86 console.print(f"[red]Error: {e}[/red]")
87
88 except Exception as e:
89 console.print(f"[red]Error: {e}[/red]")
90 sys.exit(1)
91
92if __name__ == "__main__":
93 main()