speaky 0.1.6 → 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: 3dea3c0900c9679d76d464ded63bc6c3d8cfad6d03da8661ad19b1013779b255
4
- data.tar.gz: 62858d2b9e755c8c56a18b34d0a5651c8dcdb5687b15b1294d1a3c48986a4176
3
+ metadata.gz: d65d925dd1dc599e493c9ebb83f4e7eff915aa5ffffbc2daf4248bb83d1801fd
4
+ data.tar.gz: 6714917b885cc8c34992b75ff3688a60076568a341d6ccee577f8b5959946da8
5
5
  SHA512:
6
- metadata.gz: 304614f14107c1a2effe210d1d00f599fab93ce6f1a086d09f398b0f7b42b0b129b95d585f3a6fccb36b9d3a0cee797342365634392ee15430ade4e3ccbf2aca
7
- data.tar.gz: '01229a40b984e5165e8ed669df1d94c8923ddc1f1b42a02ff3557215b6301531389c44e1a744092785fb1312842b498c7160c53888a7b5b640a587d677986e8c'
6
+ metadata.gz: 6a9c1ca13995cf513c4600725fb9a5f3ed6a2749a9d020ecd204dacf07e528356dd9164cb64d9ff70b744fae5938efe274825186ea374cec9599aa51bed07187
7
+ data.tar.gz: 3ffc25af7d5884ab66720ef78fc03b6afe10892b0a3296be83a53e150654ebf09410bdae9eb33e164cc2ec485add2771aa84f72623c605892f4761c32ec8a0cc
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'rails'
3
4
  require 'active_support'
4
5
 
5
6
  module Speaky
@@ -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
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'rails'
3
4
  require 'qdrant'
4
5
 
5
6
  module Speaky
@@ -29,7 +30,7 @@ module Speaky
29
30
  collection_name: @config[:collection_name],
30
31
  points: [
31
32
  {
32
- id: id,
33
+ id: string_id_to_unique_int_id(id),
33
34
  vector: embeddings,
34
35
  payload: {
35
36
  content: data
@@ -50,7 +51,7 @@ module Speaky
50
51
  def remove(id)
51
52
  points_delete = @client.points.delete(
52
53
  collection_name: @config[:collection_name],
53
- points: [id],
54
+ points: [string_id_to_unique_int_id(id)],
54
55
  )
55
56
 
56
57
  if !points_delete || points_delete.dig('status') != 'ok'
@@ -66,7 +67,7 @@ module Speaky
66
67
 
67
68
  points_search = @client.points.search(
68
69
  collection_name: @config[:collection_name],
69
- limit: 1,
70
+ limit: 5,
70
71
  vector: embeddings,
71
72
  with_payload: true,
72
73
  with_vector: false
@@ -77,7 +78,7 @@ module Speaky
77
78
  raise 'Failed to search vectors'
78
79
  end
79
80
 
80
- points_search.dig('result').first.dig('payload', 'content')
81
+ points_search.dig('result').map { |r| r.dig('payload', 'content') }
81
82
  end
82
83
 
83
84
  def reset
@@ -117,5 +118,11 @@ module Speaky
117
118
 
118
119
  true
119
120
  end
121
+
122
+ # This method is used to convert a string ID to a unique integer ID
123
+ # that can be used by the Qdrant API.
124
+ def string_id_to_unique_int_id(string_id)
125
+ string_id.to_s.hash.abs
126
+ end
120
127
  end
121
128
  end
@@ -1,3 +1,3 @@
1
1
  module Speaky
2
- VERSION = '0.1.6'
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.6
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregorio Galante