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.



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

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]
  @input_tokens = options[:input_tokens]
  @output_tokens = options[:output_tokens]
  @cached_tokens = options[:cached_tokens]
  @cache_creation_tokens = options[:cache_creation_tokens]
  @raw = options[:raw]
  @response_id = options[:response_id]
  @reasoning_summary = options[:reasoning_summary]
  @reasoning_tokens = options[:reasoning_tokens]

  ensure_valid_role
end

Instance Attribute Details

#cache_creation_tokens ⇒ Object (readonly)

Returns the value of attribute cache_creation_tokens.



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

def cache_creation_tokens
  @cache_creation_tokens
end

#cached_tokens ⇒ Object (readonly)

Returns the value of attribute cached_tokens.



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

def cached_tokens
  @cached_tokens
end

#content ⇒ Object



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

#input_tokens ⇒ Object (readonly)

Returns the value of attribute input_tokens.



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

def input_tokens
  @input_tokens
end

#model_id ⇒ Object (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

#output_tokens ⇒ Object (readonly)

Returns the value of attribute output_tokens.



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

def output_tokens
  @output_tokens
end

#raw ⇒ Object (readonly)

Returns the value of attribute raw.



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

def raw
  @raw
end

#reasoning_summary ⇒ Object (readonly)

Returns the value of attribute reasoning_summary.



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

def reasoning_summary
  @reasoning_summary
end

#reasoning_tokens ⇒ Object (readonly)

Returns the value of attribute reasoning_tokens.



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

def reasoning_tokens
  @reasoning_tokens
end

#response_id ⇒ Object (readonly)

Returns the value of attribute response_id.



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

def response_id
  @response_id
end

#role ⇒ Object (readonly)

Returns the value of attribute role.



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

def role
  @role
end

#tool_call_id ⇒ Object (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_calls ⇒ Object (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

#instance_variables ⇒ Object



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

def instance_variables
  super - [:@raw]
end

#to_h ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/ruby_llm/message.rb', line 51

def to_h
  {
    role: role,
    content: content,
    model_id: model_id,
    tool_calls: tool_calls,
    tool_call_id: tool_call_id,
    input_tokens: input_tokens,
    output_tokens: output_tokens,
    cached_tokens: cached_tokens,
    cache_creation_tokens: cache_creation_tokens,
    response_id: response_id,
    reasoning_summary: reasoning_summary,
    reasoning_tokens: reasoning_tokens
  }.compact
end

#tool_call? ⇒ Boolean

Returns:



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:



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

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

#tool_results ⇒ Object



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

def tool_results
  content if tool_result?
end