a digital person for bluesky
42
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 5dc650f2e116f571a4bfbbb2e9573c3ba183b4d4 54 lines 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})'