anndb_api 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 40231828a91cb8e7abaf19f7f59106653fd1a2f1879ef296af3b16ff254d0aa9
4
+ data.tar.gz: f5a4247b51dcbb1c0a0cd847057d3128e80b8230c18262085b1e158a6eb2a8d6
5
+ SHA512:
6
+ metadata.gz: ae3175f1cb7b5f85d6aba9839f1df6850017ea77aba31ff692ee72cd4244f705bc07ac0e335d6b4c6f3a56ae91eae43059ac56d7b3a831714f1e67ff1530cb10
7
+ data.tar.gz: 2ce06b8904d9a2e87bfff59e009883c740a0e9ffa4f7a66cadd7a586a71e8147ea2d740f4d55595a7580cb9d289d60a030c4a6f6e83fe7a8710bc7a473353ab7
data/lib/anndb_api.rb ADDED
@@ -0,0 +1 @@
1
+ require 'anndb_api/client'
@@ -0,0 +1,29 @@
1
+ require 'anndb_api/image_dataset'
2
+
3
+ module AnndbApi
4
+ SERVER_ADDR = 'grpc-api.anndb.com:1433'
5
+
6
+ class Client
7
+ def initialize(api_key)
8
+ @api_key = api_key
9
+ end
10
+
11
+ def images(dataset_name)
12
+ AnndbApi::ImageDataset.new(AnndbApi::SERVER_ADDR, rpc_metadata_for_dataset(dataset_name))
13
+ end
14
+
15
+ def text(dataset_name)
16
+ AnndbApi::TextDataset.new(AnndbApi::SERVER_ADDR, rpc_metadata_for_dataset(dataset_name))
17
+ end
18
+
19
+ def vector(dataset_name)
20
+ AnndbApi::VectorDataset.new(AnndbApi::SERVER_ADDR, rpc_metadata_for_dataset(dataset_name))
21
+ end
22
+
23
+ private
24
+
25
+ def rpc_metadata_for_dataset(dataset_name)
26
+ { 'authorization': @api_key, 'dataset': dataset_name }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,54 @@
1
+ require 'anndb_api/util'
2
+
3
+ module AnndbApi
4
+ class DatasetOpError < RuntimeError
5
+ end
6
+
7
+ class Dataset
8
+
9
+ def delete(id)
10
+ format_dataset_op_result_single @stub.delete(AnndbApiPb::DeleteRequest.new(ids: [
11
+ AnndbApiPb::UUID.new(data: AnndbApi::Util.uuid_string_to_bytes(id))
12
+ ]), { metadata: @rpc_metadata })
13
+ end
14
+
15
+ def delete_batch(ids)
16
+ format_dataset_op_result @stub.delete(AnndbApiPb::DeleteRequest.new(ids: ids.map { |id|
17
+ AnndbApiPb::UUID.new(data: AnndbApi::Util.uuid_string_to_bytes(id))
18
+ }), { metadata: @rpc_metadata })
19
+ end
20
+
21
+ protected
22
+
23
+ def format_search_result(result)
24
+ result.items.map { |item|
25
+ {
26
+ id: AnndbApi::Util.ascii8bit_to_uuid(item.id),
27
+ metadata: item.metadata
28
+ }
29
+ }
30
+ end
31
+
32
+ def format_dataset_op_result(result)
33
+ (0..result.ids.length-1).map { |i|
34
+ {
35
+ id: AnndbApi::Util.ascii8bit_to_uuid(result.ids[i].data),
36
+ error: result.errors[i].message
37
+ }
38
+ }
39
+ end
40
+
41
+ def format_dataset_op_result_single(result)
42
+ error = result.errors.first.message
43
+ if error.length > 0
44
+ raise AnndbApi::DatasetOpError.new(error)
45
+ end
46
+
47
+ AnndbApi::Util.ascii8bit_to_uuid(result.ids.first.data)
48
+ end
49
+
50
+ def format_req_metadata(metadata)
51
+ metadata.collect{ |k, v| [k.to_s, v] }.to_h
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,79 @@
1
+ require 'grpc'
2
+
3
+ require 'anndb_api/dataset'
4
+ require 'core_pb'
5
+ require 'image_dataset_pb'
6
+ require 'image_dataset_services_pb'
7
+
8
+ module AnndbApi
9
+ class ImageDataset < AnndbApi::Dataset
10
+ def initialize(server_addr, rpc_metadata)
11
+ @rpc_metadata = rpc_metadata
12
+ @stub = AnndbApiPb::ImageDataset::Stub.new(server_addr, GRPC::Core::ChannelCredentials.new())
13
+ end
14
+
15
+ def insert(image, metadata = {})
16
+ format_dataset_op_result_single @stub.insert(AnndbApiPb::ImageDatasetRequest.new(items: [
17
+ AnndbApiPb::ImageItem.new(
18
+ image: image_proto(image),
19
+ metadata: format_req_metadata(metadata)
20
+ )
21
+ ]), { metadata: @rpc_metadata })
22
+ end
23
+
24
+ def insert_batch(items)
25
+ format_dataset_op_result @stub.insert(AnndbApiPb::ImageDatasetRequest.new(items: items.map { |item|
26
+ AnndbApiPb::ImageItem.new(
27
+ image: image_proto(item[:image]),
28
+ metadata: format_req_metadata(item.fetch(:metadata, {}))
29
+ )
30
+ }), { metadata: @rpc_metadata })
31
+ end
32
+
33
+ def update(id, image, metadata = {})
34
+ format_dataset_op_result_single @stub.update(AnndbApiPb::ImageDatasetRequest.new(items: [
35
+ AnndbApiPb::ImageItem.new(
36
+ id: AnndbApiPb::UUID.new(data: AnndbApi::Util.uuid_string_to_bytes(id)),
37
+ image: image_proto(image),
38
+ metadata: format_req_metadata(metadata)
39
+ )
40
+ ]), { metadata: @rpc_metadata })
41
+ end
42
+
43
+ def update_batch(items)
44
+ format_dataset_op_result @stub.update(AnndbApiPb::ImageDatasetRequest.new(items: items.map { |item|
45
+ AnndbApiPb::ImageItem.new(
46
+ id: AnndbApiPb::UUID.new(data: AnndbApi::Util.uuid_string_to_bytes(item[:id])),
47
+ image: image_proto(item[:image]),
48
+ metadata: format_req_metadata(item.fetch(:metadata, {}))
49
+ )
50
+ }), { metadata: @rpc_metadata })
51
+ end
52
+
53
+ def search_image(query, n)
54
+ format_search_result @stub.search_image(AnndbApiPb::ImageSearchImageRequest.new(
55
+ query: image_proto(query),
56
+ n: n.to_i
57
+ ), { metadata: @rpc_metadata })
58
+ end
59
+
60
+ def search_text(query, n)
61
+ format_search_result @stub.search_text(AnndbApiPb::ImageSearchTextRequest.new(
62
+ query: query.to_s,
63
+ n: n.to_i
64
+ ), { metadata: @rpc_metadata })
65
+ end
66
+
67
+ private
68
+
69
+ def image_proto(img)
70
+ if img.is_a? Array
71
+ return AnndbApiPb::Image.new(data: img)
72
+ elsif img.is_a? String
73
+ return AnndbApiPb::Image.new(url: img)
74
+ end
75
+
76
+ raise TypeError.new('Image has to be either an array or a string')
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,57 @@
1
+ require 'grpc'
2
+
3
+ require 'anndb_api/dataset'
4
+ require 'text_dataset_pb'
5
+ require 'text_dataset_services_pb'
6
+
7
+ module AnndbApi
8
+ class TextDataset < AnndbApi::Dataset
9
+ def initialize(server_addr, rpc_metadata)
10
+ @rpc_metadata = rpc_metadata
11
+ @stub = AnndbApiPb::TextDataset::Stub.new(server_addr, GRPC::Core::ChannelCredentials.new())
12
+ end
13
+
14
+ def insert(text, metadata = {})
15
+ format_dataset_op_result_single @stub.insert(AnndbApiPb::TextDatasetRequest.new(items: [
16
+ AnndbApiPb::TextItem.new(
17
+ text: text,
18
+ metadata: format_req_metadata(metadata)
19
+ )
20
+ ]), { metadata: @rpc_metadata })
21
+ end
22
+
23
+ def insert_batch(items)
24
+ format_dataset_op_result @stub.insert(AnndbApiPb::TextDatasetRequest.new(items: items.map { |item|
25
+ AnndbApiPb::TextItem.new(
26
+ text: item[:text],
27
+ metadata: format_req_metadata(item.fetch(:metadata, {}))
28
+ )
29
+
30
+ }), { metadata: @rpc_metadata })
31
+ end
32
+
33
+ def update(id, text, metadata = {})
34
+ format_dataset_op_result_single @stub.update(AnndbApiPb::TextDatasetRequest.new(items: [
35
+ AnndbApiPb::TextItem.new(
36
+ id: AnndbApiPb::UUID.new(data: AnndbApi::Util.uuid_string_to_bytes(id)),
37
+ text: text,
38
+ metadata: format_req_metadata(metadata)
39
+ )
40
+ ]), { metadata: @rpc_metadata })
41
+ end
42
+
43
+ def update_batch(items)
44
+ format_dataset_op_result @stub.update(AnndbApiPb::TextDatasetRequest.new(items: items.map { |item|
45
+ AnndbApiPb::ImageItem.new(
46
+ id: AnndbApiPb::UUID.new(data: AnndbApi::Util.uuid_string_to_bytes(item[:id])),
47
+ text: item[:text],
48
+ metadata: format_req_metadata(item.fetch(:metadata, {}))
49
+ )
50
+ }), { metadata: @rpc_metadata })
51
+ end
52
+
53
+ def search(query, n)
54
+ format_search_result @stub.search(AnndbApiPb::TextSearchRequest.new(query: query, n: n), { metadata: @rpc_metadata })
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,11 @@
1
+ module AnndbApi
2
+ class Util
3
+ def self.uuid_string_to_bytes(uuid)
4
+ [uuid.tr('-', '')].pack('H*')
5
+ end
6
+
7
+ def self.ascii8bit_to_uuid(ascii_str)
8
+ ascii_str.unpack('H*').first
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,61 @@
1
+ require 'grpc'
2
+
3
+ require 'anndb_api/dataset'
4
+ require 'core_pb'
5
+ require 'vector_dataset_pb'
6
+ require 'vector_dataset_services_pb'
7
+
8
+ module AnndbApi
9
+ class VectorDataset < AnndbApi::Dataset
10
+ def initialize(server_addr, rpc_metadata)
11
+ @rpc_metadata = rpc_metadata
12
+ @stub = AnndbApiPb::VectorDataset::Stub.new(server_addr, GRPC::Core::ChannelCredentials.new())
13
+ end
14
+
15
+ def insert(vector, metadata = {})
16
+ format_dataset_op_result_single @stub.insert(AnndbApiPb::VectorDatasetRequest.new(items: [
17
+ AnndbApiPb::VectorItem.new(
18
+ vector: AnndbApiPb::Vector.new(values: vector),
19
+ metadata: format_req_metadata(metadata)
20
+ )
21
+ ]), { metadata: @rpc_metadata })
22
+ end
23
+
24
+ def insert_batch(items)
25
+ format_dataset_op_result @stub.insert(AnndbApiPb::VectorDatasetRequest.new(items: items.map { |item|
26
+ AnndbApiPb::VectorItem.new(
27
+ vector: AnndbApiPb::Vector.new(values: item[:vector]),
28
+ metadata: format_req_metadata(item.fetch(:metadata, {}))
29
+ )
30
+
31
+ }), { metadata: @rpc_metadata })
32
+ end
33
+
34
+ def update(id, vector, metadata = {})
35
+ format_dataset_op_result_single @stub.update(AnndbApiPb::VectorDatasetRequest.new(items: [
36
+ AnndbApiPb::VectorItem.new(
37
+ id: AnndbApiPb::UUID.new(data: AnndbApi::Util.uuid_string_to_bytes(id)),
38
+ vector: AnndbApiPb::Vector.new(values: vector),
39
+ metadata: format_req_metadata(metadata)
40
+ )
41
+ ]), { metadata: @rpc_metadata })
42
+ end
43
+
44
+ def update_batch(items)
45
+ format_dataset_op_result @stub.update(AnndbApiPb::VectorDatasetRequest.new(items: items.map { |item|
46
+ AnndbApiPb::ImageItem.new(
47
+ id: AnndbApiPb::UUID.new(data: AnndbApi::Util.uuid_string_to_bytes(item[:id])),
48
+ vector: AnndbApiPb::Vector.new(values: item[:vector]),
49
+ metadata: format_req_metadata(item.fetch(:metadata, {}))
50
+ )
51
+ }), { metadata: @rpc_metadata })
52
+ end
53
+
54
+ def search(query, n)
55
+ format_search_result @stub.search(AnndbApiPb::VectorSearchRequest.new(
56
+ query: AnndbApiPb::Vector.new(values: query),
57
+ n: n
58
+ ), { metadata: @rpc_metadata })
59
+ end
60
+ end
61
+ end
data/lib/core_pb.rb ADDED
@@ -0,0 +1,48 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # source: core.proto
3
+
4
+ require 'google/protobuf'
5
+
6
+ Google::Protobuf::DescriptorPool.generated_pool.build do
7
+ add_file("core.proto", :syntax => :proto3) do
8
+ add_message "anndb_api_pb.Image" do
9
+ optional :data, :bytes, 1
10
+ optional :url, :string, 2
11
+ end
12
+ add_message "anndb_api_pb.Vector" do
13
+ repeated :values, :float, 1
14
+ end
15
+ add_message "anndb_api_pb.UUID" do
16
+ optional :data, :bytes, 1
17
+ end
18
+ add_message "anndb_api_pb.Error" do
19
+ optional :code, :uint32, 1
20
+ optional :message, :string, 2
21
+ end
22
+ add_message "anndb_api_pb.DeleteRequest" do
23
+ repeated :ids, :message, 1, "anndb_api_pb.UUID"
24
+ end
25
+ add_message "anndb_api_pb.DatasetOpResult" do
26
+ repeated :ids, :message, 1, "anndb_api_pb.UUID"
27
+ repeated :errors, :message, 2, "anndb_api_pb.Error"
28
+ end
29
+ add_message "anndb_api_pb.SearchResult" do
30
+ repeated :items, :message, 1, "anndb_api_pb.SearchResultItem"
31
+ end
32
+ add_message "anndb_api_pb.SearchResultItem" do
33
+ optional :id, :bytes, 1
34
+ map :metadata, :string, :string, 2
35
+ end
36
+ end
37
+ end
38
+
39
+ module AnndbApiPb
40
+ Image = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.Image").msgclass
41
+ Vector = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.Vector").msgclass
42
+ UUID = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.UUID").msgclass
43
+ Error = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.Error").msgclass
44
+ DeleteRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.DeleteRequest").msgclass
45
+ DatasetOpResult = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.DatasetOpResult").msgclass
46
+ SearchResult = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.SearchResult").msgclass
47
+ SearchResultItem = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.SearchResultItem").msgclass
48
+ end
@@ -0,0 +1,33 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # source: image_dataset.proto
3
+
4
+ require 'google/protobuf'
5
+
6
+ require 'core_pb'
7
+ Google::Protobuf::DescriptorPool.generated_pool.build do
8
+ add_file("image_dataset.proto", :syntax => :proto3) do
9
+ add_message "anndb_api_pb.ImageDatasetRequest" do
10
+ repeated :items, :message, 1, "anndb_api_pb.ImageItem"
11
+ end
12
+ add_message "anndb_api_pb.ImageItem" do
13
+ optional :id, :message, 1, "anndb_api_pb.UUID"
14
+ optional :image, :message, 2, "anndb_api_pb.Image"
15
+ map :metadata, :string, :string, 3
16
+ end
17
+ add_message "anndb_api_pb.ImageSearchImageRequest" do
18
+ optional :query, :message, 1, "anndb_api_pb.Image"
19
+ optional :n, :uint32, 2
20
+ end
21
+ add_message "anndb_api_pb.ImageSearchTextRequest" do
22
+ optional :query, :string, 1
23
+ optional :n, :uint32, 2
24
+ end
25
+ end
26
+ end
27
+
28
+ module AnndbApiPb
29
+ ImageDatasetRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.ImageDatasetRequest").msgclass
30
+ ImageItem = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.ImageItem").msgclass
31
+ ImageSearchImageRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.ImageSearchImageRequest").msgclass
32
+ ImageSearchTextRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.ImageSearchTextRequest").msgclass
33
+ end
@@ -0,0 +1,26 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # Source: image_dataset.proto for package 'anndb_api_pb'
3
+
4
+ require 'grpc'
5
+ require 'image_dataset_pb'
6
+
7
+ module AnndbApiPb
8
+ module ImageDataset
9
+ class Service
10
+
11
+ include GRPC::GenericService
12
+
13
+ self.marshal_class_method = :encode
14
+ self.unmarshal_class_method = :decode
15
+ self.service_name = 'anndb_api_pb.ImageDataset'
16
+
17
+ rpc :Insert, ImageDatasetRequest, DatasetOpResult
18
+ rpc :Update, ImageDatasetRequest, DatasetOpResult
19
+ rpc :Delete, DeleteRequest, DatasetOpResult
20
+ rpc :SearchImage, ImageSearchImageRequest, SearchResult
21
+ rpc :SearchText, ImageSearchTextRequest, SearchResult
22
+ end
23
+
24
+ Stub = Service.rpc_stub_class
25
+ end
26
+ end
@@ -0,0 +1,28 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # source: text_dataset.proto
3
+
4
+ require 'google/protobuf'
5
+
6
+ require 'core_pb'
7
+ Google::Protobuf::DescriptorPool.generated_pool.build do
8
+ add_file("text_dataset.proto", :syntax => :proto3) do
9
+ add_message "anndb_api_pb.TextDatasetRequest" do
10
+ repeated :items, :message, 1, "anndb_api_pb.TextItem"
11
+ end
12
+ add_message "anndb_api_pb.TextItem" do
13
+ optional :id, :message, 1, "anndb_api_pb.UUID"
14
+ optional :text, :string, 2
15
+ map :metadata, :string, :string, 3
16
+ end
17
+ add_message "anndb_api_pb.TextSearchRequest" do
18
+ optional :query, :string, 1
19
+ optional :n, :uint32, 2
20
+ end
21
+ end
22
+ end
23
+
24
+ module AnndbApiPb
25
+ TextDatasetRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.TextDatasetRequest").msgclass
26
+ TextItem = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.TextItem").msgclass
27
+ TextSearchRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.TextSearchRequest").msgclass
28
+ end
@@ -0,0 +1,25 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # Source: text_dataset.proto for package 'anndb_api_pb'
3
+
4
+ require 'grpc'
5
+ require 'text_dataset_pb'
6
+
7
+ module AnndbApiPb
8
+ module TextDataset
9
+ class Service
10
+
11
+ include GRPC::GenericService
12
+
13
+ self.marshal_class_method = :encode
14
+ self.unmarshal_class_method = :decode
15
+ self.service_name = 'anndb_api_pb.TextDataset'
16
+
17
+ rpc :Insert, TextDatasetRequest, DatasetOpResult
18
+ rpc :Update, TextDatasetRequest, DatasetOpResult
19
+ rpc :Delete, DeleteRequest, DatasetOpResult
20
+ rpc :Search, TextSearchRequest, SearchResult
21
+ end
22
+
23
+ Stub = Service.rpc_stub_class
24
+ end
25
+ end
@@ -0,0 +1,28 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # source: vector_dataset.proto
3
+
4
+ require 'google/protobuf'
5
+
6
+ require 'core_pb'
7
+ Google::Protobuf::DescriptorPool.generated_pool.build do
8
+ add_file("vector_dataset.proto", :syntax => :proto3) do
9
+ add_message "anndb_api_pb.VectorDatasetRequest" do
10
+ repeated :items, :message, 1, "anndb_api_pb.VectorItem"
11
+ end
12
+ add_message "anndb_api_pb.VectorItem" do
13
+ optional :id, :message, 1, "anndb_api_pb.UUID"
14
+ optional :vector, :message, 2, "anndb_api_pb.Vector"
15
+ map :metadata, :string, :string, 3
16
+ end
17
+ add_message "anndb_api_pb.VectorSearchRequest" do
18
+ optional :query, :message, 1, "anndb_api_pb.Vector"
19
+ optional :n, :uint32, 2
20
+ end
21
+ end
22
+ end
23
+
24
+ module AnndbApiPb
25
+ VectorDatasetRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.VectorDatasetRequest").msgclass
26
+ VectorItem = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.VectorItem").msgclass
27
+ VectorSearchRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("anndb_api_pb.VectorSearchRequest").msgclass
28
+ end
@@ -0,0 +1,25 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # Source: vector_dataset.proto for package 'anndb_api_pb'
3
+
4
+ require 'grpc'
5
+ require 'vector_dataset_pb'
6
+
7
+ module AnndbApiPb
8
+ module VectorDataset
9
+ class Service
10
+
11
+ include GRPC::GenericService
12
+
13
+ self.marshal_class_method = :encode
14
+ self.unmarshal_class_method = :decode
15
+ self.service_name = 'anndb_api_pb.VectorDataset'
16
+
17
+ rpc :Insert, VectorDatasetRequest, DatasetOpResult
18
+ rpc :Update, VectorDatasetRequest, DatasetOpResult
19
+ rpc :Delete, DeleteRequest, DatasetOpResult
20
+ rpc :Search, VectorSearchRequest, SearchResult
21
+ end
22
+
23
+ Stub = Service.rpc_stub_class
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,84 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: anndb_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Marek Galovic
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-04-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: grpc
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.28.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.28.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: google-protobuf
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 3.12.2
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 3.12.2
41
+ description:
42
+ email: contact@anndb.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/anndb_api.rb
48
+ - lib/anndb_api/client.rb
49
+ - lib/anndb_api/dataset.rb
50
+ - lib/anndb_api/image_dataset.rb
51
+ - lib/anndb_api/text_dataset.rb
52
+ - lib/anndb_api/util.rb
53
+ - lib/anndb_api/vector_dataset.rb
54
+ - lib/core_pb.rb
55
+ - lib/image_dataset_pb.rb
56
+ - lib/image_dataset_services_pb.rb
57
+ - lib/text_dataset_pb.rb
58
+ - lib/text_dataset_services_pb.rb
59
+ - lib/vector_dataset_pb.rb
60
+ - lib/vector_dataset_services_pb.rb
61
+ homepage: https://github.com/anndb-com/anndb-api-client-ruby
62
+ licenses:
63
+ - Apache-2.0
64
+ metadata: {}
65
+ post_install_message:
66
+ rdoc_options: []
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ requirements: []
80
+ rubygems_version: 3.1.2
81
+ signing_key:
82
+ specification_version: 4
83
+ summary: AnnDB client for Ruby
84
+ test_files: []