turbopuffer-ruby 0.2.0.pre.alpha.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 +7 -0
- data/.ignore +2 -0
- data/CHANGELOG.md +60 -0
- data/README.md +291 -0
- data/SECURITY.md +27 -0
- data/lib/turbopuffer/client.rb +130 -0
- data/lib/turbopuffer/errors.rb +214 -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 +563 -0
- data/lib/turbopuffer/internal/transport/pooled_net_requester.rb +209 -0
- data/lib/turbopuffer/internal/type/array_of.rb +167 -0
- data/lib/turbopuffer/internal/type/base_model.rb +534 -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 +300 -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 +187 -0
- data/lib/turbopuffer/internal/type/request_parameters.rb +42 -0
- data/lib/turbopuffer/internal/type/union.rb +252 -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/attribute_schema.rb +19 -0
- data/lib/turbopuffer/models/attribute_schema_config.rb +48 -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 +72 -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_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 +35 -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 +51 -0
- data/lib/turbopuffer/models/namespace_query_params.rb +119 -0
- data/lib/turbopuffer/models/namespace_query_response.rb +41 -0
- data/lib/turbopuffer/models/namespace_recall_params.rb +57 -0
- data/lib/turbopuffer/models/namespace_recall_response.rb +39 -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 +63 -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 +38 -0
- data/lib/turbopuffer/models/tokenizer.rb +17 -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 +101 -0
- data/lib/turbopuffer/namespace.rb +22 -0
- data/lib/turbopuffer/request_options.rb +77 -0
- data/lib/turbopuffer/resources/namespaces.rb +311 -0
- data/lib/turbopuffer/version.rb +5 -0
- data/lib/turbopuffer.rb +94 -0
- data/manifest.yaml +15 -0
- data/rbi/turbopuffer/client.rbi +91 -0
- data/rbi/turbopuffer/errors.rbi +178 -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 +298 -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 +162 -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 +121 -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/attribute_schema.rbi +17 -0
- data/rbi/turbopuffer/models/attribute_schema_config.rbi +92 -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 +116 -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_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 +54 -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 +111 -0
- data/rbi/turbopuffer/models/namespace_query_params.rbi +241 -0
- data/rbi/turbopuffer/models/namespace_query_response.rbi +73 -0
- data/rbi/turbopuffer/models/namespace_recall_params.rbi +93 -0
- data/rbi/turbopuffer/models/namespace_recall_response.rbi +59 -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 +106 -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 +22 -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 +64 -0
- data/rbi/turbopuffer/namespace.rbi +8 -0
- data/rbi/turbopuffer/request_options.rbi +59 -0
- data/rbi/turbopuffer/resources/namespaces.rbi +243 -0
- data/rbi/turbopuffer/version.rbi +5 -0
- data/sig/turbopuffer/client.rbs +41 -0
- data/sig/turbopuffer/errors.rbs +110 -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 +62 -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/attribute_schema.rbs +11 -0
- data/sig/turbopuffer/models/attribute_schema_config.rbs +45 -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 +68 -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_hint_cache_warm_params.rbs +25 -0
- data/sig/turbopuffer/models/namespace_hint_cache_warm_response.rbs +17 -0
- data/sig/turbopuffer/models/namespace_metadata.rbs +30 -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 +53 -0
- data/sig/turbopuffer/models/namespace_query_params.rbs +125 -0
- data/sig/turbopuffer/models/namespace_query_response.rbs +39 -0
- data/sig/turbopuffer/models/namespace_recall_params.rbs +56 -0
- data/sig/turbopuffer/models/namespace_recall_response.rbs +26 -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 +61 -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 +15 -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 +61 -0
- data/sig/turbopuffer/namespace.rbs +5 -0
- data/sig/turbopuffer/request_options.rbs +36 -0
- data/sig/turbopuffer/resources/namespaces.rbs +81 -0
- data/sig/turbopuffer/version.rbs +3 -0
- metadata +251 -0
@@ -0,0 +1,311 @@
|
|
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
|
+
# Warm the cache for a namespace.
|
32
|
+
#
|
33
|
+
# @overload hint_cache_warm(namespace: nil, request_options: {})
|
34
|
+
#
|
35
|
+
# @param namespace [String] The name of the namespace.
|
36
|
+
#
|
37
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
38
|
+
#
|
39
|
+
# @return [Turbopuffer::Models::NamespaceHintCacheWarmResponse]
|
40
|
+
#
|
41
|
+
# @see Turbopuffer::Models::NamespaceHintCacheWarmParams
|
42
|
+
def hint_cache_warm(params = {})
|
43
|
+
parsed, options = Turbopuffer::NamespaceHintCacheWarmParams.dump_request(params)
|
44
|
+
namespace =
|
45
|
+
parsed.delete(:namespace) do
|
46
|
+
@client.default_namespace
|
47
|
+
end
|
48
|
+
@client.request(
|
49
|
+
method: :get,
|
50
|
+
path: ["v1/namespaces/%1$s/hint_cache_warm", namespace],
|
51
|
+
model: Turbopuffer::Models::NamespaceHintCacheWarmResponse,
|
52
|
+
options: options
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
# Get metadata about a namespace.
|
57
|
+
#
|
58
|
+
# @overload metadata(namespace: nil, request_options: {})
|
59
|
+
#
|
60
|
+
# @param namespace [String] The name of the namespace.
|
61
|
+
#
|
62
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
63
|
+
#
|
64
|
+
# @return [Turbopuffer::Models::NamespaceMetadata]
|
65
|
+
#
|
66
|
+
# @see Turbopuffer::Models::NamespaceMetadataParams
|
67
|
+
def metadata(params = {})
|
68
|
+
parsed, options = Turbopuffer::NamespaceMetadataParams.dump_request(params)
|
69
|
+
namespace =
|
70
|
+
parsed.delete(:namespace) do
|
71
|
+
@client.default_namespace
|
72
|
+
end
|
73
|
+
@client.request(
|
74
|
+
method: :get,
|
75
|
+
path: ["v1/namespaces/%1$s/metadata", namespace],
|
76
|
+
model: Turbopuffer::NamespaceMetadata,
|
77
|
+
options: options
|
78
|
+
)
|
79
|
+
end
|
80
|
+
|
81
|
+
# Issue multiple concurrent queries filter or search documents.
|
82
|
+
#
|
83
|
+
# @overload multi_query(queries:, namespace: nil, consistency: nil, vector_encoding: nil, request_options: {})
|
84
|
+
#
|
85
|
+
# @param queries [Array<Turbopuffer::Models::Query>] Body param:
|
86
|
+
#
|
87
|
+
# @param namespace [String] Path param: The name of the namespace.
|
88
|
+
#
|
89
|
+
# @param consistency [Turbopuffer::Models::NamespaceMultiQueryParams::Consistency] Body param: The consistency level for a query.
|
90
|
+
#
|
91
|
+
# @param vector_encoding [Symbol, Turbopuffer::Models::VectorEncoding] Body param: The encoding to use for vectors in the response.
|
92
|
+
#
|
93
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
94
|
+
#
|
95
|
+
# @return [Turbopuffer::Models::NamespaceMultiQueryResponse]
|
96
|
+
#
|
97
|
+
# @see Turbopuffer::Models::NamespaceMultiQueryParams
|
98
|
+
def multi_query(params)
|
99
|
+
parsed, options = Turbopuffer::NamespaceMultiQueryParams.dump_request(params)
|
100
|
+
namespace =
|
101
|
+
parsed.delete(:namespace) do
|
102
|
+
@client.default_namespace
|
103
|
+
end
|
104
|
+
@client.request(
|
105
|
+
method: :post,
|
106
|
+
path: ["v2/namespaces/%1$s/query?stainless_overload=multiQuery", namespace],
|
107
|
+
body: parsed,
|
108
|
+
model: Turbopuffer::Models::NamespaceMultiQueryResponse,
|
109
|
+
options: options
|
110
|
+
)
|
111
|
+
end
|
112
|
+
|
113
|
+
# Some parameter documentations has been truncated, see
|
114
|
+
# {Turbopuffer::Models::NamespaceQueryParams} for more details.
|
115
|
+
#
|
116
|
+
# Query, filter, full-text search and vector search documents.
|
117
|
+
#
|
118
|
+
# @overload query(namespace: nil, aggregate_by: nil, consistency: nil, distance_metric: nil, filters: nil, include_attributes: nil, rank_by: nil, top_k: nil, vector_encoding: nil, request_options: {})
|
119
|
+
#
|
120
|
+
# @param namespace [String] Path param: The name of the namespace.
|
121
|
+
#
|
122
|
+
# @param aggregate_by [Hash{Symbol=>Object}] Body param: Aggregations to compute over all documents in the namespace that mat
|
123
|
+
#
|
124
|
+
# @param consistency [Turbopuffer::Models::NamespaceQueryParams::Consistency] Body param: The consistency level for a query.
|
125
|
+
#
|
126
|
+
# @param distance_metric [Symbol, Turbopuffer::Models::DistanceMetric] Body param: A function used to calculate vector similarity.
|
127
|
+
#
|
128
|
+
# @param filters [Object] Body param: Exact filters for attributes to refine search results for. Think of
|
129
|
+
#
|
130
|
+
# @param include_attributes [Boolean, Array<String>] Body param: Whether to include attributes in the response.
|
131
|
+
#
|
132
|
+
# @param rank_by [Object] Body param: How to rank the documents in the namespace.
|
133
|
+
#
|
134
|
+
# @param top_k [Integer] Body param: The number of results to return.
|
135
|
+
#
|
136
|
+
# @param vector_encoding [Symbol, Turbopuffer::Models::VectorEncoding] Body param: The encoding to use for vectors in the response.
|
137
|
+
#
|
138
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
139
|
+
#
|
140
|
+
# @return [Turbopuffer::Models::NamespaceQueryResponse]
|
141
|
+
#
|
142
|
+
# @see Turbopuffer::Models::NamespaceQueryParams
|
143
|
+
def query(params = {})
|
144
|
+
parsed, options = Turbopuffer::NamespaceQueryParams.dump_request(params)
|
145
|
+
namespace =
|
146
|
+
parsed.delete(:namespace) do
|
147
|
+
@client.default_namespace
|
148
|
+
end
|
149
|
+
@client.request(
|
150
|
+
method: :post,
|
151
|
+
path: ["v2/namespaces/%1$s/query", namespace],
|
152
|
+
body: parsed,
|
153
|
+
model: Turbopuffer::Models::NamespaceQueryResponse,
|
154
|
+
options: options
|
155
|
+
)
|
156
|
+
end
|
157
|
+
|
158
|
+
# Some parameter documentations has been truncated, see
|
159
|
+
# {Turbopuffer::Models::NamespaceRecallParams} for more details.
|
160
|
+
#
|
161
|
+
# Evaluate recall.
|
162
|
+
#
|
163
|
+
# @overload recall(namespace: nil, filters: nil, num: nil, queries: nil, top_k: nil, request_options: {})
|
164
|
+
#
|
165
|
+
# @param namespace [String] Path param: The name of the namespace.
|
166
|
+
#
|
167
|
+
# @param filters [Object] Body param: Filter by attributes. Same syntax as the query endpoint.
|
168
|
+
#
|
169
|
+
# @param num [Integer] Body param: The number of searches to run.
|
170
|
+
#
|
171
|
+
# @param queries [Array<Float>] Body param: Use specific query vectors for the measurement. If omitted, sampled
|
172
|
+
#
|
173
|
+
# @param top_k [Integer] Body param: Search for `top_k` nearest neighbors.
|
174
|
+
#
|
175
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
176
|
+
#
|
177
|
+
# @return [Turbopuffer::Models::NamespaceRecallResponse]
|
178
|
+
#
|
179
|
+
# @see Turbopuffer::Models::NamespaceRecallParams
|
180
|
+
def recall(params = {})
|
181
|
+
parsed, options = Turbopuffer::NamespaceRecallParams.dump_request(params)
|
182
|
+
namespace =
|
183
|
+
parsed.delete(:namespace) do
|
184
|
+
@client.default_namespace
|
185
|
+
end
|
186
|
+
@client.request(
|
187
|
+
method: :post,
|
188
|
+
path: ["v1/namespaces/%1$s/_debug/recall", namespace],
|
189
|
+
body: parsed,
|
190
|
+
model: Turbopuffer::Models::NamespaceRecallResponse,
|
191
|
+
options: options
|
192
|
+
)
|
193
|
+
end
|
194
|
+
|
195
|
+
# Get namespace schema.
|
196
|
+
#
|
197
|
+
# @overload schema(namespace: nil, request_options: {})
|
198
|
+
#
|
199
|
+
# @param namespace [String] The name of the namespace.
|
200
|
+
#
|
201
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
202
|
+
#
|
203
|
+
# @return [Hash{Symbol=>Turbopuffer::Models::AttributeSchemaConfig}]
|
204
|
+
#
|
205
|
+
# @see Turbopuffer::Models::NamespaceSchemaParams
|
206
|
+
def schema(params = {})
|
207
|
+
parsed, options = Turbopuffer::NamespaceSchemaParams.dump_request(params)
|
208
|
+
namespace =
|
209
|
+
parsed.delete(:namespace) do
|
210
|
+
@client.default_namespace
|
211
|
+
end
|
212
|
+
@client.request(
|
213
|
+
method: :get,
|
214
|
+
path: ["v1/namespaces/%1$s/schema", namespace],
|
215
|
+
model: Turbopuffer::Internal::Type::HashOf[Turbopuffer::AttributeSchemaConfig],
|
216
|
+
options: options
|
217
|
+
)
|
218
|
+
end
|
219
|
+
|
220
|
+
# Update namespace schema.
|
221
|
+
#
|
222
|
+
# @overload update_schema(namespace: nil, schema: nil, request_options: {})
|
223
|
+
#
|
224
|
+
# @param namespace [String] Path param: The name of the namespace.
|
225
|
+
#
|
226
|
+
# @param schema [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig}] Body param: The desired schema for the namespace.
|
227
|
+
#
|
228
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
229
|
+
#
|
230
|
+
# @return [Hash{Symbol=>Turbopuffer::Models::AttributeSchemaConfig}]
|
231
|
+
#
|
232
|
+
# @see Turbopuffer::Models::NamespaceUpdateSchemaParams
|
233
|
+
def update_schema(params = {})
|
234
|
+
parsed, options = Turbopuffer::NamespaceUpdateSchemaParams.dump_request(params)
|
235
|
+
namespace =
|
236
|
+
parsed.delete(:namespace) do
|
237
|
+
@client.default_namespace
|
238
|
+
end
|
239
|
+
@client.request(
|
240
|
+
method: :post,
|
241
|
+
path: ["v1/namespaces/%1$s/schema", namespace],
|
242
|
+
body: parsed[:schema],
|
243
|
+
model: Turbopuffer::Internal::Type::HashOf[Turbopuffer::AttributeSchemaConfig],
|
244
|
+
options: options
|
245
|
+
)
|
246
|
+
end
|
247
|
+
|
248
|
+
# Some parameter documentations has been truncated, see
|
249
|
+
# {Turbopuffer::Models::NamespaceWriteParams} for more details.
|
250
|
+
#
|
251
|
+
# Create, update, or delete documents.
|
252
|
+
#
|
253
|
+
# @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: {})
|
254
|
+
#
|
255
|
+
# @param namespace [String] Path param: The name of the namespace.
|
256
|
+
#
|
257
|
+
# @param copy_from_namespace [String] Body param: The namespace to copy documents from.
|
258
|
+
#
|
259
|
+
# @param delete_by_filter [Object] Body param: The filter specifying which documents to delete.
|
260
|
+
#
|
261
|
+
# @param delete_condition [Object] Body param: A condition evaluated against the current value of each document tar
|
262
|
+
#
|
263
|
+
# @param deletes [Array<String, Integer>] Body param:
|
264
|
+
#
|
265
|
+
# @param distance_metric [Symbol, Turbopuffer::Models::DistanceMetric] Body param: A function used to calculate vector similarity.
|
266
|
+
#
|
267
|
+
# @param encryption [Turbopuffer::Models::NamespaceWriteParams::Encryption] Body param: The encryption configuration for a namespace.
|
268
|
+
#
|
269
|
+
# @param patch_columns [Turbopuffer::Models::Columns] Body param: A list of documents in columnar format. Each key is a column name, m
|
270
|
+
#
|
271
|
+
# @param patch_condition [Object] Body param: A condition evaluated against the current value of each document tar
|
272
|
+
#
|
273
|
+
# @param patch_rows [Array<Turbopuffer::Models::Row>] Body param:
|
274
|
+
#
|
275
|
+
# @param schema [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig}] Body param: The schema of the attributes attached to the documents.
|
276
|
+
#
|
277
|
+
# @param upsert_columns [Turbopuffer::Models::Columns] Body param: A list of documents in columnar format. Each key is a column name, m
|
278
|
+
#
|
279
|
+
# @param upsert_condition [Object] Body param: A condition evaluated against the current value of each document tar
|
280
|
+
#
|
281
|
+
# @param upsert_rows [Array<Turbopuffer::Models::Row>] Body param:
|
282
|
+
#
|
283
|
+
# @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
|
284
|
+
#
|
285
|
+
# @return [Turbopuffer::Models::NamespaceWriteResponse]
|
286
|
+
#
|
287
|
+
# @see Turbopuffer::Models::NamespaceWriteParams
|
288
|
+
def write(params = {})
|
289
|
+
parsed, options = Turbopuffer::NamespaceWriteParams.dump_request(params)
|
290
|
+
namespace =
|
291
|
+
parsed.delete(:namespace) do
|
292
|
+
@client.default_namespace
|
293
|
+
end
|
294
|
+
@client.request(
|
295
|
+
method: :post,
|
296
|
+
path: ["v2/namespaces/%1$s", namespace],
|
297
|
+
body: parsed,
|
298
|
+
model: Turbopuffer::Models::NamespaceWriteResponse,
|
299
|
+
options: options
|
300
|
+
)
|
301
|
+
end
|
302
|
+
|
303
|
+
# @api private
|
304
|
+
#
|
305
|
+
# @param client [Turbopuffer::Client]
|
306
|
+
def initialize(client:)
|
307
|
+
@client = client
|
308
|
+
end
|
309
|
+
end
|
310
|
+
end
|
311
|
+
end
|
data/lib/turbopuffer.rb
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
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.
|
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"
|
52
|
+
require_relative "turbopuffer/client"
|
53
|
+
require_relative "turbopuffer/internal/namespace_page"
|
54
|
+
require_relative "turbopuffer/models/attribute_schema"
|
55
|
+
require_relative "turbopuffer/models/attribute_schema_config"
|
56
|
+
require_relative "turbopuffer/models/attribute_type"
|
57
|
+
require_relative "turbopuffer/models/client_namespaces_params"
|
58
|
+
require_relative "turbopuffer/models/columns"
|
59
|
+
require_relative "turbopuffer/models/distance_metric"
|
60
|
+
require_relative "turbopuffer/models/full_text_search"
|
61
|
+
require_relative "turbopuffer/models/full_text_search_config"
|
62
|
+
require_relative "turbopuffer/models/id"
|
63
|
+
require_relative "turbopuffer/models/include_attributes"
|
64
|
+
require_relative "turbopuffer/models/language"
|
65
|
+
require_relative "turbopuffer/models/namespace_delete_all_params"
|
66
|
+
require_relative "turbopuffer/models/namespace_delete_all_response"
|
67
|
+
require_relative "turbopuffer/models/namespace_hint_cache_warm_params"
|
68
|
+
require_relative "turbopuffer/models/namespace_hint_cache_warm_response"
|
69
|
+
require_relative "turbopuffer/models/namespace_metadata"
|
70
|
+
require_relative "turbopuffer/models/namespace_metadata_params"
|
71
|
+
require_relative "turbopuffer/models/namespace_multi_query_params"
|
72
|
+
require_relative "turbopuffer/models/namespace_multi_query_response"
|
73
|
+
require_relative "turbopuffer/models/namespace_query_params"
|
74
|
+
require_relative "turbopuffer/models/namespace_query_response"
|
75
|
+
require_relative "turbopuffer/models/namespace_recall_params"
|
76
|
+
require_relative "turbopuffer/models/namespace_recall_response"
|
77
|
+
require_relative "turbopuffer/models/namespace_schema_params"
|
78
|
+
require_relative "turbopuffer/models/namespace_schema_response"
|
79
|
+
require_relative "turbopuffer/models/namespace_summary"
|
80
|
+
require_relative "turbopuffer/models/namespace_update_schema_params"
|
81
|
+
require_relative "turbopuffer/models/namespace_update_schema_response"
|
82
|
+
require_relative "turbopuffer/models/namespace_write_params"
|
83
|
+
require_relative "turbopuffer/models/namespace_write_response"
|
84
|
+
require_relative "turbopuffer/models/query"
|
85
|
+
require_relative "turbopuffer/models/query_billing"
|
86
|
+
require_relative "turbopuffer/models/query_performance"
|
87
|
+
require_relative "turbopuffer/models/row"
|
88
|
+
require_relative "turbopuffer/models/tokenizer"
|
89
|
+
require_relative "turbopuffer/models/vector"
|
90
|
+
require_relative "turbopuffer/models/vector_encoding"
|
91
|
+
require_relative "turbopuffer/models/write_billing"
|
92
|
+
require_relative "turbopuffer/models"
|
93
|
+
require_relative "turbopuffer/resources/namespaces"
|
94
|
+
require_relative "turbopuffer/namespace"
|
data/manifest.yaml
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
# typed: strong
|
2
|
+
|
3
|
+
module Turbopuffer
|
4
|
+
class Client < Turbopuffer::Internal::Transport::BaseClient
|
5
|
+
DEFAULT_MAX_RETRIES = 2
|
6
|
+
|
7
|
+
DEFAULT_TIMEOUT_IN_SECONDS = T.let(60.0, Float)
|
8
|
+
|
9
|
+
DEFAULT_INITIAL_RETRY_DELAY = T.let(0.5, Float)
|
10
|
+
|
11
|
+
DEFAULT_MAX_RETRY_DELAY = T.let(8.0, Float)
|
12
|
+
|
13
|
+
# API key used for authentication
|
14
|
+
sig { returns(String) }
|
15
|
+
attr_reader :api_key
|
16
|
+
|
17
|
+
# The turbopuffer region to use.
|
18
|
+
sig { returns(T.nilable(String)) }
|
19
|
+
attr_reader :region
|
20
|
+
|
21
|
+
sig { returns(T.nilable(String)) }
|
22
|
+
attr_reader :default_namespace
|
23
|
+
|
24
|
+
sig do
|
25
|
+
params(
|
26
|
+
namespace: String
|
27
|
+
).returns(Turbopuffer::Namespace)
|
28
|
+
end
|
29
|
+
def namespace(
|
30
|
+
namespace
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
# List namespaces.
|
35
|
+
sig do
|
36
|
+
params(
|
37
|
+
cursor: String,
|
38
|
+
page_size: Integer,
|
39
|
+
prefix: String,
|
40
|
+
request_options: Turbopuffer::RequestOptions::OrHash
|
41
|
+
).returns(
|
42
|
+
Turbopuffer::Internal::NamespacePage[Turbopuffer::NamespaceSummary]
|
43
|
+
)
|
44
|
+
end
|
45
|
+
def namespaces(
|
46
|
+
# Retrieve the next page of results.
|
47
|
+
cursor: nil,
|
48
|
+
# Limit the number of results per page.
|
49
|
+
page_size: nil,
|
50
|
+
# Retrieve only the namespaces that match the prefix.
|
51
|
+
prefix: nil,
|
52
|
+
request_options: {}
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
# @api private
|
57
|
+
sig { override.returns(T::Hash[String, String]) }
|
58
|
+
private def auth_headers
|
59
|
+
end
|
60
|
+
|
61
|
+
# Creates and returns a new client for interacting with the API.
|
62
|
+
sig do
|
63
|
+
params(
|
64
|
+
api_key: T.nilable(String),
|
65
|
+
region: T.nilable(String),
|
66
|
+
default_namespace: T.nilable(String),
|
67
|
+
base_url: T.nilable(String),
|
68
|
+
max_retries: Integer,
|
69
|
+
timeout: Float,
|
70
|
+
initial_retry_delay: Float,
|
71
|
+
max_retry_delay: Float
|
72
|
+
).returns(T.attached_class)
|
73
|
+
end
|
74
|
+
def self.new(
|
75
|
+
# API key used for authentication Defaults to `ENV["TURBOPUFFER_API_KEY"]`
|
76
|
+
api_key: ENV["TURBOPUFFER_API_KEY"],
|
77
|
+
# The turbopuffer region to use. Defaults to `ENV["TURBOPUFFER_REGION"]`
|
78
|
+
region: ENV["TURBOPUFFER_REGION"],
|
79
|
+
default_namespace: nil,
|
80
|
+
# Override the default base URL for the API, e.g.,
|
81
|
+
# `"https://api.example.com/v2/"`. Defaults to `ENV["TURBOPUFFER_BASE_URL"]`
|
82
|
+
base_url: ENV["TURBOPUFFER_BASE_URL"],
|
83
|
+
# Max number of retries to attempt after a failed retryable request.
|
84
|
+
max_retries: Turbopuffer::Client::DEFAULT_MAX_RETRIES,
|
85
|
+
timeout: Turbopuffer::Client::DEFAULT_TIMEOUT_IN_SECONDS,
|
86
|
+
initial_retry_delay: Turbopuffer::Client::DEFAULT_INITIAL_RETRY_DELAY,
|
87
|
+
max_retry_delay: Turbopuffer::Client::DEFAULT_MAX_RETRY_DELAY
|
88
|
+
)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,178 @@
|
|
1
|
+
# typed: strong
|
2
|
+
|
3
|
+
module Turbopuffer
|
4
|
+
module Errors
|
5
|
+
class Error < StandardError
|
6
|
+
sig { returns(T.nilable(StandardError)) }
|
7
|
+
attr_accessor :cause
|
8
|
+
end
|
9
|
+
|
10
|
+
class ConversionError < Turbopuffer::Errors::Error
|
11
|
+
sig { returns(T.nilable(StandardError)) }
|
12
|
+
def cause
|
13
|
+
end
|
14
|
+
|
15
|
+
# @api private
|
16
|
+
sig do
|
17
|
+
params(
|
18
|
+
on: T::Class[StandardError],
|
19
|
+
method: Symbol,
|
20
|
+
target: T.anything,
|
21
|
+
value: T.anything,
|
22
|
+
cause: T.nilable(StandardError)
|
23
|
+
).returns(T.attached_class)
|
24
|
+
end
|
25
|
+
def self.new(on:, method:, target:, value:, cause: nil)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class APIError < Turbopuffer::Errors::Error
|
30
|
+
sig { returns(URI::Generic) }
|
31
|
+
attr_accessor :url
|
32
|
+
|
33
|
+
sig { returns(T.nilable(Integer)) }
|
34
|
+
attr_accessor :status
|
35
|
+
|
36
|
+
sig { returns(T.nilable(T.anything)) }
|
37
|
+
attr_accessor :body
|
38
|
+
|
39
|
+
# @api private
|
40
|
+
sig do
|
41
|
+
params(
|
42
|
+
url: URI::Generic,
|
43
|
+
status: T.nilable(Integer),
|
44
|
+
body: T.nilable(Object),
|
45
|
+
request: NilClass,
|
46
|
+
response: NilClass,
|
47
|
+
message: T.nilable(String)
|
48
|
+
).returns(T.attached_class)
|
49
|
+
end
|
50
|
+
def self.new(
|
51
|
+
url:,
|
52
|
+
status: nil,
|
53
|
+
body: nil,
|
54
|
+
request: nil,
|
55
|
+
response: nil,
|
56
|
+
message: nil
|
57
|
+
)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class APIConnectionError < Turbopuffer::Errors::APIError
|
62
|
+
sig { void }
|
63
|
+
attr_accessor :status
|
64
|
+
|
65
|
+
sig { void }
|
66
|
+
attr_accessor :body
|
67
|
+
|
68
|
+
# @api private
|
69
|
+
sig do
|
70
|
+
params(
|
71
|
+
url: URI::Generic,
|
72
|
+
status: NilClass,
|
73
|
+
body: NilClass,
|
74
|
+
request: NilClass,
|
75
|
+
response: NilClass,
|
76
|
+
message: T.nilable(String)
|
77
|
+
).returns(T.attached_class)
|
78
|
+
end
|
79
|
+
def self.new(
|
80
|
+
url:,
|
81
|
+
status: nil,
|
82
|
+
body: nil,
|
83
|
+
request: nil,
|
84
|
+
response: nil,
|
85
|
+
message: "Connection error."
|
86
|
+
)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
class APITimeoutError < Turbopuffer::Errors::APIConnectionError
|
91
|
+
# @api private
|
92
|
+
sig do
|
93
|
+
params(
|
94
|
+
url: URI::Generic,
|
95
|
+
status: NilClass,
|
96
|
+
body: NilClass,
|
97
|
+
request: NilClass,
|
98
|
+
response: NilClass,
|
99
|
+
message: T.nilable(String)
|
100
|
+
).returns(T.attached_class)
|
101
|
+
end
|
102
|
+
def self.new(
|
103
|
+
url:,
|
104
|
+
status: nil,
|
105
|
+
body: nil,
|
106
|
+
request: nil,
|
107
|
+
response: nil,
|
108
|
+
message: "Request timed out."
|
109
|
+
)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
class APIStatusError < Turbopuffer::Errors::APIError
|
114
|
+
# @api private
|
115
|
+
sig do
|
116
|
+
params(
|
117
|
+
url: URI::Generic,
|
118
|
+
status: Integer,
|
119
|
+
body: T.nilable(Object),
|
120
|
+
request: NilClass,
|
121
|
+
response: NilClass,
|
122
|
+
message: T.nilable(String)
|
123
|
+
).returns(T.attached_class)
|
124
|
+
end
|
125
|
+
def self.for(url:, status:, body:, request:, response:, message: nil)
|
126
|
+
end
|
127
|
+
|
128
|
+
sig { returns(Integer) }
|
129
|
+
attr_accessor :status
|
130
|
+
|
131
|
+
# @api private
|
132
|
+
sig do
|
133
|
+
params(
|
134
|
+
url: URI::Generic,
|
135
|
+
status: Integer,
|
136
|
+
body: T.nilable(Object),
|
137
|
+
request: NilClass,
|
138
|
+
response: NilClass,
|
139
|
+
message: T.nilable(String)
|
140
|
+
).returns(T.attached_class)
|
141
|
+
end
|
142
|
+
def self.new(url:, status:, body:, request:, response:, message: nil)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
class BadRequestError < Turbopuffer::Errors::APIStatusError
|
147
|
+
HTTP_STATUS = 400
|
148
|
+
end
|
149
|
+
|
150
|
+
class AuthenticationError < Turbopuffer::Errors::APIStatusError
|
151
|
+
HTTP_STATUS = 401
|
152
|
+
end
|
153
|
+
|
154
|
+
class PermissionDeniedError < Turbopuffer::Errors::APIStatusError
|
155
|
+
HTTP_STATUS = 403
|
156
|
+
end
|
157
|
+
|
158
|
+
class NotFoundError < Turbopuffer::Errors::APIStatusError
|
159
|
+
HTTP_STATUS = 404
|
160
|
+
end
|
161
|
+
|
162
|
+
class ConflictError < Turbopuffer::Errors::APIStatusError
|
163
|
+
HTTP_STATUS = 409
|
164
|
+
end
|
165
|
+
|
166
|
+
class UnprocessableEntityError < Turbopuffer::Errors::APIStatusError
|
167
|
+
HTTP_STATUS = 422
|
168
|
+
end
|
169
|
+
|
170
|
+
class RateLimitError < Turbopuffer::Errors::APIStatusError
|
171
|
+
HTTP_STATUS = 429
|
172
|
+
end
|
173
|
+
|
174
|
+
class InternalServerError < Turbopuffer::Errors::APIStatusError
|
175
|
+
HTTP_STATUS = T.let((500..), T::Range[Integer])
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|