Class: Spurline::Memory::Embedder::OpenAI

Inherits:
Base
  • Object
show all
Defined in:
lib/spurline/memory/embedder/open_ai.rb

Constant Summary collapse

DEFAULT_MODEL =
"text-embedding-3-small"
DIMENSIONS =
1536

Instance Method Summary collapse

Constructor Details

#initialize(api_key: nil, model: nil) ⇒ OpenAI

Returns a new instance of OpenAI.



10
11
12
13
# File 'lib/spurline/memory/embedder/open_ai.rb', line 10

def initialize(api_key: nil, model: nil)
  @api_key = resolve_api_key(api_key)
  @model = model || DEFAULT_MODEL
end

Instance Method Details

#dimensionsObject



32
33
34
# File 'lib/spurline/memory/embedder/open_ai.rb', line 32

def dimensions
  DIMENSIONS
end

#embed(text) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/spurline/memory/embedder/open_ai.rb', line 15

def embed(text)
  # ASYNC-READY: Embedding requests are blocking in v1 and run at this seam.
  response = build_client.embeddings(parameters: { model: @model, input: text.to_s })
  embedding = response.dig("data", 0, "embedding")

  if embedding.is_a?(Array) && embedding.all? { |value| value.is_a?(Numeric) }
    embedding
  else
    raise Spurline::EmbedderError,
      "OpenAI embedding response did not include a valid embedding vector"
  end
rescue Spurline::EmbedderError
  raise
rescue StandardError => e
  raise Spurline::EmbedderError, "OpenAI embedding failed: #{e.message}"
end