a digital person for bluesky
1"""Reply tool for Bluesky - a simple tool for the Letta agent to indicate a reply."""
2from typing import List, Optional
3from pydantic import BaseModel, Field, validator
4
5
6class ReplyArgs(BaseModel):
7 messages: List[str] = Field(
8 ...,
9 description="List of reply messages (each max 300 characters, max 4 messages total). Single item creates one reply, multiple items create a threaded reply chain."
10 )
11 lang: Optional[str] = Field(
12 default="en-US",
13 description="Language code for the posts (e.g., 'en-US', 'es', 'ja', 'th'). Defaults to 'en-US'"
14 )
15
16 @validator('messages')
17 def validate_messages(cls, v):
18 if not v or len(v) == 0:
19 raise ValueError("Messages list cannot be empty")
20 if len(v) > 4:
21 raise ValueError(f"Cannot send more than 4 reply messages (current: {len(v)} messages)")
22 for i, message in enumerate(v):
23 if len(message) > 300:
24 raise ValueError(f"Message {i+1} cannot be longer than 300 characters (current: {len(message)} characters)")
25 return v
26
27
28def bluesky_reply(messages: List[str], lang: str = "en-US") -> str:
29 """
30 This is a simple function that returns a string indicating reply thread will be sent.
31
32 Args:
33 messages: List of reply texts (each max 300 characters, max 4 messages total)
34 lang: Language code for the posts (e.g., 'en-US', 'es', 'ja', 'th'). Defaults to 'en-US'
35
36 Returns:
37 Confirmation message with language info and message count
38
39 Raises:
40 Exception: If messages list is invalid or messages exceed limits
41 """
42 if not messages or len(messages) == 0:
43 raise Exception("Messages list cannot be empty")
44 if len(messages) > 4:
45 raise Exception(f"Cannot send more than 4 reply messages (current: {len(messages)} messages)")
46
47 for i, message in enumerate(messages):
48 if len(message) > 300:
49 raise Exception(f"Message {i+1} cannot be longer than 300 characters (current: {len(message)} characters)")
50
51 if len(messages) == 1:
52 return f'Reply sent (language: {lang})'
53 else:
54 return f'Reply thread with {len(messages)} messages sent (language: {lang})'