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.
Files changed (194) hide show
  1. checksums.yaml +7 -0
  2. data/.ignore +2 -0
  3. data/CHANGELOG.md +60 -0
  4. data/README.md +291 -0
  5. data/SECURITY.md +27 -0
  6. data/lib/turbopuffer/client.rb +130 -0
  7. data/lib/turbopuffer/errors.rb +214 -0
  8. data/lib/turbopuffer/file_part.rb +55 -0
  9. data/lib/turbopuffer/internal/namespace_page.rb +86 -0
  10. data/lib/turbopuffer/internal/transport/base_client.rb +563 -0
  11. data/lib/turbopuffer/internal/transport/pooled_net_requester.rb +209 -0
  12. data/lib/turbopuffer/internal/type/array_of.rb +167 -0
  13. data/lib/turbopuffer/internal/type/base_model.rb +534 -0
  14. data/lib/turbopuffer/internal/type/base_page.rb +55 -0
  15. data/lib/turbopuffer/internal/type/boolean.rb +77 -0
  16. data/lib/turbopuffer/internal/type/converter.rb +300 -0
  17. data/lib/turbopuffer/internal/type/enum.rb +152 -0
  18. data/lib/turbopuffer/internal/type/file_input.rb +108 -0
  19. data/lib/turbopuffer/internal/type/hash_of.rb +187 -0
  20. data/lib/turbopuffer/internal/type/request_parameters.rb +42 -0
  21. data/lib/turbopuffer/internal/type/union.rb +252 -0
  22. data/lib/turbopuffer/internal/type/unknown.rb +81 -0
  23. data/lib/turbopuffer/internal/util.rb +914 -0
  24. data/lib/turbopuffer/internal.rb +20 -0
  25. data/lib/turbopuffer/models/attribute_schema.rb +19 -0
  26. data/lib/turbopuffer/models/attribute_schema_config.rb +48 -0
  27. data/lib/turbopuffer/models/attribute_type.rb +7 -0
  28. data/lib/turbopuffer/models/client_namespaces_params.rb +38 -0
  29. data/lib/turbopuffer/models/columns.rb +64 -0
  30. data/lib/turbopuffer/models/distance_metric.rb +19 -0
  31. data/lib/turbopuffer/models/full_text_search.rb +20 -0
  32. data/lib/turbopuffer/models/full_text_search_config.rb +72 -0
  33. data/lib/turbopuffer/models/id.rb +19 -0
  34. data/lib/turbopuffer/models/include_attributes.rb +22 -0
  35. data/lib/turbopuffer/models/language.rb +32 -0
  36. data/lib/turbopuffer/models/namespace_delete_all_params.rb +20 -0
  37. data/lib/turbopuffer/models/namespace_delete_all_response.rb +19 -0
  38. data/lib/turbopuffer/models/namespace_hint_cache_warm_params.rb +20 -0
  39. data/lib/turbopuffer/models/namespace_hint_cache_warm_response.rb +26 -0
  40. data/lib/turbopuffer/models/namespace_metadata.rb +35 -0
  41. data/lib/turbopuffer/models/namespace_metadata_params.rb +20 -0
  42. data/lib/turbopuffer/models/namespace_multi_query_params.rb +73 -0
  43. data/lib/turbopuffer/models/namespace_multi_query_response.rb +51 -0
  44. data/lib/turbopuffer/models/namespace_query_params.rb +119 -0
  45. data/lib/turbopuffer/models/namespace_query_response.rb +41 -0
  46. data/lib/turbopuffer/models/namespace_recall_params.rb +57 -0
  47. data/lib/turbopuffer/models/namespace_recall_response.rb +39 -0
  48. data/lib/turbopuffer/models/namespace_schema_params.rb +20 -0
  49. data/lib/turbopuffer/models/namespace_schema_response.rb +8 -0
  50. data/lib/turbopuffer/models/namespace_summary.rb +19 -0
  51. data/lib/turbopuffer/models/namespace_update_schema_params.rb +29 -0
  52. data/lib/turbopuffer/models/namespace_update_schema_response.rb +9 -0
  53. data/lib/turbopuffer/models/namespace_write_params.rb +158 -0
  54. data/lib/turbopuffer/models/namespace_write_response.rb +67 -0
  55. data/lib/turbopuffer/models/query.rb +63 -0
  56. data/lib/turbopuffer/models/query_billing.rb +26 -0
  57. data/lib/turbopuffer/models/query_performance.rb +63 -0
  58. data/lib/turbopuffer/models/row.rb +38 -0
  59. data/lib/turbopuffer/models/tokenizer.rb +17 -0
  60. data/lib/turbopuffer/models/vector.rb +22 -0
  61. data/lib/turbopuffer/models/vector_encoding.rb +16 -0
  62. data/lib/turbopuffer/models/write_billing.rb +26 -0
  63. data/lib/turbopuffer/models.rb +101 -0
  64. data/lib/turbopuffer/namespace.rb +22 -0
  65. data/lib/turbopuffer/request_options.rb +77 -0
  66. data/lib/turbopuffer/resources/namespaces.rb +311 -0
  67. data/lib/turbopuffer/version.rb +5 -0
  68. data/lib/turbopuffer.rb +94 -0
  69. data/manifest.yaml +15 -0
  70. data/rbi/turbopuffer/client.rbi +91 -0
  71. data/rbi/turbopuffer/errors.rbi +178 -0
  72. data/rbi/turbopuffer/file_part.rbi +37 -0
  73. data/rbi/turbopuffer/internal/namespace_page.rbi +22 -0
  74. data/rbi/turbopuffer/internal/transport/base_client.rbi +298 -0
  75. data/rbi/turbopuffer/internal/transport/pooled_net_requester.rbi +80 -0
  76. data/rbi/turbopuffer/internal/type/array_of.rbi +104 -0
  77. data/rbi/turbopuffer/internal/type/base_model.rbi +304 -0
  78. data/rbi/turbopuffer/internal/type/base_page.rbi +43 -0
  79. data/rbi/turbopuffer/internal/type/boolean.rbi +58 -0
  80. data/rbi/turbopuffer/internal/type/converter.rbi +162 -0
  81. data/rbi/turbopuffer/internal/type/enum.rbi +82 -0
  82. data/rbi/turbopuffer/internal/type/file_input.rbi +59 -0
  83. data/rbi/turbopuffer/internal/type/hash_of.rbi +104 -0
  84. data/rbi/turbopuffer/internal/type/request_parameters.rbi +31 -0
  85. data/rbi/turbopuffer/internal/type/union.rbi +121 -0
  86. data/rbi/turbopuffer/internal/type/unknown.rbi +58 -0
  87. data/rbi/turbopuffer/internal/util.rbi +487 -0
  88. data/rbi/turbopuffer/internal.rbi +18 -0
  89. data/rbi/turbopuffer/models/attribute_schema.rbi +17 -0
  90. data/rbi/turbopuffer/models/attribute_schema_config.rbi +92 -0
  91. data/rbi/turbopuffer/models/attribute_type.rbi +7 -0
  92. data/rbi/turbopuffer/models/client_namespaces_params.rbi +71 -0
  93. data/rbi/turbopuffer/models/columns.rbi +82 -0
  94. data/rbi/turbopuffer/models/distance_metric.rbi +27 -0
  95. data/rbi/turbopuffer/models/full_text_search.rbi +19 -0
  96. data/rbi/turbopuffer/models/full_text_search_config.rbi +116 -0
  97. data/rbi/turbopuffer/models/id.rbi +16 -0
  98. data/rbi/turbopuffer/models/include_attributes.rbi +24 -0
  99. data/rbi/turbopuffer/models/language.rbi +36 -0
  100. data/rbi/turbopuffer/models/namespace_delete_all_params.rbi +41 -0
  101. data/rbi/turbopuffer/models/namespace_delete_all_response.rbi +31 -0
  102. data/rbi/turbopuffer/models/namespace_hint_cache_warm_params.rbi +41 -0
  103. data/rbi/turbopuffer/models/namespace_hint_cache_warm_response.rbi +38 -0
  104. data/rbi/turbopuffer/models/namespace_metadata.rbi +54 -0
  105. data/rbi/turbopuffer/models/namespace_metadata_params.rbi +41 -0
  106. data/rbi/turbopuffer/models/namespace_multi_query_params.rbi +175 -0
  107. data/rbi/turbopuffer/models/namespace_multi_query_response.rbi +111 -0
  108. data/rbi/turbopuffer/models/namespace_query_params.rbi +241 -0
  109. data/rbi/turbopuffer/models/namespace_query_response.rbi +73 -0
  110. data/rbi/turbopuffer/models/namespace_recall_params.rbi +93 -0
  111. data/rbi/turbopuffer/models/namespace_recall_response.rbi +59 -0
  112. data/rbi/turbopuffer/models/namespace_schema_params.rbi +41 -0
  113. data/rbi/turbopuffer/models/namespace_schema_response.rbi +11 -0
  114. data/rbi/turbopuffer/models/namespace_summary.rbi +28 -0
  115. data/rbi/turbopuffer/models/namespace_update_schema_params.rbi +80 -0
  116. data/rbi/turbopuffer/models/namespace_update_schema_response.rbi +11 -0
  117. data/rbi/turbopuffer/models/namespace_write_params.rbi +290 -0
  118. data/rbi/turbopuffer/models/namespace_write_response.rbi +101 -0
  119. data/rbi/turbopuffer/models/query.rbi +106 -0
  120. data/rbi/turbopuffer/models/query_billing.rbi +46 -0
  121. data/rbi/turbopuffer/models/query_performance.rbi +82 -0
  122. data/rbi/turbopuffer/models/row.rbi +47 -0
  123. data/rbi/turbopuffer/models/tokenizer.rbi +22 -0
  124. data/rbi/turbopuffer/models/vector.rbi +22 -0
  125. data/rbi/turbopuffer/models/vector_encoding.rbi +22 -0
  126. data/rbi/turbopuffer/models/write_billing.rbi +49 -0
  127. data/rbi/turbopuffer/models.rbi +64 -0
  128. data/rbi/turbopuffer/namespace.rbi +8 -0
  129. data/rbi/turbopuffer/request_options.rbi +59 -0
  130. data/rbi/turbopuffer/resources/namespaces.rbi +243 -0
  131. data/rbi/turbopuffer/version.rbi +5 -0
  132. data/sig/turbopuffer/client.rbs +41 -0
  133. data/sig/turbopuffer/errors.rbs +110 -0
  134. data/sig/turbopuffer/file_part.rbs +21 -0
  135. data/sig/turbopuffer/internal/namespace_page.rbs +13 -0
  136. data/sig/turbopuffer/internal/transport/base_client.rbs +131 -0
  137. data/sig/turbopuffer/internal/transport/pooled_net_requester.rbs +45 -0
  138. data/sig/turbopuffer/internal/type/array_of.rbs +48 -0
  139. data/sig/turbopuffer/internal/type/base_model.rbs +102 -0
  140. data/sig/turbopuffer/internal/type/base_page.rbs +24 -0
  141. data/sig/turbopuffer/internal/type/boolean.rbs +26 -0
  142. data/sig/turbopuffer/internal/type/converter.rbs +62 -0
  143. data/sig/turbopuffer/internal/type/enum.rbs +32 -0
  144. data/sig/turbopuffer/internal/type/file_input.rbs +25 -0
  145. data/sig/turbopuffer/internal/type/hash_of.rbs +48 -0
  146. data/sig/turbopuffer/internal/type/request_parameters.rbs +19 -0
  147. data/sig/turbopuffer/internal/type/union.rbs +52 -0
  148. data/sig/turbopuffer/internal/type/unknown.rbs +26 -0
  149. data/sig/turbopuffer/internal/util.rbs +185 -0
  150. data/sig/turbopuffer/internal.rbs +9 -0
  151. data/sig/turbopuffer/models/attribute_schema.rbs +11 -0
  152. data/sig/turbopuffer/models/attribute_schema_config.rbs +45 -0
  153. data/sig/turbopuffer/models/attribute_type.rbs +5 -0
  154. data/sig/turbopuffer/models/client_namespaces_params.rbs +38 -0
  155. data/sig/turbopuffer/models/columns.rbs +42 -0
  156. data/sig/turbopuffer/models/distance_metric.rbs +17 -0
  157. data/sig/turbopuffer/models/full_text_search.rbs +11 -0
  158. data/sig/turbopuffer/models/full_text_search_config.rbs +68 -0
  159. data/sig/turbopuffer/models/id.rbs +11 -0
  160. data/sig/turbopuffer/models/include_attributes.rbs +13 -0
  161. data/sig/turbopuffer/models/language.rbs +48 -0
  162. data/sig/turbopuffer/models/namespace_delete_all_params.rbs +25 -0
  163. data/sig/turbopuffer/models/namespace_delete_all_response.rbs +13 -0
  164. data/sig/turbopuffer/models/namespace_hint_cache_warm_params.rbs +25 -0
  165. data/sig/turbopuffer/models/namespace_hint_cache_warm_response.rbs +17 -0
  166. data/sig/turbopuffer/models/namespace_metadata.rbs +30 -0
  167. data/sig/turbopuffer/models/namespace_metadata_params.rbs +25 -0
  168. data/sig/turbopuffer/models/namespace_multi_query_params.rbs +86 -0
  169. data/sig/turbopuffer/models/namespace_multi_query_response.rbs +53 -0
  170. data/sig/turbopuffer/models/namespace_query_params.rbs +125 -0
  171. data/sig/turbopuffer/models/namespace_query_response.rbs +39 -0
  172. data/sig/turbopuffer/models/namespace_recall_params.rbs +56 -0
  173. data/sig/turbopuffer/models/namespace_recall_response.rbs +26 -0
  174. data/sig/turbopuffer/models/namespace_schema_params.rbs +25 -0
  175. data/sig/turbopuffer/models/namespace_schema_response.rbs +8 -0
  176. data/sig/turbopuffer/models/namespace_summary.rbs +13 -0
  177. data/sig/turbopuffer/models/namespace_update_schema_params.rbs +37 -0
  178. data/sig/turbopuffer/models/namespace_update_schema_response.rbs +8 -0
  179. data/sig/turbopuffer/models/namespace_write_params.rbs +156 -0
  180. data/sig/turbopuffer/models/namespace_write_response.rbs +56 -0
  181. data/sig/turbopuffer/models/query.rbs +61 -0
  182. data/sig/turbopuffer/models/query_billing.rbs +25 -0
  183. data/sig/turbopuffer/models/query_performance.rbs +45 -0
  184. data/sig/turbopuffer/models/row.rbs +24 -0
  185. data/sig/turbopuffer/models/tokenizer.rbs +15 -0
  186. data/sig/turbopuffer/models/vector.rbs +13 -0
  187. data/sig/turbopuffer/models/vector_encoding.rbs +14 -0
  188. data/sig/turbopuffer/models/write_billing.rbs +27 -0
  189. data/sig/turbopuffer/models.rbs +61 -0
  190. data/sig/turbopuffer/namespace.rbs +5 -0
  191. data/sig/turbopuffer/request_options.rbs +36 -0
  192. data/sig/turbopuffer/resources/namespaces.rbs +81 -0
  193. data/sig/turbopuffer/version.rbs +3 -0
  194. 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
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Turbopuffer
4
+ VERSION = "0.2.0.pre.alpha.1"
5
+ end
@@ -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,15 @@
1
+ dependencies:
2
+ - English
3
+ - cgi
4
+ - date
5
+ - erb
6
+ - etc
7
+ - json
8
+ - net/http
9
+ - pathname
10
+ - rbconfig
11
+ - securerandom
12
+ - set
13
+ - stringio
14
+ - time
15
+ - uri
@@ -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