turbopuffer 0.1.0 → 1.3.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.
Files changed (213) hide show
  1. checksums.yaml +4 -4
  2. data/.ignore +2 -0
  3. data/CHANGELOG.md +218 -0
  4. data/README.md +270 -40
  5. data/SECURITY.md +27 -0
  6. data/lib/turbopuffer/client.rb +122 -16
  7. data/lib/turbopuffer/errors.rb +228 -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 +567 -0
  11. data/lib/turbopuffer/internal/transport/pooled_net_requester.rb +201 -0
  12. data/lib/turbopuffer/internal/type/array_of.rb +168 -0
  13. data/lib/turbopuffer/internal/type/base_model.rb +529 -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 +327 -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 +188 -0
  20. data/lib/turbopuffer/internal/type/request_parameters.rb +42 -0
  21. data/lib/turbopuffer/internal/type/union.rb +254 -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/aggregation_group.rb +8 -0
  26. data/lib/turbopuffer/models/attribute_schema.rb +19 -0
  27. data/lib/turbopuffer/models/attribute_schema_config.rb +56 -0
  28. data/lib/turbopuffer/models/attribute_type.rb +7 -0
  29. data/lib/turbopuffer/models/bm25_clause_params.rb +18 -0
  30. data/lib/turbopuffer/models/client_namespaces_params.rb +38 -0
  31. data/lib/turbopuffer/models/columns.rb +64 -0
  32. data/lib/turbopuffer/models/contains_all_tokens_filter_params.rb +18 -0
  33. data/lib/turbopuffer/models/distance_metric.rb +19 -0
  34. data/lib/turbopuffer/models/full_text_search.rb +20 -0
  35. data/lib/turbopuffer/models/full_text_search_config.rb +83 -0
  36. data/lib/turbopuffer/models/id.rb +19 -0
  37. data/lib/turbopuffer/models/include_attributes.rb +22 -0
  38. data/lib/turbopuffer/models/language.rb +32 -0
  39. data/lib/turbopuffer/models/namespace_delete_all_params.rb +20 -0
  40. data/lib/turbopuffer/models/namespace_delete_all_response.rb +19 -0
  41. data/lib/turbopuffer/models/namespace_explain_query_params.rb +137 -0
  42. data/lib/turbopuffer/models/namespace_explain_query_response.rb +19 -0
  43. data/lib/turbopuffer/models/namespace_hint_cache_warm_params.rb +20 -0
  44. data/lib/turbopuffer/models/namespace_hint_cache_warm_response.rb +26 -0
  45. data/lib/turbopuffer/models/namespace_metadata.rb +43 -0
  46. data/lib/turbopuffer/models/namespace_metadata_params.rb +20 -0
  47. data/lib/turbopuffer/models/namespace_multi_query_params.rb +73 -0
  48. data/lib/turbopuffer/models/namespace_multi_query_response.rb +58 -0
  49. data/lib/turbopuffer/models/namespace_query_params.rb +137 -0
  50. data/lib/turbopuffer/models/namespace_query_response.rb +49 -0
  51. data/lib/turbopuffer/models/namespace_recall_params.rb +66 -0
  52. data/lib/turbopuffer/models/namespace_recall_response.rb +68 -0
  53. data/lib/turbopuffer/models/namespace_schema_params.rb +20 -0
  54. data/lib/turbopuffer/models/namespace_schema_response.rb +8 -0
  55. data/lib/turbopuffer/models/namespace_summary.rb +19 -0
  56. data/lib/turbopuffer/models/namespace_update_schema_params.rb +29 -0
  57. data/lib/turbopuffer/models/namespace_update_schema_response.rb +9 -0
  58. data/lib/turbopuffer/models/namespace_write_params.rb +158 -0
  59. data/lib/turbopuffer/models/namespace_write_response.rb +67 -0
  60. data/lib/turbopuffer/models/query.rb +81 -0
  61. data/lib/turbopuffer/models/query_billing.rb +26 -0
  62. data/lib/turbopuffer/models/query_performance.rb +63 -0
  63. data/lib/turbopuffer/models/row.rb +46 -0
  64. data/lib/turbopuffer/models/tokenizer.rb +19 -0
  65. data/lib/turbopuffer/models/vector.rb +22 -0
  66. data/lib/turbopuffer/models/vector_encoding.rb +16 -0
  67. data/lib/turbopuffer/models/write_billing.rb +26 -0
  68. data/lib/turbopuffer/models.rb +110 -0
  69. data/lib/turbopuffer/namespace.rb +14 -50
  70. data/lib/turbopuffer/request_options.rb +77 -0
  71. data/lib/turbopuffer/resources/namespaces.rb +366 -0
  72. data/lib/turbopuffer/version.rb +1 -1
  73. data/lib/turbopuffer.rb +94 -4
  74. data/manifest.yaml +15 -0
  75. data/rbi/turbopuffer/client.rbi +91 -0
  76. data/rbi/turbopuffer/errors.rbi +205 -0
  77. data/rbi/turbopuffer/file_part.rbi +37 -0
  78. data/rbi/turbopuffer/internal/namespace_page.rbi +22 -0
  79. data/rbi/turbopuffer/internal/transport/base_client.rbi +297 -0
  80. data/rbi/turbopuffer/internal/transport/pooled_net_requester.rbi +80 -0
  81. data/rbi/turbopuffer/internal/type/array_of.rbi +104 -0
  82. data/rbi/turbopuffer/internal/type/base_model.rbi +304 -0
  83. data/rbi/turbopuffer/internal/type/base_page.rbi +43 -0
  84. data/rbi/turbopuffer/internal/type/boolean.rbi +58 -0
  85. data/rbi/turbopuffer/internal/type/converter.rbi +216 -0
  86. data/rbi/turbopuffer/internal/type/enum.rbi +82 -0
  87. data/rbi/turbopuffer/internal/type/file_input.rbi +59 -0
  88. data/rbi/turbopuffer/internal/type/hash_of.rbi +104 -0
  89. data/rbi/turbopuffer/internal/type/request_parameters.rbi +31 -0
  90. data/rbi/turbopuffer/internal/type/union.rbi +128 -0
  91. data/rbi/turbopuffer/internal/type/unknown.rbi +58 -0
  92. data/rbi/turbopuffer/internal/util.rbi +487 -0
  93. data/rbi/turbopuffer/internal.rbi +18 -0
  94. data/rbi/turbopuffer/models/aggregation_group.rbi +13 -0
  95. data/rbi/turbopuffer/models/attribute_schema.rbi +17 -0
  96. data/rbi/turbopuffer/models/attribute_schema_config.rbi +103 -0
  97. data/rbi/turbopuffer/models/attribute_type.rbi +7 -0
  98. data/rbi/turbopuffer/models/bm25_clause_params.rbi +31 -0
  99. data/rbi/turbopuffer/models/client_namespaces_params.rbi +71 -0
  100. data/rbi/turbopuffer/models/columns.rbi +82 -0
  101. data/rbi/turbopuffer/models/contains_all_tokens_filter_params.rbi +34 -0
  102. data/rbi/turbopuffer/models/distance_metric.rbi +27 -0
  103. data/rbi/turbopuffer/models/full_text_search.rbi +19 -0
  104. data/rbi/turbopuffer/models/full_text_search_config.rbi +133 -0
  105. data/rbi/turbopuffer/models/id.rbi +16 -0
  106. data/rbi/turbopuffer/models/include_attributes.rbi +24 -0
  107. data/rbi/turbopuffer/models/language.rbi +36 -0
  108. data/rbi/turbopuffer/models/namespace_delete_all_params.rbi +41 -0
  109. data/rbi/turbopuffer/models/namespace_delete_all_response.rbi +31 -0
  110. data/rbi/turbopuffer/models/namespace_explain_query_params.rbi +273 -0
  111. data/rbi/turbopuffer/models/namespace_explain_query_response.rbi +34 -0
  112. data/rbi/turbopuffer/models/namespace_hint_cache_warm_params.rbi +41 -0
  113. data/rbi/turbopuffer/models/namespace_hint_cache_warm_response.rbi +38 -0
  114. data/rbi/turbopuffer/models/namespace_metadata.rbi +62 -0
  115. data/rbi/turbopuffer/models/namespace_metadata_params.rbi +41 -0
  116. data/rbi/turbopuffer/models/namespace_multi_query_params.rbi +175 -0
  117. data/rbi/turbopuffer/models/namespace_multi_query_response.rbi +121 -0
  118. data/rbi/turbopuffer/models/namespace_query_params.rbi +267 -0
  119. data/rbi/turbopuffer/models/namespace_query_response.rbi +84 -0
  120. data/rbi/turbopuffer/models/namespace_recall_params.rbi +106 -0
  121. data/rbi/turbopuffer/models/namespace_recall_response.rbi +134 -0
  122. data/rbi/turbopuffer/models/namespace_schema_params.rbi +41 -0
  123. data/rbi/turbopuffer/models/namespace_schema_response.rbi +11 -0
  124. data/rbi/turbopuffer/models/namespace_summary.rbi +28 -0
  125. data/rbi/turbopuffer/models/namespace_update_schema_params.rbi +80 -0
  126. data/rbi/turbopuffer/models/namespace_update_schema_response.rbi +11 -0
  127. data/rbi/turbopuffer/models/namespace_write_params.rbi +290 -0
  128. data/rbi/turbopuffer/models/namespace_write_response.rbi +101 -0
  129. data/rbi/turbopuffer/models/query.rbi +132 -0
  130. data/rbi/turbopuffer/models/query_billing.rbi +46 -0
  131. data/rbi/turbopuffer/models/query_performance.rbi +82 -0
  132. data/rbi/turbopuffer/models/row.rbi +47 -0
  133. data/rbi/turbopuffer/models/tokenizer.rbi +24 -0
  134. data/rbi/turbopuffer/models/vector.rbi +22 -0
  135. data/rbi/turbopuffer/models/vector_encoding.rbi +22 -0
  136. data/rbi/turbopuffer/models/write_billing.rbi +49 -0
  137. data/rbi/turbopuffer/models.rbi +77 -0
  138. data/rbi/turbopuffer/namespace.rbi +8 -0
  139. data/rbi/turbopuffer/request_options.rbi +59 -0
  140. data/rbi/turbopuffer/resources/namespaces.rbi +304 -0
  141. data/rbi/turbopuffer/version.rbi +5 -0
  142. data/sig/turbopuffer/client.rbs +41 -0
  143. data/sig/turbopuffer/errors.rbs +117 -0
  144. data/sig/turbopuffer/file_part.rbs +21 -0
  145. data/sig/turbopuffer/internal/namespace_page.rbs +13 -0
  146. data/sig/turbopuffer/internal/transport/base_client.rbs +131 -0
  147. data/sig/turbopuffer/internal/transport/pooled_net_requester.rbs +45 -0
  148. data/sig/turbopuffer/internal/type/array_of.rbs +48 -0
  149. data/sig/turbopuffer/internal/type/base_model.rbs +102 -0
  150. data/sig/turbopuffer/internal/type/base_page.rbs +24 -0
  151. data/sig/turbopuffer/internal/type/boolean.rbs +26 -0
  152. data/sig/turbopuffer/internal/type/converter.rbs +79 -0
  153. data/sig/turbopuffer/internal/type/enum.rbs +32 -0
  154. data/sig/turbopuffer/internal/type/file_input.rbs +25 -0
  155. data/sig/turbopuffer/internal/type/hash_of.rbs +48 -0
  156. data/sig/turbopuffer/internal/type/request_parameters.rbs +19 -0
  157. data/sig/turbopuffer/internal/type/union.rbs +52 -0
  158. data/sig/turbopuffer/internal/type/unknown.rbs +26 -0
  159. data/sig/turbopuffer/internal/util.rbs +185 -0
  160. data/sig/turbopuffer/internal.rbs +9 -0
  161. data/sig/turbopuffer/models/aggregation_group.rbs +7 -0
  162. data/sig/turbopuffer/models/attribute_schema.rbs +11 -0
  163. data/sig/turbopuffer/models/attribute_schema_config.rbs +52 -0
  164. data/sig/turbopuffer/models/attribute_type.rbs +5 -0
  165. data/sig/turbopuffer/models/bm25_clause_params.rbs +15 -0
  166. data/sig/turbopuffer/models/client_namespaces_params.rbs +38 -0
  167. data/sig/turbopuffer/models/columns.rbs +42 -0
  168. data/sig/turbopuffer/models/contains_all_tokens_filter_params.rbs +15 -0
  169. data/sig/turbopuffer/models/distance_metric.rbs +17 -0
  170. data/sig/turbopuffer/models/full_text_search.rbs +11 -0
  171. data/sig/turbopuffer/models/full_text_search_config.rbs +75 -0
  172. data/sig/turbopuffer/models/id.rbs +11 -0
  173. data/sig/turbopuffer/models/include_attributes.rbs +13 -0
  174. data/sig/turbopuffer/models/language.rbs +48 -0
  175. data/sig/turbopuffer/models/namespace_delete_all_params.rbs +25 -0
  176. data/sig/turbopuffer/models/namespace_delete_all_response.rbs +13 -0
  177. data/sig/turbopuffer/models/namespace_explain_query_params.rbs +141 -0
  178. data/sig/turbopuffer/models/namespace_explain_query_response.rbs +15 -0
  179. data/sig/turbopuffer/models/namespace_hint_cache_warm_params.rbs +25 -0
  180. data/sig/turbopuffer/models/namespace_hint_cache_warm_response.rbs +18 -0
  181. data/sig/turbopuffer/models/namespace_metadata.rbs +35 -0
  182. data/sig/turbopuffer/models/namespace_metadata_params.rbs +25 -0
  183. data/sig/turbopuffer/models/namespace_multi_query_params.rbs +86 -0
  184. data/sig/turbopuffer/models/namespace_multi_query_response.rbs +65 -0
  185. data/sig/turbopuffer/models/namespace_query_params.rbs +139 -0
  186. data/sig/turbopuffer/models/namespace_query_response.rbs +48 -0
  187. data/sig/turbopuffer/models/namespace_recall_params.rbs +63 -0
  188. data/sig/turbopuffer/models/namespace_recall_response.rbs +61 -0
  189. data/sig/turbopuffer/models/namespace_schema_params.rbs +25 -0
  190. data/sig/turbopuffer/models/namespace_schema_response.rbs +8 -0
  191. data/sig/turbopuffer/models/namespace_summary.rbs +13 -0
  192. data/sig/turbopuffer/models/namespace_update_schema_params.rbs +37 -0
  193. data/sig/turbopuffer/models/namespace_update_schema_response.rbs +8 -0
  194. data/sig/turbopuffer/models/namespace_write_params.rbs +156 -0
  195. data/sig/turbopuffer/models/namespace_write_response.rbs +56 -0
  196. data/sig/turbopuffer/models/query.rbs +75 -0
  197. data/sig/turbopuffer/models/query_billing.rbs +25 -0
  198. data/sig/turbopuffer/models/query_performance.rbs +45 -0
  199. data/sig/turbopuffer/models/row.rbs +24 -0
  200. data/sig/turbopuffer/models/tokenizer.rbs +16 -0
  201. data/sig/turbopuffer/models/vector.rbs +13 -0
  202. data/sig/turbopuffer/models/vector_encoding.rbs +14 -0
  203. data/sig/turbopuffer/models/write_billing.rbs +27 -0
  204. data/sig/turbopuffer/models.rbs +69 -0
  205. data/sig/turbopuffer/namespace.rbs +5 -0
  206. data/sig/turbopuffer/request_options.rbs +36 -0
  207. data/sig/turbopuffer/resources/namespaces.rbs +99 -0
  208. data/sig/turbopuffer/version.rbs +3 -0
  209. metadata +224 -29
  210. data/.standard.yml +0 -3
  211. data/LICENSE.txt +0 -21
  212. data/Rakefile +0 -10
  213. data/sig/turbopuffer.rbs +0 -4
@@ -0,0 +1,304 @@
1
+ # typed: strong
2
+
3
+ module Turbopuffer
4
+ module Resources
5
+ class Namespaces
6
+ # Delete namespace.
7
+ sig do
8
+ params(
9
+ namespace: T.nilable(String),
10
+ request_options: Turbopuffer::RequestOptions::OrHash
11
+ ).returns(Turbopuffer::Models::NamespaceDeleteAllResponse)
12
+ end
13
+ def delete_all(
14
+ # The name of the namespace.
15
+ namespace: nil,
16
+ request_options: {}
17
+ )
18
+ end
19
+
20
+ # Explain a query plan.
21
+ sig do
22
+ params(
23
+ namespace: String,
24
+ aggregate_by: T::Hash[Symbol, T.anything],
25
+ consistency:
26
+ Turbopuffer::NamespaceExplainQueryParams::Consistency::OrHash,
27
+ distance_metric: Turbopuffer::DistanceMetric::OrSymbol,
28
+ exclude_attributes: T::Array[String],
29
+ filters: T.anything,
30
+ group_by: T::Array[String],
31
+ include_attributes: Turbopuffer::IncludeAttributes::Variants,
32
+ rank_by: T.anything,
33
+ top_k: Integer,
34
+ vector_encoding: Turbopuffer::VectorEncoding::OrSymbol,
35
+ request_options: Turbopuffer::RequestOptions::OrHash
36
+ ).returns(Turbopuffer::Models::NamespaceExplainQueryResponse)
37
+ end
38
+ def explain_query(
39
+ # Path param: The name of the namespace.
40
+ namespace: nil,
41
+ # Body param: Aggregations to compute over all documents in the namespace that
42
+ # match the filters.
43
+ aggregate_by: nil,
44
+ # Body param: The consistency level for a query.
45
+ consistency: nil,
46
+ # Body param: A function used to calculate vector similarity.
47
+ distance_metric: nil,
48
+ # Body param: List of attribute names to exclude from the response. All other
49
+ # attributes will be included in the response.
50
+ exclude_attributes: nil,
51
+ # Body param: Exact filters for attributes to refine search results for. Think of
52
+ # it as a SQL WHERE clause.
53
+ filters: nil,
54
+ # Body param: Groups documents by the specified attributes (the "group key")
55
+ # before computing aggregates. Aggregates are computed separately for each group.
56
+ group_by: nil,
57
+ # Body param: Whether to include attributes in the response.
58
+ include_attributes: nil,
59
+ # Body param: How to rank the documents in the namespace.
60
+ rank_by: nil,
61
+ # Body param: The number of results to return.
62
+ top_k: nil,
63
+ # Body param: The encoding to use for vectors in the response.
64
+ vector_encoding: nil,
65
+ request_options: {}
66
+ )
67
+ end
68
+
69
+ # Warm the cache for a namespace.
70
+ sig do
71
+ params(
72
+ namespace: T.nilable(String),
73
+ request_options: Turbopuffer::RequestOptions::OrHash
74
+ ).returns(Turbopuffer::Models::NamespaceHintCacheWarmResponse)
75
+ end
76
+ def hint_cache_warm(
77
+ # The name of the namespace.
78
+ namespace: nil,
79
+ request_options: {}
80
+ )
81
+ end
82
+
83
+ # Get metadata about a namespace.
84
+ sig do
85
+ params(
86
+ namespace: String,
87
+ request_options: Turbopuffer::RequestOptions::OrHash
88
+ ).returns(Turbopuffer::NamespaceMetadata)
89
+ end
90
+ def metadata(
91
+ # The name of the namespace.
92
+ namespace: nil,
93
+ request_options: {}
94
+ )
95
+ end
96
+
97
+ # Issue multiple concurrent queries filter or search documents.
98
+ sig do
99
+ params(
100
+ queries: T::Array[Turbopuffer::Query::OrHash],
101
+ namespace: String,
102
+ consistency:
103
+ Turbopuffer::NamespaceMultiQueryParams::Consistency::OrHash,
104
+ vector_encoding: Turbopuffer::VectorEncoding::OrSymbol,
105
+ request_options: Turbopuffer::RequestOptions::OrHash
106
+ ).returns(Turbopuffer::Models::NamespaceMultiQueryResponse)
107
+ end
108
+ def multi_query(
109
+ # Body param:
110
+ queries:,
111
+ # Path param: The name of the namespace.
112
+ namespace: nil,
113
+ # Body param: The consistency level for a query.
114
+ consistency: nil,
115
+ # Body param: The encoding to use for vectors in the response.
116
+ vector_encoding: nil,
117
+ request_options: {}
118
+ )
119
+ end
120
+
121
+ # Query, filter, full-text search and vector search documents.
122
+ sig do
123
+ params(
124
+ namespace: T.nilable(String),
125
+ aggregate_by: T::Hash[Symbol, T.anything],
126
+ consistency: Turbopuffer::NamespaceQueryParams::Consistency::OrHash,
127
+ distance_metric: Turbopuffer::DistanceMetric::OrSymbol,
128
+ exclude_attributes: T::Array[String],
129
+ filters: T.anything,
130
+ group_by: T::Array[String],
131
+ include_attributes: Turbopuffer::IncludeAttributes::Variants,
132
+ rank_by: T.anything,
133
+ top_k: Integer,
134
+ vector_encoding: Turbopuffer::VectorEncoding::OrSymbol,
135
+ request_options: Turbopuffer::RequestOptions::OrHash
136
+ ).returns(Turbopuffer::Models::NamespaceQueryResponse)
137
+ end
138
+ def query(
139
+ # Path param: The name of the namespace.
140
+ namespace: nil,
141
+ # Body param: Aggregations to compute over all documents in the namespace that
142
+ # match the filters.
143
+ aggregate_by: nil,
144
+ # Body param: The consistency level for a query.
145
+ consistency: nil,
146
+ # Body param: A function used to calculate vector similarity.
147
+ distance_metric: nil,
148
+ # Body param: List of attribute names to exclude from the response. All other
149
+ # attributes will be included in the response.
150
+ exclude_attributes: nil,
151
+ # Body param: Exact filters for attributes to refine search results for. Think of
152
+ # it as a SQL WHERE clause.
153
+ filters: nil,
154
+ # Body param: Groups documents by the specified attributes (the "group key")
155
+ # before computing aggregates. Aggregates are computed separately for each group.
156
+ group_by: nil,
157
+ # Body param: Whether to include attributes in the response.
158
+ include_attributes: nil,
159
+ # Body param: How to rank the documents in the namespace.
160
+ rank_by: nil,
161
+ # Body param: The number of results to return.
162
+ top_k: nil,
163
+ # Body param: The encoding to use for vectors in the response.
164
+ vector_encoding: nil,
165
+ request_options: {}
166
+ )
167
+ end
168
+
169
+ # Evaluate recall.
170
+ sig do
171
+ params(
172
+ namespace: T.nilable(String),
173
+ filters: T.anything,
174
+ include_ground_truth: T::Boolean,
175
+ num: Integer,
176
+ queries: T::Array[Float],
177
+ top_k: Integer,
178
+ request_options: Turbopuffer::RequestOptions::OrHash
179
+ ).returns(Turbopuffer::Models::NamespaceRecallResponse)
180
+ end
181
+ def recall(
182
+ # Path param: The name of the namespace.
183
+ namespace: nil,
184
+ # Body param: Filter by attributes. Same syntax as the query endpoint.
185
+ filters: nil,
186
+ # Body param: Include ground truth data (query vectors and true nearest neighbors)
187
+ # in the response.
188
+ include_ground_truth: nil,
189
+ # Body param: The number of searches to run.
190
+ num: nil,
191
+ # Body param: Use specific query vectors for the measurement. If omitted, sampled
192
+ # from the index.
193
+ queries: nil,
194
+ # Body param: Search for `top_k` nearest neighbors.
195
+ top_k: nil,
196
+ request_options: {}
197
+ )
198
+ end
199
+
200
+ # Get namespace schema.
201
+ sig do
202
+ params(
203
+ namespace: T.nilable(String),
204
+ request_options: Turbopuffer::RequestOptions::OrHash
205
+ ).returns(T::Hash[Symbol, Turbopuffer::AttributeSchemaConfig])
206
+ end
207
+ def schema(
208
+ # The name of the namespace.
209
+ namespace: nil,
210
+ request_options: {}
211
+ )
212
+ end
213
+
214
+ # Update namespace schema.
215
+ sig do
216
+ params(
217
+ namespace: T.nilable(String),
218
+ schema:
219
+ T::Hash[
220
+ Symbol,
221
+ T.any(String, Turbopuffer::AttributeSchemaConfig::OrHash)
222
+ ],
223
+ request_options: Turbopuffer::RequestOptions::OrHash
224
+ ).returns(T::Hash[Symbol, Turbopuffer::AttributeSchemaConfig])
225
+ end
226
+ def update_schema(
227
+ # Path param: The name of the namespace.
228
+ namespace: nil,
229
+ # Body param: The desired schema for the namespace.
230
+ schema: nil,
231
+ request_options: {}
232
+ )
233
+ end
234
+
235
+ # Create, update, or delete documents.
236
+ sig do
237
+ params(
238
+ namespace: T.nilable(String),
239
+ copy_from_namespace: String,
240
+ delete_by_filter: T.anything,
241
+ delete_condition: T.anything,
242
+ deletes: T::Array[Turbopuffer::ID::Variants],
243
+ distance_metric: Turbopuffer::DistanceMetric::OrSymbol,
244
+ encryption: Turbopuffer::NamespaceWriteParams::Encryption::OrHash,
245
+ patch_columns: Turbopuffer::Columns::OrHash,
246
+ patch_condition: T.anything,
247
+ patch_rows: T::Array[Turbopuffer::Row::OrHash],
248
+ schema:
249
+ T::Hash[
250
+ Symbol,
251
+ T.any(String, Turbopuffer::AttributeSchemaConfig::OrHash)
252
+ ],
253
+ upsert_columns: Turbopuffer::Columns::OrHash,
254
+ upsert_condition: T.anything,
255
+ upsert_rows: T::Array[Turbopuffer::Row::OrHash],
256
+ request_options: Turbopuffer::RequestOptions::OrHash
257
+ ).returns(Turbopuffer::Models::NamespaceWriteResponse)
258
+ end
259
+ def write(
260
+ # Path param: The name of the namespace.
261
+ namespace: nil,
262
+ # Body param: The namespace to copy documents from.
263
+ copy_from_namespace: nil,
264
+ # Body param: The filter specifying which documents to delete.
265
+ delete_by_filter: nil,
266
+ # Body param: A condition evaluated against the current value of each document
267
+ # targeted by a delete write. Only documents that pass the condition are deleted.
268
+ delete_condition: nil,
269
+ # Body param:
270
+ deletes: nil,
271
+ # Body param: A function used to calculate vector similarity.
272
+ distance_metric: nil,
273
+ # Body param: The encryption configuration for a namespace.
274
+ encryption: nil,
275
+ # Body param: A list of documents in columnar format. Each key is a column name,
276
+ # mapped to an array of values for that column.
277
+ patch_columns: nil,
278
+ # Body param: A condition evaluated against the current value of each document
279
+ # targeted by a patch write. Only documents that pass the condition are patched.
280
+ patch_condition: nil,
281
+ # Body param:
282
+ patch_rows: nil,
283
+ # Body param: The schema of the attributes attached to the documents.
284
+ schema: nil,
285
+ # Body param: A list of documents in columnar format. Each key is a column name,
286
+ # mapped to an array of values for that column.
287
+ upsert_columns: nil,
288
+ # Body param: A condition evaluated against the current value of each document
289
+ # targeted by an upsert write. Only documents that pass the condition are
290
+ # upserted.
291
+ upsert_condition: nil,
292
+ # Body param:
293
+ upsert_rows: nil,
294
+ request_options: {}
295
+ )
296
+ end
297
+
298
+ # @api private
299
+ sig { params(client: Turbopuffer::Client).returns(T.attached_class) }
300
+ def self.new(client:)
301
+ end
302
+ end
303
+ end
304
+ end
@@ -0,0 +1,5 @@
1
+ # typed: strong
2
+
3
+ module Turbopuffer
4
+ VERSION = T.let(T.unsafe(nil), String)
5
+ end
@@ -0,0 +1,41 @@
1
+ module Turbopuffer
2
+ class Client < Turbopuffer::Internal::Transport::BaseClient
3
+ DEFAULT_MAX_RETRIES: 4
4
+
5
+ DEFAULT_TIMEOUT_IN_SECONDS: Float
6
+
7
+ DEFAULT_INITIAL_RETRY_DELAY: Float
8
+
9
+ DEFAULT_MAX_RETRY_DELAY: Float
10
+
11
+ attr_reader api_key: String
12
+
13
+ attr_reader region: String?
14
+
15
+ attr_reader default_namespace: String?
16
+
17
+ def namespace: (
18
+ ?namespace: String
19
+ ) -> Turbopuffer::Namespace
20
+
21
+ def namespaces: (
22
+ ?cursor: String,
23
+ ?page_size: Integer,
24
+ ?prefix: String,
25
+ ?request_options: Turbopuffer::request_opts
26
+ ) -> Turbopuffer::Internal::NamespacePage[Turbopuffer::NamespaceSummary]
27
+
28
+ private def auth_headers: -> ::Hash[String, String]
29
+
30
+ def initialize: (
31
+ ?api_key: String?,
32
+ ?region: String?,
33
+ ?default_namespace: String?,
34
+ ?base_url: String?,
35
+ ?max_retries: Integer,
36
+ ?timeout: Float,
37
+ ?initial_retry_delay: Float,
38
+ ?max_retry_delay: Float
39
+ ) -> void
40
+ end
41
+ end
@@ -0,0 +1,117 @@
1
+ module Turbopuffer
2
+ module Errors
3
+ class Error < StandardError
4
+ attr_accessor cause: StandardError?
5
+ end
6
+
7
+ class ConversionError < Turbopuffer::Errors::Error
8
+ def cause: -> StandardError?
9
+
10
+ def initialize: (
11
+ on: Class,
12
+ method: Symbol,
13
+ target: top,
14
+ value: top,
15
+ ?cause: StandardError?
16
+ ) -> void
17
+ end
18
+
19
+ class APIError < Turbopuffer::Errors::Error
20
+ attr_accessor url: URI::Generic
21
+
22
+ attr_accessor status: Integer?
23
+
24
+ attr_accessor headers: ::Hash[String, String]?
25
+
26
+ attr_accessor body: top?
27
+
28
+ def initialize: (
29
+ url: URI::Generic,
30
+ ?status: Integer?,
31
+ ?headers: ::Hash[String, String]?,
32
+ ?body: Object?,
33
+ ?request: nil,
34
+ ?response: nil,
35
+ ?message: String?
36
+ ) -> void
37
+ end
38
+
39
+ class APIConnectionError < Turbopuffer::Errors::APIError
40
+ def initialize: (
41
+ url: URI::Generic,
42
+ ?status: nil,
43
+ ?headers: ::Hash[String, String]?,
44
+ ?body: nil,
45
+ ?request: nil,
46
+ ?response: nil,
47
+ ?message: String?
48
+ ) -> void
49
+ end
50
+
51
+ class APITimeoutError < Turbopuffer::Errors::APIConnectionError
52
+ def initialize: (
53
+ url: URI::Generic,
54
+ ?status: nil,
55
+ ?headers: ::Hash[String, String]?,
56
+ ?body: nil,
57
+ ?request: nil,
58
+ ?response: nil,
59
+ ?message: String?
60
+ ) -> void
61
+ end
62
+
63
+ class APIStatusError < Turbopuffer::Errors::APIError
64
+ def self.for: (
65
+ url: URI::Generic,
66
+ status: Integer,
67
+ headers: ::Hash[String, String]?,
68
+ body: Object?,
69
+ request: nil,
70
+ response: nil,
71
+ ?message: String?
72
+ ) -> instance
73
+
74
+ def initialize: (
75
+ url: URI::Generic,
76
+ status: Integer,
77
+ headers: ::Hash[String, String]?,
78
+ body: Object?,
79
+ request: nil,
80
+ response: nil,
81
+ ?message: String?
82
+ ) -> void
83
+ end
84
+
85
+ class BadRequestError < Turbopuffer::Errors::APIStatusError
86
+ HTTP_STATUS: 400
87
+ end
88
+
89
+ class AuthenticationError < Turbopuffer::Errors::APIStatusError
90
+ HTTP_STATUS: 401
91
+ end
92
+
93
+ class PermissionDeniedError < Turbopuffer::Errors::APIStatusError
94
+ HTTP_STATUS: 403
95
+ end
96
+
97
+ class NotFoundError < Turbopuffer::Errors::APIStatusError
98
+ HTTP_STATUS: 404
99
+ end
100
+
101
+ class ConflictError < Turbopuffer::Errors::APIStatusError
102
+ HTTP_STATUS: 409
103
+ end
104
+
105
+ class UnprocessableEntityError < Turbopuffer::Errors::APIStatusError
106
+ HTTP_STATUS: 422
107
+ end
108
+
109
+ class RateLimitError < Turbopuffer::Errors::APIStatusError
110
+ HTTP_STATUS: 429
111
+ end
112
+
113
+ class InternalServerError < Turbopuffer::Errors::APIStatusError
114
+ HTTP_STATUS: Range[Integer]
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,21 @@
1
+ module Turbopuffer
2
+ class FilePart
3
+ attr_reader content: Pathname | StringIO | IO | String
4
+
5
+ attr_reader content_type: String?
6
+
7
+ attr_reader filename: String?
8
+
9
+ private def read: -> String
10
+
11
+ def to_json: (*top a) -> String
12
+
13
+ def to_yaml: (*top a) -> String
14
+
15
+ def initialize: (
16
+ Pathname | StringIO | IO | String content,
17
+ ?filename: String?,
18
+ ?content_type: String?
19
+ ) -> void
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ module Turbopuffer
2
+ module Internal
3
+ class NamespacePage[Elem]
4
+ include Turbopuffer::Internal::Type::BasePage[Elem]
5
+
6
+ attr_accessor namespaces: ::Array[Elem]?
7
+
8
+ attr_accessor next_cursor: String
9
+
10
+ def inspect: -> String
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,131 @@
1
+ module Turbopuffer
2
+ module Internal
3
+ module Transport
4
+ class BaseClient
5
+ extend Turbopuffer::Internal::Util::SorbetRuntimeSupport
6
+
7
+ type request_components =
8
+ {
9
+ method: Symbol,
10
+ path: String | ::Array[String],
11
+ query: ::Hash[String, (::Array[String] | String)?]?,
12
+ headers: ::Hash[String, (String
13
+ | Integer
14
+ | ::Array[(String | Integer)?])?]?,
15
+ body: top?,
16
+ unwrap: (Symbol
17
+ | Integer
18
+ | ::Array[(Symbol | Integer)]
19
+ | (^(top arg0) -> top))?,
20
+ page: Class?,
21
+ stream: Class?,
22
+ model: Turbopuffer::Internal::Type::Converter::input?,
23
+ options: Turbopuffer::request_opts?
24
+ }
25
+ type request_input =
26
+ {
27
+ method: Symbol,
28
+ url: URI::Generic,
29
+ headers: ::Hash[String, String],
30
+ body: top,
31
+ max_retries: Integer,
32
+ timeout: Float
33
+ }
34
+
35
+ MAX_REDIRECTS: 20
36
+
37
+ PLATFORM_HEADERS: ::Hash[String, String]
38
+
39
+ def self.validate!: (
40
+ Turbopuffer::Internal::Transport::BaseClient::request_components req
41
+ ) -> void
42
+
43
+ def self.should_retry?: (
44
+ Integer status,
45
+ headers: ::Hash[String, String]
46
+ ) -> bool
47
+
48
+ def self.follow_redirect: (
49
+ Turbopuffer::Internal::Transport::BaseClient::request_input request,
50
+ status: Integer,
51
+ response_headers: ::Hash[String, String]
52
+ ) -> Turbopuffer::Internal::Transport::BaseClient::request_input
53
+
54
+ def self.reap_connection!: (
55
+ Integer | Turbopuffer::Errors::APIConnectionError status,
56
+ stream: Enumerable[String]?
57
+ ) -> void
58
+
59
+ attr_reader base_url: URI::Generic
60
+
61
+ attr_reader timeout: Float
62
+
63
+ attr_reader max_retries: Integer
64
+
65
+ attr_reader initial_retry_delay: Float
66
+
67
+ attr_reader max_retry_delay: Float
68
+
69
+ attr_reader headers: ::Hash[String, String]
70
+
71
+ attr_reader idempotency_header: String?
72
+
73
+ # @api private
74
+ attr_reader requester: Turbopuffer::Internal::Transport::PooledNetRequester
75
+
76
+ def initialize: (
77
+ base_url: String,
78
+ ?timeout: Float,
79
+ ?max_retries: Integer,
80
+ ?initial_retry_delay: Float,
81
+ ?max_retry_delay: Float,
82
+ ?headers: ::Hash[String, (String
83
+ | Integer
84
+ | ::Array[(String | Integer)?])?],
85
+ ?idempotency_header: String?
86
+ ) -> void
87
+
88
+ private def auth_headers: -> ::Hash[String, String]
89
+
90
+ private def generate_idempotency_key: -> String
91
+
92
+ private def build_request: (
93
+ Turbopuffer::Internal::Transport::BaseClient::request_components req,
94
+ Turbopuffer::request_options opts
95
+ ) -> Turbopuffer::Internal::Transport::BaseClient::request_input
96
+
97
+ private def retry_delay: (
98
+ ::Hash[String, String] headers,
99
+ retry_count: Integer
100
+ ) -> Float
101
+
102
+ def send_request: (
103
+ Turbopuffer::Internal::Transport::BaseClient::request_input request,
104
+ redirect_count: Integer,
105
+ retry_count: Integer,
106
+ send_retry_header: bool
107
+ ) -> [Integer, top, Enumerable[String]]
108
+
109
+ def request: (
110
+ Symbol method,
111
+ String | ::Array[String] path,
112
+ ?query: ::Hash[String, (::Array[String] | String)?]?,
113
+ ?headers: ::Hash[String, (String
114
+ | Integer
115
+ | ::Array[(String | Integer)?])?]?,
116
+ ?body: top?,
117
+ ?unwrap: (Symbol
118
+ | Integer
119
+ | ::Array[(Symbol | Integer)]
120
+ | (^(top arg0) -> top))?,
121
+ ?page: Class?,
122
+ ?stream: Class?,
123
+ ?model: Turbopuffer::Internal::Type::Converter::input?,
124
+ ?options: Turbopuffer::request_opts?
125
+ ) -> top
126
+
127
+ def inspect: -> String
128
+ end
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,45 @@
1
+ module Turbopuffer
2
+ module Internal
3
+ module Transport
4
+ class PooledNetRequester
5
+ extend Turbopuffer::Internal::Util::SorbetRuntimeSupport
6
+
7
+ type request =
8
+ {
9
+ method: Symbol,
10
+ url: URI::Generic,
11
+ headers: ::Hash[String, String],
12
+ body: top,
13
+ deadline: Float
14
+ }
15
+
16
+ KEEP_ALIVE_TIMEOUT: 30
17
+
18
+ DEFAULT_MAX_CONNECTIONS: Integer
19
+
20
+ def self.connect: (URI::Generic url) -> top
21
+
22
+ def self.calibrate_socket_timeout: (top conn, Float deadline) -> void
23
+
24
+ def self.build_request: (
25
+ Turbopuffer::Internal::Transport::PooledNetRequester::request request
26
+ ) {
27
+ (String arg0) -> void
28
+ } -> [top, (^-> void)]
29
+
30
+ private def with_pool: (
31
+ URI::Generic url,
32
+ deadline: Float
33
+ ) {
34
+ (top arg0) -> void
35
+ } -> void
36
+
37
+ def execute: (
38
+ Turbopuffer::Internal::Transport::PooledNetRequester::request request
39
+ ) -> [Integer, top, Enumerable[String]]
40
+
41
+ def initialize: (?size: Integer) -> void
42
+ end
43
+ end
44
+ end
45
+ end