a digital person for bluesky
at main 2.3 kB view raw
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})'