Skip to content

TextMessage

Text message from system, user, or assistant.

Class: RobotLab::TextMessage

message = TextMessage.new(role: "assistant", content: "Hello! How can I help you today?")

Constructor

TextMessage.new(role:, content:, stop_reason: nil)

Parameters:

Name Type Description
role String Message role ("system", "user", or "assistant")
content String The text content
stop_reason String, nil Stop reason ("stop" or "tool")

Attributes

content

message.content  # => String

The text content.

role

message.role  # => "assistant"

Returns a String: "system", "user", or "assistant".

type

message.type  # => "text"

Always returns "text".

stop_reason

message.stop_reason  # => "stop" or nil

The stop reason, if any.

Methods

to_h

message.to_h  # => Hash

Hash representation.

Returns:

{
  type: "text",
  role: "assistant",
  content: "Hello! How can I help you today?",
  stop_reason: "stop"
}

to_json

message.to_json  # => String

JSON representation.

Predicates

message.text?       # => true
message.tool_call?  # => false
message.assistant?  # => true (if role is "assistant")
message.user?       # => false
message.stopped?    # => true (if stop_reason is "stop")

Examples

System Message

message = TextMessage.new(role: "system", content: "You are a helpful assistant")
message.system?  # => true

User Message

message = TextMessage.new(role: "user", content: "What's the weather?")
message.user?  # => true

Assistant Response

message = TextMessage.new(
  role: "assistant",
  content: "Your order has shipped!",
  stop_reason: "stop"
)
message.assistant?  # => true
message.stopped?    # => true

In Robot Results

result = robot.run("Tell me a joke")

# The result is a TextMessage when the assistant replies with text
if result.text?
  puts result.content
end

Filtering Text Content

# Get only text messages from memory
text_messages = memory.messages.select(&:text?).map(&:content)

See Also