verso-db 0.1.5 → 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.
Files changed (94) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +13 -7
  3. package/dist/BinaryHeap.d.ts +11 -1
  4. package/dist/BinaryHeap.d.ts.map +1 -1
  5. package/dist/BinaryHeap.js +138 -0
  6. package/dist/BinaryHeap.js.map +1 -0
  7. package/dist/Collection.d.ts +30 -4
  8. package/dist/Collection.d.ts.map +1 -1
  9. package/dist/Collection.js +1186 -0
  10. package/dist/Collection.js.map +1 -0
  11. package/dist/HNSWIndex.d.ts +59 -0
  12. package/dist/HNSWIndex.d.ts.map +1 -1
  13. package/dist/HNSWIndex.js +2818 -0
  14. package/dist/HNSWIndex.js.map +1 -0
  15. package/dist/MaxBinaryHeap.d.ts +2 -64
  16. package/dist/MaxBinaryHeap.d.ts.map +1 -1
  17. package/dist/MaxBinaryHeap.js +5 -0
  18. package/dist/MaxBinaryHeap.js.map +1 -0
  19. package/dist/SearchWorker.d.ts +57 -4
  20. package/dist/SearchWorker.d.ts.map +1 -1
  21. package/dist/SearchWorker.js +573 -0
  22. package/dist/SearchWorker.js.map +1 -0
  23. package/dist/VectorDB.d.ts.map +1 -1
  24. package/dist/VectorDB.js +246 -0
  25. package/dist/VectorDB.js.map +1 -0
  26. package/dist/WorkerPool.d.ts +32 -2
  27. package/dist/WorkerPool.d.ts.map +1 -1
  28. package/dist/WorkerPool.js +266 -0
  29. package/dist/WorkerPool.js.map +1 -0
  30. package/dist/backends/JsDistanceBackend.d.ts.map +1 -1
  31. package/dist/backends/JsDistanceBackend.js +163 -0
  32. package/dist/backends/JsDistanceBackend.js.map +1 -0
  33. package/dist/encoding/DeltaEncoder.d.ts +2 -2
  34. package/dist/encoding/DeltaEncoder.d.ts.map +1 -1
  35. package/dist/encoding/DeltaEncoder.js +199 -0
  36. package/dist/encoding/DeltaEncoder.js.map +1 -0
  37. package/dist/errors.js +97 -0
  38. package/dist/errors.js.map +1 -0
  39. package/dist/index.d.ts +3 -3
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +61 -42
  42. package/dist/index.js.map +1 -9
  43. package/dist/presets.js +205 -0
  44. package/dist/presets.js.map +1 -0
  45. package/dist/quantization/ScalarQuantizer.d.ts +0 -34
  46. package/dist/quantization/ScalarQuantizer.d.ts.map +1 -1
  47. package/dist/quantization/ScalarQuantizer.js +346 -0
  48. package/dist/quantization/ScalarQuantizer.js.map +1 -0
  49. package/dist/storage/BatchWriter.js +351 -0
  50. package/dist/storage/BatchWriter.js.map +1 -0
  51. package/dist/storage/BunStorageBackend.d.ts +7 -3
  52. package/dist/storage/BunStorageBackend.d.ts.map +1 -1
  53. package/dist/storage/BunStorageBackend.js +182 -0
  54. package/dist/storage/BunStorageBackend.js.map +1 -0
  55. package/dist/storage/MemoryBackend.js +109 -0
  56. package/dist/storage/MemoryBackend.js.map +1 -0
  57. package/dist/storage/OPFSBackend.d.ts.map +1 -1
  58. package/dist/storage/OPFSBackend.js +325 -0
  59. package/dist/storage/OPFSBackend.js.map +1 -0
  60. package/dist/storage/StorageBackend.js +12 -0
  61. package/dist/storage/StorageBackend.js.map +1 -0
  62. package/dist/storage/WriteAheadLog.js +321 -0
  63. package/dist/storage/WriteAheadLog.js.map +1 -0
  64. package/dist/storage/createStorageBackend.d.ts +4 -0
  65. package/dist/storage/createStorageBackend.d.ts.map +1 -1
  66. package/dist/storage/createStorageBackend.js +119 -0
  67. package/dist/storage/createStorageBackend.js.map +1 -0
  68. package/{src/storage/index.ts → dist/storage/index.js} +7 -27
  69. package/dist/storage/index.js.map +1 -0
  70. package/dist/storage/nodeFsRuntime.d.ts +14 -0
  71. package/dist/storage/nodeFsRuntime.d.ts.map +1 -0
  72. package/dist/storage/nodeFsRuntime.js +105 -0
  73. package/dist/storage/nodeFsRuntime.js.map +1 -0
  74. package/package.json +9 -7
  75. package/src/BinaryHeap.ts +0 -136
  76. package/src/Collection.ts +0 -1262
  77. package/src/HNSWIndex.ts +0 -2894
  78. package/src/MaxBinaryHeap.ts +0 -181
  79. package/src/SearchWorker.ts +0 -264
  80. package/src/VectorDB.ts +0 -319
  81. package/src/WorkerPool.ts +0 -222
  82. package/src/backends/JsDistanceBackend.ts +0 -171
  83. package/src/encoding/DeltaEncoder.ts +0 -236
  84. package/src/errors.ts +0 -110
  85. package/src/index.ts +0 -106
  86. package/src/presets.ts +0 -229
  87. package/src/quantization/ScalarQuantizer.ts +0 -487
  88. package/src/storage/BatchWriter.ts +0 -420
  89. package/src/storage/BunStorageBackend.ts +0 -199
  90. package/src/storage/MemoryBackend.ts +0 -122
  91. package/src/storage/OPFSBackend.ts +0 -348
  92. package/src/storage/StorageBackend.ts +0 -74
  93. package/src/storage/WriteAheadLog.ts +0 -379
  94. package/src/storage/createStorageBackend.ts +0 -137
@@ -0,0 +1,573 @@
1
+ /**
2
+ * Search worker entry point for parallel query processing.
3
+ * Each worker maintains independent search state (visited array, heaps)
4
+ * and operates on shared read-only vector data (SharedArrayBuffer when available).
5
+ */
6
+ import { dotProductFast, l2SquaredFast, normalizeInPlace } from './backends/JsDistanceBackend.js';
7
+ import { BinaryHeap } from './BinaryHeap.js';
8
+ import { MaxBinaryHeap } from './MaxBinaryHeap.js';
9
+ // Only run as worker if loaded in worker context
10
+ if (typeof self !== 'undefined' && typeof self.postMessage === 'function') {
11
+ let state = null;
12
+ self.onmessage = (event) => {
13
+ const msg = event.data;
14
+ if (msg.type === 'init') {
15
+ state = new WorkerSearchState(msg);
16
+ self.postMessage({ type: 'ready' });
17
+ }
18
+ else if (msg.type === 'search') {
19
+ if (!state) {
20
+ self.postMessage({ type: 'error', queryId: msg.queryId, error: 'Worker not initialized' });
21
+ return;
22
+ }
23
+ try {
24
+ let results;
25
+ if (msg.quantized) {
26
+ results = state.searchKNNQuantized(msg.query, msg.k, msg.candidateMultiplier || 3, msg.efSearch);
27
+ }
28
+ else {
29
+ results = state.searchKNN(msg.query, msg.k, msg.efSearch);
30
+ }
31
+ self.postMessage({ type: 'result', queryId: msg.queryId, results });
32
+ }
33
+ catch (err) {
34
+ self.postMessage({ type: 'error', queryId: msg.queryId, error: err instanceof Error ? err.message : String(err) });
35
+ }
36
+ }
37
+ else if (msg.type === 'graphUpdate') {
38
+ // Incremental graph update: add new nodes' neighbor lists
39
+ if (state) {
40
+ state.applyGraphUpdate(msg.newNodes);
41
+ }
42
+ }
43
+ else if (msg.type === 'updateEntryPoint') {
44
+ if (state) {
45
+ state.updateEntryPoint(msg.entryPointId, msg.maxLevel);
46
+ }
47
+ }
48
+ };
49
+ }
50
+ /**
51
+ * Independent search state for a single worker.
52
+ * Mirrors the essential search logic from HNSWIndex without mutation.
53
+ * Uses batch distance calculation for improved cache locality.
54
+ */
55
+ export class WorkerSearchState {
56
+ flatVectors;
57
+ flatInt8Vectors;
58
+ dimension;
59
+ nodeCount;
60
+ metric;
61
+ entryPointId;
62
+ maxLevel;
63
+ // Deserialized neighbor lists: neighbors[nodeId][layer] = number[]
64
+ neighbors;
65
+ // Independent search state
66
+ visitedArray;
67
+ visitedGeneration = 1;
68
+ candidatesHeap;
69
+ resultsHeap;
70
+ queryNormBuffer;
71
+ vectorsAreNormalized;
72
+ // Batch distance calculation buffers
73
+ batchNeighborIds = [];
74
+ batchDistances = [];
75
+ // Quantization state
76
+ quantizationEnabled;
77
+ quantizationScale = null;
78
+ quantizationOffset = null;
79
+ queryInt8Buffer = null;
80
+ distanceFn;
81
+ constructor(init) {
82
+ this.flatVectors = init.flatVectors;
83
+ this.flatInt8Vectors = init.flatInt8Vectors;
84
+ this.dimension = init.dimension;
85
+ this.nodeCount = init.nodeCount;
86
+ this.metric = init.metric;
87
+ this.entryPointId = init.entryPointId;
88
+ this.maxLevel = init.maxLevel;
89
+ this.vectorsAreNormalized = init.metric === 'cosine';
90
+ this.quantizationEnabled = init.quantizationEnabled && init.flatInt8Vectors !== null;
91
+ if (init.quantizationParams) {
92
+ this.quantizationScale = init.quantizationParams.scale;
93
+ this.quantizationOffset = init.quantizationParams.offset;
94
+ this.queryInt8Buffer = new Int8Array(init.dimension);
95
+ }
96
+ // Deserialize graph structure
97
+ this.neighbors = this.deserializeGraph(init.graphData);
98
+ // Initialize search state
99
+ this.visitedArray = new Uint16Array(init.nodeCount + 1000);
100
+ const heapCap = Math.max(512, 500);
101
+ this.candidatesHeap = new BinaryHeap(heapCap);
102
+ this.resultsHeap = new MaxBinaryHeap(heapCap);
103
+ this.queryNormBuffer = new Float32Array(init.dimension);
104
+ // Set up distance function
105
+ if (init.metric === 'cosine') {
106
+ this.distanceFn = (a, b) => {
107
+ const dot = dotProductFast(a, b);
108
+ const d = 1 - dot;
109
+ return d < 1e-10 ? 0 : d;
110
+ };
111
+ }
112
+ else if (init.metric === 'euclidean') {
113
+ this.distanceFn = (a, b) => Math.sqrt(l2SquaredFast(a, b));
114
+ }
115
+ else {
116
+ this.distanceFn = (a, b) => -dotProductFast(a, b);
117
+ }
118
+ }
119
+ deserializeGraph(buffer) {
120
+ const view = new DataView(buffer);
121
+ const neighbors = new Array(this.nodeCount);
122
+ let offset = 0;
123
+ for (let nodeId = 0; nodeId < this.nodeCount; nodeId++) {
124
+ const numLayers = view.getUint8(offset++);
125
+ const layers = new Array(numLayers);
126
+ for (let l = 0; l < numLayers; l++) {
127
+ const numNeighbors = view.getUint16(offset, true);
128
+ offset += 2;
129
+ const neighborList = new Array(numNeighbors);
130
+ for (let n = 0; n < numNeighbors; n++) {
131
+ neighborList[n] = view.getUint32(offset, true);
132
+ offset += 4;
133
+ }
134
+ layers[l] = neighborList;
135
+ }
136
+ neighbors[nodeId] = layers;
137
+ }
138
+ return neighbors;
139
+ }
140
+ getVector(nodeId) {
141
+ const offset = nodeId * this.dimension;
142
+ return this.flatVectors.subarray(offset, offset + this.dimension);
143
+ }
144
+ clearVisited() {
145
+ this.visitedGeneration++;
146
+ if (this.visitedGeneration > 65000) {
147
+ this.visitedArray.fill(0);
148
+ this.visitedGeneration = 1;
149
+ }
150
+ }
151
+ isVisited(id) {
152
+ return id < this.visitedArray.length && this.visitedArray[id] === this.visitedGeneration;
153
+ }
154
+ markVisited(id) {
155
+ if (id >= this.visitedArray.length) {
156
+ const newArr = new Uint16Array(Math.max(this.visitedArray.length * 2, id + 1000));
157
+ newArr.set(this.visitedArray);
158
+ this.visitedArray = newArr;
159
+ }
160
+ this.visitedArray[id] = this.visitedGeneration;
161
+ }
162
+ /**
163
+ * Batch distance calculation with inlined 8-wide unrolled loop.
164
+ * Mirrors HNSWIndex.calculateDistancesBatch for identical performance.
165
+ */
166
+ calculateDistancesBatch(query, neighborIds, outDistances, count) {
167
+ const dim = this.dimension;
168
+ const flatVectors = this.flatVectors;
169
+ for (let i = 0; i < count; i++) {
170
+ const offset = neighborIds[i] * dim;
171
+ if (this.metric === 'cosine') {
172
+ let sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
173
+ let sum4 = 0, sum5 = 0, sum6 = 0, sum7 = 0;
174
+ let d = 0;
175
+ const limit8 = dim - 7;
176
+ for (; d < limit8; d += 8) {
177
+ sum0 += flatVectors[offset + d] * query[d];
178
+ sum1 += flatVectors[offset + d + 1] * query[d + 1];
179
+ sum2 += flatVectors[offset + d + 2] * query[d + 2];
180
+ sum3 += flatVectors[offset + d + 3] * query[d + 3];
181
+ sum4 += flatVectors[offset + d + 4] * query[d + 4];
182
+ sum5 += flatVectors[offset + d + 5] * query[d + 5];
183
+ sum6 += flatVectors[offset + d + 6] * query[d + 6];
184
+ sum7 += flatVectors[offset + d + 7] * query[d + 7];
185
+ }
186
+ for (; d < dim; d++) {
187
+ sum0 += flatVectors[offset + d] * query[d];
188
+ }
189
+ const dot = sum0 + sum1 + sum2 + sum3 + sum4 + sum5 + sum6 + sum7;
190
+ const dist = 1 - dot;
191
+ outDistances[i] = dist < 1e-10 ? 0 : dist;
192
+ }
193
+ else if (this.metric === 'euclidean') {
194
+ let sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
195
+ let sum4 = 0, sum5 = 0, sum6 = 0, sum7 = 0;
196
+ let d = 0;
197
+ const limit8 = dim - 7;
198
+ for (; d < limit8; d += 8) {
199
+ const d0 = flatVectors[offset + d] - query[d];
200
+ const d1 = flatVectors[offset + d + 1] - query[d + 1];
201
+ const d2 = flatVectors[offset + d + 2] - query[d + 2];
202
+ const d3 = flatVectors[offset + d + 3] - query[d + 3];
203
+ const d4 = flatVectors[offset + d + 4] - query[d + 4];
204
+ const d5 = flatVectors[offset + d + 5] - query[d + 5];
205
+ const d6 = flatVectors[offset + d + 6] - query[d + 6];
206
+ const d7 = flatVectors[offset + d + 7] - query[d + 7];
207
+ sum0 += d0 * d0;
208
+ sum1 += d1 * d1;
209
+ sum2 += d2 * d2;
210
+ sum3 += d3 * d3;
211
+ sum4 += d4 * d4;
212
+ sum5 += d5 * d5;
213
+ sum6 += d6 * d6;
214
+ sum7 += d7 * d7;
215
+ }
216
+ for (; d < dim; d++) {
217
+ const diff = flatVectors[offset + d] - query[d];
218
+ sum0 += diff * diff;
219
+ }
220
+ outDistances[i] = Math.sqrt(sum0 + sum1 + sum2 + sum3 + sum4 + sum5 + sum6 + sum7);
221
+ }
222
+ else {
223
+ // dot_product: -dot
224
+ let sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
225
+ let sum4 = 0, sum5 = 0, sum6 = 0, sum7 = 0;
226
+ let d = 0;
227
+ const limit8 = dim - 7;
228
+ for (; d < limit8; d += 8) {
229
+ sum0 += flatVectors[offset + d] * query[d];
230
+ sum1 += flatVectors[offset + d + 1] * query[d + 1];
231
+ sum2 += flatVectors[offset + d + 2] * query[d + 2];
232
+ sum3 += flatVectors[offset + d + 3] * query[d + 3];
233
+ sum4 += flatVectors[offset + d + 4] * query[d + 4];
234
+ sum5 += flatVectors[offset + d + 5] * query[d + 5];
235
+ sum6 += flatVectors[offset + d + 6] * query[d + 6];
236
+ sum7 += flatVectors[offset + d + 7] * query[d + 7];
237
+ }
238
+ for (; d < dim; d++) {
239
+ sum0 += flatVectors[offset + d] * query[d];
240
+ }
241
+ outDistances[i] = -(sum0 + sum1 + sum2 + sum3 + sum4 + sum5 + sum6 + sum7);
242
+ }
243
+ }
244
+ }
245
+ /**
246
+ * Batch int8 distance calculation with inlined 8-wide unrolled loop.
247
+ */
248
+ calculateDistancesBatchInt8(queryInt8, neighborIds, outDistances, count) {
249
+ const dim = this.dimension;
250
+ const flatInt8 = this.flatInt8Vectors;
251
+ for (let i = 0; i < count; i++) {
252
+ const offset = neighborIds[i] * dim;
253
+ if (this.metric === 'euclidean') {
254
+ let sum = 0;
255
+ for (let d = 0; d < dim; d++) {
256
+ const diff = queryInt8[d] - flatInt8[offset + d];
257
+ sum += diff * diff;
258
+ }
259
+ outDistances[i] = Math.sqrt(sum);
260
+ }
261
+ else {
262
+ // cosine/dot_product: -dotProduct
263
+ let sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
264
+ let sum4 = 0, sum5 = 0, sum6 = 0, sum7 = 0;
265
+ let d = 0;
266
+ const limit8 = dim - 7;
267
+ for (; d < limit8; d += 8) {
268
+ sum0 += queryInt8[d] * flatInt8[offset + d];
269
+ sum1 += queryInt8[d + 1] * flatInt8[offset + d + 1];
270
+ sum2 += queryInt8[d + 2] * flatInt8[offset + d + 2];
271
+ sum3 += queryInt8[d + 3] * flatInt8[offset + d + 3];
272
+ sum4 += queryInt8[d + 4] * flatInt8[offset + d + 4];
273
+ sum5 += queryInt8[d + 5] * flatInt8[offset + d + 5];
274
+ sum6 += queryInt8[d + 6] * flatInt8[offset + d + 6];
275
+ sum7 += queryInt8[d + 7] * flatInt8[offset + d + 7];
276
+ }
277
+ for (; d < dim; d++) {
278
+ sum0 += queryInt8[d] * flatInt8[offset + d];
279
+ }
280
+ outDistances[i] = -(sum0 + sum1 + sum2 + sum3 + sum4 + sum5 + sum6 + sum7);
281
+ }
282
+ }
283
+ }
284
+ /**
285
+ * Quantize a query vector to int8 using stored params.
286
+ */
287
+ quantizeQuery(query) {
288
+ const dim = this.dimension;
289
+ const buf = this.queryInt8Buffer;
290
+ const scale = this.quantizationScale;
291
+ const offset = this.quantizationOffset;
292
+ for (let d = 0; d < dim; d++) {
293
+ const normalized = (query[d] - offset[d]) * scale[d] - 128;
294
+ buf[d] = Math.max(-128, Math.min(127, Math.round(normalized)));
295
+ }
296
+ return buf;
297
+ }
298
+ searchKNN(query, k, efSearch) {
299
+ if (this.entryPointId === -1 || this.nodeCount === 0)
300
+ return [];
301
+ const effectiveEf = efSearch || Math.max(k * 2, 50);
302
+ let normalizedQuery = query;
303
+ if (this.vectorsAreNormalized) {
304
+ this.queryNormBuffer.set(query);
305
+ normalizeInPlace(this.queryNormBuffer);
306
+ normalizedQuery = this.queryNormBuffer;
307
+ }
308
+ // Greedy descent from top to layer 1
309
+ let currentBestId = this.entryPointId;
310
+ let currentBestDist = this.distanceFn(normalizedQuery, this.getVector(this.entryPointId));
311
+ for (let l = this.maxLevel; l > 0; l--) {
312
+ this.clearVisited();
313
+ this.markVisited(currentBestId);
314
+ let improved = true;
315
+ while (improved) {
316
+ improved = false;
317
+ const nodeNeighbors = this.neighbors[currentBestId]?.[l] || [];
318
+ for (const nid of nodeNeighbors) {
319
+ if (this.isVisited(nid))
320
+ continue;
321
+ this.markVisited(nid);
322
+ const dist = this.distanceFn(normalizedQuery, this.getVector(nid));
323
+ if (dist < currentBestDist) {
324
+ currentBestDist = dist;
325
+ currentBestId = nid;
326
+ improved = true;
327
+ }
328
+ }
329
+ }
330
+ }
331
+ // Search layer 0 with batch distance calculation
332
+ return this.searchLayer0(normalizedQuery, currentBestId, currentBestDist, effectiveEf, k);
333
+ }
334
+ /**
335
+ * Quantized search: int8 candidate scan → float32 rescore.
336
+ */
337
+ searchKNNQuantized(query, k, candidateMultiplier = 3, efSearch) {
338
+ if (!this.quantizationEnabled || !this.flatInt8Vectors || !this.queryInt8Buffer) {
339
+ return this.searchKNN(query, k, efSearch || Math.max(k * 2, 50));
340
+ }
341
+ if (this.entryPointId === -1 || this.nodeCount === 0)
342
+ return [];
343
+ let normalizedQuery = query;
344
+ if (this.vectorsAreNormalized) {
345
+ this.queryNormBuffer.set(query);
346
+ normalizeInPlace(this.queryNormBuffer);
347
+ normalizedQuery = this.queryNormBuffer;
348
+ }
349
+ const numCandidates = k * candidateMultiplier;
350
+ const effectiveEf = efSearch || Math.max(numCandidates * 2, 50);
351
+ // Phase 1: Float32 greedy descent (upper layers)
352
+ let currentBestId = this.entryPointId;
353
+ let currentBestDist = this.distanceFn(normalizedQuery, this.getVector(this.entryPointId));
354
+ for (let l = this.maxLevel; l > 0; l--) {
355
+ this.clearVisited();
356
+ this.markVisited(currentBestId);
357
+ let improved = true;
358
+ while (improved) {
359
+ improved = false;
360
+ const nodeNeighbors = this.neighbors[currentBestId]?.[l] || [];
361
+ for (const nid of nodeNeighbors) {
362
+ if (this.isVisited(nid))
363
+ continue;
364
+ this.markVisited(nid);
365
+ const dist = this.distanceFn(normalizedQuery, this.getVector(nid));
366
+ if (dist < currentBestDist) {
367
+ currentBestDist = dist;
368
+ currentBestId = nid;
369
+ improved = true;
370
+ }
371
+ }
372
+ }
373
+ }
374
+ // Phase 2: Int8 layer 0 search
375
+ const int8Query = this.quantizeQuery(normalizedQuery);
376
+ const candidates = this.searchLayer0Int8(int8Query, currentBestId, effectiveEf);
377
+ // Phase 3: Float32 rescore of top candidates
378
+ const rescoreCount = Math.min(candidates.length, numCandidates);
379
+ if (rescoreCount <= k) {
380
+ const rescored = new Array(rescoreCount);
381
+ for (let i = 0; i < rescoreCount; i++) {
382
+ const c = candidates[i];
383
+ rescored[i] = { id: c.id, distance: this.distanceFn(normalizedQuery, this.getVector(c.id)) };
384
+ }
385
+ rescored.sort((a, b) => a.distance - b.distance || a.id - b.id);
386
+ return rescored;
387
+ }
388
+ const heap = new MaxBinaryHeap(k);
389
+ for (let i = 0; i < rescoreCount; i++) {
390
+ const c = candidates[i];
391
+ const dist = this.distanceFn(normalizedQuery, this.getVector(c.id));
392
+ if (heap.size() < k) {
393
+ heap.push(c.id, dist);
394
+ }
395
+ else if (dist < heap.peekValue()) {
396
+ heap.pop();
397
+ heap.push(c.id, dist);
398
+ }
399
+ }
400
+ const heapSize = heap.size();
401
+ const result = new Array(heapSize);
402
+ for (let i = heapSize - 1; i >= 0; i--) {
403
+ result[i] = { id: heap.peek(), distance: heap.peekValue() };
404
+ heap.pop();
405
+ }
406
+ return result;
407
+ }
408
+ /**
409
+ * Layer 0 float32 search with batch distance calculation.
410
+ */
411
+ searchLayer0(query, entryId, entryDist, ef, k) {
412
+ this.clearVisited();
413
+ this.candidatesHeap.clear();
414
+ this.resultsHeap.clear();
415
+ this.candidatesHeap.push(entryId, entryDist);
416
+ this.resultsHeap.push(entryId, entryDist);
417
+ this.markVisited(entryId);
418
+ let furthestResultDist = entryDist;
419
+ const batchIds = this.batchNeighborIds;
420
+ const batchDists = this.batchDistances;
421
+ while (!this.candidatesHeap.isEmpty()) {
422
+ const candDist = this.candidatesHeap.peekValue();
423
+ if (candDist > furthestResultDist && this.resultsHeap.size() >= ef)
424
+ break;
425
+ const candId = this.candidatesHeap.pop();
426
+ const nodeNeighbors = this.neighbors[candId]?.[0] || [];
427
+ // Collect unvisited neighbors for batch distance
428
+ let batchCount = 0;
429
+ for (let i = 0; i < nodeNeighbors.length; i++) {
430
+ const neighborId = nodeNeighbors[i];
431
+ if (!this.isVisited(neighborId)) {
432
+ this.markVisited(neighborId);
433
+ batchIds[batchCount] = neighborId;
434
+ batchCount++;
435
+ }
436
+ }
437
+ if (batchCount > 0) {
438
+ if (batchDists.length < batchCount) {
439
+ this.batchDistances.length = batchCount;
440
+ }
441
+ this.calculateDistancesBatch(query, batchIds, batchDists, batchCount);
442
+ for (let i = 0; i < batchCount; i++) {
443
+ const distance = batchDists[i];
444
+ if (this.resultsHeap.size() < ef || distance < furthestResultDist) {
445
+ this.candidatesHeap.push(batchIds[i], distance);
446
+ this.resultsHeap.push(batchIds[i], distance);
447
+ if (this.resultsHeap.size() > ef) {
448
+ this.resultsHeap.pop();
449
+ }
450
+ furthestResultDist = this.resultsHeap.peekValue();
451
+ }
452
+ }
453
+ }
454
+ }
455
+ const resultCount = this.resultsHeap.size();
456
+ const results = new Array(resultCount);
457
+ let idx = resultCount - 1;
458
+ while (!this.resultsHeap.isEmpty()) {
459
+ const dist = this.resultsHeap.peekValue();
460
+ const id = this.resultsHeap.pop();
461
+ results[idx--] = { id, distance: dist };
462
+ }
463
+ if (results.length > k)
464
+ results.length = k;
465
+ return results;
466
+ }
467
+ /**
468
+ * Layer 0 int8 search with batch distance calculation.
469
+ */
470
+ searchLayer0Int8(int8Query, entryId, ef) {
471
+ this.clearVisited();
472
+ this.candidatesHeap.clear();
473
+ this.resultsHeap.clear();
474
+ // Compute entry distance with int8
475
+ const dim = this.dimension;
476
+ const flatInt8 = this.flatInt8Vectors;
477
+ const entryOffset = entryId * dim;
478
+ let entryDist;
479
+ if (this.metric === 'euclidean') {
480
+ let sum = 0;
481
+ for (let d = 0; d < dim; d++) {
482
+ const diff = int8Query[d] - flatInt8[entryOffset + d];
483
+ sum += diff * diff;
484
+ }
485
+ entryDist = Math.sqrt(sum);
486
+ }
487
+ else {
488
+ let sum = 0;
489
+ for (let d = 0; d < dim; d++) {
490
+ sum += int8Query[d] * flatInt8[entryOffset + d];
491
+ }
492
+ entryDist = -sum;
493
+ }
494
+ this.candidatesHeap.push(entryId, entryDist);
495
+ this.resultsHeap.push(entryId, entryDist);
496
+ this.markVisited(entryId);
497
+ let furthestResultDist = entryDist;
498
+ const batchIds = this.batchNeighborIds;
499
+ const batchDists = this.batchDistances;
500
+ while (!this.candidatesHeap.isEmpty()) {
501
+ const candDist = this.candidatesHeap.peekValue();
502
+ if (candDist > furthestResultDist && this.resultsHeap.size() >= ef)
503
+ break;
504
+ const candId = this.candidatesHeap.pop();
505
+ const nodeNeighbors = this.neighbors[candId]?.[0] || [];
506
+ let batchCount = 0;
507
+ for (let i = 0; i < nodeNeighbors.length; i++) {
508
+ const neighborId = nodeNeighbors[i];
509
+ if (!this.isVisited(neighborId)) {
510
+ this.markVisited(neighborId);
511
+ batchIds[batchCount] = neighborId;
512
+ batchCount++;
513
+ }
514
+ }
515
+ if (batchCount > 0) {
516
+ if (batchDists.length < batchCount) {
517
+ this.batchDistances.length = batchCount;
518
+ }
519
+ this.calculateDistancesBatchInt8(int8Query, batchIds, batchDists, batchCount);
520
+ for (let i = 0; i < batchCount; i++) {
521
+ const distance = batchDists[i];
522
+ if (this.resultsHeap.size() < ef || distance < furthestResultDist) {
523
+ this.candidatesHeap.push(batchIds[i], distance);
524
+ this.resultsHeap.push(batchIds[i], distance);
525
+ if (this.resultsHeap.size() > ef) {
526
+ this.resultsHeap.pop();
527
+ }
528
+ furthestResultDist = this.resultsHeap.peekValue();
529
+ }
530
+ }
531
+ }
532
+ }
533
+ // Extract results
534
+ const resultCount = this.resultsHeap.size();
535
+ const results = new Array(resultCount);
536
+ let idx = resultCount - 1;
537
+ while (!this.resultsHeap.isEmpty()) {
538
+ const dist = this.resultsHeap.peekValue();
539
+ const id = this.resultsHeap.pop();
540
+ results[idx--] = { id, distance: dist };
541
+ }
542
+ return results;
543
+ }
544
+ /**
545
+ * Apply incremental graph updates from the main thread.
546
+ * Adds new nodes' neighbor lists without full re-deserialization.
547
+ */
548
+ applyGraphUpdate(newNodes) {
549
+ for (const node of newNodes) {
550
+ // Grow neighbors array if needed
551
+ while (this.neighbors.length <= node.id) {
552
+ this.neighbors.push([]);
553
+ }
554
+ this.neighbors[node.id] = node.neighbors;
555
+ // Grow visited array if needed
556
+ if (node.id >= this.visitedArray.length) {
557
+ const newArr = new Uint16Array(Math.max(this.visitedArray.length * 2, node.id + 1000));
558
+ newArr.set(this.visitedArray);
559
+ this.visitedArray = newArr;
560
+ }
561
+ }
562
+ // Update nodeCount
563
+ this.nodeCount = this.neighbors.length;
564
+ }
565
+ /**
566
+ * Update entry point and max level (called after graph update).
567
+ */
568
+ updateEntryPoint(entryPointId, maxLevel) {
569
+ this.entryPointId = entryPointId;
570
+ this.maxLevel = maxLevel;
571
+ }
572
+ }
573
+ //# sourceMappingURL=SearchWorker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchWorker.js","sourceRoot":"","sources":["../src/SearchWorker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
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;AAM/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;AAYD,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;IAYnC;;;OAGG;IACH,iBAAiB,IAAI,cAAc;IAInC;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAab,MAAM;IAUpB;;OAEG;YACW,YAAY;IAuD1B;;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"}
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"}