Class: Leann::Embedding::RubyLLM

Inherits:
Base
  • Object
show all
Defined in:
lib/leann/embedding/ruby_llm.rb

Overview

RubyLLM embedding provider

Uses RubyLLM’s unified embedding API which supports multiple providers (OpenAI, Ollama, etc.) through a single interface.

Examples:

provider = Leann::Embedding::RubyLLM.new
vectors = provider.compute(["Hello world", "Another text"])

Instance Attribute Summary

Attributes inherited from Base

#model

Instance Method Summary collapse

Methods inherited from Base

#compute_one

Constructor Details

#initialize(model: nil) ⇒ RubyLLM

Returns a new instance of RubyLLM.

Parameters:

  • model (String, nil) (defaults to: nil)

    Embedding model (uses RubyLLM default if nil)



18
19
20
21
22
23
24
# File 'lib/leann/embedding/ruby_llm.rb', line 18

def initialize(model: nil)
  super(model: model)

  unless defined?(::RubyLLM)
    raise ConfigurationError, "RubyLLM gem is required. Add 'ruby_llm' to your Gemfile."
  end
end

Instance Method Details

#compute(texts) ⇒ Array<Array<Float>>

Compute embeddings for texts

Parameters:

  • texts (Array<String>)

    Texts to embed

Returns:

  • (Array<Array<Float>>)

    Embedding vectors



29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/leann/embedding/ruby_llm.rb', line 29

def compute(texts)
  texts = Array(texts)
  return [] if texts.empty?

  options = {}
  options[:model] = @model if @model

  result = ::RubyLLM.embed(texts, **options)
  result.vectors
rescue ::RubyLLM::Error => e
  raise EmbeddingError, "RubyLLM embedding failed: #{e.message}"
end

#dimensionsInteger

Returns Embedding dimensions (model-dependent).

Returns:

  • (Integer)

    Embedding dimensions (model-dependent)



43
44
45
46
47
48
49
# File 'lib/leann/embedding/ruby_llm.rb', line 43

def dimensions
  # Get dimensions by computing a test embedding
  @dimensions ||= begin
    test = compute(["test"])
    test.first&.size || 1536
  end
end

#provider_nameString

Returns Provider name.

Returns:

  • (String)

    Provider name



52
53
54
# File 'lib/leann/embedding/ruby_llm.rb', line 52

def provider_name
  :ruby_llm
end