Class: RubyLLM::Message

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_llm/message.rb

Overview

A single message in a chat conversation.

Direct Known Subclasses

Chunk

Constant Summary collapse

ROLES =
i[system user assistant tool].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Message

Returns a new instance of Message.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/ruby_llm/message.rb', line 11

def initialize(options = {})
  @role = options.fetch(:role).to_sym
  @content = normalize_content(options.fetch(:content))
  @model_id = options[:model_id]
  @tool_calls = options[:tool_calls]
  @tool_call_id = options[:tool_call_id]
  @tokens = options[:tokens] || Tokens.build(
    input: options[:input_tokens],
    output: options[:output_tokens],
    cached: options[:cached_tokens],
    cache_creation: options[:cache_creation_tokens],
    thinking: options[:thinking_tokens],
    reasoning: options[:reasoning_tokens]
  )
  @raw = options[:raw]
  @thinking = options[:thinking]

  ensure_valid_role
end

Instance Attribute Details

#contentObject



31
32
33
34
35
36
37
# File 'lib/ruby_llm/message.rb', line 31

def content
  if @content.is_a?(Content) && @content.text && @content.attachments.empty?
    @content.text
  else
    @content
  end
end

#model_idObject (readonly)

Returns the value of attribute model_id.



8
9
10
# File 'lib/ruby_llm/message.rb', line 8

def model_id
  @model_id
end

#rawObject (readonly)

Returns the value of attribute raw.



8
9
10
# File 'lib/ruby_llm/message.rb', line 8

def raw
  @raw
end

#roleObject (readonly)

Returns the value of attribute role.



8
9
10
# File 'lib/ruby_llm/message.rb', line 8

def role
  @role
end

#thinkingObject (readonly)

Returns the value of attribute thinking.



8
9
10
# File 'lib/ruby_llm/message.rb', line 8

def thinking
  @thinking
end

#tokensObject (readonly)

Returns the value of attribute tokens.



8
9
10
# File 'lib/ruby_llm/message.rb', line 8

def tokens
  @tokens
end

#tool_call_idObject (readonly)

Returns the value of attribute tool_call_id.



8
9
10
# File 'lib/ruby_llm/message.rb', line 8

def tool_call_id
  @tool_call_id
end

#tool_callsObject (readonly)

Returns the value of attribute tool_calls.



8
9
10
# File 'lib/ruby_llm/message.rb', line 8

def tool_calls
  @tool_calls
end

Instance Method Details

#cache_creation_tokensObject



63
64
65
# File 'lib/ruby_llm/message.rb', line 63

def cache_creation_tokens
  tokens&.cache_creation
end

#cached_tokensObject



59
60
61
# File 'lib/ruby_llm/message.rb', line 59

def cached_tokens
  tokens&.cached
end

#input_tokensObject



51
52
53
# File 'lib/ruby_llm/message.rb', line 51

def input_tokens
  tokens&.input
end

#instance_variablesObject



87
88
89
# File 'lib/ruby_llm/message.rb', line 87

def instance_variables
  super - [:@raw]
end

#output_tokensObject



55
56
57
# File 'lib/ruby_llm/message.rb', line 55

def output_tokens
  tokens&.output
end

#reasoning_tokensObject



71
72
73
# File 'lib/ruby_llm/message.rb', line 71

def reasoning_tokens
  tokens&.thinking
end

#thinking_tokensObject



67
68
69
# File 'lib/ruby_llm/message.rb', line 67

def thinking_tokens
  tokens&.thinking
end

#to_hObject



75
76
77
78
79
80
81
82
83
84
85
# File 'lib/ruby_llm/message.rb', line 75

def to_h
  {
    role: role,
    content: content,
    model_id: model_id,
    tool_calls: tool_calls,
    tool_call_id: tool_call_id,
    thinking: thinking&.text,
    thinking_signature: thinking&.signature
  }.merge(tokens ? tokens.to_h : {}).compact
end

#tool_call?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/ruby_llm/message.rb', line 39

def tool_call?
  !tool_calls.nil? && !tool_calls.empty?
end

#tool_result?Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/ruby_llm/message.rb', line 43

def tool_result?
  !tool_call_id.nil? && !tool_call_id.empty?
end

#tool_resultsObject



47
48
49
# File 'lib/ruby_llm/message.rb', line 47

def tool_results
  content if tool_result?
end