vectra-client 1.0.8 → 1.1.1
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/CHANGELOG.md +37 -0
- data/README.md +75 -0
- data/docs/_layouts/home.html +1 -1
- data/docs/_layouts/page.html +7 -0
- data/docs/api/cheatsheet.md +17 -0
- data/docs/api/methods.md +45 -0
- data/docs/api/overview.md +6 -0
- data/docs/guides/middleware.md +324 -0
- data/docs/guides/roadmap.md +53 -0
- data/examples/middleware_demo.rb +103 -0
- data/lib/vectra/client.rb +132 -15
- data/lib/vectra/health_check.rb +4 -2
- data/lib/vectra/middleware/base.rb +97 -0
- data/lib/vectra/middleware/cost_tracker.rb +121 -0
- data/lib/vectra/middleware/instrumentation.rb +44 -0
- data/lib/vectra/middleware/logging.rb +62 -0
- data/lib/vectra/middleware/pii_redaction.rb +65 -0
- data/lib/vectra/middleware/request.rb +62 -0
- data/lib/vectra/middleware/response.rb +65 -0
- data/lib/vectra/middleware/retry.rb +103 -0
- data/lib/vectra/middleware/stack.rb +74 -0
- data/lib/vectra/providers/memory.rb +56 -0
- data/lib/vectra/providers/pgvector.rb +50 -0
- data/lib/vectra/providers/qdrant.rb +39 -0
- data/lib/vectra/providers/weaviate.rb +64 -0
- data/lib/vectra/version.rb +1 -1
- data/lib/vectra.rb +9 -0
- metadata +13 -1
|
@@ -139,6 +139,36 @@ module Vectra
|
|
|
139
139
|
include_values, include_metadata)
|
|
140
140
|
end
|
|
141
141
|
|
|
142
|
+
# Text-only search using Weaviate's BM25 text search
|
|
143
|
+
#
|
|
144
|
+
# @param index [String] class name
|
|
145
|
+
# @param text [String] text query for BM25 search
|
|
146
|
+
# @param top_k [Integer] number of results
|
|
147
|
+
# @param namespace [String, nil] optional namespace (not used in Weaviate)
|
|
148
|
+
# @param filter [Hash, nil] metadata filter
|
|
149
|
+
# @param include_values [Boolean] include vector values
|
|
150
|
+
# @param include_metadata [Boolean] include metadata
|
|
151
|
+
# @return [QueryResult] search results
|
|
152
|
+
def text_search(index:, text:, top_k:, namespace: nil, filter: nil,
|
|
153
|
+
include_values: false, include_metadata: true)
|
|
154
|
+
where_filter = build_where(filter, namespace)
|
|
155
|
+
graphql = build_text_search_graphql(
|
|
156
|
+
index: index,
|
|
157
|
+
text: text,
|
|
158
|
+
top_k: top_k,
|
|
159
|
+
where_filter: where_filter,
|
|
160
|
+
include_values: include_values,
|
|
161
|
+
include_metadata: include_metadata
|
|
162
|
+
)
|
|
163
|
+
body = { "query" => graphql }
|
|
164
|
+
|
|
165
|
+
response = with_error_handling do
|
|
166
|
+
connection.post("#{API_BASE_PATH}/graphql", body)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
handle_text_search_response(response, index, namespace, include_values, include_metadata)
|
|
170
|
+
end
|
|
171
|
+
|
|
142
172
|
# rubocop:disable Metrics/PerceivedComplexity
|
|
143
173
|
def fetch(index:, ids:, namespace: nil)
|
|
144
174
|
body = {
|
|
@@ -337,6 +367,26 @@ module Vectra
|
|
|
337
367
|
build_graphql_query(index, top_k, text, alpha, vector, where_filter, selection_block)
|
|
338
368
|
end
|
|
339
369
|
|
|
370
|
+
def build_text_search_graphql(index:, text:, top_k:, where_filter:,
|
|
371
|
+
include_values:, include_metadata:)
|
|
372
|
+
selection_block = build_selection_fields(include_values, include_metadata).join(" ")
|
|
373
|
+
<<~GRAPHQL
|
|
374
|
+
{
|
|
375
|
+
Get {
|
|
376
|
+
#{index}(
|
|
377
|
+
limit: #{top_k}
|
|
378
|
+
bm25: {
|
|
379
|
+
query: "#{text.gsub('"', '\\"')}"
|
|
380
|
+
}
|
|
381
|
+
#{"where: #{JSON.generate(where_filter)}" if where_filter}
|
|
382
|
+
) {
|
|
383
|
+
#{selection_block}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
GRAPHQL
|
|
388
|
+
end
|
|
389
|
+
|
|
340
390
|
def build_graphql_query(index, top_k, text, alpha, vector, where_filter, selection_block)
|
|
341
391
|
<<~GRAPHQL
|
|
342
392
|
{
|
|
@@ -379,6 +429,20 @@ module Vectra
|
|
|
379
429
|
end
|
|
380
430
|
end
|
|
381
431
|
|
|
432
|
+
def handle_text_search_response(response, index, namespace, include_values, include_metadata)
|
|
433
|
+
if response.success?
|
|
434
|
+
matches = extract_query_matches(response.body, index, include_values, include_metadata)
|
|
435
|
+
log_debug("Text search returned #{matches.size} results")
|
|
436
|
+
|
|
437
|
+
QueryResult.from_response(
|
|
438
|
+
matches: matches,
|
|
439
|
+
namespace: namespace
|
|
440
|
+
)
|
|
441
|
+
else
|
|
442
|
+
handle_error(response)
|
|
443
|
+
end
|
|
444
|
+
end
|
|
445
|
+
|
|
382
446
|
def validate_config!
|
|
383
447
|
super
|
|
384
448
|
raise ConfigurationError, "Host must be configured for Weaviate" if config.host.nil? || config.host.empty?
|
data/lib/vectra/version.rb
CHANGED
data/lib/vectra.rb
CHANGED
|
@@ -18,6 +18,15 @@ require_relative "vectra/health_check"
|
|
|
18
18
|
require_relative "vectra/credential_rotation"
|
|
19
19
|
require_relative "vectra/audit_log"
|
|
20
20
|
require_relative "vectra/active_record"
|
|
21
|
+
require_relative "vectra/middleware/request"
|
|
22
|
+
require_relative "vectra/middleware/response"
|
|
23
|
+
require_relative "vectra/middleware/base"
|
|
24
|
+
require_relative "vectra/middleware/stack"
|
|
25
|
+
require_relative "vectra/middleware/logging"
|
|
26
|
+
require_relative "vectra/middleware/retry"
|
|
27
|
+
require_relative "vectra/middleware/instrumentation"
|
|
28
|
+
require_relative "vectra/middleware/pii_redaction"
|
|
29
|
+
require_relative "vectra/middleware/cost_tracker"
|
|
21
30
|
require_relative "vectra/providers/base"
|
|
22
31
|
require_relative "vectra/providers/pinecone"
|
|
23
32
|
require_relative "vectra/providers/qdrant"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: vectra-client
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Mijo Kristo
|
|
@@ -268,11 +268,13 @@ files:
|
|
|
268
268
|
- docs/guides/faq.md
|
|
269
269
|
- docs/guides/getting-started.md
|
|
270
270
|
- docs/guides/installation.md
|
|
271
|
+
- docs/guides/middleware.md
|
|
271
272
|
- docs/guides/monitoring.md
|
|
272
273
|
- docs/guides/performance.md
|
|
273
274
|
- docs/guides/rails-integration.md
|
|
274
275
|
- docs/guides/rails-troubleshooting.md
|
|
275
276
|
- docs/guides/recipes.md
|
|
277
|
+
- docs/guides/roadmap.md
|
|
276
278
|
- docs/guides/runbooks/cache-issues.md
|
|
277
279
|
- docs/guides/runbooks/high-error-rate.md
|
|
278
280
|
- docs/guides/runbooks/high-latency.md
|
|
@@ -294,6 +296,7 @@ files:
|
|
|
294
296
|
- examples/grafana-dashboard.json
|
|
295
297
|
- examples/grafana-setup.md
|
|
296
298
|
- examples/instrumentation_demo.rb
|
|
299
|
+
- examples/middleware_demo.rb
|
|
297
300
|
- examples/prometheus-exporter.rb
|
|
298
301
|
- lib/generators/vectra/index_generator.rb
|
|
299
302
|
- lib/generators/vectra/install_generator.rb
|
|
@@ -316,6 +319,15 @@ files:
|
|
|
316
319
|
- lib/vectra/instrumentation/new_relic.rb
|
|
317
320
|
- lib/vectra/instrumentation/sentry.rb
|
|
318
321
|
- lib/vectra/logging.rb
|
|
322
|
+
- lib/vectra/middleware/base.rb
|
|
323
|
+
- lib/vectra/middleware/cost_tracker.rb
|
|
324
|
+
- lib/vectra/middleware/instrumentation.rb
|
|
325
|
+
- lib/vectra/middleware/logging.rb
|
|
326
|
+
- lib/vectra/middleware/pii_redaction.rb
|
|
327
|
+
- lib/vectra/middleware/request.rb
|
|
328
|
+
- lib/vectra/middleware/response.rb
|
|
329
|
+
- lib/vectra/middleware/retry.rb
|
|
330
|
+
- lib/vectra/middleware/stack.rb
|
|
319
331
|
- lib/vectra/pool.rb
|
|
320
332
|
- lib/vectra/providers/base.rb
|
|
321
333
|
- lib/vectra/providers/memory.rb
|