turbopuffer 2.5.0 → 2.7.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 (32) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -0
  3. data/README.md +1 -1
  4. data/lib/turbopuffer/models/attribute_schema.rb +4 -1
  5. data/lib/turbopuffer/models/attribute_schema_drop.rb +19 -0
  6. data/lib/turbopuffer/models/namespace_metadata.rb +9 -1
  7. data/lib/turbopuffer/models/namespace_update_schema_params.rb +2 -2
  8. data/lib/turbopuffer/models/namespace_write_params.rb +15 -3
  9. data/lib/turbopuffer/models/query_performance.rb +18 -1
  10. data/lib/turbopuffer/models/write_performance.rb +21 -1
  11. data/lib/turbopuffer/models.rb +2 -0
  12. data/lib/turbopuffer/resources/namespaces.rb +5 -3
  13. data/lib/turbopuffer/version.rb +1 -1
  14. data/lib/turbopuffer.rb +1 -0
  15. data/rbi/turbopuffer/models/attribute_schema.rbi +7 -1
  16. data/rbi/turbopuffer/models/attribute_schema_drop.rbi +32 -0
  17. data/rbi/turbopuffer/models/namespace_metadata.rbi +20 -4
  18. data/rbi/turbopuffer/models/namespace_update_schema_params.rbi +23 -4
  19. data/rbi/turbopuffer/models/namespace_write_params.rbi +42 -4
  20. data/rbi/turbopuffer/models/query_performance.rbi +27 -3
  21. data/rbi/turbopuffer/models/write_performance.rbi +37 -3
  22. data/rbi/turbopuffer/models.rbi +2 -0
  23. data/rbi/turbopuffer/resources/namespaces.rbi +17 -2
  24. data/sig/turbopuffer/models/attribute_schema.rbs +4 -1
  25. data/sig/turbopuffer/models/attribute_schema_drop.rbs +13 -0
  26. data/sig/turbopuffer/models/namespace_metadata.rbs +18 -3
  27. data/sig/turbopuffer/models/namespace_write_params.rbs +7 -0
  28. data/sig/turbopuffer/models/query_performance.rbs +17 -3
  29. data/sig/turbopuffer/models/write_performance.rbs +24 -3
  30. data/sig/turbopuffer/models.rbs +2 -0
  31. data/sig/turbopuffer/resources/namespaces.rbs +1 -0
  32. metadata +5 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c7a74005340bd71314cefec78857e87f61242c5e99ca0619718932862dfb9b3e
4
- data.tar.gz: 90568747fb99e6f0c3e07e135600cd49e48e806023059f27f0f270bb3f20ca20
3
+ metadata.gz: ef31174cdc912d308aff4e1392291db0bc29aaa5accdfe5f715a51bccb46e6f7
4
+ data.tar.gz: b73f653240c84d4ecd85be785bf236c77e236c1c95547754339b3e94e98feb7d
5
5
  SHA512:
6
- metadata.gz: e01efec060630c4a1b3840c93dc93148fd8724ffe326b7b697679a6d2a51eeecea9692ece6be917b3d42d7ed85ed1a958db57134f215b4290ab63f0c33521232
7
- data.tar.gz: 9ce535511cfc814424db7cf0c6567b35724ddb1c75550224866a805040220b2daf28c9b0dfa686153f2a6e8a41c056066c29d0952a805594e7bda8cfe356351b
6
+ metadata.gz: 1c2a3e24797234d50a2d0606b449a589ceec5c9b29debb461f7e1e0559170d8c7c3237bf1d70df606affcdbf96142b8905ca42f17a01cbe11a660535d22d10de
7
+ data.tar.gz: 6e33f83ad2b352168124205f2ac50d93101ae784eb379cc77ae20182eaf9cc3cfe9ac19a02c104c640e1225903f410369ebc1d1e9f828008b2907b6dc4e19d5f
data/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.7.0](https://github.com/turbopuffer/turbopuffer-ruby/compare/v2.6.0...v2.7.0) (2026-10-08)
4
+
5
+
6
+ ### Features
7
+
8
+ * embedding: openapi embedding stats ([8e507b4](https://github.com/turbopuffer/turbopuffer-ruby/commit/8e507b4be4c36b6a451e4ae1caee59d477fcc494))
9
+ * metadata: expose unindexed_rows in index status ([d9fe3b0](https://github.com/turbopuffer/turbopuffer-ruby/commit/d9fe3b065aff2fb578c7f950cce4c2664037b0a5))
10
+
11
+
12
+ ### Chores
13
+
14
+ * regenerate SDK ([b6678e9](https://github.com/turbopuffer/turbopuffer-ruby/commit/b6678e9fd9a33f4545541da85e7578d377154801))
15
+
16
+ ## [2.6.0](https://github.com/turbopuffer/turbopuffer-ruby/compare/v2.5.0...v2.6.0) (2026-10-07)
17
+
18
+
19
+ ### Features
20
+
21
+ * add create_namespace to openapi.yml ([39cb498](https://github.com/turbopuffer/turbopuffer-ruby/commit/39cb4987eb4b8783caf2484554588e954be76244))
22
+ * stainless to stlc migration ([6e6718f](https://github.com/turbopuffer/turbopuffer-ruby/commit/6e6718fd42b5c2608ea0164f5cf32ea6609104ad))
23
+ * stlc: qol fixes ([95ae3c3](https://github.com/turbopuffer/turbopuffer-ruby/commit/95ae3c31b03afe8384da1f384a6eb0cdcda952f3))
24
+
3
25
  ## 2.5.0 (2026-09-18)
4
26
 
5
27
  Full Changelog: [v2.4.0...v2.5.0](https://github.com/turbopuffer/turbopuffer-ruby/compare/v2.4.0...v2.5.0)
data/README.md CHANGED
@@ -17,7 +17,7 @@ To use this gem, install via Bundler by adding the following to your application
17
17
  <!-- x-release-please-start-version -->
18
18
 
19
19
  ```ruby
20
- gem "turbopuffer", "~> 2.5.0"
20
+ gem "turbopuffer", "~> 2.7.0"
21
21
  ```
22
22
 
23
23
  <!-- x-release-please-end -->
@@ -12,8 +12,11 @@ module Turbopuffer
12
12
  # Detailed configuration for an attribute attached to a document.
13
13
  variant -> { Turbopuffer::AttributeSchemaConfig }
14
14
 
15
+ # Drops the attribute from the namespace. Cannot be combined with other schema settings.
16
+ variant -> { Turbopuffer::AttributeSchemaDrop }
17
+
15
18
  # @!method self.variants
16
- # @return [Array(String, Turbopuffer::Models::AttributeSchemaConfig)]
19
+ # @return [Array(String, Turbopuffer::Models::AttributeSchemaConfig, Turbopuffer::Models::AttributeSchemaDrop)]
17
20
  end
18
21
  end
19
22
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Turbopuffer
4
+ module Models
5
+ class AttributeSchemaDrop < Turbopuffer::Internal::Type::BaseModel
6
+ # @!attribute drop
7
+ # Must be `true`.
8
+ #
9
+ # @return [Boolean]
10
+ required :drop, Turbopuffer::Internal::Type::Boolean
11
+
12
+ # @!method initialize(drop:)
13
+ # Drops the attribute from the namespace. Cannot be combined with other schema
14
+ # settings.
15
+ #
16
+ # @param drop [Boolean] Must be `true`.
17
+ end
18
+ end
19
+ end
@@ -124,12 +124,20 @@ module Turbopuffer
124
124
  # @return [Integer]
125
125
  required :unindexed_bytes, Integer
126
126
 
127
- # @!method initialize(unindexed_bytes:, status: :updating)
127
+ # @!attribute unindexed_rows
128
+ # The number of rows in the write-ahead log that have not yet been indexed.
129
+ #
130
+ # @return [Integer]
131
+ required :unindexed_rows, Integer
132
+
133
+ # @!method initialize(unindexed_bytes:, unindexed_rows:, status: :updating)
128
134
  # Some parameter documentations has been truncated, see
129
135
  # {Turbopuffer::Models::NamespaceMetadata::Index::IndexUpdating} for more details.
130
136
  #
131
137
  # @param unindexed_bytes [Integer] The number of bytes in the namespace that are in the write-ahead log but have no
132
138
  #
139
+ # @param unindexed_rows [Integer] The number of rows in the write-ahead log that have not yet been indexed.
140
+ #
133
141
  # @param status [Symbol, :updating]
134
142
  end
135
143
 
@@ -15,13 +15,13 @@ module Turbopuffer
15
15
  # @!attribute schema
16
16
  # The desired schema for the namespace.
17
17
  #
18
- # @return [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig}, nil]
18
+ # @return [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig, Turbopuffer::Models::AttributeSchemaDrop}, nil]
19
19
  optional :schema, -> { Turbopuffer::Internal::Type::HashOf[union: Turbopuffer::AttributeSchema] }
20
20
 
21
21
  # @!method initialize(namespace: nil, schema: nil, request_options: {})
22
22
  # @param namespace [String]
23
23
  #
24
- # @param schema [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig}] The desired schema for the namespace.
24
+ # @param schema [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig, Turbopuffer::Models::AttributeSchemaDrop}] The desired schema for the namespace.
25
25
  #
26
26
  # @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}]
27
27
  end
@@ -24,6 +24,16 @@ module Turbopuffer
24
24
  # @return [String, Turbopuffer::Models::CopyFromNamespaceParams::CopyFromNamespaceConfig, nil]
25
25
  optional :copy_from_namespace, union: -> { Turbopuffer::CopyFromNamespaceParams }
26
26
 
27
+ # @!attribute create_namespace
28
+ # If `true`, ensures the namespace is created, even if the request writes no
29
+ # documents. Creating an empty namespace requires the `id` type to be declared in
30
+ # `schema`. If `false`, a namespace is never created, and a 404 is returned if it
31
+ # does not exist. If omitted, a namespace is created by the first request that
32
+ # writes documents.
33
+ #
34
+ # @return [Boolean, nil]
35
+ optional :create_namespace, Turbopuffer::Internal::Type::Boolean
36
+
27
37
  # @!attribute delete_by_filter
28
38
  # The filter specifying which documents to delete.
29
39
  #
@@ -108,7 +118,7 @@ module Turbopuffer
108
118
  # @!attribute schema
109
119
  # The schema of the attributes attached to the documents.
110
120
  #
111
- # @return [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig}, nil]
121
+ # @return [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig, Turbopuffer::Models::AttributeSchemaDrop}, nil]
112
122
  optional :schema, -> { Turbopuffer::Internal::Type::HashOf[union: Turbopuffer::AttributeSchema] }
113
123
 
114
124
  # @!attribute sharding
@@ -139,7 +149,7 @@ module Turbopuffer
139
149
  # @return [Array<Turbopuffer::Models::Row>, nil]
140
150
  optional :upsert_rows, -> { Turbopuffer::Internal::Type::ArrayOf[Turbopuffer::Row] }
141
151
 
142
- # @!method initialize(namespace: nil, branch_from_namespace: nil, copy_from_namespace: nil, delete_by_filter: nil, delete_by_filter_allow_partial: nil, delete_condition: nil, deletes: nil, disable_backpressure: nil, distance_metric: nil, encryption: nil, patch_by_filter: nil, patch_by_filter_allow_partial: nil, patch_columns: nil, patch_condition: nil, patch_rows: nil, return_affected_ids: nil, schema: nil, sharding: nil, upsert_columns: nil, upsert_condition: nil, upsert_rows: nil, request_options: {})
152
+ # @!method initialize(namespace: nil, branch_from_namespace: nil, copy_from_namespace: nil, create_namespace: nil, delete_by_filter: nil, delete_by_filter_allow_partial: nil, delete_condition: nil, deletes: nil, disable_backpressure: nil, distance_metric: nil, encryption: nil, patch_by_filter: nil, patch_by_filter_allow_partial: nil, patch_columns: nil, patch_condition: nil, patch_rows: nil, return_affected_ids: nil, schema: nil, sharding: nil, upsert_columns: nil, upsert_condition: nil, upsert_rows: nil, request_options: {})
143
153
  # Some parameter documentations has been truncated, see
144
154
  # {Turbopuffer::Models::NamespaceWriteParams} for more details.
145
155
  #
@@ -149,6 +159,8 @@ module Turbopuffer
149
159
  #
150
160
  # @param copy_from_namespace [String, Turbopuffer::Models::CopyFromNamespaceParams::CopyFromNamespaceConfig] The namespace to copy documents from.
151
161
  #
162
+ # @param create_namespace [Boolean] If `true`, ensures the namespace is created, even if the request writes no docum
163
+ #
152
164
  # @param delete_by_filter [Object] The filter specifying which documents to delete.
153
165
  #
154
166
  # @param delete_by_filter_allow_partial [Boolean] Allow partial completion when filter matches too many documents.
@@ -175,7 +187,7 @@ module Turbopuffer
175
187
  #
176
188
  # @param return_affected_ids [Boolean] If true, return the IDs of affected rows (deleted, patched, upserted) in the res
177
189
  #
178
- # @param schema [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig}] The schema of the attributes attached to the documents.
190
+ # @param schema [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig, Turbopuffer::Models::AttributeSchemaDrop}] The schema of the attributes attached to the documents.
179
191
  #
180
192
  # @param sharding [Turbopuffer::Models::ShardingConfig] Configuration for namespace sharding, which partitions a namespace's documents a
181
193
  #
@@ -41,7 +41,20 @@ module Turbopuffer
41
41
  # @return [Integer]
42
42
  required :server_total_ms, Integer
43
43
 
44
- # @!method initialize(approx_namespace_size:, cache_hit_ratio:, cache_temperature:, exhaustive_search_count:, query_execution_ms:, server_total_ms:)
44
+ # @!attribute embedding_ms
45
+ # Time spent embedding text, in milliseconds. Only set when using a native
46
+ # embedding model.
47
+ #
48
+ # @return [Integer, nil]
49
+ optional :embedding_ms, Integer
50
+
51
+ # @!attribute embedding_tokens
52
+ # The number of tokens embedded. Only set when using a native embedding model.
53
+ #
54
+ # @return [Integer, nil]
55
+ optional :embedding_tokens, Integer
56
+
57
+ # @!method initialize(approx_namespace_size:, cache_hit_ratio:, cache_temperature:, exhaustive_search_count:, query_execution_ms:, server_total_ms:, embedding_ms: nil, embedding_tokens: nil)
45
58
  # Some parameter documentations has been truncated, see
46
59
  # {Turbopuffer::Models::QueryPerformance} for more details.
47
60
  #
@@ -58,6 +71,10 @@ module Turbopuffer
58
71
  # @param query_execution_ms [Integer] Request time measured on the server, excluding time spent waiting due to the nam
59
72
  #
60
73
  # @param server_total_ms [Integer] Request time measured on the server, including time spent waiting for other quer
74
+ #
75
+ # @param embedding_ms [Integer] Time spent embedding text, in milliseconds. Only set when using a native embeddi
76
+ #
77
+ # @param embedding_tokens [Integer] The number of tokens embedded. Only set when using a native embedding model.
61
78
  end
62
79
  end
63
80
  end
@@ -9,10 +9,30 @@ module Turbopuffer
9
9
  # @return [Integer]
10
10
  required :server_total_ms, Integer
11
11
 
12
- # @!method initialize(server_total_ms:)
12
+ # @!attribute embedding_ms
13
+ # Time spent embedding text, in milliseconds. Only set when using a native
14
+ # embedding model.
15
+ #
16
+ # @return [Integer, nil]
17
+ optional :embedding_ms, Integer
18
+
19
+ # @!attribute embedding_tokens
20
+ # The number of tokens embedded. Only set when using a native embedding model.
21
+ #
22
+ # @return [Integer, nil]
23
+ optional :embedding_tokens, Integer
24
+
25
+ # @!method initialize(server_total_ms:, embedding_ms: nil, embedding_tokens: nil)
26
+ # Some parameter documentations has been truncated, see
27
+ # {Turbopuffer::Models::WritePerformance} for more details.
28
+ #
13
29
  # The performance information for a write request.
14
30
  #
15
31
  # @param server_total_ms [Integer] Request time measured on the server, in milliseconds.
32
+ #
33
+ # @param embedding_ms [Integer] Time spent embedding text, in milliseconds. Only set when using a native embeddi
34
+ #
35
+ # @param embedding_tokens [Integer] The number of tokens embedded. Only set when using a native embedding model.
16
36
  end
17
37
  end
18
38
  end
@@ -50,6 +50,8 @@ module Turbopuffer
50
50
 
51
51
  AttributeSchemaConfig = Turbopuffer::Models::AttributeSchemaConfig
52
52
 
53
+ AttributeSchemaDrop = Turbopuffer::Models::AttributeSchemaDrop
54
+
53
55
  AttributeType = Turbopuffer::Models::AttributeType
54
56
 
55
57
  Bm25ClauseParams = Turbopuffer::Models::Bm25ClauseParams
@@ -463,7 +463,7 @@ module Turbopuffer
463
463
  #
464
464
  # @param namespace [String] Path param: The name of the namespace.
465
465
  #
466
- # @param schema [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig}] Body param: The desired schema for the namespace.
466
+ # @param schema [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig, Turbopuffer::Models::AttributeSchemaDrop}] Body param: The desired schema for the namespace.
467
467
  #
468
468
  # @param request_options [Turbopuffer::RequestOptions, Hash{Symbol=>Object}, nil]
469
469
  #
@@ -490,7 +490,7 @@ module Turbopuffer
490
490
  #
491
491
  # Create, update, or delete documents.
492
492
  #
493
- # @overload write(namespace: nil, branch_from_namespace: nil, copy_from_namespace: nil, delete_by_filter: nil, delete_by_filter_allow_partial: nil, delete_condition: nil, deletes: nil, disable_backpressure: nil, distance_metric: nil, encryption: nil, patch_by_filter: nil, patch_by_filter_allow_partial: nil, patch_columns: nil, patch_condition: nil, patch_rows: nil, return_affected_ids: nil, schema: nil, sharding: nil, upsert_columns: nil, upsert_condition: nil, upsert_rows: nil, request_options: {})
493
+ # @overload write(namespace: nil, branch_from_namespace: nil, copy_from_namespace: nil, create_namespace: nil, delete_by_filter: nil, delete_by_filter_allow_partial: nil, delete_condition: nil, deletes: nil, disable_backpressure: nil, distance_metric: nil, encryption: nil, patch_by_filter: nil, patch_by_filter_allow_partial: nil, patch_columns: nil, patch_condition: nil, patch_rows: nil, return_affected_ids: nil, schema: nil, sharding: nil, upsert_columns: nil, upsert_condition: nil, upsert_rows: nil, request_options: {})
494
494
  #
495
495
  # @param namespace [String] Path param: The name of the namespace.
496
496
  #
@@ -498,6 +498,8 @@ module Turbopuffer
498
498
  #
499
499
  # @param copy_from_namespace [String, Turbopuffer::Models::CopyFromNamespaceParams::CopyFromNamespaceConfig] Body param: The namespace to copy documents from.
500
500
  #
501
+ # @param create_namespace [Boolean] Body param: If `true`, ensures the namespace is created, even if the request wri
502
+ #
501
503
  # @param delete_by_filter [Object] Body param: The filter specifying which documents to delete.
502
504
  #
503
505
  # @param delete_by_filter_allow_partial [Boolean] Body param: Allow partial completion when filter matches too many documents.
@@ -524,7 +526,7 @@ module Turbopuffer
524
526
  #
525
527
  # @param return_affected_ids [Boolean] Body param: If true, return the IDs of affected rows (deleted, patched, upserted
526
528
  #
527
- # @param schema [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig}] Body param: The schema of the attributes attached to the documents.
529
+ # @param schema [Hash{Symbol=>String, Turbopuffer::Models::AttributeSchemaConfig, Turbopuffer::Models::AttributeSchemaDrop}] Body param: The schema of the attributes attached to the documents.
528
530
  #
529
531
  # @param sharding [Turbopuffer::Models::ShardingConfig] Body param: Configuration for namespace sharding, which partitions a namespace's
530
532
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Turbopuffer
4
- VERSION = "2.5.0"
4
+ VERSION = "2.7.0"
5
5
  end
data/lib/turbopuffer.rb CHANGED
@@ -61,6 +61,7 @@ require_relative "turbopuffer/models/attribute_embed"
61
61
  require_relative "turbopuffer/models/attribute_embed_config"
62
62
  require_relative "turbopuffer/models/attribute_schema"
63
63
  require_relative "turbopuffer/models/attribute_schema_config"
64
+ require_relative "turbopuffer/models/attribute_schema_drop"
64
65
  require_relative "turbopuffer/models/attribute_type"
65
66
  require_relative "turbopuffer/models/bm25_clause_params"
66
67
  require_relative "turbopuffer/models/branch_from_namespace_params"
@@ -7,7 +7,13 @@ module Turbopuffer
7
7
  extend Turbopuffer::Internal::Type::Union
8
8
 
9
9
  Variants =
10
- T.type_alias { T.any(String, Turbopuffer::AttributeSchemaConfig) }
10
+ T.type_alias do
11
+ T.any(
12
+ String,
13
+ Turbopuffer::AttributeSchemaConfig,
14
+ Turbopuffer::AttributeSchemaDrop
15
+ )
16
+ end
11
17
 
12
18
  sig { override.returns(T::Array[Turbopuffer::AttributeSchema::Variants]) }
13
19
  def self.variants
@@ -0,0 +1,32 @@
1
+ # typed: strong
2
+
3
+ module Turbopuffer
4
+ module Models
5
+ class AttributeSchemaDrop < Turbopuffer::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(
9
+ Turbopuffer::AttributeSchemaDrop,
10
+ Turbopuffer::Internal::AnyHash
11
+ )
12
+ end
13
+
14
+ # Must be `true`.
15
+ sig { returns(T::Boolean) }
16
+ attr_accessor :drop
17
+
18
+ # Drops the attribute from the namespace. Cannot be combined with other schema
19
+ # settings.
20
+ sig { params(drop: T::Boolean).returns(T.attached_class) }
21
+ def self.new(
22
+ # Must be `true`.
23
+ drop:
24
+ )
25
+ end
26
+
27
+ sig { override.returns({ drop: T::Boolean }) }
28
+ def to_hash
29
+ end
30
+ end
31
+ end
32
+ end
@@ -180,20 +180,36 @@ module Turbopuffer
180
180
  sig { returns(Integer) }
181
181
  attr_accessor :unindexed_bytes
182
182
 
183
+ # The number of rows in the write-ahead log that have not yet been indexed.
184
+ sig { returns(Integer) }
185
+ attr_accessor :unindexed_rows
186
+
183
187
  sig do
184
- params(unindexed_bytes: Integer, status: Symbol).returns(
185
- T.attached_class
186
- )
188
+ params(
189
+ unindexed_bytes: Integer,
190
+ unindexed_rows: Integer,
191
+ status: Symbol
192
+ ).returns(T.attached_class)
187
193
  end
188
194
  def self.new(
189
195
  # The number of bytes in the namespace that are in the write-ahead log but have
190
196
  # not yet been indexed.
191
197
  unindexed_bytes:,
198
+ # The number of rows in the write-ahead log that have not yet been indexed.
199
+ unindexed_rows:,
192
200
  status: :updating
193
201
  )
194
202
  end
195
203
 
196
- sig { override.returns({ status: Symbol, unindexed_bytes: Integer }) }
204
+ sig do
205
+ override.returns(
206
+ {
207
+ status: Symbol,
208
+ unindexed_bytes: Integer,
209
+ unindexed_rows: Integer
210
+ }
211
+ )
212
+ end
197
213
  def to_hash
198
214
  end
199
215
  end
@@ -24,7 +24,14 @@ module Turbopuffer
24
24
  sig do
25
25
  returns(
26
26
  T.nilable(
27
- T::Hash[Symbol, T.any(String, Turbopuffer::AttributeSchemaConfig)]
27
+ T::Hash[
28
+ Symbol,
29
+ T.any(
30
+ String,
31
+ Turbopuffer::AttributeSchemaConfig,
32
+ Turbopuffer::AttributeSchemaDrop
33
+ )
34
+ ]
28
35
  )
29
36
  )
30
37
  end
@@ -35,7 +42,11 @@ module Turbopuffer
35
42
  schema:
36
43
  T::Hash[
37
44
  Symbol,
38
- T.any(String, Turbopuffer::AttributeSchemaConfig::OrHash)
45
+ T.any(
46
+ String,
47
+ Turbopuffer::AttributeSchemaConfig::OrHash,
48
+ Turbopuffer::AttributeSchemaDrop::OrHash
49
+ )
39
50
  ]
40
51
  ).void
41
52
  end
@@ -47,7 +58,11 @@ module Turbopuffer
47
58
  schema:
48
59
  T::Hash[
49
60
  Symbol,
50
- T.any(String, Turbopuffer::AttributeSchemaConfig::OrHash)
61
+ T.any(
62
+ String,
63
+ Turbopuffer::AttributeSchemaConfig::OrHash,
64
+ Turbopuffer::AttributeSchemaDrop::OrHash
65
+ )
51
66
  ],
52
67
  request_options: Turbopuffer::RequestOptions::OrHash
53
68
  ).returns(T.attached_class)
@@ -67,7 +82,11 @@ module Turbopuffer
67
82
  schema:
68
83
  T::Hash[
69
84
  Symbol,
70
- T.any(String, Turbopuffer::AttributeSchemaConfig)
85
+ T.any(
86
+ String,
87
+ Turbopuffer::AttributeSchemaConfig,
88
+ Turbopuffer::AttributeSchemaDrop
89
+ )
71
90
  ],
72
91
  request_options: Turbopuffer::RequestOptions
73
92
  }
@@ -68,6 +68,17 @@ module Turbopuffer
68
68
  end
69
69
  attr_writer :copy_from_namespace
70
70
 
71
+ # If `true`, ensures the namespace is created, even if the request writes no
72
+ # documents. Creating an empty namespace requires the `id` type to be declared in
73
+ # `schema`. If `false`, a namespace is never created, and a 404 is returned if it
74
+ # does not exist. If omitted, a namespace is created by the first request that
75
+ # writes documents.
76
+ sig { returns(T.nilable(T::Boolean)) }
77
+ attr_reader :create_namespace
78
+
79
+ sig { params(create_namespace: T::Boolean).void }
80
+ attr_writer :create_namespace
81
+
71
82
  # The filter specifying which documents to delete.
72
83
  sig { returns(T.nilable(T.anything)) }
73
84
  attr_reader :delete_by_filter
@@ -192,7 +203,14 @@ module Turbopuffer
192
203
  sig do
193
204
  returns(
194
205
  T.nilable(
195
- T::Hash[Symbol, T.any(String, Turbopuffer::AttributeSchemaConfig)]
206
+ T::Hash[
207
+ Symbol,
208
+ T.any(
209
+ String,
210
+ Turbopuffer::AttributeSchemaConfig,
211
+ Turbopuffer::AttributeSchemaDrop
212
+ )
213
+ ]
196
214
  )
197
215
  )
198
216
  end
@@ -203,7 +221,11 @@ module Turbopuffer
203
221
  schema:
204
222
  T::Hash[
205
223
  Symbol,
206
- T.any(String, Turbopuffer::AttributeSchemaConfig::OrHash)
224
+ T.any(
225
+ String,
226
+ Turbopuffer::AttributeSchemaConfig::OrHash,
227
+ Turbopuffer::AttributeSchemaDrop::OrHash
228
+ )
207
229
  ]
208
230
  ).void
209
231
  end
@@ -254,6 +276,7 @@ module Turbopuffer
254
276
  String,
255
277
  Turbopuffer::CopyFromNamespaceParams::CopyFromNamespaceConfig::OrHash
256
278
  ),
279
+ create_namespace: T::Boolean,
257
280
  delete_by_filter: T.anything,
258
281
  delete_by_filter_allow_partial: T::Boolean,
259
282
  delete_condition: T.anything,
@@ -275,7 +298,11 @@ module Turbopuffer
275
298
  schema:
276
299
  T::Hash[
277
300
  Symbol,
278
- T.any(String, Turbopuffer::AttributeSchemaConfig::OrHash)
301
+ T.any(
302
+ String,
303
+ Turbopuffer::AttributeSchemaConfig::OrHash,
304
+ Turbopuffer::AttributeSchemaDrop::OrHash
305
+ )
279
306
  ],
280
307
  sharding: Turbopuffer::ShardingConfig::OrHash,
281
308
  upsert_columns: Turbopuffer::Columns::OrHash,
@@ -290,6 +317,12 @@ module Turbopuffer
290
317
  branch_from_namespace: nil,
291
318
  # The namespace to copy documents from.
292
319
  copy_from_namespace: nil,
320
+ # If `true`, ensures the namespace is created, even if the request writes no
321
+ # documents. Creating an empty namespace requires the `id` type to be declared in
322
+ # `schema`. If `false`, a namespace is never created, and a 404 is returned if it
323
+ # does not exist. If omitted, a namespace is created by the first request that
324
+ # writes documents.
325
+ create_namespace: nil,
293
326
  # The filter specifying which documents to delete.
294
327
  delete_by_filter: nil,
295
328
  # Allow partial completion when filter matches too many documents.
@@ -351,6 +384,7 @@ module Turbopuffer
351
384
  String,
352
385
  Turbopuffer::CopyFromNamespaceParams::CopyFromNamespaceConfig
353
386
  ),
387
+ create_namespace: T::Boolean,
354
388
  delete_by_filter: T.anything,
355
389
  delete_by_filter_allow_partial: T::Boolean,
356
390
  delete_condition: T.anything,
@@ -371,7 +405,11 @@ module Turbopuffer
371
405
  schema:
372
406
  T::Hash[
373
407
  Symbol,
374
- T.any(String, Turbopuffer::AttributeSchemaConfig)
408
+ T.any(
409
+ String,
410
+ Turbopuffer::AttributeSchemaConfig,
411
+ Turbopuffer::AttributeSchemaDrop
412
+ )
375
413
  ],
376
414
  sharding: Turbopuffer::ShardingConfig,
377
415
  upsert_columns: Turbopuffer::Columns,
@@ -34,6 +34,21 @@ module Turbopuffer
34
34
  sig { returns(Integer) }
35
35
  attr_accessor :server_total_ms
36
36
 
37
+ # Time spent embedding text, in milliseconds. Only set when using a native
38
+ # embedding model.
39
+ sig { returns(T.nilable(Integer)) }
40
+ attr_reader :embedding_ms
41
+
42
+ sig { params(embedding_ms: Integer).void }
43
+ attr_writer :embedding_ms
44
+
45
+ # The number of tokens embedded. Only set when using a native embedding model.
46
+ sig { returns(T.nilable(Integer)) }
47
+ attr_reader :embedding_tokens
48
+
49
+ sig { params(embedding_tokens: Integer).void }
50
+ attr_writer :embedding_tokens
51
+
37
52
  # The performance information for a query.
38
53
  sig do
39
54
  params(
@@ -42,7 +57,9 @@ module Turbopuffer
42
57
  cache_temperature: String,
43
58
  exhaustive_search_count: Integer,
44
59
  query_execution_ms: Integer,
45
- server_total_ms: Integer
60
+ server_total_ms: Integer,
61
+ embedding_ms: Integer,
62
+ embedding_tokens: Integer
46
63
  ).returns(T.attached_class)
47
64
  end
48
65
  def self.new(
@@ -59,7 +76,12 @@ module Turbopuffer
59
76
  query_execution_ms:,
60
77
  # Request time measured on the server, including time spent waiting for other
61
78
  # queries to complete if the namespace was at its concurrency limit.
62
- server_total_ms:
79
+ server_total_ms:,
80
+ # Time spent embedding text, in milliseconds. Only set when using a native
81
+ # embedding model.
82
+ embedding_ms: nil,
83
+ # The number of tokens embedded. Only set when using a native embedding model.
84
+ embedding_tokens: nil
63
85
  )
64
86
  end
65
87
 
@@ -71,7 +93,9 @@ module Turbopuffer
71
93
  cache_temperature: String,
72
94
  exhaustive_search_count: Integer,
73
95
  query_execution_ms: Integer,
74
- server_total_ms: Integer
96
+ server_total_ms: Integer,
97
+ embedding_ms: Integer,
98
+ embedding_tokens: Integer
75
99
  }
76
100
  )
77
101
  end
@@ -12,15 +12,49 @@ module Turbopuffer
12
12
  sig { returns(Integer) }
13
13
  attr_accessor :server_total_ms
14
14
 
15
+ # Time spent embedding text, in milliseconds. Only set when using a native
16
+ # embedding model.
17
+ sig { returns(T.nilable(Integer)) }
18
+ attr_reader :embedding_ms
19
+
20
+ sig { params(embedding_ms: Integer).void }
21
+ attr_writer :embedding_ms
22
+
23
+ # The number of tokens embedded. Only set when using a native embedding model.
24
+ sig { returns(T.nilable(Integer)) }
25
+ attr_reader :embedding_tokens
26
+
27
+ sig { params(embedding_tokens: Integer).void }
28
+ attr_writer :embedding_tokens
29
+
15
30
  # The performance information for a write request.
16
- sig { params(server_total_ms: Integer).returns(T.attached_class) }
31
+ sig do
32
+ params(
33
+ server_total_ms: Integer,
34
+ embedding_ms: Integer,
35
+ embedding_tokens: Integer
36
+ ).returns(T.attached_class)
37
+ end
17
38
  def self.new(
18
39
  # Request time measured on the server, in milliseconds.
19
- server_total_ms:
40
+ server_total_ms:,
41
+ # Time spent embedding text, in milliseconds. Only set when using a native
42
+ # embedding model.
43
+ embedding_ms: nil,
44
+ # The number of tokens embedded. Only set when using a native embedding model.
45
+ embedding_tokens: nil
20
46
  )
21
47
  end
22
48
 
23
- sig { override.returns({ server_total_ms: Integer }) }
49
+ sig do
50
+ override.returns(
51
+ {
52
+ server_total_ms: Integer,
53
+ embedding_ms: Integer,
54
+ embedding_tokens: Integer
55
+ }
56
+ )
57
+ end
24
58
  def to_hash
25
59
  end
26
60
  end
@@ -15,6 +15,8 @@ module Turbopuffer
15
15
 
16
16
  AttributeSchemaConfig = Turbopuffer::Models::AttributeSchemaConfig
17
17
 
18
+ AttributeSchemaDrop = Turbopuffer::Models::AttributeSchemaDrop
19
+
18
20
  AttributeType = Turbopuffer::Models::AttributeType
19
21
 
20
22
  Bm25ClauseParams = Turbopuffer::Models::Bm25ClauseParams
@@ -382,7 +382,11 @@ module Turbopuffer
382
382
  schema:
383
383
  T::Hash[
384
384
  Symbol,
385
- T.any(String, Turbopuffer::AttributeSchemaConfig::OrHash)
385
+ T.any(
386
+ String,
387
+ Turbopuffer::AttributeSchemaConfig::OrHash,
388
+ Turbopuffer::AttributeSchemaDrop::OrHash
389
+ )
386
390
  ],
387
391
  request_options: Turbopuffer::RequestOptions::OrHash
388
392
  ).returns(T::Hash[Symbol, Turbopuffer::AttributeSchemaConfig])
@@ -410,6 +414,7 @@ module Turbopuffer
410
414
  String,
411
415
  Turbopuffer::CopyFromNamespaceParams::CopyFromNamespaceConfig::OrHash
412
416
  ),
417
+ create_namespace: T::Boolean,
413
418
  delete_by_filter: T.anything,
414
419
  delete_by_filter_allow_partial: T::Boolean,
415
420
  delete_condition: T.anything,
@@ -431,7 +436,11 @@ module Turbopuffer
431
436
  schema:
432
437
  T::Hash[
433
438
  Symbol,
434
- T.any(String, Turbopuffer::AttributeSchemaConfig::OrHash)
439
+ T.any(
440
+ String,
441
+ Turbopuffer::AttributeSchemaConfig::OrHash,
442
+ Turbopuffer::AttributeSchemaDrop::OrHash
443
+ )
435
444
  ],
436
445
  sharding: Turbopuffer::ShardingConfig::OrHash,
437
446
  upsert_columns: Turbopuffer::Columns::OrHash,
@@ -447,6 +456,12 @@ module Turbopuffer
447
456
  branch_from_namespace: nil,
448
457
  # Body param: The namespace to copy documents from.
449
458
  copy_from_namespace: nil,
459
+ # Body param: If `true`, ensures the namespace is created, even if the request
460
+ # writes no documents. Creating an empty namespace requires the `id` type to be
461
+ # declared in `schema`. If `false`, a namespace is never created, and a 404 is
462
+ # returned if it does not exist. If omitted, a namespace is created by the first
463
+ # request that writes documents.
464
+ create_namespace: nil,
450
465
  # Body param: The filter specifying which documents to delete.
451
466
  delete_by_filter: nil,
452
467
  # Body param: Allow partial completion when filter matches too many documents.
@@ -1,6 +1,9 @@
1
1
  module Turbopuffer
2
2
  module Models
3
- type attribute_schema = String | Turbopuffer::AttributeSchemaConfig
3
+ type attribute_schema =
4
+ String
5
+ | Turbopuffer::AttributeSchemaConfig
6
+ | Turbopuffer::AttributeSchemaDrop
4
7
 
5
8
  module AttributeSchema
6
9
  extend Turbopuffer::Internal::Type::Union
@@ -0,0 +1,13 @@
1
+ module Turbopuffer
2
+ module Models
3
+ type attribute_schema_drop = { drop: bool }
4
+
5
+ class AttributeSchemaDrop < Turbopuffer::Internal::Type::BaseModel
6
+ attr_accessor drop: bool
7
+
8
+ def initialize: (drop: bool) -> void
9
+
10
+ def to_hash: -> { drop: bool }
11
+ end
12
+ end
13
+ end
@@ -88,16 +88,31 @@ module Turbopuffer
88
88
  def to_hash: -> { status: :"up-to-date" }
89
89
  end
90
90
 
91
- type index_updating = { status: :updating, unindexed_bytes: Integer }
91
+ type index_updating =
92
+ {
93
+ status: :updating,
94
+ unindexed_bytes: Integer,
95
+ unindexed_rows: Integer
96
+ }
92
97
 
93
98
  class IndexUpdating < Turbopuffer::Internal::Type::BaseModel
94
99
  attr_accessor status: :updating
95
100
 
96
101
  attr_accessor unindexed_bytes: Integer
97
102
 
98
- def initialize: (unindexed_bytes: Integer, ?status: :updating) -> void
103
+ attr_accessor unindexed_rows: Integer
99
104
 
100
- def to_hash: -> { status: :updating, unindexed_bytes: Integer }
105
+ def initialize: (
106
+ unindexed_bytes: Integer,
107
+ unindexed_rows: Integer,
108
+ ?status: :updating
109
+ ) -> void
110
+
111
+ def to_hash: -> {
112
+ status: :updating,
113
+ unindexed_bytes: Integer,
114
+ unindexed_rows: Integer
115
+ }
101
116
  end
102
117
 
103
118
  def self?.variants: -> ::Array[Turbopuffer::Models::NamespaceMetadata::index]
@@ -5,6 +5,7 @@ module Turbopuffer
5
5
  namespace: String,
6
6
  branch_from_namespace: Turbopuffer::Models::branch_from_namespace_params,
7
7
  copy_from_namespace: Turbopuffer::Models::copy_from_namespace_params,
8
+ create_namespace: bool,
8
9
  delete_by_filter: top,
9
10
  delete_by_filter_allow_partial: bool,
10
11
  delete_condition: top,
@@ -46,6 +47,10 @@ module Turbopuffer
46
47
  Turbopuffer::Models::copy_from_namespace_params
47
48
  ) -> Turbopuffer::Models::copy_from_namespace_params
48
49
 
50
+ attr_reader create_namespace: bool?
51
+
52
+ def create_namespace=: (bool) -> bool
53
+
49
54
  attr_reader delete_by_filter: top?
50
55
 
51
56
  def delete_by_filter=: (top) -> top
@@ -134,6 +139,7 @@ module Turbopuffer
134
139
  ?namespace: String,
135
140
  ?branch_from_namespace: Turbopuffer::Models::branch_from_namespace_params,
136
141
  ?copy_from_namespace: Turbopuffer::Models::copy_from_namespace_params,
142
+ ?create_namespace: bool,
137
143
  ?delete_by_filter: top,
138
144
  ?delete_by_filter_allow_partial: bool,
139
145
  ?delete_condition: top,
@@ -159,6 +165,7 @@ module Turbopuffer
159
165
  namespace: String,
160
166
  branch_from_namespace: Turbopuffer::Models::branch_from_namespace_params,
161
167
  copy_from_namespace: Turbopuffer::Models::copy_from_namespace_params,
168
+ create_namespace: bool,
162
169
  delete_by_filter: top,
163
170
  delete_by_filter_allow_partial: bool,
164
171
  delete_condition: top,
@@ -7,7 +7,9 @@ module Turbopuffer
7
7
  cache_temperature: String,
8
8
  exhaustive_search_count: Integer,
9
9
  query_execution_ms: Integer,
10
- server_total_ms: Integer
10
+ server_total_ms: Integer,
11
+ embedding_ms: Integer,
12
+ embedding_tokens: Integer
11
13
  }
12
14
 
13
15
  class QueryPerformance < Turbopuffer::Internal::Type::BaseModel
@@ -23,13 +25,23 @@ module Turbopuffer
23
25
 
24
26
  attr_accessor server_total_ms: Integer
25
27
 
28
+ attr_reader embedding_ms: Integer?
29
+
30
+ def embedding_ms=: (Integer) -> Integer
31
+
32
+ attr_reader embedding_tokens: Integer?
33
+
34
+ def embedding_tokens=: (Integer) -> Integer
35
+
26
36
  def initialize: (
27
37
  approx_namespace_size: Integer,
28
38
  cache_hit_ratio: Float,
29
39
  cache_temperature: String,
30
40
  exhaustive_search_count: Integer,
31
41
  query_execution_ms: Integer,
32
- server_total_ms: Integer
42
+ server_total_ms: Integer,
43
+ ?embedding_ms: Integer,
44
+ ?embedding_tokens: Integer
33
45
  ) -> void
34
46
 
35
47
  def to_hash: -> {
@@ -38,7 +50,9 @@ module Turbopuffer
38
50
  cache_temperature: String,
39
51
  exhaustive_search_count: Integer,
40
52
  query_execution_ms: Integer,
41
- server_total_ms: Integer
53
+ server_total_ms: Integer,
54
+ embedding_ms: Integer,
55
+ embedding_tokens: Integer
42
56
  }
43
57
  end
44
58
  end
@@ -1,13 +1,34 @@
1
1
  module Turbopuffer
2
2
  module Models
3
- type write_performance = { server_total_ms: Integer }
3
+ type write_performance =
4
+ {
5
+ server_total_ms: Integer,
6
+ embedding_ms: Integer,
7
+ embedding_tokens: Integer
8
+ }
4
9
 
5
10
  class WritePerformance < Turbopuffer::Internal::Type::BaseModel
6
11
  attr_accessor server_total_ms: Integer
7
12
 
8
- def initialize: (server_total_ms: Integer) -> void
13
+ attr_reader embedding_ms: Integer?
9
14
 
10
- def to_hash: -> { server_total_ms: Integer }
15
+ def embedding_ms=: (Integer) -> Integer
16
+
17
+ attr_reader embedding_tokens: Integer?
18
+
19
+ def embedding_tokens=: (Integer) -> Integer
20
+
21
+ def initialize: (
22
+ server_total_ms: Integer,
23
+ ?embedding_ms: Integer,
24
+ ?embedding_tokens: Integer
25
+ ) -> void
26
+
27
+ def to_hash: -> {
28
+ server_total_ms: Integer,
29
+ embedding_ms: Integer,
30
+ embedding_tokens: Integer
31
+ }
11
32
  end
12
33
  end
13
34
  end
@@ -9,6 +9,8 @@ module Turbopuffer
9
9
 
10
10
  class AttributeSchemaConfig = Turbopuffer::Models::AttributeSchemaConfig
11
11
 
12
+ class AttributeSchemaDrop = Turbopuffer::Models::AttributeSchemaDrop
13
+
12
14
  class AttributeType = Turbopuffer::Models::AttributeType
13
15
 
14
16
  class Bm25ClauseParams = Turbopuffer::Models::Bm25ClauseParams
@@ -125,6 +125,7 @@ module Turbopuffer
125
125
  ?namespace: String,
126
126
  ?branch_from_namespace: Turbopuffer::Models::branch_from_namespace_params,
127
127
  ?copy_from_namespace: Turbopuffer::Models::copy_from_namespace_params,
128
+ ?create_namespace: bool,
128
129
  ?delete_by_filter: top,
129
130
  ?delete_by_filter_allow_partial: bool,
130
131
  ?delete_condition: top,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: turbopuffer
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 2.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Turbopuffer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-09-18 00:00:00.000000000 Z
11
+ date: 2026-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cgi
@@ -76,6 +76,7 @@ files:
76
76
  - lib/turbopuffer/models/attribute_embed_config.rb
77
77
  - lib/turbopuffer/models/attribute_schema.rb
78
78
  - lib/turbopuffer/models/attribute_schema_config.rb
79
+ - lib/turbopuffer/models/attribute_schema_drop.rb
79
80
  - lib/turbopuffer/models/attribute_type.rb
80
81
  - lib/turbopuffer/models/bm25_clause_params.rb
81
82
  - lib/turbopuffer/models/branch_from_namespace_params.rb
@@ -177,6 +178,7 @@ files:
177
178
  - rbi/turbopuffer/models/attribute_embed_config.rbi
178
179
  - rbi/turbopuffer/models/attribute_schema.rbi
179
180
  - rbi/turbopuffer/models/attribute_schema_config.rbi
181
+ - rbi/turbopuffer/models/attribute_schema_drop.rbi
180
182
  - rbi/turbopuffer/models/attribute_type.rbi
181
183
  - rbi/turbopuffer/models/bm25_clause_params.rbi
182
184
  - rbi/turbopuffer/models/branch_from_namespace_params.rbi
@@ -277,6 +279,7 @@ files:
277
279
  - sig/turbopuffer/models/attribute_embed_config.rbs
278
280
  - sig/turbopuffer/models/attribute_schema.rbs
279
281
  - sig/turbopuffer/models/attribute_schema_config.rbs
282
+ - sig/turbopuffer/models/attribute_schema_drop.rbs
280
283
  - sig/turbopuffer/models/attribute_type.rbs
281
284
  - sig/turbopuffer/models/bm25_clause_params.rbs
282
285
  - sig/turbopuffer/models/branch_from_namespace_params.rbs