Class: ChatGPT

Inherits:
Object
  • Object
show all
Defined in:
lib/gpt-cli.rb

Constant Summary collapse

MESSAGES_FILE =
File.join(Dir.home, 'gpt_cli_messages_history.json')

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeChatGPT

Returns a new instance of ChatGPT.



14
15
16
# File 'lib/gpt-cli.rb', line 14

def initialize
  @messages = load_messages
end

Instance Attribute Details

#messagesObject

Returns the value of attribute messages.



11
12
13
# File 'lib/gpt-cli.rb', line 11

def messages
  @messages
end

Instance Method Details

#contextsObject



31
32
33
34
35
# File 'lib/gpt-cli.rb', line 31

def contexts
  file_contents = File.read(ENV["OPENAI_CONTEXTS_PATH"])
  contexts = JSON.parse(file_contents)
  contexts.transform_keys(&:to_sym)
end

#gpt3(prompt, options) ⇒ Object

Raises:

  • (QuickOpenAI::Error)


37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/gpt-cli.rb', line 37

def gpt3(prompt, options)
  context = options[:context] || contexts[ENV["OPENAI_DEFAULT_CONTEXT"].to_sym]
  context_message = {role: "system", content: context.gsub("\n", ' ').squeeze(' ')}
  @messages << context_message if context && !@messages.include?(context_message)
  @messages << {role: "user", content: prompt}

  parameters = {
    model: ENV["OPENAI_MODEL"],
    max_tokens: 2048,
    messages: @messages,
  }
  
  response = QuickOpenAI.fetch_response_from_client do |client|
    client.chat(parameters: parameters)
  end

  text = response.dig("choices", 0, "message", "content")

  raise QuickOpenAI::Error, "Unable to parse response." if text.nil? || text.empty?
  
  @messages << {role: "assistant", content: text.chomp.strip}
  text.chomp.strip
end

#load_messagesObject



24
25
26
27
28
29
# File 'lib/gpt-cli.rb', line 24

def load_messages
  return [] unless File.exist?(MESSAGES_FILE)

  file_contents = File.read(MESSAGES_FILE)
  JSON.parse(file_contents, symbolize_names: true)
end

#save_messagesObject



18
19
20
21
22
# File 'lib/gpt-cli.rb', line 18

def save_messages
  File.open(MESSAGES_FILE, 'w') do |file|
    file.write(JSON.dump(@messages))
  end
end