Class: RobotLab::UserMessage

Inherits:
Object
  • Object
show all
Defined in:
lib/robot_lab/user_message.rb

Overview

Enhanced user message with metadata and system prompt augmentation

UserMessage wraps the user’s input with additional context like thread ID, system prompt additions, and other metadata that can influence robot behavior.

Examples:

Basic usage

message = UserMessage.new("What is the weather?")
message.content  # => "What is the weather?"

With metadata

message = UserMessage.new(
  "What is the weather?",
  session_id: "thread_123",
  system_prompt: "Respond in Spanish",
  metadata: { user_id: "user_456" }
)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(content, session_id: nil, system_prompt: nil, metadata: nil, id: nil) ⇒ UserMessage

Creates a new UserMessage instance.

Parameters:

  • content (String)

    the message content

  • session_id (String, nil) (defaults to: nil)

    conversation thread identifier

  • system_prompt (String, nil) (defaults to: nil)

    additional system prompt

  • metadata (Hash, nil) (defaults to: nil)

    additional metadata

  • id (String, nil) (defaults to: nil)

    unique identifier (defaults to UUID)



44
45
46
47
48
49
50
51
# File 'lib/robot_lab/user_message.rb', line 44

def initialize(content, session_id: nil, system_prompt: nil, metadata: nil, id: nil)
  @content = content.to_s
  @session_id = session_id
  @system_prompt = system_prompt
  @metadata =  || {}
  @id = id || SecureRandom.uuid
  @created_at = Time.now
end

Instance Attribute Details

#contentString (readonly)

Returns the message content.

Returns:

  • (String)

    the message content



35
36
37
# File 'lib/robot_lab/user_message.rb', line 35

def content
  @content
end

#created_atObject (readonly)

Returns the value of attribute created_at.



35
# File 'lib/robot_lab/user_message.rb', line 35

attr_reader :content, :session_id, :system_prompt, :metadata, :id, :created_at

#idString (readonly)

Returns unique message identifier.

Returns:

  • (String)

    unique message identifier



35
# File 'lib/robot_lab/user_message.rb', line 35

attr_reader :content, :session_id, :system_prompt, :metadata, :id, :created_at

#metadataHash (readonly)

Returns additional metadata.

Returns:

  • (Hash)

    additional metadata



35
# File 'lib/robot_lab/user_message.rb', line 35

attr_reader :content, :session_id, :system_prompt, :metadata, :id, :created_at

#session_idString? (readonly)

Returns the conversation thread identifier.

Returns:

  • (String, nil)

    the conversation thread identifier



35
# File 'lib/robot_lab/user_message.rb', line 35

attr_reader :content, :session_id, :system_prompt, :metadata, :id, :created_at

#system_promptString? (readonly)

Returns additional system prompt to inject.

Returns:

  • (String, nil)

    additional system prompt to inject



35
# File 'lib/robot_lab/user_message.rb', line 35

attr_reader :content, :session_id, :system_prompt, :metadata, :id, :created_at

Class Method Details

.from(input) ⇒ UserMessage

Create from string or hash

Parameters:

  • input (String, Hash, UserMessage)

    Input to normalize

Returns:



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/robot_lab/user_message.rb', line 96

def self.from(input)
  case input
  when UserMessage
    input
  when String
    new(input)
  when Hash
    input = input.transform_keys(&:to_sym)
    new(
      input[:content],
      session_id: input[:session_id],
      system_prompt: input[:system_prompt],
      metadata: input[:metadata],
      id: input[:id]
    )
  when TextMessage
    new(input.content)
  else
    new(input.to_s)
  end
end

Instance Method Details

#to_hHash

Converts the message to a hash representation.

Returns:

  • (Hash)


72
73
74
75
76
77
78
79
80
81
# File 'lib/robot_lab/user_message.rb', line 72

def to_h
  {
    content: content,
    session_id: session_id,
    system_prompt: system_prompt,
    metadata: ,
    id: id,
    created_at: created_at.iso8601
  }.compact
end

#to_json(*args) ⇒ String

Converts the message to JSON.

Parameters:

  • args (Array)

    arguments passed to to_json

Returns:

  • (String)

    JSON representation



87
88
89
# File 'lib/robot_lab/user_message.rb', line 87

def to_json(*args)
  to_h.to_json(*args)
end

#to_messageTextMessage

Convert to a simple text message for the conversation

Returns:



57
58
59
# File 'lib/robot_lab/user_message.rb', line 57

def to_message
  RobotLab::TextMessage.new(role: "user", content: content)
end

#to_sString

Get the string content (for compatibility with String inputs)

Returns:

  • (String)


65
66
67
# File 'lib/robot_lab/user_message.rb', line 65

def to_s
  content
end