@omendb/omendb 0.0.27 → 0.0.29
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/index.d.ts +119 -5
- package/index.js +30 -2
- package/package.json +6 -6
package/index.d.ts
CHANGED
|
@@ -24,6 +24,9 @@ export declare class VectorDatabase {
|
|
|
24
24
|
*
|
|
25
25
|
* @param items - Array of {id, vector, metadata?, text?} or {id, vectors, metadata?}
|
|
26
26
|
* @returns Number of vectors inserted/updated
|
|
27
|
+
*
|
|
28
|
+
* @note Batch inserts (multiple items) skip the WAL for performance. Data is not
|
|
29
|
+
* durable until flush() is called.
|
|
27
30
|
*/
|
|
28
31
|
set(items: Array<SetItem>): Promise<number>
|
|
29
32
|
/** Get a vector by ID. */
|
|
@@ -124,6 +127,8 @@ export declare class VectorDatabase {
|
|
|
124
127
|
isEmpty(): boolean
|
|
125
128
|
/** Get database statistics. */
|
|
126
129
|
stats(): StatsResult
|
|
130
|
+
/** Get comprehensive database diagnostics. */
|
|
131
|
+
info(): InfoResult
|
|
127
132
|
/** Get current ef_search value. */
|
|
128
133
|
get efSearch(): number
|
|
129
134
|
/** Set ef_search value. */
|
|
@@ -166,8 +171,14 @@ export declare class VectorDatabase {
|
|
|
166
171
|
* @returns Number of nodes reordered
|
|
167
172
|
*/
|
|
168
173
|
optimize(): number
|
|
169
|
-
/**
|
|
170
|
-
|
|
174
|
+
/**
|
|
175
|
+
* Merge another database into this one.
|
|
176
|
+
*
|
|
177
|
+
* @param other - Source database to merge from
|
|
178
|
+
* @param keyPrefix - Optional prefix for all source IDs (e.g., "subdir/")
|
|
179
|
+
* @returns Number of vectors merged
|
|
180
|
+
*/
|
|
181
|
+
mergeFrom(other: VectorDatabase, keyPrefix?: string | undefined | null): number
|
|
171
182
|
/**
|
|
172
183
|
* List all vector IDs (without loading vector data).
|
|
173
184
|
*
|
|
@@ -247,9 +258,11 @@ export declare class VectorDatabase {
|
|
|
247
258
|
/**
|
|
248
259
|
* Search for k nearest neighbors.
|
|
249
260
|
*
|
|
250
|
-
* @param query - Query vector
|
|
261
|
+
* @param query - Query vector(s): number[] or Float32Array for single-vector stores;
|
|
262
|
+
* number[][] or Float32Array[] for multi-vector stores
|
|
251
263
|
* @param k - Number of results to return
|
|
252
|
-
* @param options - Optional search options: {filter?, ef?, maxDistance?}
|
|
264
|
+
* @param options - Optional search options. Single-vector: {filter?, ef?, maxDistance?}.
|
|
265
|
+
* Multi-vector: {rerank?, rerankFactor?}
|
|
253
266
|
* @returns Array of {id, distance, score, metadata}
|
|
254
267
|
*
|
|
255
268
|
* @example
|
|
@@ -260,9 +273,12 @@ export declare class VectorDatabase {
|
|
|
260
273
|
* // With options
|
|
261
274
|
* db.search([1, 0, 0, 0], 10, { filter: { category: "A" }, ef: 200 });
|
|
262
275
|
* db.search([1, 0, 0, 0], 10, { maxDistance: 0.5 });
|
|
276
|
+
*
|
|
277
|
+
* // Multi-vector search
|
|
278
|
+
* db.search([[0.1, 0.2], [0.3, 0.4]], 5, { rerank: true, rerankFactor: 8 });
|
|
263
279
|
* ```
|
|
264
280
|
*/
|
|
265
|
-
search(query: Array<number> | Float32Array | string
|
|
281
|
+
search(query: Array<number> | Float32Array | string | Array<Array<number>> | Array<Float32Array>, k: number, options?: { filter?: Record<string, unknown>; ef?: number; maxDistance?: number; rerank?: boolean; rerankFactor?: number } | undefined): Promise<Array<SearchResult>>
|
|
266
282
|
/**
|
|
267
283
|
* Search multi-vector store with query tokens.
|
|
268
284
|
*
|
|
@@ -282,6 +298,73 @@ export declare class VectorDatabase {
|
|
|
282
298
|
* keeping the Node.js event loop free.
|
|
283
299
|
*/
|
|
284
300
|
searchBatch(queries: Array<Array<number> | Float32Array>, k: number, ef?: number | undefined | null): Promise<Array<Array<SearchResult>>>
|
|
301
|
+
/**
|
|
302
|
+
* Enable sparse vector indexing for SPLADE-style retrieval.
|
|
303
|
+
*
|
|
304
|
+
* Called automatically by setSparse() and setHybridSparse().
|
|
305
|
+
* Call explicitly before sparseSearch() on an empty index.
|
|
306
|
+
*/
|
|
307
|
+
enableSparse(): void
|
|
308
|
+
/** Check if sparse indexing is enabled. */
|
|
309
|
+
get hasSparse(): boolean
|
|
310
|
+
/**
|
|
311
|
+
* Insert or update a sparse vector.
|
|
312
|
+
*
|
|
313
|
+
* @param id - Unique identifier
|
|
314
|
+
* @param sparse - Sparse vector as {indices: number[], values: number[]} or {dim: weight}
|
|
315
|
+
* @param metadata - Optional metadata
|
|
316
|
+
*
|
|
317
|
+
* @example
|
|
318
|
+
* ```javascript
|
|
319
|
+
* db.setSparse("doc1", {indices: [10, 42], values: [0.5, 1.2]}, {title: "Hello"});
|
|
320
|
+
* db.setSparse("doc2", {"10": 0.5, "42": 1.2}, {title: "World"});
|
|
321
|
+
* ```
|
|
322
|
+
*/
|
|
323
|
+
setSparse(id: string, sparse: { indices: number[]; values: number[] } | Record<string, number>, metadata?: Record<string, unknown> | undefined): void
|
|
324
|
+
/**
|
|
325
|
+
* Insert or update both dense and sparse vectors together.
|
|
326
|
+
*
|
|
327
|
+
* @param id - Unique identifier
|
|
328
|
+
* @param vector - Dense vector
|
|
329
|
+
* @param sparse - Sparse vector
|
|
330
|
+
* @param metadata - Optional metadata
|
|
331
|
+
*/
|
|
332
|
+
setHybridSparse(id: string, vector: Array<number> | Float32Array, sparse: { indices: number[]; values: number[] } | Record<string, number>, metadata?: Record<string, unknown> | undefined): void
|
|
333
|
+
/**
|
|
334
|
+
* Search sparse vectors by dot product similarity.
|
|
335
|
+
*
|
|
336
|
+
* @param query - Sparse query vector
|
|
337
|
+
* @param k - Number of results
|
|
338
|
+
* @param options - Optional: {filter?}
|
|
339
|
+
* @returns Array of {id, score, metadata} sorted by score descending
|
|
340
|
+
*
|
|
341
|
+
* @example
|
|
342
|
+
* ```javascript
|
|
343
|
+
* const results = db.sparseSearch({indices: [10, 42], values: [1.0, 0.5]}, 5);
|
|
344
|
+
* const results = db.sparseSearch({"10": 1.0, "42": 0.5}, 5);
|
|
345
|
+
* ```
|
|
346
|
+
*/
|
|
347
|
+
sparseSearch(query: { indices: number[]; values: number[] } | Record<string, number>, k: number, options?: { filter?: Record<string, unknown> } | undefined): Array<SparseSearchResult>
|
|
348
|
+
/**
|
|
349
|
+
* Hybrid dense + sparse search with Reciprocal Rank Fusion (RRF).
|
|
350
|
+
*
|
|
351
|
+
* @param queryVector - Dense query vector
|
|
352
|
+
* @param sparseQuery - Sparse query vector
|
|
353
|
+
* @param k - Number of results
|
|
354
|
+
* @param options - Optional: {alpha?, filter?}
|
|
355
|
+
* @returns Array of {id, score, metadata}
|
|
356
|
+
*
|
|
357
|
+
* @example
|
|
358
|
+
* ```javascript
|
|
359
|
+
* const results = db.hybridSparseSearch(
|
|
360
|
+
* [1, 0, 0],
|
|
361
|
+
* {indices: [10, 42], values: [1.0, 0.5]},
|
|
362
|
+
* 10,
|
|
363
|
+
* { alpha: 0.5 }
|
|
364
|
+
* );
|
|
365
|
+
* ```
|
|
366
|
+
*/
|
|
367
|
+
hybridSparseSearch(queryVector: Array<number> | Float32Array, sparseQuery: { indices: number[]; values: number[] } | Record<string, number>, k: number, options?: { alpha?: number; filter?: Record<string, unknown> } | undefined): Array<SparseSearchResult>
|
|
285
368
|
}
|
|
286
369
|
|
|
287
370
|
export interface GetResult {
|
|
@@ -300,6 +383,25 @@ export interface HybridSearchResult {
|
|
|
300
383
|
semanticScore?: number
|
|
301
384
|
}
|
|
302
385
|
|
|
386
|
+
export interface InfoResult {
|
|
387
|
+
vectorCount: number
|
|
388
|
+
deletedCount: number
|
|
389
|
+
dimensions: number
|
|
390
|
+
metric: string
|
|
391
|
+
frozenSegmentCount: number
|
|
392
|
+
mutableSegmentVectors: number
|
|
393
|
+
vectorBytes: number
|
|
394
|
+
graphBytes: number
|
|
395
|
+
totalMemoryBytes: number
|
|
396
|
+
walEntries: number
|
|
397
|
+
isPersistent: boolean
|
|
398
|
+
hnswM: number
|
|
399
|
+
hnswEfConstruction: number
|
|
400
|
+
hnswEfSearch: number
|
|
401
|
+
quantization: boolean
|
|
402
|
+
segmentCapacity: number
|
|
403
|
+
}
|
|
404
|
+
|
|
303
405
|
/**
|
|
304
406
|
* Open or create a vector database.
|
|
305
407
|
*
|
|
@@ -366,6 +468,10 @@ export interface OpenOptions {
|
|
|
366
468
|
* - false/null: Disabled (default, single-vector mode)
|
|
367
469
|
*/
|
|
368
470
|
multiVector?: boolean | { repetitions?: number; partitionBits?: number; seed?: number; dProj?: number | null } | null | undefined
|
|
471
|
+
/** SQ8 refiner: rescore with full precision (default: true when quantized) */
|
|
472
|
+
rescore?: boolean
|
|
473
|
+
/** Candidate multiplier for rescoring (default: 3.0) */
|
|
474
|
+
oversample?: number
|
|
369
475
|
}
|
|
370
476
|
|
|
371
477
|
export interface SearchResult {
|
|
@@ -391,6 +497,14 @@ export interface SetItem {
|
|
|
391
497
|
document?: string
|
|
392
498
|
}
|
|
393
499
|
|
|
500
|
+
/** Sparse search result returned from sparseSearch / hybridSparseSearch. */
|
|
501
|
+
export interface SparseSearchResult {
|
|
502
|
+
id: string
|
|
503
|
+
/** Dot product score (higher = more similar) */
|
|
504
|
+
score: number
|
|
505
|
+
metadata: Record<string, unknown>
|
|
506
|
+
}
|
|
507
|
+
|
|
394
508
|
export interface StatsResult {
|
|
395
509
|
dimensions: number
|
|
396
510
|
count: number
|
package/index.js
CHANGED
|
@@ -314,8 +314,12 @@ class VectorDatabase {
|
|
|
314
314
|
return this._native.optimize();
|
|
315
315
|
}
|
|
316
316
|
|
|
317
|
-
mergeFrom(other) {
|
|
318
|
-
return this._native.mergeFrom(other._native);
|
|
317
|
+
mergeFrom(other, keyPrefix) {
|
|
318
|
+
return this._native.mergeFrom(other._native, keyPrefix);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
info() {
|
|
322
|
+
return this._native.info();
|
|
319
323
|
}
|
|
320
324
|
|
|
321
325
|
ids() {
|
|
@@ -337,6 +341,30 @@ class VectorDatabase {
|
|
|
337
341
|
compact() {
|
|
338
342
|
return this._native.compact();
|
|
339
343
|
}
|
|
344
|
+
|
|
345
|
+
enableSparse() {
|
|
346
|
+
return this._native.enableSparse();
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
get hasSparse() {
|
|
350
|
+
return this._native.hasSparse;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
setSparse(id, sparse, metadata) {
|
|
354
|
+
return this._native.setSparse(id, sparse, metadata);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
setHybridSparse(id, vector, sparse, metadata) {
|
|
358
|
+
return this._native.setHybridSparse(id, vector, sparse, metadata);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
sparseSearch(query, k, options) {
|
|
362
|
+
return this._native.sparseSearch(query, k, options);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
hybridSparseSearch(queryVector, sparseQuery, k, options) {
|
|
366
|
+
return this._native.hybridSparseSearch(queryVector, sparseQuery, k, options);
|
|
367
|
+
}
|
|
340
368
|
}
|
|
341
369
|
|
|
342
370
|
function open(path, options, embeddingFn) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@omendb/omendb",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.29",
|
|
4
4
|
"description": "Fast embedded vector database with HNSW + ACORN-1 filtered search",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -50,10 +50,10 @@
|
|
|
50
50
|
"omendb.node"
|
|
51
51
|
],
|
|
52
52
|
"optionalDependencies": {
|
|
53
|
-
"@omendb/omendb-darwin-x64": "0.0.
|
|
54
|
-
"@omendb/omendb-darwin-arm64": "0.0.
|
|
55
|
-
"@omendb/omendb-linux-x64-gnu": "0.0.
|
|
56
|
-
"@omendb/omendb-linux-arm64-gnu": "0.0.
|
|
57
|
-
"@omendb/omendb-win32-x64-msvc": "0.0.
|
|
53
|
+
"@omendb/omendb-darwin-x64": "0.0.29",
|
|
54
|
+
"@omendb/omendb-darwin-arm64": "0.0.29",
|
|
55
|
+
"@omendb/omendb-linux-x64-gnu": "0.0.29",
|
|
56
|
+
"@omendb/omendb-linux-arm64-gnu": "0.0.29",
|
|
57
|
+
"@omendb/omendb-win32-x64-msvc": "0.0.29"
|
|
58
58
|
}
|
|
59
59
|
}
|