Class: Services::OpenaiService

Inherits:
Object
  • Object
show all
Defined in:
lib/services/openai_service.rb

Class Method Summary collapse

Class Method Details

.chat(query) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/services/openai_service.rb', line 8

def self.chat(query)
  access_token = ENV.fetch('OPENAI_ACCESS_TOKEN')
  client = OpenAI::Client.new(access_token:)

  query = prepare_query(query)

  response = client.chat(
    parameters: {
      model: 'gpt-3.5-turbo',
      messages: [{ role: 'user', content: query }],
      temperature: 0.7
    }
  )

  response_text = response.dig('choices', 0, 'message', 'content')

  copy_to_clipboard(response_text)
  puts response_text
end

.copy_to_clipboard(data) ⇒ Object

Only works on macOS



38
39
40
# File 'lib/services/openai_service.rb', line 38

def self.copy_to_clipboard(data)
  IO.popen('pbcopy', 'w') { |pbcopy| pbcopy << data }
end

.prepare_query(query) ⇒ Object



28
29
30
31
32
33
34
35
# File 'lib/services/openai_service.rb', line 28

def self.prepare_query(query)
  if query[:context]
    query[:prompt]
  else
    "I want you to respond only wth the code snippet or terminal command I ask
    for, nothing else. No other text, only the code or command. I would like to know the command to #{query[:prompt]}"
  end
end