@wiscale/velesdb-wasm 1.0.1 → 1.1.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.
package/README.md CHANGED
@@ -99,6 +99,15 @@ class VectorStore {
99
99
  clear(): void;
100
100
  reserve(additional: number): void; // Pre-allocate memory
101
101
  memory_usage(): number; // Accurate for each storage mode
102
+
103
+ // ⭐ NEW v1.1.0
104
+ multi_query_search(vectors: Float32Array, num_vectors: number, k: number, strategy?: string, rrf_k?: number): Array<[bigint, number]>;
105
+ hybrid_search(vector: Float32Array, text_query: string, k: number, vector_weight?: number, field?: string): Array<{id, score, payload}>;
106
+ batch_search(vectors: Float32Array, num_vectors: number, k: number): Array<Array<[bigint, number]>>;
107
+
108
+ // Metadata-only store
109
+ static new_metadata_only(): VectorStore;
110
+ readonly is_metadata_only: boolean;
102
111
  }
103
112
  ```
104
113
 
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "Julien Lange <contact@wiscale.fr>"
6
6
  ],
7
7
  "description": "VelesDB for WebAssembly - Vector search in the browser",
8
- "version": "1.0.1",
8
+ "version": "1.1.0",
9
9
  "license": "SEE LICENSE IN ../../LICENSE",
10
10
  "repository": {
11
11
  "type": "git",
package/velesdb_wasm.d.ts CHANGED
@@ -39,6 +39,20 @@ export class VectorStore {
39
39
  * Array of results with matching payloads.
40
40
  */
41
41
  text_search(query: string, k: number, field?: string | null): any;
42
+ /**
43
+ * Batch search for multiple vectors in parallel.
44
+ *
45
+ * # Arguments
46
+ *
47
+ * * `vectors` - Flat array of query vectors (concatenated)
48
+ * * `num_vectors` - Number of vectors
49
+ * * `k` - Results per query
50
+ *
51
+ * # Returns
52
+ *
53
+ * Array of arrays of (id, score) tuples.
54
+ */
55
+ batch_search(vectors: Float32Array, num_vectors: number, k: number): any;
42
56
  /**
43
57
  * Inserts multiple vectors in a single batch operation.
44
58
  *
@@ -58,6 +72,23 @@ export class VectorStore {
58
72
  * Returns memory usage estimate in bytes.
59
73
  */
60
74
  memory_usage(): number;
75
+ /**
76
+ * Performs hybrid search combining vector similarity and text search.
77
+ *
78
+ * Uses a simple weighted fusion of vector search and text search results.
79
+ *
80
+ * # Arguments
81
+ *
82
+ * * `query_vector` - Query vector for similarity search
83
+ * * `text_query` - Text query for payload search
84
+ * * `k` - Number of results to return
85
+ * * `vector_weight` - Weight for vector results (0.0-1.0, default 0.5)
86
+ *
87
+ * # Returns
88
+ *
89
+ * Array of fused results with id, score, and payload.
90
+ */
91
+ hybrid_search(query_vector: Float32Array, text_query: string, k: number, vector_weight?: number | null): any;
61
92
  /**
62
93
  * Creates a new vector store with specified storage mode for memory optimization.
63
94
  *
@@ -143,6 +174,31 @@ export class VectorStore {
143
174
  * - The metric byte is invalid
144
175
  */
145
176
  static import_from_bytes(bytes: Uint8Array): VectorStore;
177
+ /**
178
+ * Creates a metadata-only store (no vectors, only payloads).
179
+ *
180
+ * Useful for storing auxiliary data without vector embeddings.
181
+ */
182
+ static new_metadata_only(): VectorStore;
183
+ /**
184
+ * Performs multi-query search with result fusion.
185
+ *
186
+ * Executes searches for multiple query vectors and fuses results
187
+ * using the specified strategy.
188
+ *
189
+ * # Arguments
190
+ *
191
+ * * `vectors` - Array of query vectors (as flat array with dimension stride)
192
+ * * `num_vectors` - Number of vectors in the array
193
+ * * `k` - Number of results to return
194
+ * * `strategy` - Fusion strategy: "average", "maximum", "rrf"
195
+ * * `rrf_k` - RRF k parameter (only used when strategy = "rrf", default 60)
196
+ *
197
+ * # Returns
198
+ *
199
+ * Array of fused results with id and score.
200
+ */
201
+ multi_query_search(vectors: Float32Array, num_vectors: number, k: number, strategy: string, rrf_k?: number | null): any;
146
202
  /**
147
203
  * Searches with metadata filtering.
148
204
  *
@@ -292,6 +348,10 @@ export class VectorStore {
292
348
  * Returns the storage mode.
293
349
  */
294
350
  readonly storage_mode: string;
351
+ /**
352
+ * Returns true if this is a metadata-only store.
353
+ */
354
+ readonly is_metadata_only: boolean;
295
355
  /**
296
356
  * Returns the number of vectors in the store.
297
357
  */
@@ -311,20 +371,25 @@ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembl
311
371
  export interface InitOutput {
312
372
  readonly memory: WebAssembly.Memory;
313
373
  readonly __wbg_vectorstore_free: (a: number, b: number) => void;
374
+ readonly vectorstore_batch_search: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
314
375
  readonly vectorstore_clear: (a: number) => void;
315
376
  readonly vectorstore_delete_database: (a: number, b: number) => number;
316
377
  readonly vectorstore_dimension: (a: number) => number;
317
378
  readonly vectorstore_export_to_bytes: (a: number, b: number) => void;
318
379
  readonly vectorstore_get: (a: number, b: number, c: bigint) => void;
380
+ readonly vectorstore_hybrid_search: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => void;
319
381
  readonly vectorstore_import_from_bytes: (a: number, b: number, c: number) => void;
320
382
  readonly vectorstore_insert: (a: number, b: number, c: bigint, d: number, e: number) => void;
321
383
  readonly vectorstore_insert_batch: (a: number, b: number, c: number) => void;
322
384
  readonly vectorstore_insert_with_payload: (a: number, b: number, c: bigint, d: number, e: number, f: number) => void;
323
385
  readonly vectorstore_is_empty: (a: number) => number;
386
+ readonly vectorstore_is_metadata_only: (a: number) => number;
324
387
  readonly vectorstore_len: (a: number) => number;
325
388
  readonly vectorstore_load: (a: number, b: number) => number;
326
389
  readonly vectorstore_memory_usage: (a: number) => number;
390
+ readonly vectorstore_multi_query_search: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
327
391
  readonly vectorstore_new: (a: number, b: number, c: number, d: number) => void;
392
+ readonly vectorstore_new_metadata_only: () => number;
328
393
  readonly vectorstore_new_with_mode: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
329
394
  readonly vectorstore_remove: (a: number, b: bigint) => number;
330
395
  readonly vectorstore_reserve: (a: number, b: number) => void;
@@ -334,11 +399,11 @@ export interface InitOutput {
334
399
  readonly vectorstore_storage_mode: (a: number, b: number) => void;
335
400
  readonly vectorstore_text_search: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
336
401
  readonly vectorstore_with_capacity: (a: number, b: number, c: number, d: number, e: number) => void;
337
- readonly __wasm_bindgen_func_elem_133: (a: number, b: number, c: number) => void;
338
- readonly __wasm_bindgen_func_elem_132: (a: number, b: number) => void;
339
- readonly __wasm_bindgen_func_elem_489: (a: number, b: number, c: number) => void;
340
- readonly __wasm_bindgen_func_elem_488: (a: number, b: number) => void;
341
- readonly __wasm_bindgen_func_elem_536: (a: number, b: number, c: number, d: number) => void;
402
+ readonly __wasm_bindgen_func_elem_528: (a: number, b: number, c: number) => void;
403
+ readonly __wasm_bindgen_func_elem_527: (a: number, b: number) => void;
404
+ readonly __wasm_bindgen_func_elem_148: (a: number, b: number, c: number) => void;
405
+ readonly __wasm_bindgen_func_elem_147: (a: number, b: number) => void;
406
+ readonly __wasm_bindgen_func_elem_577: (a: number, b: number, c: number, d: number) => void;
342
407
  readonly __wbindgen_export: (a: number, b: number) => number;
343
408
  readonly __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
344
409
  readonly __wbindgen_export3: (a: number) => void;
package/velesdb_wasm.js CHANGED
@@ -251,16 +251,16 @@ if (!('encodeInto' in cachedTextEncoder)) {
251
251
 
252
252
  let WASM_VECTOR_LEN = 0;
253
253
 
254
- function __wasm_bindgen_func_elem_133(arg0, arg1, arg2) {
255
- wasm.__wasm_bindgen_func_elem_133(arg0, arg1, addHeapObject(arg2));
254
+ function __wasm_bindgen_func_elem_528(arg0, arg1, arg2) {
255
+ wasm.__wasm_bindgen_func_elem_528(arg0, arg1, addHeapObject(arg2));
256
256
  }
257
257
 
258
- function __wasm_bindgen_func_elem_489(arg0, arg1, arg2) {
259
- wasm.__wasm_bindgen_func_elem_489(arg0, arg1, addHeapObject(arg2));
258
+ function __wasm_bindgen_func_elem_148(arg0, arg1, arg2) {
259
+ wasm.__wasm_bindgen_func_elem_148(arg0, arg1, addHeapObject(arg2));
260
260
  }
261
261
 
262
- function __wasm_bindgen_func_elem_536(arg0, arg1, arg2, arg3) {
263
- wasm.__wasm_bindgen_func_elem_536(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
262
+ function __wasm_bindgen_func_elem_577(arg0, arg1, arg2, arg3) {
263
+ wasm.__wasm_bindgen_func_elem_577(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
264
264
  }
265
265
 
266
266
  const __wbindgen_enum_IdbTransactionMode = ["readonly", "readwrite", "versionchange", "readwriteflush", "cleanup"];
@@ -360,6 +360,40 @@ export class VectorStore {
360
360
  wasm.__wbindgen_add_to_stack_pointer(16);
361
361
  }
362
362
  }
363
+ /**
364
+ * Batch search for multiple vectors in parallel.
365
+ *
366
+ * # Arguments
367
+ *
368
+ * * `vectors` - Flat array of query vectors (concatenated)
369
+ * * `num_vectors` - Number of vectors
370
+ * * `k` - Results per query
371
+ *
372
+ * # Returns
373
+ *
374
+ * Array of arrays of (id, score) tuples.
375
+ * @param {Float32Array} vectors
376
+ * @param {number} num_vectors
377
+ * @param {number} k
378
+ * @returns {any}
379
+ */
380
+ batch_search(vectors, num_vectors, k) {
381
+ try {
382
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
383
+ const ptr0 = passArrayF32ToWasm0(vectors, wasm.__wbindgen_export);
384
+ const len0 = WASM_VECTOR_LEN;
385
+ wasm.vectorstore_batch_search(retptr, this.__wbg_ptr, ptr0, len0, num_vectors, k);
386
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
387
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
388
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
389
+ if (r2) {
390
+ throw takeObject(r1);
391
+ }
392
+ return takeObject(r0);
393
+ } finally {
394
+ wasm.__wbindgen_add_to_stack_pointer(16);
395
+ }
396
+ }
363
397
  /**
364
398
  * Inserts multiple vectors in a single batch operation.
365
399
  *
@@ -416,6 +450,46 @@ export class VectorStore {
416
450
  wasm.__wbindgen_export4(deferred1_0, deferred1_1, 1);
417
451
  }
418
452
  }
453
+ /**
454
+ * Performs hybrid search combining vector similarity and text search.
455
+ *
456
+ * Uses a simple weighted fusion of vector search and text search results.
457
+ *
458
+ * # Arguments
459
+ *
460
+ * * `query_vector` - Query vector for similarity search
461
+ * * `text_query` - Text query for payload search
462
+ * * `k` - Number of results to return
463
+ * * `vector_weight` - Weight for vector results (0.0-1.0, default 0.5)
464
+ *
465
+ * # Returns
466
+ *
467
+ * Array of fused results with id, score, and payload.
468
+ * @param {Float32Array} query_vector
469
+ * @param {string} text_query
470
+ * @param {number} k
471
+ * @param {number | null} [vector_weight]
472
+ * @returns {any}
473
+ */
474
+ hybrid_search(query_vector, text_query, k, vector_weight) {
475
+ try {
476
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
477
+ const ptr0 = passArrayF32ToWasm0(query_vector, wasm.__wbindgen_export);
478
+ const len0 = WASM_VECTOR_LEN;
479
+ const ptr1 = passStringToWasm0(text_query, wasm.__wbindgen_export, wasm.__wbindgen_export2);
480
+ const len1 = WASM_VECTOR_LEN;
481
+ wasm.vectorstore_hybrid_search(retptr, this.__wbg_ptr, ptr0, len0, ptr1, len1, k, isLikeNone(vector_weight) ? 0x100000001 : Math.fround(vector_weight));
482
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
483
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
484
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
485
+ if (r2) {
486
+ throw takeObject(r1);
487
+ }
488
+ return takeObject(r0);
489
+ } finally {
490
+ wasm.__wbindgen_add_to_stack_pointer(16);
491
+ }
492
+ }
419
493
  /**
420
494
  * Creates a new vector store with specified storage mode for memory optimization.
421
495
  *
@@ -554,6 +628,14 @@ export class VectorStore {
554
628
  wasm.__wbindgen_add_to_stack_pointer(16);
555
629
  }
556
630
  }
631
+ /**
632
+ * Returns true if this is a metadata-only store.
633
+ * @returns {boolean}
634
+ */
635
+ get is_metadata_only() {
636
+ const ret = wasm.vectorstore_is_metadata_only(this.__wbg_ptr);
637
+ return ret !== 0;
638
+ }
557
639
  /**
558
640
  * Imports a vector store from binary format.
559
641
  *
@@ -586,6 +668,59 @@ export class VectorStore {
586
668
  wasm.__wbindgen_add_to_stack_pointer(16);
587
669
  }
588
670
  }
671
+ /**
672
+ * Creates a metadata-only store (no vectors, only payloads).
673
+ *
674
+ * Useful for storing auxiliary data without vector embeddings.
675
+ * @returns {VectorStore}
676
+ */
677
+ static new_metadata_only() {
678
+ const ret = wasm.vectorstore_new_metadata_only();
679
+ return VectorStore.__wrap(ret);
680
+ }
681
+ /**
682
+ * Performs multi-query search with result fusion.
683
+ *
684
+ * Executes searches for multiple query vectors and fuses results
685
+ * using the specified strategy.
686
+ *
687
+ * # Arguments
688
+ *
689
+ * * `vectors` - Array of query vectors (as flat array with dimension stride)
690
+ * * `num_vectors` - Number of vectors in the array
691
+ * * `k` - Number of results to return
692
+ * * `strategy` - Fusion strategy: "average", "maximum", "rrf"
693
+ * * `rrf_k` - RRF k parameter (only used when strategy = "rrf", default 60)
694
+ *
695
+ * # Returns
696
+ *
697
+ * Array of fused results with id and score.
698
+ * @param {Float32Array} vectors
699
+ * @param {number} num_vectors
700
+ * @param {number} k
701
+ * @param {string} strategy
702
+ * @param {number | null} [rrf_k]
703
+ * @returns {any}
704
+ */
705
+ multi_query_search(vectors, num_vectors, k, strategy, rrf_k) {
706
+ try {
707
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
708
+ const ptr0 = passArrayF32ToWasm0(vectors, wasm.__wbindgen_export);
709
+ const len0 = WASM_VECTOR_LEN;
710
+ const ptr1 = passStringToWasm0(strategy, wasm.__wbindgen_export, wasm.__wbindgen_export2);
711
+ const len1 = WASM_VECTOR_LEN;
712
+ wasm.vectorstore_multi_query_search(retptr, this.__wbg_ptr, ptr0, len0, num_vectors, k, ptr1, len1, isLikeNone(rrf_k) ? 0x100000001 : (rrf_k) >>> 0);
713
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
714
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
715
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
716
+ if (r2) {
717
+ throw takeObject(r1);
718
+ }
719
+ return takeObject(r0);
720
+ } finally {
721
+ wasm.__wbindgen_add_to_stack_pointer(16);
722
+ }
723
+ }
589
724
  /**
590
725
  * Searches with metadata filtering.
591
726
  *
@@ -1149,7 +1284,7 @@ function __wbg_get_imports() {
1149
1284
  const a = state0.a;
1150
1285
  state0.a = 0;
1151
1286
  try {
1152
- return __wasm_bindgen_func_elem_536(a, state0.b, arg0, arg1);
1287
+ return __wasm_bindgen_func_elem_577(a, state0.b, arg0, arg1);
1153
1288
  } finally {
1154
1289
  state0.a = a;
1155
1290
  }
@@ -1270,9 +1405,9 @@ function __wbg_get_imports() {
1270
1405
  const ret = getStringFromWasm0(arg0, arg1);
1271
1406
  return addHeapObject(ret);
1272
1407
  };
1273
- imports.wbg.__wbindgen_cast_245e75e6849de722 = function(arg0, arg1) {
1274
- // Cast intrinsic for `Closure(Closure { dtor_idx: 7, function: Function { arguments: [NamedExternref("Event")], shim_idx: 8, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
1275
- const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_132, __wasm_bindgen_func_elem_133);
1408
+ imports.wbg.__wbindgen_cast_257c51b8abf9285e = function(arg0, arg1) {
1409
+ // Cast intrinsic for `Closure(Closure { dtor_idx: 57, function: Function { arguments: [Externref], shim_idx: 58, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
1410
+ const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_527, __wasm_bindgen_func_elem_528);
1276
1411
  return addHeapObject(ret);
1277
1412
  };
1278
1413
  imports.wbg.__wbindgen_cast_4625c577ab2ec9ee = function(arg0) {
@@ -1280,6 +1415,11 @@ function __wbg_get_imports() {
1280
1415
  const ret = BigInt.asUintN(64, arg0);
1281
1416
  return addHeapObject(ret);
1282
1417
  };
1418
+ imports.wbg.__wbindgen_cast_59e89726c7c5a9af = function(arg0, arg1) {
1419
+ // Cast intrinsic for `Closure(Closure { dtor_idx: 8, function: Function { arguments: [NamedExternref("Event")], shim_idx: 9, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
1420
+ const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_147, __wasm_bindgen_func_elem_148);
1421
+ return addHeapObject(ret);
1422
+ };
1283
1423
  imports.wbg.__wbindgen_cast_9ae0607507abb057 = function(arg0) {
1284
1424
  // Cast intrinsic for `I64 -> Externref`.
1285
1425
  const ret = arg0;
@@ -1290,11 +1430,6 @@ function __wbg_get_imports() {
1290
1430
  const ret = arg0;
1291
1431
  return addHeapObject(ret);
1292
1432
  };
1293
- imports.wbg.__wbindgen_cast_e7ad0d7b317830d5 = function(arg0, arg1) {
1294
- // Cast intrinsic for `Closure(Closure { dtor_idx: 56, function: Function { arguments: [Externref], shim_idx: 57, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
1295
- const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_488, __wasm_bindgen_func_elem_489);
1296
- return addHeapObject(ret);
1297
- };
1298
1433
  imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
1299
1434
  const ret = getObject(arg0);
1300
1435
  return addHeapObject(ret);
Binary file