weaviate-ruby 0.1.0 → 0.2.0

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: 4eb276e9b3dd49bfbdfbbe59abfba8f63c3e4d9f93f1942aede595c991300626
4
- data.tar.gz: 7ed2ed88ae192a6b7cd52bdf01fd683cae274b78f61f1a19bf2703c63adc6dad
3
+ metadata.gz: 26b105dbf4536df10fd278d0aac2c437483440c87caf37ec9f6c06e34eeb690b
4
+ data.tar.gz: 24b3933c80ebd659f292c0785cdd311733337d1adf21e9ea9d04da602f274d43
5
5
  SHA512:
6
- metadata.gz: cac32112b0c05d70ff0862c70b63567bd1688c8518617d263a3262711f5919a73e6a94eb5e0161e18a791249b89607a69a110f78caa7532088ab5329bede4d01
7
- data.tar.gz: eb14f8b055ed26adb286d54232922d0bb883c11654b15261fc694391bc8ea36d21627d09416f6d81db8030cf956fd7c440db69bd6b33037e4a499f2f39654685
6
+ metadata.gz: d1961b6e0123e21b60414b53055807ce83305a241c01b74747240cb0022e42483e2a2c2bb9305d2e35630ea2ab28517c311fa094de927c19246f199f91598ce4
7
+ data.tar.gz: 68ceaf84cded37b443cd7cf8879d5b947352b7be718f2b5a041571eacc584cfddfffd04f94f3b3daa6d1b712f842ac27a4ae105edb2711ebaef28a7cfe73541a
data/Gemfile.lock CHANGED
@@ -1,23 +1,40 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- weaviate-ruby (0.1.0)
4
+ weaviate-ruby (0.2.0)
5
5
  faraday (~> 2.7)
6
+ graphlient (~> 0.7.0)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
11
+ activesupport (7.0.4.3)
12
+ concurrent-ruby (~> 1.0, >= 1.0.2)
13
+ i18n (>= 1.6, < 2)
14
+ minitest (>= 5.1)
15
+ tzinfo (~> 2.0)
10
16
  ast (2.4.2)
11
17
  byebug (11.1.3)
12
18
  coderay (1.1.3)
19
+ concurrent-ruby (1.2.2)
13
20
  diff-lcs (1.5.0)
14
21
  faraday (2.7.4)
15
22
  faraday-net_http (>= 2.0, < 3.1)
16
23
  ruby2_keywords (>= 0.0.4)
17
24
  faraday-net_http (3.0.2)
25
+ graphlient (0.7.0)
26
+ faraday (~> 2.0)
27
+ graphql-client
28
+ graphql (2.0.19)
29
+ graphql-client (0.18.0)
30
+ activesupport (>= 3.0)
31
+ graphql
32
+ i18n (1.12.0)
33
+ concurrent-ruby (~> 1.0)
18
34
  json (2.6.3)
19
35
  language_server-protocol (3.17.0.3)
20
36
  method_source (1.0.0)
37
+ minitest (5.18.0)
21
38
  parallel (1.22.1)
22
39
  parser (3.2.1.1)
23
40
  ast (~> 2.4.1)
@@ -65,6 +82,8 @@ GEM
65
82
  language_server-protocol (~> 3.17.0.2)
66
83
  rubocop (~> 1.48.1)
67
84
  rubocop-performance (~> 1.16.0)
85
+ tzinfo (2.0.6)
86
+ concurrent-ruby (~> 1.0)
68
87
  unicode-display_width (2.4.2)
69
88
 
70
89
  PLATFORMS
data/README.md CHANGED
@@ -48,7 +48,9 @@ client.schema.create(
48
48
  "description": "The category",
49
49
  "name": "category"
50
50
  }
51
- ]
51
+ ],
52
+ # Possible values: 'text2vec-cohere', 'text2vec-openai', 'text2vec-huggingface', 'text2vec-transformers', 'text2vec-contextionary', 'img2vec-neural', 'multi2vec-clip', 'ref2vec-centroid'
53
+ vectorizer: "text2vec-openai"
52
54
  )
53
55
 
54
56
  # Get a single class from the schema
@@ -134,6 +136,30 @@ response = client.objects.batch_create(objects: [
134
136
  response.data
135
137
  ```
136
138
 
139
+ ### Querying
140
+ ```ruby
141
+ near_text = { "concepts": ["biology"] }
142
+
143
+ client.query.get(
144
+ class_name: 'Question',
145
+ fields: ['question', 'answer', 'category'],
146
+ limit: 1,
147
+
148
+ # To use this parameter you must have created your schema by setting the `vectorizer:` property to
149
+ # either 'text2vec-transformers', 'text2vec-contextionary', 'text2vec-openai', 'multi2vec-clip', 'text2vec-huggingface' or 'text2vec-cohere'
150
+ near_text: near_text,
151
+
152
+ # To use this parameter you must have created your schema by setting the `vectorizer:` property to 'multi2vec-clip' or 'img2vec-neural'
153
+ # near_image: ...,
154
+
155
+ # hybrid: ...,
156
+
157
+ # bm25: ...,
158
+
159
+ # near_object: ...,
160
+ )
161
+ ```
162
+
137
163
  ## Development
138
164
 
139
165
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "faraday"
4
+ require "graphlient"
4
5
 
5
6
  module Weaviate
6
7
  class Client
@@ -47,6 +48,26 @@ module Weaviate
47
48
  @objects ||= Weaviate::Objects.new(client: self)
48
49
  end
49
50
 
51
+ def query
52
+ @query ||= Weaviate::Query.new(client: self)
53
+ end
54
+
55
+ def graphql
56
+ headers = {}
57
+ if model_service && model_service_api_key
58
+ headers[API_KEY_HEADERS[model_service]] = model_service_api_key
59
+ end
60
+
61
+ @graphql ||= Graphlient::Client.new(
62
+ "#{scheme}://#{host}/#{API_VERSION}/graphql",
63
+ headers: headers,
64
+ http_options: {
65
+ read_timeout: 20,
66
+ write_timeout: 30
67
+ }
68
+ )
69
+ end
70
+
50
71
  def connection
51
72
  @connection ||= Faraday.new(url: "#{scheme}://#{host}/#{API_VERSION}/") do |faraday|
52
73
  faraday.request :json
@@ -23,7 +23,7 @@ module Weaviate
23
23
  req.params["sort"] = sort unless sort.nil?
24
24
  req.params["order"] = order unless order.nil?
25
25
  end
26
- Response::Collection.from_response(response, key: "objects", type: Response::Object)
26
+ Response::Collection.from_response(response.body, key: "objects", type: Response::Object)
27
27
  end
28
28
 
29
29
  # Create a new data object. The provided meta-data and schema values are validated.
@@ -52,7 +52,7 @@ module Weaviate
52
52
  end
53
53
 
54
54
  if response.success?
55
- Response::Collection.from_response(response, type: Response::Object)
55
+ Response::Collection.from_response(response.body, type: Response::Object)
56
56
  end
57
57
  end
58
58
 
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Weaviate
4
+ class Query < Base
5
+ def get(
6
+ class_name:,
7
+ fields:,
8
+ limit: nil,
9
+ near_text: nil
10
+ )
11
+ params = {}
12
+ params["nearText"] = near_text unless near_text.nil?
13
+ params["limit"] = limit unless limit.nil?
14
+ # TODO implement the rest of the API params
15
+
16
+ response = client.graphql.execute(get_query(class_name, params, fields), near_text: near_text)
17
+ response.data.get.send(class_name.downcase)
18
+ end
19
+
20
+ private
21
+
22
+ def get_query(class_name, params, fields)
23
+ client.graphql.parse do
24
+ query do
25
+ Get do
26
+ public_send(class_name, params) do
27
+ fields.map do |field|
28
+ public_send(field)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -5,8 +5,7 @@ module Weaviate
5
5
  class Collection
6
6
  attr_reader :data, :total_results
7
7
 
8
- def self.from_response(response, type:, key: nil)
9
- body = response.body
8
+ def self.from_response(body, type:, key: nil)
10
9
  new(
11
10
  data: (key.nil? ? body : body[key]).map { |attrs| type.new(attrs) }
12
11
  # TODO: Integrate and use the totalResults from the response.
@@ -7,7 +7,7 @@ module Weaviate
7
7
  # Dumps the current Weaviate schema. The result contains an array of objects.
8
8
  def list
9
9
  response = client.connection.get(PATH)
10
- Response::Collection.from_response(response, key: "classes", type: Response::Class)
10
+ Response::Collection.from_response(response.body, key: "classes", type: Response::Class)
11
11
  end
12
12
 
13
13
  # Get a single class from the schema
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Weaviate
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/weaviate.rb CHANGED
@@ -10,6 +10,7 @@ module Weaviate
10
10
  autoload :Meta, "weaviate/meta"
11
11
  autoload :Objects, "weaviate/objects"
12
12
  autoload :OIDC, "weaviate/oidc"
13
+ autoload :Query, "weaviate/query"
13
14
 
14
15
  module Response
15
16
  autoload :Base, "weaviate/response/base"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: weaviate-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrei Bondarev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-25 00:00:00.000000000 Z
11
+ date: 2023-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: graphlient
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.7.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.7.0
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: pry-byebug
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -60,6 +74,7 @@ files:
60
74
  - lib/weaviate/meta.rb
61
75
  - lib/weaviate/objects.rb
62
76
  - lib/weaviate/oidc.rb
77
+ - lib/weaviate/query.rb
63
78
  - lib/weaviate/response/base.rb
64
79
  - lib/weaviate/response/class.rb
65
80
  - lib/weaviate/response/collection.rb