Class: RubyConversations::MessageBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_conversations/message_builder.rb

Overview

Builds Message objects with their prompts and inputs based on Prompt templates.

Instance Method Summary collapse

Constructor Details

#initialize(conversation) ⇒ MessageBuilder

Returns a new instance of MessageBuilder.



6
7
8
# File 'lib/ruby_conversations/message_builder.rb', line 6

def initialize(conversation)
  @conversation = conversation
end

Instance Method Details

#build_from_multiple_prompts(prompt_inputs, description: nil) ⇒ Object



27
28
29
30
31
32
33
34
35
36
# File 'lib/ruby_conversations/message_builder.rb', line 27

def build_from_multiple_prompts(prompt_inputs, description: nil)
  message = build_message('', description)

  prompt_inputs.each do |prompt_name, inputs|
    process_single_prompt_input(message, prompt_name, inputs)
  end

  message.request = message.request.strip
  message
end

#build_from_single_prompt(name, description: nil, inputs: {}) ⇒ Object



10
11
12
13
14
15
16
17
18
19
# File 'lib/ruby_conversations/message_builder.rb', line 10

def build_from_single_prompt(name, description: nil, inputs: {})
  prompt = Prompt.find_by_name!(name)
  validate_inputs!(prompt, inputs)

  interpolated_message = prompt.interpolate(inputs)
  message = build_message(interpolated_message, description)
  build_prompt_association(message, prompt, inputs)

  message
end

#build_from_user_message(raw_message, description: nil) ⇒ Object



21
22
23
24
25
# File 'lib/ruby_conversations/message_builder.rb', line 21

def build_from_user_message(raw_message, description: nil)
  message = build_message(raw_message, description)
  build_message_prompt(message, Prompt.new(name: 'user_message', role: 'user', message: raw_message))
  message
end

#process_single_prompt_input(message, prompt_name, inputs) ⇒ Object



38
39
40
41
42
43
44
45
46
47
# File 'lib/ruby_conversations/message_builder.rb', line 38

def process_single_prompt_input(message, prompt_name, inputs)
  prompt = Prompt.find_by!(name: prompt_name)
  validate_inputs!(prompt, inputs)

  interpolated_message = prompt.interpolate(inputs)
  message.request += "#{interpolated_message}\n\n"

  message_prompt = build_message_prompt(message, prompt)
  build_inputs_for_prompt(message_prompt, inputs)
end