speaky 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 978cd92d282523846c4b7b592776656f3d351162a361e28460de95e4af338378
4
- data.tar.gz: dac048c47d89c41ef1b96dc31d3a7f600ee2ef393d59bffd203af1b7f97c17cd
3
+ metadata.gz: d65d925dd1dc599e493c9ebb83f4e7eff915aa5ffffbc2daf4248bb83d1801fd
4
+ data.tar.gz: 6714917b885cc8c34992b75ff3688a60076568a341d6ccee577f8b5959946da8
5
5
  SHA512:
6
- metadata.gz: 06e1d13344593cce42a57f730d44e4f838660a7581810a5357e023b42a6f7a00c866e3fadcbb98d6a4398f202a0c693c02202c69415f7eac16ca7f9190903b93
7
- data.tar.gz: 3afc6a7bd45fd9fff233a5e753a6778421d8664405ccc33c1e7189988770056dcd6a45dd04c60052aa2d24b1c7eb61ecb85ee508959c9360e53e1b26ca70f211
6
+ metadata.gz: 6a9c1ca13995cf513c4600725fb9a5f3ed6a2749a9d020ecd204dacf07e528356dd9164cb64d9ff70b744fae5938efe274825186ea374cec9599aa51bed07187
7
+ data.tar.gz: 3ffc25af7d5884ab66720ef78fc03b6afe10892b0a3296be83a53e150654ebf09410bdae9eb33e164cc2ec485add2771aa84f72623c605892f4761c32ec8a0cc
@@ -25,7 +25,7 @@ module Speaky
25
25
  end
26
26
 
27
27
  # Query the vectorstore with a question.
28
- # Returns a string.
28
+ # Returns an array of strings.
29
29
  def query(question)
30
30
  raise NotImplementedError
31
31
  end
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'faiss'
4
+
3
5
  module Speaky
4
6
  class VectorstoreFaiss < VectorstoreBase
5
7
  def initialize(config)
6
- raise 'This class is not implemented yet.' # TEMP
7
-
8
8
  @config = config
9
9
 
10
10
  # check if the index path is set
@@ -15,11 +15,37 @@ module Speaky
15
15
  @index = Faiss::Index.load(@config[:index_path])
16
16
  else
17
17
  # create a new index
18
- @index = Faiss::IndexFlatL2.new(768)
18
+ index = Faiss::IndexFlatL2.new(1536)
19
+ @index = Faiss::IndexIDMap.new(index)
19
20
  @index.save(@config[:index_path])
20
21
  end
21
22
  end
22
23
 
23
- # TODO: Implement the other methods
24
+ def add(id, data)
25
+ embeddings = Speaky.llm.embed(data)
26
+
27
+ @index.add_with_ids([embeddings], [string_id_to_unique_int_id(id)])
28
+
29
+ true
30
+ end
31
+
32
+ def remove(id)
33
+ # remove is not supported by Faiss
34
+ true
35
+ end
36
+
37
+ def query(question)
38
+ # TODO: implement query
39
+
40
+ []
41
+ end
42
+
43
+ private
44
+
45
+ # This method is used to convert a string ID to a unique integer ID
46
+ # that can be used by the Qdrant API.
47
+ def string_id_to_unique_int_id(string_id)
48
+ string_id.to_s.hash.abs
49
+ end
24
50
  end
25
51
  end
@@ -67,7 +67,7 @@ module Speaky
67
67
 
68
68
  points_search = @client.points.search(
69
69
  collection_name: @config[:collection_name],
70
- limit: 1,
70
+ limit: 5,
71
71
  vector: embeddings,
72
72
  with_payload: true,
73
73
  with_vector: false
@@ -78,7 +78,7 @@ module Speaky
78
78
  raise 'Failed to search vectors'
79
79
  end
80
80
 
81
- points_search.dig('result').first.dig('payload', 'content')
81
+ points_search.dig('result').map { |r| r.dig('payload', 'content') }
82
82
  end
83
83
 
84
84
  def reset
@@ -1,3 +1,3 @@
1
1
  module Speaky
2
- VERSION = '0.1.7'
2
+ VERSION = '0.1.8'
3
3
  end
data/lib/speaky.rb CHANGED
@@ -87,7 +87,7 @@ module Speaky
87
87
  template ||= default_template
88
88
 
89
89
  # load context
90
- context = vectorstore.query(question)
90
+ context = vectorstore.query(question).join("\n")
91
91
 
92
92
  # generate prompt
93
93
  prompt = template.gsub("{{context}}", context).gsub("{{question}}", question)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: speaky
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregorio Galante