turbopuffer 0.1.0 → 1.2.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/.ignore +2 -0
- data/CHANGELOG.md +205 -0
- data/README.md +270 -40
- data/SECURITY.md +27 -0
- data/lib/turbopuffer/client.rb +122 -16
- data/lib/turbopuffer/errors.rb +228 -0
- data/lib/turbopuffer/file_part.rb +55 -0
- data/lib/turbopuffer/internal/namespace_page.rb +86 -0
- data/lib/turbopuffer/internal/transport/base_client.rb +567 -0
- data/lib/turbopuffer/internal/transport/pooled_net_requester.rb +201 -0
- data/lib/turbopuffer/internal/type/array_of.rb +168 -0
- data/lib/turbopuffer/internal/type/base_model.rb +529 -0
- data/lib/turbopuffer/internal/type/base_page.rb +55 -0
- data/lib/turbopuffer/internal/type/boolean.rb +77 -0
- data/lib/turbopuffer/internal/type/converter.rb +327 -0
- data/lib/turbopuffer/internal/type/enum.rb +152 -0
- data/lib/turbopuffer/internal/type/file_input.rb +108 -0
- data/lib/turbopuffer/internal/type/hash_of.rb +188 -0
- data/lib/turbopuffer/internal/type/request_parameters.rb +42 -0
- data/lib/turbopuffer/internal/type/union.rb +254 -0
- data/lib/turbopuffer/internal/type/unknown.rb +81 -0
- data/lib/turbopuffer/internal/util.rb +914 -0
- data/lib/turbopuffer/internal.rb +20 -0
- data/lib/turbopuffer/models/aggregation_group.rb +8 -0
- data/lib/turbopuffer/models/attribute_schema.rb +19 -0
- data/lib/turbopuffer/models/attribute_schema_config.rb +56 -0
- data/lib/turbopuffer/models/attribute_type.rb +7 -0
- data/lib/turbopuffer/models/client_namespaces_params.rb +38 -0
- data/lib/turbopuffer/models/columns.rb +64 -0
- data/lib/turbopuffer/models/distance_metric.rb +19 -0
- data/lib/turbopuffer/models/full_text_search.rb +20 -0
- data/lib/turbopuffer/models/full_text_search_config.rb +83 -0
- data/lib/turbopuffer/models/id.rb +19 -0
- data/lib/turbopuffer/models/include_attributes.rb +22 -0
- data/lib/turbopuffer/models/language.rb +32 -0
- data/lib/turbopuffer/models/namespace_delete_all_params.rb +20 -0
- data/lib/turbopuffer/models/namespace_delete_all_response.rb +19 -0
- data/lib/turbopuffer/models/namespace_explain_query_params.rb +137 -0
- data/lib/turbopuffer/models/namespace_explain_query_response.rb +19 -0
- data/lib/turbopuffer/models/namespace_hint_cache_warm_params.rb +20 -0
- data/lib/turbopuffer/models/namespace_hint_cache_warm_response.rb +26 -0
- data/lib/turbopuffer/models/namespace_metadata.rb +43 -0
- data/lib/turbopuffer/models/namespace_metadata_params.rb +20 -0
- data/lib/turbopuffer/models/namespace_multi_query_params.rb +73 -0
- data/lib/turbopuffer/models/namespace_multi_query_response.rb +58 -0
- data/lib/turbopuffer/models/namespace_query_params.rb +137 -0
- data/lib/turbopuffer/models/namespace_query_response.rb +49 -0
- data/lib/turbopuffer/models/namespace_recall_params.rb +66 -0
- data/lib/turbopuffer/models/namespace_recall_response.rb +68 -0
- data/lib/turbopuffer/models/namespace_schema_params.rb +20 -0
- data/lib/turbopuffer/models/namespace_schema_response.rb +8 -0
- data/lib/turbopuffer/models/namespace_summary.rb +19 -0
- data/lib/turbopuffer/models/namespace_update_schema_params.rb +29 -0
- data/lib/turbopuffer/models/namespace_update_schema_response.rb +9 -0
- data/lib/turbopuffer/models/namespace_write_params.rb +158 -0
- data/lib/turbopuffer/models/namespace_write_response.rb +67 -0
- data/lib/turbopuffer/models/query.rb +81 -0
- data/lib/turbopuffer/models/query_billing.rb +26 -0
- data/lib/turbopuffer/models/query_performance.rb +63 -0
- data/lib/turbopuffer/models/row.rb +46 -0
- data/lib/turbopuffer/models/tokenizer.rb +19 -0
- data/lib/turbopuffer/models/vector.rb +22 -0
- data/lib/turbopuffer/models/vector_encoding.rb +16 -0
- data/lib/turbopuffer/models/write_billing.rb +26 -0
- data/lib/turbopuffer/models.rb +106 -0
- data/lib/turbopuffer/namespace.rb +14 -50
- data/lib/turbopuffer/request_options.rb +77 -0
- data/lib/turbopuffer/resources/namespaces.rb +366 -0
- data/lib/turbopuffer/version.rb +1 -1
- data/lib/turbopuffer.rb +92 -4
- data/manifest.yaml +15 -0
- data/rbi/turbopuffer/client.rbi +91 -0
- data/rbi/turbopuffer/errors.rbi +205 -0
- data/rbi/turbopuffer/file_part.rbi +37 -0
- data/rbi/turbopuffer/internal/namespace_page.rbi +22 -0
- data/rbi/turbopuffer/internal/transport/base_client.rbi +297 -0
- data/rbi/turbopuffer/internal/transport/pooled_net_requester.rbi +80 -0
- data/rbi/turbopuffer/internal/type/array_of.rbi +104 -0
- data/rbi/turbopuffer/internal/type/base_model.rbi +304 -0
- data/rbi/turbopuffer/internal/type/base_page.rbi +43 -0
- data/rbi/turbopuffer/internal/type/boolean.rbi +58 -0
- data/rbi/turbopuffer/internal/type/converter.rbi +216 -0
- data/rbi/turbopuffer/internal/type/enum.rbi +82 -0
- data/rbi/turbopuffer/internal/type/file_input.rbi +59 -0
- data/rbi/turbopuffer/internal/type/hash_of.rbi +104 -0
- data/rbi/turbopuffer/internal/type/request_parameters.rbi +31 -0
- data/rbi/turbopuffer/internal/type/union.rbi +128 -0
- data/rbi/turbopuffer/internal/type/unknown.rbi +58 -0
- data/rbi/turbopuffer/internal/util.rbi +487 -0
- data/rbi/turbopuffer/internal.rbi +18 -0
- data/rbi/turbopuffer/models/aggregation_group.rbi +13 -0
- data/rbi/turbopuffer/models/attribute_schema.rbi +17 -0
- data/rbi/turbopuffer/models/attribute_schema_config.rbi +103 -0
- data/rbi/turbopuffer/models/attribute_type.rbi +7 -0
- data/rbi/turbopuffer/models/client_namespaces_params.rbi +71 -0
- data/rbi/turbopuffer/models/columns.rbi +82 -0
- data/rbi/turbopuffer/models/distance_metric.rbi +27 -0
- data/rbi/turbopuffer/models/full_text_search.rbi +19 -0
- data/rbi/turbopuffer/models/full_text_search_config.rbi +133 -0
- data/rbi/turbopuffer/models/id.rbi +16 -0
- data/rbi/turbopuffer/models/include_attributes.rbi +24 -0
- data/rbi/turbopuffer/models/language.rbi +36 -0
- data/rbi/turbopuffer/models/namespace_delete_all_params.rbi +41 -0
- data/rbi/turbopuffer/models/namespace_delete_all_response.rbi +31 -0
- data/rbi/turbopuffer/models/namespace_explain_query_params.rbi +273 -0
- data/rbi/turbopuffer/models/namespace_explain_query_response.rbi +34 -0
- data/rbi/turbopuffer/models/namespace_hint_cache_warm_params.rbi +41 -0
- data/rbi/turbopuffer/models/namespace_hint_cache_warm_response.rbi +38 -0
- data/rbi/turbopuffer/models/namespace_metadata.rbi +62 -0
- data/rbi/turbopuffer/models/namespace_metadata_params.rbi +41 -0
- data/rbi/turbopuffer/models/namespace_multi_query_params.rbi +175 -0
- data/rbi/turbopuffer/models/namespace_multi_query_response.rbi +121 -0
- data/rbi/turbopuffer/models/namespace_query_params.rbi +267 -0
- data/rbi/turbopuffer/models/namespace_query_response.rbi +84 -0
- data/rbi/turbopuffer/models/namespace_recall_params.rbi +106 -0
- data/rbi/turbopuffer/models/namespace_recall_response.rbi +134 -0
- data/rbi/turbopuffer/models/namespace_schema_params.rbi +41 -0
- data/rbi/turbopuffer/models/namespace_schema_response.rbi +11 -0
- data/rbi/turbopuffer/models/namespace_summary.rbi +28 -0
- data/rbi/turbopuffer/models/namespace_update_schema_params.rbi +80 -0
- data/rbi/turbopuffer/models/namespace_update_schema_response.rbi +11 -0
- data/rbi/turbopuffer/models/namespace_write_params.rbi +290 -0
- data/rbi/turbopuffer/models/namespace_write_response.rbi +101 -0
- data/rbi/turbopuffer/models/query.rbi +132 -0
- data/rbi/turbopuffer/models/query_billing.rbi +46 -0
- data/rbi/turbopuffer/models/query_performance.rbi +82 -0
- data/rbi/turbopuffer/models/row.rbi +47 -0
- data/rbi/turbopuffer/models/tokenizer.rbi +24 -0
- data/rbi/turbopuffer/models/vector.rbi +22 -0
- data/rbi/turbopuffer/models/vector_encoding.rbi +22 -0
- data/rbi/turbopuffer/models/write_billing.rbi +49 -0
- data/rbi/turbopuffer/models.rbi +72 -0
- data/rbi/turbopuffer/namespace.rbi +8 -0
- data/rbi/turbopuffer/request_options.rbi +59 -0
- data/rbi/turbopuffer/resources/namespaces.rbi +304 -0
- data/rbi/turbopuffer/version.rbi +5 -0
- data/sig/turbopuffer/client.rbs +41 -0
- data/sig/turbopuffer/errors.rbs +117 -0
- data/sig/turbopuffer/file_part.rbs +21 -0
- data/sig/turbopuffer/internal/namespace_page.rbs +13 -0
- data/sig/turbopuffer/internal/transport/base_client.rbs +131 -0
- data/sig/turbopuffer/internal/transport/pooled_net_requester.rbs +45 -0
- data/sig/turbopuffer/internal/type/array_of.rbs +48 -0
- data/sig/turbopuffer/internal/type/base_model.rbs +102 -0
- data/sig/turbopuffer/internal/type/base_page.rbs +24 -0
- data/sig/turbopuffer/internal/type/boolean.rbs +26 -0
- data/sig/turbopuffer/internal/type/converter.rbs +79 -0
- data/sig/turbopuffer/internal/type/enum.rbs +32 -0
- data/sig/turbopuffer/internal/type/file_input.rbs +25 -0
- data/sig/turbopuffer/internal/type/hash_of.rbs +48 -0
- data/sig/turbopuffer/internal/type/request_parameters.rbs +19 -0
- data/sig/turbopuffer/internal/type/union.rbs +52 -0
- data/sig/turbopuffer/internal/type/unknown.rbs +26 -0
- data/sig/turbopuffer/internal/util.rbs +185 -0
- data/sig/turbopuffer/internal.rbs +9 -0
- data/sig/turbopuffer/models/aggregation_group.rbs +7 -0
- data/sig/turbopuffer/models/attribute_schema.rbs +11 -0
- data/sig/turbopuffer/models/attribute_schema_config.rbs +52 -0
- data/sig/turbopuffer/models/attribute_type.rbs +5 -0
- data/sig/turbopuffer/models/client_namespaces_params.rbs +38 -0
- data/sig/turbopuffer/models/columns.rbs +42 -0
- data/sig/turbopuffer/models/distance_metric.rbs +17 -0
- data/sig/turbopuffer/models/full_text_search.rbs +11 -0
- data/sig/turbopuffer/models/full_text_search_config.rbs +75 -0
- data/sig/turbopuffer/models/id.rbs +11 -0
- data/sig/turbopuffer/models/include_attributes.rbs +13 -0
- data/sig/turbopuffer/models/language.rbs +48 -0
- data/sig/turbopuffer/models/namespace_delete_all_params.rbs +25 -0
- data/sig/turbopuffer/models/namespace_delete_all_response.rbs +13 -0
- data/sig/turbopuffer/models/namespace_explain_query_params.rbs +141 -0
- data/sig/turbopuffer/models/namespace_explain_query_response.rbs +15 -0
- data/sig/turbopuffer/models/namespace_hint_cache_warm_params.rbs +25 -0
- data/sig/turbopuffer/models/namespace_hint_cache_warm_response.rbs +18 -0
- data/sig/turbopuffer/models/namespace_metadata.rbs +35 -0
- data/sig/turbopuffer/models/namespace_metadata_params.rbs +25 -0
- data/sig/turbopuffer/models/namespace_multi_query_params.rbs +86 -0
- data/sig/turbopuffer/models/namespace_multi_query_response.rbs +65 -0
- data/sig/turbopuffer/models/namespace_query_params.rbs +139 -0
- data/sig/turbopuffer/models/namespace_query_response.rbs +48 -0
- data/sig/turbopuffer/models/namespace_recall_params.rbs +63 -0
- data/sig/turbopuffer/models/namespace_recall_response.rbs +61 -0
- data/sig/turbopuffer/models/namespace_schema_params.rbs +25 -0
- data/sig/turbopuffer/models/namespace_schema_response.rbs +8 -0
- data/sig/turbopuffer/models/namespace_summary.rbs +13 -0
- data/sig/turbopuffer/models/namespace_update_schema_params.rbs +37 -0
- data/sig/turbopuffer/models/namespace_update_schema_response.rbs +8 -0
- data/sig/turbopuffer/models/namespace_write_params.rbs +156 -0
- data/sig/turbopuffer/models/namespace_write_response.rbs +56 -0
- data/sig/turbopuffer/models/query.rbs +75 -0
- data/sig/turbopuffer/models/query_billing.rbs +25 -0
- data/sig/turbopuffer/models/query_performance.rbs +45 -0
- data/sig/turbopuffer/models/row.rbs +24 -0
- data/sig/turbopuffer/models/tokenizer.rbs +16 -0
- data/sig/turbopuffer/models/vector.rbs +13 -0
- data/sig/turbopuffer/models/vector_encoding.rbs +14 -0
- data/sig/turbopuffer/models/write_billing.rbs +27 -0
- data/sig/turbopuffer/models.rbs +65 -0
- data/sig/turbopuffer/namespace.rbs +5 -0
- data/sig/turbopuffer/request_options.rbs +36 -0
- data/sig/turbopuffer/resources/namespaces.rbs +99 -0
- data/sig/turbopuffer/version.rbs +3 -0
- metadata +218 -29
- data/.standard.yml +0 -3
- data/LICENSE.txt +0 -21
- data/Rakefile +0 -10
- data/sig/turbopuffer.rbs +0 -4
@@ -1,58 +1,22 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Turbopuffer
|
4
|
-
class Namespace
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
class Namespace < Turbopuffer::Resources::Namespaces
|
5
|
+
# Returns the namespace ID.
|
6
|
+
#
|
7
|
+
# @return [String]
|
8
|
+
def id
|
9
|
+
@client.default_namespace
|
8
10
|
end
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
def delete_all
|
20
|
-
response = @connection.delete("/v1/namespaces/#{@name}")
|
21
|
-
handle_response(response)
|
22
|
-
end
|
23
|
-
|
24
|
-
def query(vector:, top_k: 10, distance_metric: "cosine_distance", filters: nil, include_attributes: false, include_vectors: false)
|
25
|
-
payload = {
|
26
|
-
vector: vector,
|
27
|
-
top_k: top_k,
|
28
|
-
distance_metric: distance_metric,
|
29
|
-
filters: filters,
|
30
|
-
include_attributes: include_attributes,
|
31
|
-
include_vectors: include_vectors
|
32
|
-
}
|
33
|
-
response = @connection.post("/v1/namespaces/#{@name}/query", payload)
|
34
|
-
handle_response(response)
|
35
|
-
end
|
36
|
-
|
37
|
-
def upsert(ids:, vectors:, attributes: nil, distance_metric: "cosine_distance")
|
38
|
-
payload = {
|
39
|
-
ids: ids,
|
40
|
-
vectors: vectors,
|
41
|
-
attributes: attributes,
|
42
|
-
distance_metric: distance_metric
|
43
|
-
}
|
44
|
-
response = @connection.post("/v1/namespaces/#{@name}", payload)
|
45
|
-
handle_response(response)
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
def handle_response(response)
|
51
|
-
if response.success?
|
52
|
-
response.body
|
53
|
-
else
|
54
|
-
raise Error, "API Error: #{response.status} - #{response.body}"
|
55
|
-
end
|
12
|
+
# @api private
|
13
|
+
#
|
14
|
+
# @param client [Turbopuffer::Client]
|
15
|
+
# @param namespace [String]
|
16
|
+
def initialize(client, namespace)
|
17
|
+
client = client.dup
|
18
|
+
client.instance_variable_set(:@default_namespace, namespace)
|
19
|
+
super(client: client)
|
56
20
|
end
|
57
21
|
end
|
58
22
|
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Turbopuffer
|
4
|
+
# Specify HTTP behaviour to use for a specific request. These options supplement
|
5
|
+
# or override those provided at the client level.
|
6
|
+
#
|
7
|
+
# When making a request, you can pass an actual {RequestOptions} instance, or
|
8
|
+
# simply pass a Hash with symbol keys matching the attributes on this class.
|
9
|
+
class RequestOptions < Turbopuffer::Internal::Type::BaseModel
|
10
|
+
# @api private
|
11
|
+
#
|
12
|
+
# @param opts [Turbopuffer::RequestOptions, Hash{Symbol=>Object}]
|
13
|
+
#
|
14
|
+
# @raise [ArgumentError]
|
15
|
+
def self.validate!(opts)
|
16
|
+
case opts
|
17
|
+
in Turbopuffer::RequestOptions | Hash
|
18
|
+
opts.to_h.each_key do |k|
|
19
|
+
unless fields.include?(k)
|
20
|
+
raise ArgumentError.new("Request `opts` keys must be one of #{fields.keys}, got #{k.inspect}")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
else
|
24
|
+
raise ArgumentError.new("Request `opts` must be a Hash or RequestOptions, got #{opts.inspect}")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# @!attribute idempotency_key
|
29
|
+
# Idempotency key to send with request and all associated retries. Will only be
|
30
|
+
# sent for write requests.
|
31
|
+
#
|
32
|
+
# @return [String, nil]
|
33
|
+
optional :idempotency_key, String
|
34
|
+
|
35
|
+
# @!attribute extra_query
|
36
|
+
# Extra query params to send with the request. These are `.merge`’d into any
|
37
|
+
# `query` given at the client level.
|
38
|
+
#
|
39
|
+
# @return [Hash{String=>Array<String>, String, nil}, nil]
|
40
|
+
optional :extra_query, Turbopuffer::Internal::Type::HashOf[Turbopuffer::Internal::Type::ArrayOf[String]]
|
41
|
+
|
42
|
+
# @!attribute extra_headers
|
43
|
+
# Extra headers to send with the request. These are `.merged`’d into any
|
44
|
+
# `extra_headers` given at the client level.
|
45
|
+
#
|
46
|
+
# @return [Hash{String=>String, nil}, nil]
|
47
|
+
optional :extra_headers, Turbopuffer::Internal::Type::HashOf[String, nil?: true]
|
48
|
+
|
49
|
+
# @!attribute extra_body
|
50
|
+
# Extra data to send with the request. These are deep merged into any data
|
51
|
+
# generated as part of the normal request.
|
52
|
+
#
|
53
|
+
# @return [Object, nil]
|
54
|
+
optional :extra_body, Turbopuffer::Internal::Type::HashOf[Turbopuffer::Internal::Type::Unknown]
|
55
|
+
|
56
|
+
# @!attribute max_retries
|
57
|
+
# Maximum number of retries to attempt after a failed initial request.
|
58
|
+
#
|
59
|
+
# @return [Integer, nil]
|
60
|
+
optional :max_retries, Integer
|
61
|
+
|
62
|
+
# @!attribute timeout
|
63
|
+
# Request timeout in seconds.
|
64
|
+
#
|
65
|
+
# @return [Float, nil]
|
66
|
+
optional :timeout, Float
|
67
|
+
|
68
|
+
# @!method initialize(values = {})
|
69
|
+
# Returns a new instance of RequestOptions.
|
70
|
+
#
|
71
|
+
# @param values [Hash{Symbol=>Object}]
|
72
|
+
|
73
|
+
define_sorbet_constant!(:OrHash) do
|
74
|
+
T.type_alias { T.any(Turbopuffer::RequestOptions, Turbopuffer::Internal::AnyHash) }
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,366 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Turbopuffer
|
4
|
+
module Resources
|
5
|
+
class Namespaces
|
6
|
+
# Delete namespace.
|
7
|
+
#
|
8
|
+
# @overload delete_all(namespace: nil, request_options: {})
|
9
|
+
#
|
10
|
+
# @param namespace [String] The name of the namespace.
|
11
|
+
#
|
12
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
13
|
+
#
|
14
|
+
# @return [Turbopuffer::Models::NamespaceDeleteAllResponse]
|
15
|
+
#
|
16
|
+
# @see Turbopuffer::Models::NamespaceDeleteAllParams
|
17
|
+
def delete_all(params = {})
|
18
|
+
parsed, options = Turbopuffer::NamespaceDeleteAllParams.dump_request(params)
|
19
|
+
namespace =
|
20
|
+
parsed.delete(:namespace) do
|
21
|
+
@client.default_namespace
|
22
|
+
end
|
23
|
+
@client.request(
|
24
|
+
method: :delete,
|
25
|
+
path: ["v2/namespaces/%1$s", namespace],
|
26
|
+
model: Turbopuffer::Models::NamespaceDeleteAllResponse,
|
27
|
+
options: options
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Some parameter documentations has been truncated, see
|
32
|
+
# {Turbopuffer::Models::NamespaceExplainQueryParams} for more details.
|
33
|
+
#
|
34
|
+
# Explain a query plan.
|
35
|
+
#
|
36
|
+
# @overload explain_query(namespace: nil, aggregate_by: nil, consistency: nil, distance_metric: nil, exclude_attributes: nil, filters: nil, group_by: nil, include_attributes: nil, rank_by: nil, top_k: nil, vector_encoding: nil, request_options: {})
|
37
|
+
#
|
38
|
+
# @param namespace [String] Path param: The name of the namespace.
|
39
|
+
#
|
40
|
+
# @param aggregate_by [Hash{Symbol=>Object}] Body param: Aggregations to compute over all documents in the namespace that mat
|
41
|
+
#
|
42
|
+
# @param consistency [Turbopuffer::Models::NamespaceExplainQueryParams::Consistency] Body param: The consistency level for a query.
|
43
|
+
#
|
44
|
+
# @param distance_metric [Symbol, Turbopuffer::Models::DistanceMetric] Body param: A function used to calculate vector similarity.
|
45
|
+
#
|
46
|
+
# @param exclude_attributes [Array<String>] Body param: List of attribute names to exclude from the response. All other attr
|
47
|
+
#
|
48
|
+
# @param filters [Object] Body param: Exact filters for attributes to refine search results for. Think of
|
49
|
+
#
|
50
|
+
# @param group_by [Array<String>] Body param: Groups documents by the specified attributes (the "group key") befor
|
51
|
+
#
|
52
|
+
# @param include_attributes [Boolean, Array<String>] Body param: Whether to include attributes in the response.
|
53
|
+
#
|
54
|
+
# @param rank_by [Object] Body param: How to rank the documents in the namespace.
|
55
|
+
#
|
56
|
+
# @param top_k [Integer] Body param: The number of results to return.
|
57
|
+
#
|
58
|
+
# @param vector_encoding [Symbol, Turbopuffer::Models::VectorEncoding] Body param: The encoding to use for vectors in the response.
|
59
|
+
#
|
60
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
61
|
+
#
|
62
|
+
# @return [Turbopuffer::Models::NamespaceExplainQueryResponse]
|
63
|
+
#
|
64
|
+
# @see Turbopuffer::Models::NamespaceExplainQueryParams
|
65
|
+
def explain_query(params = {})
|
66
|
+
parsed, options = Turbopuffer::NamespaceExplainQueryParams.dump_request(params)
|
67
|
+
namespace =
|
68
|
+
parsed.delete(:namespace) do
|
69
|
+
@client.default_namespace
|
70
|
+
end
|
71
|
+
@client.request(
|
72
|
+
method: :post,
|
73
|
+
path: ["v2/namespaces/%1$s/explain_query", namespace],
|
74
|
+
body: parsed,
|
75
|
+
model: Turbopuffer::Models::NamespaceExplainQueryResponse,
|
76
|
+
options: options
|
77
|
+
)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Warm the cache for a namespace.
|
81
|
+
#
|
82
|
+
# @overload hint_cache_warm(namespace: nil, request_options: {})
|
83
|
+
#
|
84
|
+
# @param namespace [String] The name of the namespace.
|
85
|
+
#
|
86
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
87
|
+
#
|
88
|
+
# @return [Turbopuffer::Models::NamespaceHintCacheWarmResponse]
|
89
|
+
#
|
90
|
+
# @see Turbopuffer::Models::NamespaceHintCacheWarmParams
|
91
|
+
def hint_cache_warm(params = {})
|
92
|
+
parsed, options = Turbopuffer::NamespaceHintCacheWarmParams.dump_request(params)
|
93
|
+
namespace =
|
94
|
+
parsed.delete(:namespace) do
|
95
|
+
@client.default_namespace
|
96
|
+
end
|
97
|
+
@client.request(
|
98
|
+
method: :get,
|
99
|
+
path: ["v1/namespaces/%1$s/hint_cache_warm", namespace],
|
100
|
+
model: Turbopuffer::Models::NamespaceHintCacheWarmResponse,
|
101
|
+
options: options
|
102
|
+
)
|
103
|
+
end
|
104
|
+
|
105
|
+
# Get metadata about a namespace.
|
106
|
+
#
|
107
|
+
# @overload metadata(namespace: nil, request_options: {})
|
108
|
+
#
|
109
|
+
# @param namespace [String] The name of the namespace.
|
110
|
+
#
|
111
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
112
|
+
#
|
113
|
+
# @return [Turbopuffer::Models::NamespaceMetadata]
|
114
|
+
#
|
115
|
+
# @see Turbopuffer::Models::NamespaceMetadataParams
|
116
|
+
def metadata(params = {})
|
117
|
+
parsed, options = Turbopuffer::NamespaceMetadataParams.dump_request(params)
|
118
|
+
namespace =
|
119
|
+
parsed.delete(:namespace) do
|
120
|
+
@client.default_namespace
|
121
|
+
end
|
122
|
+
@client.request(
|
123
|
+
method: :get,
|
124
|
+
path: ["v1/namespaces/%1$s/metadata", namespace],
|
125
|
+
model: Turbopuffer::NamespaceMetadata,
|
126
|
+
options: options
|
127
|
+
)
|
128
|
+
end
|
129
|
+
|
130
|
+
# Issue multiple concurrent queries filter or search documents.
|
131
|
+
#
|
132
|
+
# @overload multi_query(queries:, namespace: nil, consistency: nil, vector_encoding: nil, request_options: {})
|
133
|
+
#
|
134
|
+
# @param queries [Array<Turbopuffer::Models::Query>] Body param:
|
135
|
+
#
|
136
|
+
# @param namespace [String] Path param: The name of the namespace.
|
137
|
+
#
|
138
|
+
# @param consistency [Turbopuffer::Models::NamespaceMultiQueryParams::Consistency] Body param: The consistency level for a query.
|
139
|
+
#
|
140
|
+
# @param vector_encoding [Symbol, Turbopuffer::Models::VectorEncoding] Body param: The encoding to use for vectors in the response.
|
141
|
+
#
|
142
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
143
|
+
#
|
144
|
+
# @return [Turbopuffer::Models::NamespaceMultiQueryResponse]
|
145
|
+
#
|
146
|
+
# @see Turbopuffer::Models::NamespaceMultiQueryParams
|
147
|
+
def multi_query(params)
|
148
|
+
parsed, options = Turbopuffer::NamespaceMultiQueryParams.dump_request(params)
|
149
|
+
namespace =
|
150
|
+
parsed.delete(:namespace) do
|
151
|
+
@client.default_namespace
|
152
|
+
end
|
153
|
+
@client.request(
|
154
|
+
method: :post,
|
155
|
+
path: ["v2/namespaces/%1$s/query?stainless_overload=multiQuery", namespace],
|
156
|
+
body: parsed,
|
157
|
+
model: Turbopuffer::Models::NamespaceMultiQueryResponse,
|
158
|
+
options: options
|
159
|
+
)
|
160
|
+
end
|
161
|
+
|
162
|
+
# Some parameter documentations has been truncated, see
|
163
|
+
# {Turbopuffer::Models::NamespaceQueryParams} for more details.
|
164
|
+
#
|
165
|
+
# Query, filter, full-text search and vector search documents.
|
166
|
+
#
|
167
|
+
# @overload query(namespace: nil, aggregate_by: nil, consistency: nil, distance_metric: nil, exclude_attributes: nil, filters: nil, group_by: nil, include_attributes: nil, rank_by: nil, top_k: nil, vector_encoding: nil, request_options: {})
|
168
|
+
#
|
169
|
+
# @param namespace [String] Path param: The name of the namespace.
|
170
|
+
#
|
171
|
+
# @param aggregate_by [Hash{Symbol=>Object}] Body param: Aggregations to compute over all documents in the namespace that mat
|
172
|
+
#
|
173
|
+
# @param consistency [Turbopuffer::Models::NamespaceQueryParams::Consistency] Body param: The consistency level for a query.
|
174
|
+
#
|
175
|
+
# @param distance_metric [Symbol, Turbopuffer::Models::DistanceMetric] Body param: A function used to calculate vector similarity.
|
176
|
+
#
|
177
|
+
# @param exclude_attributes [Array<String>] Body param: List of attribute names to exclude from the response. All other attr
|
178
|
+
#
|
179
|
+
# @param filters [Object] Body param: Exact filters for attributes to refine search results for. Think of
|
180
|
+
#
|
181
|
+
# @param group_by [Array<String>] Body param: Groups documents by the specified attributes (the "group key") befor
|
182
|
+
#
|
183
|
+
# @param include_attributes [Boolean, Array<String>] Body param: Whether to include attributes in the response.
|
184
|
+
#
|
185
|
+
# @param rank_by [Object] Body param: How to rank the documents in the namespace.
|
186
|
+
#
|
187
|
+
# @param top_k [Integer] Body param: The number of results to return.
|
188
|
+
#
|
189
|
+
# @param vector_encoding [Symbol, Turbopuffer::Models::VectorEncoding] Body param: The encoding to use for vectors in the response.
|
190
|
+
#
|
191
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
192
|
+
#
|
193
|
+
# @return [Turbopuffer::Models::NamespaceQueryResponse]
|
194
|
+
#
|
195
|
+
# @see Turbopuffer::Models::NamespaceQueryParams
|
196
|
+
def query(params = {})
|
197
|
+
parsed, options = Turbopuffer::NamespaceQueryParams.dump_request(params)
|
198
|
+
namespace =
|
199
|
+
parsed.delete(:namespace) do
|
200
|
+
@client.default_namespace
|
201
|
+
end
|
202
|
+
@client.request(
|
203
|
+
method: :post,
|
204
|
+
path: ["v2/namespaces/%1$s/query", namespace],
|
205
|
+
body: parsed,
|
206
|
+
model: Turbopuffer::Models::NamespaceQueryResponse,
|
207
|
+
options: options
|
208
|
+
)
|
209
|
+
end
|
210
|
+
|
211
|
+
# Some parameter documentations has been truncated, see
|
212
|
+
# {Turbopuffer::Models::NamespaceRecallParams} for more details.
|
213
|
+
#
|
214
|
+
# Evaluate recall.
|
215
|
+
#
|
216
|
+
# @overload recall(namespace: nil, filters: nil, include_ground_truth: nil, num: nil, queries: nil, top_k: nil, request_options: {})
|
217
|
+
#
|
218
|
+
# @param namespace [String] Path param: The name of the namespace.
|
219
|
+
#
|
220
|
+
# @param filters [Object] Body param: Filter by attributes. Same syntax as the query endpoint.
|
221
|
+
#
|
222
|
+
# @param include_ground_truth [Boolean] Body param: Include ground truth data (query vectors and true nearest neighbors)
|
223
|
+
#
|
224
|
+
# @param num [Integer] Body param: The number of searches to run.
|
225
|
+
#
|
226
|
+
# @param queries [Array<Float>] Body param: Use specific query vectors for the measurement. If omitted, sampled
|
227
|
+
#
|
228
|
+
# @param top_k [Integer] Body param: Search for `top_k` nearest neighbors.
|
229
|
+
#
|
230
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
231
|
+
#
|
232
|
+
# @return [Turbopuffer::Models::NamespaceRecallResponse]
|
233
|
+
#
|
234
|
+
# @see Turbopuffer::Models::NamespaceRecallParams
|
235
|
+
def recall(params = {})
|
236
|
+
parsed, options = Turbopuffer::NamespaceRecallParams.dump_request(params)
|
237
|
+
namespace =
|
238
|
+
parsed.delete(:namespace) do
|
239
|
+
@client.default_namespace
|
240
|
+
end
|
241
|
+
@client.request(
|
242
|
+
method: :post,
|
243
|
+
path: ["v1/namespaces/%1$s/_debug/recall", namespace],
|
244
|
+
body: parsed,
|
245
|
+
model: Turbopuffer::Models::NamespaceRecallResponse,
|
246
|
+
options: options
|
247
|
+
)
|
248
|
+
end
|
249
|
+
|
250
|
+
# Get namespace schema.
|
251
|
+
#
|
252
|
+
# @overload schema(namespace: nil, request_options: {})
|
253
|
+
#
|
254
|
+
# @param namespace [String] The name of the namespace.
|
255
|
+
#
|
256
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
257
|
+
#
|
258
|
+
# @return [Hash{Symbol=>Turbopuffer::Models::AttributeSchemaConfig}]
|
259
|
+
#
|
260
|
+
# @see Turbopuffer::Models::NamespaceSchemaParams
|
261
|
+
def schema(params = {})
|
262
|
+
parsed, options = Turbopuffer::NamespaceSchemaParams.dump_request(params)
|
263
|
+
namespace =
|
264
|
+
parsed.delete(:namespace) do
|
265
|
+
@client.default_namespace
|
266
|
+
end
|
267
|
+
@client.request(
|
268
|
+
method: :get,
|
269
|
+
path: ["v1/namespaces/%1$s/schema", namespace],
|
270
|
+
model: Turbopuffer::Internal::Type::HashOf[Turbopuffer::AttributeSchemaConfig],
|
271
|
+
options: options
|
272
|
+
)
|
273
|
+
end
|
274
|
+
|
275
|
+
# Update namespace schema.
|
276
|
+
#
|
277
|
+
# @overload update_schema(namespace: nil, schema: nil, request_options: {})
|
278
|
+
#
|
279
|
+
# @param namespace [String] Path param: The name of the namespace.
|
280
|
+
#
|
281
|
+
# @param schema [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig}] Body param: The desired schema for the namespace.
|
282
|
+
#
|
283
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
284
|
+
#
|
285
|
+
# @return [Hash{Symbol=>Turbopuffer::Models::AttributeSchemaConfig}]
|
286
|
+
#
|
287
|
+
# @see Turbopuffer::Models::NamespaceUpdateSchemaParams
|
288
|
+
def update_schema(params = {})
|
289
|
+
parsed, options = Turbopuffer::NamespaceUpdateSchemaParams.dump_request(params)
|
290
|
+
namespace =
|
291
|
+
parsed.delete(:namespace) do
|
292
|
+
@client.default_namespace
|
293
|
+
end
|
294
|
+
@client.request(
|
295
|
+
method: :post,
|
296
|
+
path: ["v1/namespaces/%1$s/schema", namespace],
|
297
|
+
body: parsed[:schema],
|
298
|
+
model: Turbopuffer::Internal::Type::HashOf[Turbopuffer::AttributeSchemaConfig],
|
299
|
+
options: options
|
300
|
+
)
|
301
|
+
end
|
302
|
+
|
303
|
+
# Some parameter documentations has been truncated, see
|
304
|
+
# {Turbopuffer::Models::NamespaceWriteParams} for more details.
|
305
|
+
#
|
306
|
+
# Create, update, or delete documents.
|
307
|
+
#
|
308
|
+
# @overload write(namespace: nil, copy_from_namespace: nil, delete_by_filter: nil, delete_condition: nil, deletes: nil, distance_metric: nil, encryption: nil, patch_columns: nil, patch_condition: nil, patch_rows: nil, schema: nil, upsert_columns: nil, upsert_condition: nil, upsert_rows: nil, request_options: {})
|
309
|
+
#
|
310
|
+
# @param namespace [String] Path param: The name of the namespace.
|
311
|
+
#
|
312
|
+
# @param copy_from_namespace [String] Body param: The namespace to copy documents from.
|
313
|
+
#
|
314
|
+
# @param delete_by_filter [Object] Body param: The filter specifying which documents to delete.
|
315
|
+
#
|
316
|
+
# @param delete_condition [Object] Body param: A condition evaluated against the current value of each document tar
|
317
|
+
#
|
318
|
+
# @param deletes [Array<String, Integer>] Body param:
|
319
|
+
#
|
320
|
+
# @param distance_metric [Symbol, Turbopuffer::Models::DistanceMetric] Body param: A function used to calculate vector similarity.
|
321
|
+
#
|
322
|
+
# @param encryption [Turbopuffer::Models::NamespaceWriteParams::Encryption] Body param: The encryption configuration for a namespace.
|
323
|
+
#
|
324
|
+
# @param patch_columns [Turbopuffer::Models::Columns] Body param: A list of documents in columnar format. Each key is a column name, m
|
325
|
+
#
|
326
|
+
# @param patch_condition [Object] Body param: A condition evaluated against the current value of each document tar
|
327
|
+
#
|
328
|
+
# @param patch_rows [Array<Turbopuffer::Models::Row>] Body param:
|
329
|
+
#
|
330
|
+
# @param schema [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig}] Body param: The schema of the attributes attached to the documents.
|
331
|
+
#
|
332
|
+
# @param upsert_columns [Turbopuffer::Models::Columns] Body param: A list of documents in columnar format. Each key is a column name, m
|
333
|
+
#
|
334
|
+
# @param upsert_condition [Object] Body param: A condition evaluated against the current value of each document tar
|
335
|
+
#
|
336
|
+
# @param upsert_rows [Array<Turbopuffer::Models::Row>] Body param:
|
337
|
+
#
|
338
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
339
|
+
#
|
340
|
+
# @return [Turbopuffer::Models::NamespaceWriteResponse]
|
341
|
+
#
|
342
|
+
# @see Turbopuffer::Models::NamespaceWriteParams
|
343
|
+
def write(params = {})
|
344
|
+
parsed, options = Turbopuffer::NamespaceWriteParams.dump_request(params)
|
345
|
+
namespace =
|
346
|
+
parsed.delete(:namespace) do
|
347
|
+
@client.default_namespace
|
348
|
+
end
|
349
|
+
@client.request(
|
350
|
+
method: :post,
|
351
|
+
path: ["v2/namespaces/%1$s", namespace],
|
352
|
+
body: parsed,
|
353
|
+
model: Turbopuffer::Models::NamespaceWriteResponse,
|
354
|
+
options: {max_retries: 6, **options}
|
355
|
+
)
|
356
|
+
end
|
357
|
+
|
358
|
+
# @api private
|
359
|
+
#
|
360
|
+
# @param client [Turbopuffer::Client]
|
361
|
+
def initialize(client:)
|
362
|
+
@client = client
|
363
|
+
end
|
364
|
+
end
|
365
|
+
end
|
366
|
+
end
|
data/lib/turbopuffer/version.rb
CHANGED
data/lib/turbopuffer.rb
CHANGED
@@ -1,9 +1,97 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Standard libraries.
|
4
|
+
# rubocop:disable Lint/RedundantRequireStatement
|
5
|
+
require "English"
|
6
|
+
require "cgi"
|
7
|
+
require "date"
|
8
|
+
require "erb"
|
9
|
+
require "etc"
|
10
|
+
require "json"
|
11
|
+
require "net/http"
|
12
|
+
require "pathname"
|
13
|
+
require "rbconfig"
|
14
|
+
require "securerandom"
|
15
|
+
require "set"
|
16
|
+
require "stringio"
|
17
|
+
require "time"
|
18
|
+
require "uri"
|
19
|
+
# rubocop:enable Lint/RedundantRequireStatement
|
20
|
+
|
21
|
+
# We already ship the preferred sorbet manifests in the package itself.
|
22
|
+
# `tapioca` currently does not offer us a way to opt out of unnecessary compilation.
|
23
|
+
if Object.const_defined?(:Tapioca) &&
|
24
|
+
caller.chain([$PROGRAM_NAME]).chain(ARGV).any?(/tapioca/) &&
|
25
|
+
ARGV.none?(/dsl/)
|
26
|
+
return
|
27
|
+
end
|
28
|
+
|
29
|
+
# Gems.
|
30
|
+
require "connection_pool"
|
31
|
+
|
32
|
+
# Package files.
|
3
33
|
require_relative "turbopuffer/version"
|
34
|
+
require_relative "turbopuffer/internal/util"
|
35
|
+
require_relative "turbopuffer/internal/type/converter"
|
36
|
+
require_relative "turbopuffer/internal/type/unknown"
|
37
|
+
require_relative "turbopuffer/internal/type/boolean"
|
38
|
+
require_relative "turbopuffer/internal/type/file_input"
|
39
|
+
require_relative "turbopuffer/internal/type/enum"
|
40
|
+
require_relative "turbopuffer/internal/type/union"
|
41
|
+
require_relative "turbopuffer/internal/type/array_of"
|
42
|
+
require_relative "turbopuffer/internal/type/hash_of"
|
43
|
+
require_relative "turbopuffer/internal/type/base_model"
|
44
|
+
require_relative "turbopuffer/internal/type/base_page"
|
45
|
+
require_relative "turbopuffer/internal/type/request_parameters"
|
46
|
+
require_relative "turbopuffer/internal"
|
47
|
+
require_relative "turbopuffer/request_options"
|
48
|
+
require_relative "turbopuffer/file_part"
|
49
|
+
require_relative "turbopuffer/errors"
|
50
|
+
require_relative "turbopuffer/internal/transport/base_client"
|
51
|
+
require_relative "turbopuffer/internal/transport/pooled_net_requester"
|
4
52
|
require_relative "turbopuffer/client"
|
53
|
+
require_relative "turbopuffer/internal/namespace_page"
|
54
|
+
require_relative "turbopuffer/models/aggregation_group"
|
55
|
+
require_relative "turbopuffer/models/attribute_schema"
|
56
|
+
require_relative "turbopuffer/models/attribute_schema_config"
|
57
|
+
require_relative "turbopuffer/models/attribute_type"
|
58
|
+
require_relative "turbopuffer/models/client_namespaces_params"
|
59
|
+
require_relative "turbopuffer/models/columns"
|
60
|
+
require_relative "turbopuffer/models/distance_metric"
|
61
|
+
require_relative "turbopuffer/models/full_text_search"
|
62
|
+
require_relative "turbopuffer/models/full_text_search_config"
|
63
|
+
require_relative "turbopuffer/models/id"
|
64
|
+
require_relative "turbopuffer/models/include_attributes"
|
65
|
+
require_relative "turbopuffer/models/language"
|
66
|
+
require_relative "turbopuffer/models/namespace_delete_all_params"
|
67
|
+
require_relative "turbopuffer/models/namespace_delete_all_response"
|
68
|
+
require_relative "turbopuffer/models/namespace_explain_query_params"
|
69
|
+
require_relative "turbopuffer/models/namespace_explain_query_response"
|
70
|
+
require_relative "turbopuffer/models/namespace_hint_cache_warm_params"
|
71
|
+
require_relative "turbopuffer/models/namespace_hint_cache_warm_response"
|
72
|
+
require_relative "turbopuffer/models/namespace_metadata"
|
73
|
+
require_relative "turbopuffer/models/namespace_metadata_params"
|
74
|
+
require_relative "turbopuffer/models/namespace_multi_query_params"
|
75
|
+
require_relative "turbopuffer/models/namespace_multi_query_response"
|
76
|
+
require_relative "turbopuffer/models/namespace_query_params"
|
77
|
+
require_relative "turbopuffer/models/namespace_query_response"
|
78
|
+
require_relative "turbopuffer/models/namespace_recall_params"
|
79
|
+
require_relative "turbopuffer/models/namespace_recall_response"
|
80
|
+
require_relative "turbopuffer/models/namespace_schema_params"
|
81
|
+
require_relative "turbopuffer/models/namespace_schema_response"
|
82
|
+
require_relative "turbopuffer/models/namespace_summary"
|
83
|
+
require_relative "turbopuffer/models/namespace_update_schema_params"
|
84
|
+
require_relative "turbopuffer/models/namespace_update_schema_response"
|
85
|
+
require_relative "turbopuffer/models/namespace_write_params"
|
86
|
+
require_relative "turbopuffer/models/namespace_write_response"
|
87
|
+
require_relative "turbopuffer/models/query"
|
88
|
+
require_relative "turbopuffer/models/query_billing"
|
89
|
+
require_relative "turbopuffer/models/query_performance"
|
90
|
+
require_relative "turbopuffer/models/row"
|
91
|
+
require_relative "turbopuffer/models/tokenizer"
|
92
|
+
require_relative "turbopuffer/models/vector"
|
93
|
+
require_relative "turbopuffer/models/vector_encoding"
|
94
|
+
require_relative "turbopuffer/models/write_billing"
|
95
|
+
require_relative "turbopuffer/models"
|
96
|
+
require_relative "turbopuffer/resources/namespaces"
|
5
97
|
require_relative "turbopuffer/namespace"
|
6
|
-
|
7
|
-
module Turbopuffer
|
8
|
-
class Error < StandardError; end
|
9
|
-
end
|