Class: RailsMcpCodeSearch::Embeddings::OpenaiAdapter

Inherits:
Adapter
  • Object
show all
Defined in:
lib/rails_mcp_code_search/embeddings/openai_adapter.rb

Constant Summary collapse

DIMENSIONS =
1536
MODEL =
"text-embedding-3-small"
MAX_RETRIES =
3
MAX_CHARS =
15_000
ApiKeyError =
Class.new(StandardError)

Instance Method Summary collapse

Constructor Details

#initialize ⇒ OpenaiAdapter

Returns a new instance of OpenaiAdapter.

Raises:



13
14
15
16
17
18
19
# File 'lib/rails_mcp_code_search/embeddings/openai_adapter.rb', line 13

def initialize
  api_key = ENV["RAILS_MCP_CODE_SEARCH_OPENAI_API_KEY"]
  raise ApiKeyError, "RAILS_MCP_CODE_SEARCH_OPENAI_API_KEY environment variable is required for OpenAI provider" unless api_key

  @client = OpenAI::Client.new(access_token: api_key)
  @warned = false
end

Instance Method Details

#dimensions ⇒ Object



39
# File 'lib/rails_mcp_code_search/embeddings/openai_adapter.rb', line 39

def dimensions = DIMENSIONS

#embed(texts) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/rails_mcp_code_search/embeddings/openai_adapter.rb', line 21

def embed(texts)
  texts = Array(texts).map { truncate(_1) }
  warn_once

  retries = 0
  begin
    response = @client.embeddings(parameters: { model: MODEL, input: texts })
    response.dig("data").sort_by { _1["index"] }.map { _1["embedding"] }
  rescue Faraday::TooManyRequestsError
    retries += 1
    raise if retries > MAX_RETRIES
    sleep(2**retries)
    retry
  rescue => e
    raise sanitize_error(e)
  end
end