Module: Intelligence::Legacy::ChatMethods

Included in:
Adapter
Defined in:
lib/intelligence/adapters/legacy/chat_methods.rb

Instance Method Summary collapse

Instance Method Details

#chat_request_body(conversation, options = {}) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/intelligence/adapters/legacy/chat_methods.rb', line 5

def chat_request_body( conversation, options = {} )
  options = options ? self.class.configure( options ) : {}
  options = @options.merge( options )

  result = options[ :chat_options ]&.compact || {}
  result[ :messages ] = []

  system_message = system_message_to_s( conversation[ :system_message ] )
  result[ :messages ] << { role: 'system', content: system_message } if system_message
  
  # detect if the conversation has any non-text content; this handles the sittuation 
  # where non-vision models only support the legacy message schema while the vision 
  # models only support the modern message schema 
  has_non_text_content = conversation[ :messages ]&.find do | message |
    message[ :contents ]&.find do | content |
      content[ :type ] != nil && content[ :type ] != :text 
    end
  end
  
  if has_non_text_content
    conversation[ :messages ]&.each do | message |
      result[ :messages ] << chat_request_message_attributes( message )
    end
  else 
    conversation[ :messages ]&.each do | message |
      result[ :messages ] << chat_request_legacy_message_attributes( message )
    end
  end
  JSON.generate( result )
end

#chat_request_legacy_message_attributes(message) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/intelligence/adapters/legacy/chat_methods.rb', line 36

def chat_request_legacy_message_attributes( message )
  result_message = { role: message[ :role ] }
  result_message_content = ""
  
  message[ :contents ]&.each do | content |
    case content[ :type ]
    when :text
      result_message_content += content[ :text ]
    end
  end

  result_message[ :content ] = result_message_content
  result_message
end