verso-db 0.1.4 → 0.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.
- package/CHANGELOG.md +25 -0
- package/README.md +81 -49
- package/dist/BinaryHeap.d.ts +16 -5
- package/dist/BinaryHeap.d.ts.map +1 -1
- package/dist/BinaryHeap.js +138 -0
- package/dist/BinaryHeap.js.map +1 -0
- package/dist/Collection.d.ts +98 -17
- package/dist/Collection.d.ts.map +1 -1
- package/dist/Collection.js +1186 -0
- package/dist/Collection.js.map +1 -0
- package/dist/HNSWIndex.d.ts +170 -15
- package/dist/HNSWIndex.d.ts.map +1 -1
- package/dist/HNSWIndex.js +2818 -0
- package/dist/HNSWIndex.js.map +1 -0
- package/dist/MaxBinaryHeap.d.ts +2 -60
- package/dist/MaxBinaryHeap.d.ts.map +1 -1
- package/dist/MaxBinaryHeap.js +5 -0
- package/dist/MaxBinaryHeap.js.map +1 -0
- package/dist/SearchWorker.d.ts +104 -0
- package/dist/SearchWorker.d.ts.map +1 -0
- package/dist/SearchWorker.js +573 -0
- package/dist/SearchWorker.js.map +1 -0
- package/dist/VectorDB.d.ts +19 -5
- package/dist/VectorDB.d.ts.map +1 -1
- package/dist/VectorDB.js +246 -0
- package/dist/VectorDB.js.map +1 -0
- package/dist/WorkerPool.d.ts +92 -0
- package/dist/WorkerPool.d.ts.map +1 -0
- package/dist/WorkerPool.js +266 -0
- package/dist/WorkerPool.js.map +1 -0
- package/dist/backends/JsDistanceBackend.d.ts +3 -20
- package/dist/backends/JsDistanceBackend.d.ts.map +1 -1
- package/dist/backends/JsDistanceBackend.js +163 -0
- package/dist/backends/JsDistanceBackend.js.map +1 -0
- package/dist/encoding/DeltaEncoder.d.ts +2 -2
- package/dist/encoding/DeltaEncoder.d.ts.map +1 -1
- package/dist/encoding/DeltaEncoder.js +199 -0
- package/dist/encoding/DeltaEncoder.js.map +1 -0
- package/dist/errors.js +97 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +16 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -3419
- package/dist/index.js.map +1 -0
- package/dist/presets.d.ts +9 -9
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +205 -0
- package/dist/presets.js.map +1 -0
- package/dist/quantization/ScalarQuantizer.d.ts +10 -34
- package/dist/quantization/ScalarQuantizer.d.ts.map +1 -1
- package/dist/quantization/ScalarQuantizer.js +346 -0
- package/dist/quantization/ScalarQuantizer.js.map +1 -0
- package/dist/storage/BatchWriter.d.ts.map +1 -1
- package/dist/storage/BatchWriter.js +351 -0
- package/dist/storage/BatchWriter.js.map +1 -0
- package/dist/storage/BunStorageBackend.d.ts +12 -5
- package/dist/storage/BunStorageBackend.d.ts.map +1 -1
- package/dist/storage/BunStorageBackend.js +182 -0
- package/dist/storage/BunStorageBackend.js.map +1 -0
- package/dist/storage/MemoryBackend.d.ts.map +1 -1
- package/dist/storage/MemoryBackend.js +109 -0
- package/dist/storage/MemoryBackend.js.map +1 -0
- package/dist/storage/OPFSBackend.d.ts +9 -1
- package/dist/storage/OPFSBackend.d.ts.map +1 -1
- package/dist/storage/OPFSBackend.js +325 -0
- package/dist/storage/OPFSBackend.js.map +1 -0
- package/dist/storage/StorageBackend.d.ts +1 -1
- package/dist/storage/StorageBackend.js +12 -0
- package/dist/storage/StorageBackend.js.map +1 -0
- package/dist/storage/WriteAheadLog.d.ts +15 -11
- package/dist/storage/WriteAheadLog.d.ts.map +1 -1
- package/dist/storage/WriteAheadLog.js +321 -0
- package/dist/storage/WriteAheadLog.js.map +1 -0
- package/dist/storage/createStorageBackend.d.ts +4 -0
- package/dist/storage/createStorageBackend.d.ts.map +1 -1
- package/dist/storage/createStorageBackend.js +119 -0
- package/dist/storage/createStorageBackend.js.map +1 -0
- package/dist/storage/index.d.ts +3 -3
- package/dist/storage/index.js +33 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/nodeFsRuntime.d.ts +14 -0
- package/dist/storage/nodeFsRuntime.d.ts.map +1 -0
- package/dist/storage/nodeFsRuntime.js +105 -0
- package/dist/storage/nodeFsRuntime.js.map +1 -0
- package/package.json +47 -23
- package/dist/Storage.d.ts +0 -54
- package/dist/Storage.d.ts.map +0 -1
- package/dist/backends/DistanceBackend.d.ts +0 -5
- package/dist/backends/DistanceBackend.d.ts.map +0 -1
- package/src/BinaryHeap.ts +0 -131
- package/src/Collection.ts +0 -695
- package/src/HNSWIndex.ts +0 -1839
- package/src/MaxBinaryHeap.ts +0 -175
- package/src/Storage.ts +0 -435
- package/src/VectorDB.ts +0 -109
- package/src/backends/DistanceBackend.ts +0 -17
- package/src/backends/JsDistanceBackend.ts +0 -227
- package/src/encoding/DeltaEncoder.ts +0 -217
- package/src/errors.ts +0 -110
- package/src/index.ts +0 -138
- package/src/presets.ts +0 -229
- package/src/quantization/ScalarQuantizer.ts +0 -383
- package/src/storage/BatchWriter.ts +0 -336
- package/src/storage/BunStorageBackend.ts +0 -161
- package/src/storage/MemoryBackend.ts +0 -120
- package/src/storage/OPFSBackend.ts +0 -250
- package/src/storage/StorageBackend.ts +0 -74
- package/src/storage/WriteAheadLog.ts +0 -326
- package/src/storage/createStorageBackend.ts +0 -137
- package/src/storage/index.ts +0 -53
package/dist/VectorDB.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Collection } from './Collection';
|
|
2
|
+
import type { DistanceMetric } from './HNSWIndex';
|
|
2
3
|
import type { StorageBackend } from './storage/StorageBackend';
|
|
3
|
-
export type DistanceMetric = 'cosine' | 'euclidean' | 'dot_product';
|
|
4
4
|
export interface VectorDBConfig {
|
|
5
5
|
/**
|
|
6
6
|
* Path for storing collections on disk. Default: './vectordb_data'
|
|
@@ -9,7 +9,7 @@ export interface VectorDBConfig {
|
|
|
9
9
|
storagePath?: string;
|
|
10
10
|
/**
|
|
11
11
|
* Custom storage backend for platform-specific storage (e.g., OPFS for browsers).
|
|
12
|
-
* If not provided,
|
|
12
|
+
* If not provided, backend is auto-selected for the current runtime.
|
|
13
13
|
*/
|
|
14
14
|
storageBackend?: StorageBackend;
|
|
15
15
|
}
|
|
@@ -21,24 +21,38 @@ export interface CollectionConfig {
|
|
|
21
21
|
}
|
|
22
22
|
export declare class VectorDB {
|
|
23
23
|
private collections;
|
|
24
|
-
private storagePath;
|
|
25
24
|
private storageBackend;
|
|
26
25
|
private initialized;
|
|
26
|
+
private initPromise;
|
|
27
|
+
private createCollectionLocks;
|
|
27
28
|
constructor(config?: VectorDBConfig);
|
|
29
|
+
private createDefaultStorageBackend;
|
|
28
30
|
/**
|
|
29
31
|
* Get the storage backend used by this VectorDB instance.
|
|
30
32
|
* Useful for custom storage operations or debugging.
|
|
31
33
|
*/
|
|
32
34
|
getStorageBackend(): StorageBackend;
|
|
33
35
|
/**
|
|
34
|
-
* Initialize the VectorDB - creates storage directory
|
|
36
|
+
* Initialize the VectorDB - creates storage directory and loads existing collections.
|
|
35
37
|
* Called automatically on first operation if not called explicitly.
|
|
38
|
+
* Safe to call concurrently — only runs initialization once.
|
|
36
39
|
*/
|
|
37
40
|
init(): Promise<void>;
|
|
41
|
+
private doInit;
|
|
42
|
+
/**
|
|
43
|
+
* Load collection metadata from the manifest file and restore collections.
|
|
44
|
+
*/
|
|
45
|
+
private loadManifest;
|
|
46
|
+
/**
|
|
47
|
+
* Save collection metadata to the manifest file.
|
|
48
|
+
*/
|
|
49
|
+
private saveManifest;
|
|
50
|
+
private withCollectionCreateLock;
|
|
38
51
|
createCollection(name: string, config: CollectionConfig): Promise<Collection>;
|
|
39
|
-
getCollection(name: string): Collection | undefined
|
|
52
|
+
getCollection(name: string): Promise<Collection | undefined>;
|
|
40
53
|
listCollections(): Promise<string[]>;
|
|
41
54
|
deleteCollection(name: string): Promise<void>;
|
|
55
|
+
private validateCollectionName;
|
|
42
56
|
close(): Promise<void>;
|
|
43
57
|
}
|
|
44
58
|
//# sourceMappingURL=VectorDB.d.ts.map
|
package/dist/VectorDB.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VectorDB.d.ts","sourceRoot":"","sources":["../src/VectorDB.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"VectorDB.d.ts","sourceRoot":"","sources":["../src/VectorDB.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAO/D,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAaD,qBAAa,QAAQ;IACnB,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,qBAAqB,CAAyC;gBAE1D,MAAM,CAAC,EAAE,cAAc;IASnC,OAAO,CAAC,2BAA2B;IAcnC;;;OAGG;IACH,iBAAiB,IAAI,cAAc;IAInC;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAab,MAAM;IAUpB;;OAEG;YACW,YAAY;IAqD1B;;OAEG;YACW,YAAY;YAgBZ,wBAAwB;IAmBhC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAyB7E,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAK5D,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAKpC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnD,OAAO,CAAC,sBAAsB;IA+BxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAiC7B"}
|
package/dist/VectorDB.js
ADDED
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { Collection } from './Collection.js';
|
|
2
|
+
import { BunStorageBackend } from './storage/BunStorageBackend.js';
|
|
3
|
+
import { MemoryBackend } from './storage/MemoryBackend.js';
|
|
4
|
+
import { OPFSBackend } from './storage/OPFSBackend.js';
|
|
5
|
+
import { detectEnvironment } from './storage/createStorageBackend.js';
|
|
6
|
+
import { CollectionExistsError, CollectionNotFoundError, VectorDBError } from './errors.js';
|
|
7
|
+
const MANIFEST_KEY = 'manifest.json';
|
|
8
|
+
const VALID_METRICS = new Set(['cosine', 'euclidean', 'dot_product']);
|
|
9
|
+
export class VectorDB {
|
|
10
|
+
collections;
|
|
11
|
+
storageBackend;
|
|
12
|
+
initialized = false;
|
|
13
|
+
initPromise = null;
|
|
14
|
+
createCollectionLocks = new Map();
|
|
15
|
+
constructor(config) {
|
|
16
|
+
this.collections = new Map();
|
|
17
|
+
if (config?.storageBackend) {
|
|
18
|
+
this.storageBackend = config.storageBackend;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
this.storageBackend = this.createDefaultStorageBackend(config?.storagePath);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
createDefaultStorageBackend(storagePath) {
|
|
25
|
+
const env = detectEnvironment();
|
|
26
|
+
if (env === 'bun' || env === 'node') {
|
|
27
|
+
return new BunStorageBackend(storagePath || './vectordb_data');
|
|
28
|
+
}
|
|
29
|
+
if (env === 'browser' && OPFSBackend.isAvailable()) {
|
|
30
|
+
return new OPFSBackend();
|
|
31
|
+
}
|
|
32
|
+
return new MemoryBackend();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get the storage backend used by this VectorDB instance.
|
|
36
|
+
* Useful for custom storage operations or debugging.
|
|
37
|
+
*/
|
|
38
|
+
getStorageBackend() {
|
|
39
|
+
return this.storageBackend;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Initialize the VectorDB - creates storage directory and loads existing collections.
|
|
43
|
+
* Called automatically on first operation if not called explicitly.
|
|
44
|
+
* Safe to call concurrently — only runs initialization once.
|
|
45
|
+
*/
|
|
46
|
+
async init() {
|
|
47
|
+
if (this.initialized)
|
|
48
|
+
return;
|
|
49
|
+
if (!this.initPromise) {
|
|
50
|
+
this.initPromise = this.doInit().catch((err) => {
|
|
51
|
+
// Allow retry after transient initialization failures.
|
|
52
|
+
this.initPromise = null;
|
|
53
|
+
this.initialized = false;
|
|
54
|
+
throw err;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return this.initPromise;
|
|
58
|
+
}
|
|
59
|
+
async doInit() {
|
|
60
|
+
// Use storage backend to create root directory
|
|
61
|
+
await this.storageBackend.mkdir('');
|
|
62
|
+
// Load existing collections from manifest
|
|
63
|
+
await this.loadManifest();
|
|
64
|
+
this.initialized = true;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Load collection metadata from the manifest file and restore collections.
|
|
68
|
+
*/
|
|
69
|
+
async loadManifest() {
|
|
70
|
+
const data = await this.storageBackend.read(MANIFEST_KEY);
|
|
71
|
+
if (!data)
|
|
72
|
+
return;
|
|
73
|
+
let manifest;
|
|
74
|
+
try {
|
|
75
|
+
const text = new TextDecoder().decode(data);
|
|
76
|
+
manifest = JSON.parse(text);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Corrupt manifest JSON — continue with empty collections
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
for (const [name, entry] of Object.entries(manifest)) {
|
|
83
|
+
// Skip collections already loaded
|
|
84
|
+
if (this.collections.has(name))
|
|
85
|
+
continue;
|
|
86
|
+
try {
|
|
87
|
+
this.validateCollectionName(name);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
console.warn(`Skipping collection '${name}' with invalid name in manifest`);
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
// Validate manifest entry types to catch corrupted manifests early
|
|
94
|
+
if (typeof entry.dimension !== 'number' || entry.dimension <= 0 || !Number.isInteger(entry.dimension) ||
|
|
95
|
+
typeof entry.metric !== 'string' || !VALID_METRICS.has(entry.metric) ||
|
|
96
|
+
typeof entry.M !== 'number' || entry.M <= 0 || !Number.isInteger(entry.M) ||
|
|
97
|
+
typeof entry.efConstruction !== 'number' || entry.efConstruction <= 0 || !Number.isInteger(entry.efConstruction)) {
|
|
98
|
+
console.warn(`Skipping collection '${name}' with invalid manifest entry`);
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
const config = {
|
|
102
|
+
dimension: entry.dimension,
|
|
103
|
+
metric: entry.metric,
|
|
104
|
+
M: entry.M,
|
|
105
|
+
efConstruction: entry.efConstruction,
|
|
106
|
+
};
|
|
107
|
+
try {
|
|
108
|
+
const collection = new Collection(name, config, this.storageBackend, { autoPersist: true });
|
|
109
|
+
await collection.init();
|
|
110
|
+
this.collections.set(name, collection);
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
// Per-collection init failure — skip this collection but continue loading others
|
|
114
|
+
console.warn(`Failed to load collection '${name}':`, e);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Save collection metadata to the manifest file.
|
|
120
|
+
*/
|
|
121
|
+
async saveManifest() {
|
|
122
|
+
const manifest = {};
|
|
123
|
+
for (const [name, collection] of this.collections) {
|
|
124
|
+
manifest[name] = {
|
|
125
|
+
dimension: collection.getDimension(),
|
|
126
|
+
metric: collection.getMetric(),
|
|
127
|
+
M: collection.getM(),
|
|
128
|
+
efConstruction: collection.getEfConstruction(),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
const data = new TextEncoder().encode(JSON.stringify(manifest));
|
|
132
|
+
await this.storageBackend.write(MANIFEST_KEY, data);
|
|
133
|
+
}
|
|
134
|
+
async withCollectionCreateLock(name, fn) {
|
|
135
|
+
const previous = this.createCollectionLocks.get(name) ?? Promise.resolve();
|
|
136
|
+
let release;
|
|
137
|
+
const lock = new Promise((resolve) => {
|
|
138
|
+
release = resolve;
|
|
139
|
+
});
|
|
140
|
+
this.createCollectionLocks.set(name, lock);
|
|
141
|
+
await previous;
|
|
142
|
+
try {
|
|
143
|
+
return await fn();
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
release();
|
|
147
|
+
if (this.createCollectionLocks.get(name) === lock) {
|
|
148
|
+
this.createCollectionLocks.delete(name);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
async createCollection(name, config) {
|
|
153
|
+
this.validateCollectionName(name);
|
|
154
|
+
// Ensure VectorDB is initialized
|
|
155
|
+
await this.init();
|
|
156
|
+
return this.withCollectionCreateLock(name, async () => {
|
|
157
|
+
if (this.collections.has(name)) {
|
|
158
|
+
throw new CollectionExistsError(name);
|
|
159
|
+
}
|
|
160
|
+
// Create collection directory using storage backend
|
|
161
|
+
await this.storageBackend.mkdir(name);
|
|
162
|
+
const collection = new Collection(name, config, this.storageBackend, { autoPersist: true });
|
|
163
|
+
await collection.init();
|
|
164
|
+
this.collections.set(name, collection);
|
|
165
|
+
// Persist manifest
|
|
166
|
+
await this.saveManifest();
|
|
167
|
+
return collection;
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
async getCollection(name) {
|
|
171
|
+
await this.init();
|
|
172
|
+
return this.collections.get(name);
|
|
173
|
+
}
|
|
174
|
+
async listCollections() {
|
|
175
|
+
await this.init();
|
|
176
|
+
return [...this.collections.keys()];
|
|
177
|
+
}
|
|
178
|
+
async deleteCollection(name) {
|
|
179
|
+
await this.init();
|
|
180
|
+
const collection = this.collections.get(name);
|
|
181
|
+
if (!collection) {
|
|
182
|
+
throw new CollectionNotFoundError(name);
|
|
183
|
+
}
|
|
184
|
+
// Destroy without saving — we're deleting the collection
|
|
185
|
+
await collection.destroy(false);
|
|
186
|
+
this.collections.delete(name);
|
|
187
|
+
// Remove all files under the collection prefix, including versioned snapshots.
|
|
188
|
+
const keys = await this.storageBackend.list(name);
|
|
189
|
+
for (const key of keys) {
|
|
190
|
+
await this.storageBackend.delete(key).catch(() => { });
|
|
191
|
+
}
|
|
192
|
+
// Update manifest
|
|
193
|
+
await this.saveManifest();
|
|
194
|
+
}
|
|
195
|
+
validateCollectionName(name) {
|
|
196
|
+
if (!name || name.trim().length === 0) {
|
|
197
|
+
throw new VectorDBError('Collection name must be a non-empty string', 'VALIDATION_ERROR');
|
|
198
|
+
}
|
|
199
|
+
if (name.length > 255) {
|
|
200
|
+
throw new VectorDBError(`Collection name must be 255 characters or fewer, got ${name.length}`, 'VALIDATION_ERROR');
|
|
201
|
+
}
|
|
202
|
+
if (/[\/\\.\x00]/.test(name)) {
|
|
203
|
+
throw new VectorDBError(`Collection name '${name}' contains invalid characters (/, \\, ., or null)`, 'VALIDATION_ERROR');
|
|
204
|
+
}
|
|
205
|
+
// Reject control characters (U+0001–U+001F, U+007F)
|
|
206
|
+
// eslint-disable-next-line no-control-regex
|
|
207
|
+
if (/[\x01-\x1f\x7f]/.test(name)) {
|
|
208
|
+
throw new VectorDBError('Collection name contains control characters', 'VALIDATION_ERROR');
|
|
209
|
+
}
|
|
210
|
+
// Reject leading/trailing whitespace (checked after control chars since
|
|
211
|
+
// tab/etc. are control chars and should get the more specific message)
|
|
212
|
+
if (name !== name.trim()) {
|
|
213
|
+
throw new VectorDBError('Collection name must not have leading or trailing whitespace', 'VALIDATION_ERROR');
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
async close() {
|
|
217
|
+
// Close all collections — continue on individual failures so remaining
|
|
218
|
+
// collections still get saved and cleanup always completes.
|
|
219
|
+
const errors = [];
|
|
220
|
+
for (const collection of this.collections.values()) {
|
|
221
|
+
try {
|
|
222
|
+
await collection.destroy();
|
|
223
|
+
}
|
|
224
|
+
catch (e) {
|
|
225
|
+
errors.push(e instanceof Error ? e : new Error(String(e)));
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Persist the manifest so collection metadata survives re-open
|
|
229
|
+
if (this.initialized) {
|
|
230
|
+
try {
|
|
231
|
+
await this.saveManifest();
|
|
232
|
+
}
|
|
233
|
+
catch (e) {
|
|
234
|
+
errors.push(e instanceof Error ? e : new Error(String(e)));
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
this.collections.clear();
|
|
238
|
+
this.createCollectionLocks.clear();
|
|
239
|
+
this.initialized = false;
|
|
240
|
+
this.initPromise = null;
|
|
241
|
+
if (errors.length > 0) {
|
|
242
|
+
throw new VectorDBError(`Failed to close ${errors.length} collection(s): ${errors.map(e => e.message).join('; ')}`, 'STORAGE_ERROR');
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=VectorDB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VectorDB.js","sourceRoot":"","sources":["../src/VectorDB.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker pool for parallel query processing.
|
|
3
|
+
* Dispatches queries to workers via round-robin for concurrent execution.
|
|
4
|
+
* Falls back to sequential processing when workers are unavailable.
|
|
5
|
+
*/
|
|
6
|
+
import { HNSWIndex } from './HNSWIndex';
|
|
7
|
+
export declare class WorkerPool {
|
|
8
|
+
private numWorkers?;
|
|
9
|
+
private workers;
|
|
10
|
+
private nextQueryId;
|
|
11
|
+
private roundRobinIndex;
|
|
12
|
+
private initialized;
|
|
13
|
+
private fallbackIndex;
|
|
14
|
+
/**
|
|
15
|
+
* Create a worker pool for parallel HNSW search.
|
|
16
|
+
*
|
|
17
|
+
* @param numWorkers Number of workers (default: available hardware concurrency or 4)
|
|
18
|
+
*/
|
|
19
|
+
constructor(numWorkers?: number | undefined);
|
|
20
|
+
/**
|
|
21
|
+
* Initialize workers with shared index data.
|
|
22
|
+
* When the index uses SharedArrayBuffer, workers receive zero-copy
|
|
23
|
+
* views into the same vector memory. Otherwise, data is copied.
|
|
24
|
+
*
|
|
25
|
+
* @param index The HNSW index to distribute to workers
|
|
26
|
+
*/
|
|
27
|
+
init(index: HNSWIndex): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Search for k nearest neighbors using worker pool.
|
|
30
|
+
* Dispatches to next available worker via round-robin.
|
|
31
|
+
*
|
|
32
|
+
* @param query Query vector
|
|
33
|
+
* @param k Number of results
|
|
34
|
+
* @param efSearch Search effort parameter
|
|
35
|
+
* @returns Array of {id, distance} results
|
|
36
|
+
*/
|
|
37
|
+
search(query: Float32Array, k: number, efSearch?: number): Promise<Array<{
|
|
38
|
+
id: number;
|
|
39
|
+
distance: number;
|
|
40
|
+
}>>;
|
|
41
|
+
/**
|
|
42
|
+
* Quantized search using worker pool.
|
|
43
|
+
* Workers perform int8 candidate scan + float32 rescore.
|
|
44
|
+
*
|
|
45
|
+
* @param query Query vector
|
|
46
|
+
* @param k Number of results
|
|
47
|
+
* @param candidateMultiplier Multiplier for rescore candidates
|
|
48
|
+
* @param efSearch Search effort parameter
|
|
49
|
+
* @returns Array of {id, distance} results
|
|
50
|
+
*/
|
|
51
|
+
searchQuantized(query: Float32Array, k: number, candidateMultiplier?: number, efSearch?: number): Promise<Array<{
|
|
52
|
+
id: number;
|
|
53
|
+
distance: number;
|
|
54
|
+
}>>;
|
|
55
|
+
/**
|
|
56
|
+
* Batch search: dispatch multiple queries in parallel across workers.
|
|
57
|
+
*
|
|
58
|
+
* @param queries Array of query vectors
|
|
59
|
+
* @param k Number of results per query
|
|
60
|
+
* @param efSearch Search effort parameter
|
|
61
|
+
* @returns Array of results, one per query
|
|
62
|
+
*/
|
|
63
|
+
searchBatch(queries: Float32Array[], k: number, efSearch?: number): Promise<Array<Array<{
|
|
64
|
+
id: number;
|
|
65
|
+
distance: number;
|
|
66
|
+
}>>>;
|
|
67
|
+
/**
|
|
68
|
+
* Batch quantized search across workers.
|
|
69
|
+
*/
|
|
70
|
+
searchBatchQuantized(queries: Float32Array[], k: number, candidateMultiplier?: number, efSearch?: number): Promise<Array<Array<{
|
|
71
|
+
id: number;
|
|
72
|
+
distance: number;
|
|
73
|
+
}>>>;
|
|
74
|
+
/**
|
|
75
|
+
* Send incremental graph updates to all workers.
|
|
76
|
+
* Workers update their neighbor lists without full re-initialization.
|
|
77
|
+
* New vectors are already visible via SharedArrayBuffer.
|
|
78
|
+
*/
|
|
79
|
+
broadcastGraphUpdate(newNodes: Array<{
|
|
80
|
+
id: number;
|
|
81
|
+
neighbors: number[][];
|
|
82
|
+
}>, entryPointId?: number, maxLevel?: number): void;
|
|
83
|
+
/**
|
|
84
|
+
* Terminate all workers and clean up.
|
|
85
|
+
*/
|
|
86
|
+
destroy(): void;
|
|
87
|
+
/**
|
|
88
|
+
* Get the number of active workers.
|
|
89
|
+
*/
|
|
90
|
+
get workerCount(): number;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=WorkerPool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerPool.d.ts","sourceRoot":"","sources":["../src/WorkerPool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAUxC,qBAAa,UAAU;IAYT,OAAO,CAAC,UAAU,CAAC;IAX/B,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,aAAa,CAA0B;IAE/C;;;;OAIG;gBACiB,UAAU,CAAC,EAAE,MAAM,YAAA;IAQvC;;;;;;OAMG;IACG,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAmG3C;;;;;;;;OAQG;IACG,MAAM,CACV,KAAK,EAAE,YAAY,EACnB,CAAC,EAAE,MAAM,EACT,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA4BnD;;;;;;;;;OASG;IACG,eAAe,CACnB,KAAK,EAAE,YAAY,EACnB,CAAC,EAAE,MAAM,EACT,mBAAmB,GAAE,MAAU,EAC/B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IA8BnD;;;;;;;OAOG;IACG,WAAW,CACf,OAAO,EAAE,YAAY,EAAE,EACvB,CAAC,EAAE,MAAM,EACT,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAc1D;;OAEG;IACG,oBAAoB,CACxB,OAAO,EAAE,YAAY,EAAE,EACvB,CAAC,EAAE,MAAM,EACT,mBAAmB,GAAE,MAAU,EAC/B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAa1D;;;;OAIG;IACH,oBAAoB,CAClB,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAA;KAAE,CAAC,EACtD,YAAY,CAAC,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI;IAgBP;;OAEG;IACH,OAAO,IAAI,IAAI;IAcf;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;CACF"}
|