class Riffer::Messages::Base
Base class for all message types. Subclasses must implement role.
Attributes
The message content.
The message id, or nil when Riffer.config.message_id_strategy is :none.
Public Class Methods
Source
# File lib/riffer/messages/base.rb, line 12 def self.from_hash(msg) return msg if msg.is_a?(Riffer::Messages::Base) unless msg.is_a?(Hash) raise Riffer::ArgumentError, "Message must be a Hash or Message object, got #{msg.class}" end role = msg[:role] content = msg[:content] if role.nil? || role.empty? raise Riffer::ArgumentError, "Message hash must include a 'role' key" end id = msg[:id] case role.to_sym when :user files = (msg[:files] || []).map { |f| Riffer::Messages::FilePart.from_hash(f) } Riffer::Messages::User.new(content, id: id, files: files) when :assistant tool_calls = (msg[:tool_calls] || []).map { |tc| tc.is_a?(Riffer::Messages::Assistant::ToolCall) ? tc : Riffer::Messages::Assistant::ToolCall.new(**tc) } structured_output = msg[:structured_output] finish_reason = msg[:finish_reason]&.to_sym Riffer::Messages::Assistant.new(content, id: id, tool_calls: tool_calls, structured_output: structured_output, finish_reason: finish_reason) when :system Riffer::Messages::System.new(content, id: id) when :tool tool_call_id = msg[:tool_call_id] name = msg[:name] Riffer::Messages::Tool.new(content, id: id, tool_call_id: tool_call_id, name: name) else raise Riffer::ArgumentError, "Unknown message role: #{role}" end end
Builds the matching message subclass from a hash, or returns msg unchanged when it is already a message. Raises Riffer::ArgumentError on an invalid message.
Source
# File lib/riffer/messages/base.rb, line 58 def initialize(content, id: nil) @content = content @id = id || generate_id end
Public Instance Methods
Source
# File lib/riffer/messages/base.rb, line 92 def +(other) raise NotImplementedError, "Subclasses must implement #+" end
Merges another same-role message into this one. Tool messages are never merged.
Source
# File lib/riffer/messages/base.rb, line 84 def has_tool_calls? false end
Whether this message carries pending tool calls (overridden by Riffer::Messages::Assistant).
Source
# File lib/riffer/messages/base.rb, line 76 def role raise NotImplementedError, "Subclasses must implement #role" end
Returns the message role.
Source
# File lib/riffer/messages/base.rb, line 67 def to_h hash = {role: role, content: content} hash[:id] = id unless id.nil? hash end
Converts the message to a hash.