Class: EvalRuby::Embedders::OpenAI
- Defined in:
- lib/eval_ruby/embedders/openai.rb
Overview
OpenAI embeddings backend.
Requires an API key via Configuration#embedder_api_key (or falls
back to Configuration#api_key). The default model is
text-embedding-3-small (1536 dimensions).
Constant Summary collapse
- API_URL =
"https://api.openai.com/v1/embeddings"
Instance Method Summary collapse
-
#call(texts) ⇒ Array<Array<Float>>
Vectors in input order.
-
#initialize(config) ⇒ OpenAI
constructor
A new instance of OpenAI.
-
#model ⇒ String
Configured embedder model.
Constructor Details
#initialize(config) ⇒ OpenAI
Returns a new instance of OpenAI.
18 19 20 21 22 23 24 |
# File 'lib/eval_ruby/embedders/openai.rb', line 18 def initialize(config) super @api_key = @config. || @config.api_key if @api_key.nil? || @api_key.empty? raise EvalRuby::Error, "API key is required for embedder. Set via EvalRuby.configure { |c| c.embedder_api_key = '...' } or c.api_key = '...'" end end |
Instance Method Details
#call(texts) ⇒ Array<Array<Float>>
Returns vectors in input order.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/eval_ruby/embedders/openai.rb', line 35 def call(texts) retries = 0 begin uri = URI(API_URL) request = Net::HTTP::Post.new(uri) request["Authorization"] = "Bearer #{@api_key}" request["Content-Type"] = "application/json" request.body = JSON.generate({input: texts, model: model}) response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true, read_timeout: @config.timeout) do |http| http.request(request) end unless response.is_a?(Net::HTTPSuccess) raise APIError, "OpenAI embeddings API error: #{response.code} - #{response.body}" end parse_vectors(response.body) rescue Net::OpenTimeout, Net::ReadTimeout, Errno::ECONNRESET => e retries += 1 if retries <= @config.max_retries sleep(2**(retries - 1)) retry end raise EvalRuby::TimeoutError, "Embedder API failed after #{@config.max_retries} retries: #{e.}" end end |
#model ⇒ String
Returns configured embedder model.
27 28 29 |
# File 'lib/eval_ruby/embedders/openai.rb', line 27 def model @config. end |