package output import ( "fmt" "math/rand" "time" "github.com/yaoapp/yao/agent/output/message" ) // Helper functions for creating built-in message types func init() { rand.Seed(time.Now().UnixNano()) } // NewTextMessage creates a text message func NewTextMessage(content string) *message.Message { return &message.Message{ Type: message.TypeText, Props: map[string]interface{}{ "content": content, }, } } // NewThinkingMessage creates a thinking message func NewThinkingMessage(content string) *message.Message { return &message.Message{ Type: message.TypeThinking, Props: map[string]interface{}{ "content": content, }, } } // NewLoadingMessage creates a loading message func NewLoadingMessage(msg string) *message.Message { return &message.Message{ Type: message.TypeLoading, Props: map[string]interface{}{ "message": msg, }, } } // NewToolCallMessage creates a tool call message func NewToolCallMessage(id, name, arguments string) *message.Message { return &message.Message{ Type: message.TypeToolCall, Props: map[string]interface{}{ "id": id, "name": name, "arguments": arguments, }, } } // NewErrorMessage creates an error message func NewErrorMessage(msg, code string) *message.Message { return &message.Message{ Type: message.TypeError, Props: map[string]interface{}{ "message": msg, "code": code, }, } } // NewActionMessage creates an action message func NewActionMessage(name string, payload map[string]interface{}) *message.Message { return &message.Message{ Type: message.TypeAction, Props: map[string]interface{}{ "name": name, "payload": payload, }, } } // NewEventMessage creates an event message func NewEventMessage(event string, msg string, data map[string]interface{}) *message.Message { return &message.Message{ Type: message.TypeEvent, Props: map[string]interface{}{ "event": event, "message": msg, "data": data, }, } } // NewImageMessage creates an image message func NewImageMessage(url string, alt string) *message.Message { return &message.Message{ Type: message.TypeImage, Props: map[string]interface{}{ "url": url, "alt": alt, }, } } // NewAudioMessage creates an audio message func NewAudioMessage(url string, format string) *message.Message { return &message.Message{ Type: message.TypeAudio, Props: map[string]interface{}{ "url": url, "format": format, }, } } // NewVideoMessage creates a video message func NewVideoMessage(url string) *message.Message { return &message.Message{ Type: message.TypeVideo, Props: map[string]interface{}{ "url": url, }, } } // IsBuiltinType checks if a message type is a built-in type func IsBuiltinType(msgType string) bool { switch msgType { case message.TypeText, message.TypeThinking, message.TypeLoading, message.TypeToolCall, message.TypeError, message.TypeImage, message.TypeAudio, message.TypeVideo, message.TypeAction, message.TypeEvent: return true default: return false } } // GenerateID generates a unique message ID func GenerateID() string { // Generate a random ID with timestamp prefix for uniqueness timestamp := time.Now().UnixNano() random := rand.Int63() return fmt.Sprintf("msg_%d_%d", timestamp, random) }