Class: ClaudeMemory::Embeddings::ApiAdapter
- Inherits:
-
Object
- Object
- ClaudeMemory::Embeddings::ApiAdapter
- Defined in:
- lib/claude_memory/embeddings/api_adapter.rb
Overview
Adapter for any OpenAI-compatible /v1/embeddings endpoint. Works with OpenAI, Voyage, Ollama, LiteLLM, etc.
Required ENV:
CLAUDE_MEMORY_EMBEDDING_API_KEY or OPENAI_API_KEY
Optional ENV:
CLAUDE_MEMORY_EMBEDDING_API_URL (default: https://api.openai.com/v1/embeddings)
CLAUDE_MEMORY_EMBEDDING_MODEL (default: text-embedding-3-small)
Defined Under Namespace
Classes: ApiError
Constant Summary collapse
- DEFAULT_API_URL =
"https://api.openai.com/v1/embeddings"- DEFAULT_MODEL =
"text-embedding-3-small"
Instance Method Summary collapse
-
#dimensions ⇒ Object
Dimensions resolved from registry if known, otherwise lazy from first API response.
-
#generate(text) ⇒ Array<Float>
(also: #generate_passage)
Generate embedding for a query text.
-
#initialize(model: nil, env: ENV) ⇒ ApiAdapter
constructor
A new instance of ApiAdapter.
- #name ⇒ Object
Constructor Details
#initialize(model: nil, env: ENV) ⇒ ApiAdapter
Returns a new instance of ApiAdapter.
25 26 27 28 29 30 31 32 |
# File 'lib/claude_memory/embeddings/api_adapter.rb', line 25 def initialize(model: nil, env: ENV) @api_key = env["CLAUDE_MEMORY_EMBEDDING_API_KEY"] || env["OPENAI_API_KEY"] @api_url = env["CLAUDE_MEMORY_EMBEDDING_API_URL"] || DEFAULT_API_URL @model = model || env["CLAUDE_MEMORY_EMBEDDING_MODEL"] || DEFAULT_MODEL @known_dimensions = ModelRegistry.dimensions_for(@model) raise ArgumentError, "Set CLAUDE_MEMORY_EMBEDDING_API_KEY or OPENAI_API_KEY" unless @api_key end |
Instance Method Details
#dimensions ⇒ Object
Dimensions resolved from registry if known, otherwise lazy from first API response.
37 38 39 |
# File 'lib/claude_memory/embeddings/api_adapter.rb', line 37 def dimensions @dimensions ||= @known_dimensions || fetch_dimensions end |
#generate(text) ⇒ Array<Float> Also known as: generate_passage
Generate embedding for a query text.
44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/claude_memory/embeddings/api_adapter.rb', line 44 def generate(text) return zero_vector if text.nil? || text.empty? response = call_api(text) = response.dig("data", 0, "embedding") raise ApiError, "No embedding returned in API response" unless @dimensions ||= .size end |
#name ⇒ Object
34 |
# File 'lib/claude_memory/embeddings/api_adapter.rb', line 34 def name = "api" |