weaviate-ruby 0.2.0 → 0.4.0
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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +41 -3
- data/lib/weaviate/client.rb +15 -0
- data/lib/weaviate/error.rb +1 -1
- data/lib/weaviate/health.rb +17 -0
- data/lib/weaviate/nodes.rb +12 -0
- data/lib/weaviate/objects.rb +3 -0
- data/lib/weaviate/query.rb +106 -19
- data/lib/weaviate/version.rb +1 -1
- data/lib/weaviate.rb +2 -0
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e9f87a5670b340fe00f3634f0cf7d22b3c699b0737d3cb326d4ec7d55085cea2
|
|
4
|
+
data.tar.gz: 0b7fbe6084e04d5d1a006871deab4972aa965a65bd5bf8080a58f045787841fd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: dee8739ad9cd3bb53ae226bd4be6b041fc9af449d47ff6347088514b2db2bfc2adef35e9fc2ff2c6c431ee5f2d311e49c5f78569ff473e36b8da366a01dd9d48
|
|
7
|
+
data.tar.gz: 5dd898fd6c88899b119721369d0f606114cf1be480be31218adbe506954cba1b110f9eead1f135b5619e067d7328aeefd405762159912f93996f9f098b2ff62e
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -137,13 +137,21 @@ response.data
|
|
|
137
137
|
```
|
|
138
138
|
|
|
139
139
|
### Querying
|
|
140
|
+
|
|
141
|
+
#### Get
|
|
140
142
|
```ruby
|
|
141
|
-
near_text = {
|
|
143
|
+
near_text = '{ concepts: ["biology"] }'
|
|
144
|
+
sort_obj = '{ path: ["category"], order: desc }'
|
|
145
|
+
where_obj = '{ path: ["id"], operator: Equal, valueString: "..." }'
|
|
142
146
|
|
|
143
147
|
client.query.get(
|
|
144
148
|
class_name: 'Question',
|
|
145
|
-
fields:
|
|
146
|
-
limit: 1,
|
|
149
|
+
fields: 'question answer category',
|
|
150
|
+
limit: "1",
|
|
151
|
+
offset: "1",
|
|
152
|
+
after: "id",
|
|
153
|
+
sort: sort_obj,
|
|
154
|
+
where_obj: where_obj,
|
|
147
155
|
|
|
148
156
|
# To use this parameter you must have created your schema by setting the `vectorizer:` property to
|
|
149
157
|
# either 'text2vec-transformers', 'text2vec-contextionary', 'text2vec-openai', 'multi2vec-clip', 'text2vec-huggingface' or 'text2vec-cohere'
|
|
@@ -158,6 +166,36 @@ client.query.get(
|
|
|
158
166
|
|
|
159
167
|
# near_object: ...,
|
|
160
168
|
)
|
|
169
|
+
|
|
170
|
+
# Example queries:
|
|
171
|
+
client.query.get class_name: 'Question', where: '{ operator: Like, valueText: "SCIENCE", path: ["category"] }', fields: 'answer question category', limit: "2"
|
|
172
|
+
|
|
173
|
+
client.query.get class_name: 'Question', fields: 'answer question category _additional { id }', after: "3c5f7039-37f3-4244-b3e2-8f4a083e448d", limit: "1"
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
#### Aggs
|
|
180
|
+
```ruby
|
|
181
|
+
client.query.aggs(
|
|
182
|
+
class_name: "Question",
|
|
183
|
+
fields: 'meta { count }'
|
|
184
|
+
group_by: ["category"],
|
|
185
|
+
object_limit: "10",
|
|
186
|
+
near_text: "{ concepts: [\"knowledge\"] }"
|
|
187
|
+
)
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
#### Nodes
|
|
191
|
+
```ruby
|
|
192
|
+
client.nodes
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
#### Health
|
|
196
|
+
```ruby
|
|
197
|
+
client.live?
|
|
198
|
+
client.ready?
|
|
161
199
|
```
|
|
162
200
|
|
|
163
201
|
## Development
|
data/lib/weaviate/client.rb
CHANGED
|
@@ -44,6 +44,21 @@ module Weaviate
|
|
|
44
44
|
@meta.get
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
+
def nodes
|
|
48
|
+
@nodes ||= Weaviate::Nodes.new(client: self)
|
|
49
|
+
@nodes.list
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def live?
|
|
53
|
+
@health ||= Weaviate::Health.new(client: self)
|
|
54
|
+
@health.live?
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def ready?
|
|
58
|
+
@health ||= Weaviate::Health.new(client: self)
|
|
59
|
+
@health.ready?
|
|
60
|
+
end
|
|
61
|
+
|
|
47
62
|
def objects
|
|
48
63
|
@objects ||= Weaviate::Objects.new(client: self)
|
|
49
64
|
end
|
data/lib/weaviate/error.rb
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Weaviate
|
|
4
|
+
class Health < Base
|
|
5
|
+
PATH = ".well-known"
|
|
6
|
+
|
|
7
|
+
def live?
|
|
8
|
+
response = client.connection.get("#{PATH}/live")
|
|
9
|
+
response.status == 200
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def ready?
|
|
13
|
+
response = client.connection.get("#{PATH}/ready")
|
|
14
|
+
response.status == 200
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/weaviate/objects.rb
CHANGED
data/lib/weaviate/query.rb
CHANGED
|
@@ -5,32 +5,119 @@ module Weaviate
|
|
|
5
5
|
def get(
|
|
6
6
|
class_name:,
|
|
7
7
|
fields:,
|
|
8
|
+
after: nil,
|
|
8
9
|
limit: nil,
|
|
9
|
-
|
|
10
|
+
offset: nil,
|
|
11
|
+
sort: nil,
|
|
12
|
+
where: nil,
|
|
13
|
+
near_text: nil,
|
|
14
|
+
near_vector: nil,
|
|
15
|
+
near_object: nil
|
|
10
16
|
)
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
response = client.graphql.execute(
|
|
18
|
+
get_query(
|
|
19
|
+
class_name: class_name,
|
|
20
|
+
fields: fields,
|
|
21
|
+
sort: sort,
|
|
22
|
+
where: where,
|
|
23
|
+
near_text: near_text,
|
|
24
|
+
near_vector: near_vector,
|
|
25
|
+
near_object: near_object
|
|
26
|
+
),
|
|
27
|
+
after: after,
|
|
28
|
+
limit: limit,
|
|
29
|
+
offset: offset
|
|
30
|
+
)
|
|
17
31
|
response.data.get.send(class_name.downcase)
|
|
32
|
+
rescue Graphlient::Errors::ExecutionError => error
|
|
33
|
+
raise Weaviate::Error.new(error.response.data.get.errors.messages.to_h)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def aggs(
|
|
37
|
+
class_name:,
|
|
38
|
+
fields: nil,
|
|
39
|
+
object_limit: nil,
|
|
40
|
+
near_text: nil,
|
|
41
|
+
near_vector: nil,
|
|
42
|
+
near_object: nil,
|
|
43
|
+
group_by: nil
|
|
44
|
+
)
|
|
45
|
+
response = client.graphql.execute(
|
|
46
|
+
aggs_query(
|
|
47
|
+
class_name: class_name,
|
|
48
|
+
fields: fields,
|
|
49
|
+
near_text: near_text,
|
|
50
|
+
near_vector: near_vector,
|
|
51
|
+
near_object: near_object
|
|
52
|
+
),
|
|
53
|
+
group_by: group_by,
|
|
54
|
+
object_limit: object_limit
|
|
55
|
+
)
|
|
56
|
+
response.data.aggregate.send(class_name.downcase)
|
|
57
|
+
rescue Graphlient::Errors::ExecutionError => error
|
|
58
|
+
raise Weaviate::Error.new(error.response.data.aggregate.errors.messages.to_h)
|
|
18
59
|
end
|
|
19
60
|
|
|
20
61
|
private
|
|
21
62
|
|
|
22
|
-
def get_query(
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
63
|
+
def get_query(
|
|
64
|
+
class_name:,
|
|
65
|
+
fields:,
|
|
66
|
+
where: nil,
|
|
67
|
+
near_text: nil,
|
|
68
|
+
near_vector: nil,
|
|
69
|
+
near_object: nil,
|
|
70
|
+
sort: nil
|
|
71
|
+
)
|
|
72
|
+
client.graphql.parse <<~GRAPHQL
|
|
73
|
+
query(
|
|
74
|
+
$after: String,
|
|
75
|
+
$limit: Int,
|
|
76
|
+
$offset: Int,
|
|
77
|
+
) {
|
|
78
|
+
Get {
|
|
79
|
+
#{class_name}(
|
|
80
|
+
after: $after,
|
|
81
|
+
limit: $limit,
|
|
82
|
+
offset: $offset,
|
|
83
|
+
#{near_text.present? ? "nearText: #{near_text}" : ""},
|
|
84
|
+
#{near_vector.present? ? "nearVector: #{near_vector}" : ""},
|
|
85
|
+
#{near_object.present? ? "nearObject: #{near_object}" : ""},
|
|
86
|
+
#{where.present? ? "where: #{where}" : ""},
|
|
87
|
+
#{sort.present? ? "sort: #{sort}" : ""}
|
|
88
|
+
) {
|
|
89
|
+
#{fields}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
GRAPHQL
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def aggs_query(
|
|
97
|
+
class_name:,
|
|
98
|
+
fields:,
|
|
99
|
+
near_text: nil,
|
|
100
|
+
near_vector: nil,
|
|
101
|
+
near_object: nil
|
|
102
|
+
)
|
|
103
|
+
client.graphql.parse <<~GRAPHQL
|
|
104
|
+
query(
|
|
105
|
+
$group_by: [String],
|
|
106
|
+
$object_limit: Int,
|
|
107
|
+
) {
|
|
108
|
+
Aggregate {
|
|
109
|
+
#{class_name}(
|
|
110
|
+
objectLimit: $object_limit,
|
|
111
|
+
groupBy: $group_by,
|
|
112
|
+
#{near_text.present? ? "nearText: #{near_text}" : ""},
|
|
113
|
+
#{near_vector.present? ? "nearVector: #{near_vector}" : ""},
|
|
114
|
+
#{near_object.present? ? "nearObject: #{near_object}" : ""}
|
|
115
|
+
) {
|
|
116
|
+
#{fields}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
GRAPHQL
|
|
34
121
|
end
|
|
35
122
|
end
|
|
36
123
|
end
|
data/lib/weaviate/version.rb
CHANGED
data/lib/weaviate.rb
CHANGED
|
@@ -11,6 +11,8 @@ module Weaviate
|
|
|
11
11
|
autoload :Objects, "weaviate/objects"
|
|
12
12
|
autoload :OIDC, "weaviate/oidc"
|
|
13
13
|
autoload :Query, "weaviate/query"
|
|
14
|
+
autoload :Nodes, "weaviate/nodes"
|
|
15
|
+
autoload :Health, "weaviate/health"
|
|
14
16
|
|
|
15
17
|
module Response
|
|
16
18
|
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.
|
|
4
|
+
version: 0.4.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
|
|
11
|
+
date: 2023-04-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: faraday
|
|
@@ -71,7 +71,9 @@ files:
|
|
|
71
71
|
- lib/weaviate/base.rb
|
|
72
72
|
- lib/weaviate/client.rb
|
|
73
73
|
- lib/weaviate/error.rb
|
|
74
|
+
- lib/weaviate/health.rb
|
|
74
75
|
- lib/weaviate/meta.rb
|
|
76
|
+
- lib/weaviate/nodes.rb
|
|
75
77
|
- lib/weaviate/objects.rb
|
|
76
78
|
- lib/weaviate/oidc.rb
|
|
77
79
|
- lib/weaviate/query.rb
|