vector_amp 0.2.0 → 0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 275fe25e338462efa98c327a40e334085c4cbad95e720fc3ca3adecb25afa31c
4
- data.tar.gz: ec1e9abc640c9a76a2203550d277c20152828ff341bb91084594170cf572beae
3
+ metadata.gz: 7147209a61689dee14e2d37581f33cad58fb5291543edb086fcafdf841e71c0a
4
+ data.tar.gz: c399a9373b4820d6c141362b29e2b81bc34de71a02ecb0d69c7780febdbd3674
5
5
  SHA512:
6
- metadata.gz: 3fa5d4c3be9cae14083865ee02cfbe99bd72712ecd3ee461db487f10a51ac9c24c6810616b8d918154f1016d6971bb9d5412327221bb983ab39e821940da1595
7
- data.tar.gz: 18267f1db75a0b97685a123be17caa021594fa09f6212b6f3f99bc52554a8423e963bac34d6e0f5a266467b017d981fec0f5f6f2c6dd42ef4151ab776dc205aa
6
+ metadata.gz: 6b2f983acc42db9c33801bcbe726537975af6d6ec9eab12a542a860ac5836fa417e07bb35ddfd6e4f7a55f0b6311c4ee5793d192427e5182c5fff11aae9849c4
7
+ data.tar.gz: 2d720c1922917177c98cf7ddab94b9f2f20ef0654e31f673d47f4283459cca5c9808851875bf2a28a40ff9f6d63a7634bd852b0a74539453c6e7dff9d4dd58b1
data/README.md CHANGED
@@ -153,6 +153,20 @@ client.org_secrets.put_openai_api_key(
153
153
  )
154
154
  ```
155
155
 
156
+ Declare typed metadata at creation, then merge fields or replace the complete schema:
157
+
158
+ ```ruby
159
+ schema = [
160
+ VectorAmp::MetadataSchema.field(:category, VectorAmp::MetadataSchema::STRING),
161
+ VectorAmp::MetadataSchema.field(:price, VectorAmp::MetadataSchema::F32)
162
+ ]
163
+ dataset = client.datasets.create(name: "products", metadata_schema: schema)
164
+ dataset.patch_metadata_schema([VectorAmp::MetadataSchema.field(:inventory, VectorAmp::MetadataSchema::U32)])
165
+ dataset.replace_metadata_schema(schema) # [] removes all declared fields
166
+ ```
167
+
168
+ Canonical types are `STRING`, `U32`, `I32`, `I64`, `F32`, and `F64`.
169
+
156
170
  ### Source documents
157
171
 
158
172
  Dataset document listing is cursor-based: pass `next_cursor` into the next request and do not assume offsets or totals. Downloads return retained original bytes and follow API/storage redirects.
@@ -360,6 +374,8 @@ equivalent `datasetObj.<m>(...)` on a returned `VectorAmp::Dataset`.
360
374
  | Method | Required | Optional (defaults) |
361
375
  |---|---|---|
362
376
  | `create(name:)` | `name` | `dim` (inferred), `embedding` (vectoramp/VectorAmp-Embedding-4B), `metric` ("cosine"), `hybrid`, `filters`, `metadata_schema`, `tuning`, `metadata` |
377
+ | `patch_metadata_schema(id, schema)` | `id`, `schema` | — |
378
+ | `replace_metadata_schema(id, schema)` | `id`, `schema` | — |
363
379
  | `list` | — | `limit` (50), `offset` (0) |
364
380
  | `get(id)` | `id` | — |
365
381
  | `delete(id)` | `id` | — |
@@ -95,13 +95,22 @@ module VectorAmp
95
95
  service.delete(id)
96
96
  end
97
97
 
98
+ # Add or update typed metadata fields, retaining omitted fields.
99
+ def patch_metadata_schema(schema)
100
+ service.patch_metadata_schema(id, schema)
101
+ end
102
+
103
+ # Replace the complete typed metadata schema.
104
+ def replace_metadata_schema(schema)
105
+ service.replace_metadata_schema(id, schema)
106
+ end
107
+
98
108
  # Fetch stats for this dataset.
99
109
  # @return [Hash] dataset statistics.
100
110
  def stats
101
111
  service.stats(id)
102
112
  end
103
113
 
104
-
105
114
  # List retained source documents for this dataset using cursor pagination.
106
115
  # @param limit [Integer, nil] maximum documents to return.
107
116
  # @param cursor [String, nil] cursor from a previous response's `next_cursor`.
@@ -59,7 +59,7 @@ module VectorAmp
59
59
  # @param metric [String] distance metric; defaults to `cosine`.
60
60
  # @param hybrid [Boolean, nil] enable hybrid (dense + sparse) search; sends `hybrid: true`.
61
61
  # @param filters [Hash, nil] optional filter schema/config.
62
- # @param metadata_schema [Hash, nil] optional metadata schema.
62
+ # @param metadata_schema [Array<Hash>, Hash, nil] optional metadata schema.
63
63
  # @param tuning [Hash, nil] optional SABLE tuning parameters.
64
64
  # @param metadata [Hash, nil] optional dataset metadata.
65
65
  # @return [Dataset] created dataset.
@@ -85,7 +85,7 @@ module VectorAmp
85
85
  index_type: "sable",
86
86
  hybrid: hybrid,
87
87
  filters: filters,
88
- metadata_schema: metadata_schema,
88
+ schema: normalize_metadata_schema(metadata_schema),
89
89
  tuning: tuning,
90
90
  metadata: metadata
91
91
  )
@@ -115,6 +115,21 @@ module VectorAmp
115
115
  create(name: name, embedding: Embedding.openai(size, secret_ref: secret_ref), **options)
116
116
  end
117
117
 
118
+ # Add or update typed metadata fields, retaining omitted fields.
119
+ # @param dataset_id [String] dataset id.
120
+ # @param schema [Array<Hash>] fields with `name` and canonical `type`.
121
+ # @return [Dataset] updated dataset.
122
+ def patch_metadata_schema(dataset_id, schema)
123
+ update_metadata_schema(dataset_id, schema, "merge")
124
+ end
125
+
126
+ # Replace the complete typed metadata schema.
127
+ # @param dataset_id [String] dataset id.
128
+ # @param schema [Array<Hash>] complete field list; may be empty.
129
+ # @return [Dataset] updated dataset.
130
+ def replace_metadata_schema(dataset_id, schema)
131
+ update_metadata_schema(dataset_id, schema, "replace")
132
+ end
118
133
 
119
134
  # List retained source documents for a dataset using cursor pagination.
120
135
  # @param dataset_id [String] dataset id.
@@ -268,6 +283,25 @@ module VectorAmp
268
283
  end
269
284
  end
270
285
 
286
+ def normalize_metadata_schema(schema)
287
+ return schema unless schema.is_a?(Hash)
288
+
289
+ schema.map do |name, config|
290
+ raise ArgumentError, "metadata schema field #{name.inspect} must be a Hash" unless config.is_a?(Hash)
291
+
292
+ { name: name.to_s }.merge(config)
293
+ end
294
+ end
295
+
296
+ def update_metadata_schema(dataset_id, schema, mode)
297
+ response = @transport.request(
298
+ :patch,
299
+ "/datasets/#{dataset_id}/schema",
300
+ body: { schema: schema, mode: mode }
301
+ )
302
+ wrap_dataset(response)
303
+ end
304
+
271
305
  def wrap_dataset(data)
272
306
  Dataset.new(data, service: self, client: @client)
273
307
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module VectorAmp
4
+ # Helpers and canonical scalar types for dataset metadata schemas.
5
+ module MetadataSchema
6
+ STRING = "string"
7
+ U32 = "u32"
8
+ I32 = "i32"
9
+ I64 = "i64"
10
+ F32 = "f32"
11
+ F64 = "f64"
12
+ TYPES = [STRING, U32, I32, I64, F32, F64].freeze
13
+
14
+ def self.field(name, type)
15
+ raise ArgumentError, "unsupported metadata schema type: #{type.inspect}" unless TYPES.include?(type)
16
+
17
+ { name: name.to_s, type: type }
18
+ end
19
+ end
20
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module VectorAmp
4
- VERSION = "0.2.0"
4
+ VERSION = "0.3.0"
5
5
  end
data/lib/vector_amp.rb CHANGED
@@ -5,6 +5,7 @@ require_relative "vector_amp/client"
5
5
  require_relative "vector_amp/embedding"
6
6
  require_relative "vector_amp/error"
7
7
  require_relative "vector_amp/org_secrets"
8
+ require_relative "vector_amp/metadata_schema"
8
9
  require_relative "vector_amp/source"
9
10
 
10
11
  module VectorAmp
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vector_amp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - VectorAmp
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-07-14 00:00:00.000000000 Z
11
+ date: 2026-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -114,6 +114,7 @@ files:
114
114
  - lib/vector_amp/error.rb
115
115
  - lib/vector_amp/ingestion.rb
116
116
  - lib/vector_amp/intelligence.rb
117
+ - lib/vector_amp/metadata_schema.rb
117
118
  - lib/vector_amp/org_secrets.rb
118
119
  - lib/vector_amp/schedules.rb
119
120
  - lib/vector_amp/source.rb