Class: ActiveRecordVector::Providers::Openai
- Defined in:
- lib/active_record_vector/providers/openai.rb
Overview
OpenAI Embedding Provider (supports text-embedding-3-small, text-embedding-3-large, text-embedding-ada-002)
Constant Summary collapse
- DEFAULT_MODEL =
"text-embedding-3-small"- API_ENDPOINT =
"https://api.openai.com/v1/embeddings"
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
Methods inherited from Base
Constructor Details
This class inherits a constructor from ActiveRecordVector::Providers::Base
Instance Method Details
#embed(text) ⇒ Object
14 15 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/active_record_vector/providers/openai.rb', line 14 def (text) api_key = [:api_key] || ENV.fetch("OPENAI_API_KEY", nil) raise Error, "OpenAI API key missing. Set ENV['OPENAI_API_KEY'] or pass api_key: '...' to has_vector" unless api_key uri = URI.parse([:endpoint] || API_ENDPOINT) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = (uri.scheme == "https") http.open_timeout = [:timeout] || 10 http.read_timeout = [:timeout] || 10 payload = { input: text, model: [:model] || DEFAULT_MODEL } payload[:dimensions] = [:dimensions] if [:dimensions] request = Net::HTTP::Post.new(uri.request_uri, { "Content-Type" => "application/json", "Authorization" => "Bearer #{api_key}" }) request.body = payload.to_json response = http.request(request) raise Error, "OpenAI API Error (#{response.code}): #{response.body}" unless response.is_a?(Net::HTTPSuccess) data = JSON.parse(response.body) data.dig("data", 0, "embedding") || [] end |