speaky 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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