Class: RailsAIPromptable::Providers::OpenAIProvider

Inherits:
BaseProvider
  • Object
show all
Defined in:
lib/rails_ai_promptable/providers/openai_provider.rb

Instance Method Summary collapse

Constructor Details

#initialize(configuration) ⇒ OpenAIProvider

Returns a new instance of OpenAIProvider.



9
10
11
12
13
14
# File 'lib/rails_ai_promptable/providers/openai_provider.rb', line 9

def initialize(configuration)
  super
  @api_key = configuration.api_key
  @base_url = configuration.openai_base_url
  @timeout = configuration.timeout
end

Instance Method Details

#generate(prompt:, model:, temperature:, format:) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/rails_ai_promptable/providers/openai_provider.rb', line 16

def generate(prompt:, model:, temperature:, format:)
  uri = URI.parse("#{@base_url}/chat/completions")
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = uri.scheme == "https"
  request = Net::HTTP::Post.new(uri.request_uri, {
                                  "Content-Type" => "application/json",
                                  "Authorization" => "Bearer #{@api_key}"
                                })

  body = {
    model: model,
    messages: [{ role: "user", content: prompt }],
    temperature: temperature
  }

  request.body = body.to_json

  response = http.request(request)
  parsed = JSON.parse(response.body)

  # naive extraction
  parsed.dig("choices", 0, "message", "content")
rescue StandardError => e
  RailsAIPromptable.configuration.logger.error("[rails_ai_promptable] openai error: #{e.message}")
  nil
end