turbopuffer 0.1.0 → 1.2.0

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