Class: IntelliAgent::OpenAI::Messages

Inherits:
Array
  • Object
show all
Defined in:
lib/intelli_agent/openai/messages.rb,
lib/intelli_agent/openai/messages_helper copy.rb

Constant Summary collapse

VALID_ROLES =
%i[system user assistant tool].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(messages = []) ⇒ Messages

VALID_ROLES = %i[system user assistant function tool].freeze



4
5
6
# File 'lib/intelli_agent/openai/messages.rb', line 4

def initialize messages = nil
  super parse_messages(messages)
end

Class Method Details

.parse_messages(messages) ⇒ Object

O Formato de saída deve ser um array de hashes com as chaves ‘role` e `content`.

A entrada pode ser:
  - um hash simples { user: 'mensagem do usuário' }, deve ser transformado em { role: 'user', content: 'mensagem do usuário' }
  - um hash com várias chaves {system: 'mensagem', user: 'mensagem do usuário' }, deve ser transformado em [{ role: 'system', content: 'mensagem'}, { role: 'user', content: 'mensagem do usuário' }] 
  - um array de hashes [{ system: 'mensagem'}, { user: 'mensagem do usuário' }], deve ser transformado em [{ role: 'system', content: 'mensagem'}, { role: 'user', content: 'mensagem do usuário' }]
Obervação imporante: o content pode ser uma string ou um array


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/intelli_agent/openai/messages_helper copy.rb', line 20

def self.parse_messages(messages)
  return [] if messages.empty?

  messages = [messages] unless messages.is_a?(Array)

  messages.flat_map do |msg|
    if msg.is_a?(Hash)
      if msg.keys.size == 1
        role, content = msg.first
        { role: role.to_s, content: content }
      elsif msg.key?(:role) && msg.key?(:content)
        { role: msg[:role].to_s, content: msg[:content] }
      else
        msg.map { |role, content| { role: role.to_s, content: content } }
      end
    else
      raise ArgumentError, "Invalid message format: #{msg}"
    end
  end
end

Instance Method Details

#add(message) ⇒ Object



8
# File 'lib/intelli_agent/openai/messages.rb', line 8

def add(message) = concat(parse_messages(message))