Class: RubyLLM::SemanticCache::VectorStores::Redis

Inherits:
Base
  • Object
show all
Defined in:
lib/ruby_llm/semantic_cache/vector_stores/redis.rb

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ Redis

Returns a new instance of Redis.



9
10
11
12
13
14
# File 'lib/ruby_llm/semantic_cache/vector_stores/redis.rb', line 9

def initialize(config)
  super
  require_neighbor_redis!
  setup_client
  setup_index
end

Instance Method Details

#add(id, embedding) ⇒ Object



16
17
18
# File 'lib/ruby_llm/semantic_cache/vector_stores/redis.rb', line 16

def add(id, embedding)
  @index.add(id, embedding)
end

#clear!Object



37
38
39
40
41
42
# File 'lib/ruby_llm/semantic_cache/vector_stores/redis.rb', line 37

def clear!
  # VectorSet doesn't have a drop method, remove all entries
  # We need to iterate and remove, or delete the key
  @client.call("DEL", index_name)
  setup_index
end

#delete(id) ⇒ Object



33
34
35
# File 'lib/ruby_llm/semantic_cache/vector_stores/redis.rb', line 33

def delete(id)
  @index.remove(id)
end

#empty?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/ruby_llm/semantic_cache/vector_stores/redis.rb', line 44

def empty?
  size.zero?
end

#search(embedding, limit: 5) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/ruby_llm/semantic_cache/vector_stores/redis.rb', line 20

def search(embedding, limit: 5)
  results = @index.search(embedding, count: limit)

  results.map do |result|
    # VectorSet returns array of hashes: [{id: "...", distance: 0.0}, ...]
    # For cosine distance: similarity = 1 - distance
    id = result[:id]
    distance = result[:distance].to_f
    similarity = 1.0 - distance
    { id: id, similarity: similarity }
  end
end

#sizeObject



48
49
50
51
52
# File 'lib/ruby_llm/semantic_cache/vector_stores/redis.rb', line 48

def size
  @index.count
rescue StandardError
  0
end