@delali/narsil 0.2.4-next.51 → 0.2.4-next.54

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 (64) hide show
  1. package/README.md +33 -27
  2. package/dist/adapters/filesystem.mjs +1 -1
  3. package/dist/adapters/indexeddb.mjs +1 -1
  4. package/dist/{capabilities-BWm4IITU.d.ts → capabilities-DlYw0Ov0.d.ts} +13 -2
  5. package/dist/{chunk-KMMJMDUA.mjs → chunk-3L4U6EJQ.mjs} +15 -10
  6. package/dist/chunk-4NVPQ6S5.mjs +366 -0
  7. package/dist/{chunk-CMVG2UEF.mjs → chunk-5T6AOR37.mjs} +56 -518
  8. package/dist/{chunk-ND34I3SV.mjs → chunk-BH5SYB5W.mjs} +3295 -2149
  9. package/dist/{chunk-XE6XR2OE.mjs → chunk-D2S642IV.mjs} +4 -2
  10. package/dist/{chunk-P4ELXVJQ.mjs → chunk-FRQVMFY7.mjs} +7 -1
  11. package/dist/chunk-IFBKLBGB.mjs +7 -0
  12. package/dist/chunk-L225SHNB.mjs +513 -0
  13. package/dist/{chunk-MHE7YWAU.mjs → chunk-NTZYA3SJ.mjs} +3 -3
  14. package/dist/{chunk-WYJXSLER.mjs → chunk-POWOTUKJ.mjs} +7 -1
  15. package/dist/{chunk-CV5H7XL7.mjs → chunk-RGS7FMCB.mjs} +53 -10
  16. package/dist/{chunk-ZHUQKZBE.mjs → chunk-TVT5V4E7.mjs} +101 -34
  17. package/dist/chunk-U2AL3SON.mjs +4198 -0
  18. package/dist/chunk-UTOFOJOR.mjs +135 -0
  19. package/dist/{chunk-BEIK3EOZ.mjs → chunk-XNQAIO74.mjs} +5523 -3847
  20. package/dist/chunk-Y3L5MDRV.mjs +96 -0
  21. package/dist/chunk-ZJ4CSAB2.mjs +13 -0
  22. package/dist/{client-B_X6_AbT.d.ts → client-CQUqt9Ir.d.ts} +13 -4
  23. package/dist/client.d.ts +8 -8
  24. package/dist/client.mjs +20 -14
  25. package/dist/{config-Czh2YNDi.d.ts → config-CNas6wJH.d.ts} +2 -2
  26. package/dist/{config-OON7IJ_B.d.ts → config-bXxnJrQc.d.ts} +80 -35
  27. package/dist/direct-executor-RBA5O7EN.mjs +12 -0
  28. package/dist/distribution/coordinator/etcd.d.ts +2 -2
  29. package/dist/distribution/coordinator/etcd.mjs +1 -1
  30. package/dist/distribution/coordinator/in-memory.d.ts +2 -2
  31. package/dist/distribution/transport/grpc.mjs +1 -1
  32. package/dist/distribution.d.ts +8 -8
  33. package/dist/distribution.mjs +32 -17
  34. package/dist/embeddings/openai.mjs +1 -1
  35. package/dist/{engine-9PtFY50q.d.ts → engine-Dj4I91Jv.d.ts} +21 -8
  36. package/dist/index.browser.mjs +12962 -7786
  37. package/dist/index.d.ts +9 -21
  38. package/dist/index.mjs +14 -13
  39. package/dist/{memory-Bzd5xcEW.d.ts → memory-xrXOZMbw.d.ts} +68 -13
  40. package/dist/persistence/durability/checkpoint-worker.d.ts +138 -3
  41. package/dist/persistence/durability/checkpoint-worker.mjs +32 -18
  42. package/dist/react.d.ts +11 -11
  43. package/dist/react.mjs +16 -4
  44. package/dist/{schema-BqRx9t4E.d.ts → schema-mLpXZBEh.d.ts} +43 -12
  45. package/dist/serialization/crc32-worker.mjs +2 -1
  46. package/dist/server.d.ts +13 -10
  47. package/dist/server.mjs +136 -47
  48. package/dist/simd-DW5AtJ6B.d.ts +41 -0
  49. package/dist/{tasks-DT7L1p6w.d.ts → tasks-Df73Tjgq.d.ts} +9 -5
  50. package/dist/{thread-PZLEO6JL.mjs → thread-5UP6MGED.mjs} +131 -43
  51. package/dist/{types-DXPxaXPO.d.ts → types-BTIVO8DI.d.ts} +1 -1
  52. package/dist/vector/search-worker.d.ts +292 -128
  53. package/dist/vector/search-worker.mjs +70 -54
  54. package/dist/workers/entry.mjs +30 -14
  55. package/package.json +52 -31
  56. package/dist/brute-force-DbHYCTc3.d.ts +0 -8
  57. package/dist/chunk-CBLS46IE.mjs +0 -10
  58. package/dist/chunk-PIWKZPP7.mjs +0 -64
  59. package/dist/chunk-PMBHH44R.mjs +0 -492
  60. package/dist/chunk-RP23PWMV.mjs +0 -11
  61. package/dist/chunk-X6YZO4MQ.mjs +0 -1572
  62. package/dist/direct-executor-OREXU72C.mjs +0 -12
  63. package/dist/vector/hnsw-build-worker.d.ts +0 -105
  64. package/dist/vector/hnsw-build-worker.mjs +0 -123
@@ -1,492 +0,0 @@
1
- import { createSharedArenaSimd, importAdjacency, createHNSWWorkspace, createArenaSimd, WASM_PAGE_BYTES, VECTOR_STORE_INITIAL_CAPACITY, arenaFloat32Distance, ABSENT_DOCUMENT_RANK, QUANTIZATION_PADDING_FACTOR } from './chunk-X6YZO4MQ.mjs';
2
-
3
- // src/vector/scalar-quantization-math.ts
4
- function deriveSq8Constants(alpha, offset, dimensions) {
5
- return {
6
- alpha,
7
- offset,
8
- alphaSquared: alpha * alpha,
9
- alphaTimesOffset: alpha * offset,
10
- dimensionsTimesOffsetSquared: dimensions * offset * offset,
11
- invAlpha: alpha > 0 ? 1 / alpha : 0
12
- };
13
- }
14
- function quantizeVectorInto(target, vector, dimensions, constants) {
15
- const { offset, invAlpha } = constants;
16
- let sum = 0;
17
- let sumSq = 0;
18
- for (let d = 0; d < dimensions; d++) {
19
- const normalized = (vector[d] - offset) * invAlpha;
20
- const scaled = normalized + 0.5;
21
- const q = scaled < 0 ? 0 : scaled > 255 ? 255 : scaled | 0;
22
- target[d] = q;
23
- sum += q;
24
- sumSq += q * q;
25
- }
26
- return { sum, sumSq };
27
- }
28
- function quantizedMagnitude(constants, sumSq, sum) {
29
- const val = constants.alphaSquared * sumSq + 2 * constants.alphaTimesOffset * sum + constants.dimensionsTimesOffsetSquared;
30
- return val > 0 ? Math.sqrt(val) : 0;
31
- }
32
- function realDotFromInt(constants, intDot, querySum, documentSum) {
33
- return constants.alphaSquared * intDot + constants.alphaTimesOffset * (querySum + documentSum) + constants.dimensionsTimesOffsetSquared;
34
- }
35
- function scalarQuantizedDistance(codes, documentSums, documentMagnitudes, dimensions, constants, queryQuantized, querySum, queryMagnitude, ordinal, metric) {
36
- const base = ordinal * dimensions;
37
- if (metric === "euclidean") {
38
- let intSqDist = 0;
39
- for (let d = 0; d < dimensions; d++) {
40
- const diff = queryQuantized[d] - codes[base + d];
41
- intSqDist += diff * diff;
42
- }
43
- return constants.alpha * Math.sqrt(intSqDist);
44
- }
45
- let intDot = 0;
46
- for (let d = 0; d < dimensions; d++) {
47
- intDot += queryQuantized[d] * codes[base + d];
48
- }
49
- const realDot = realDotFromInt(constants, intDot, querySum, documentSums[ordinal]);
50
- if (metric === "dotProduct") {
51
- return -realDot;
52
- }
53
- const vecMag = documentMagnitudes[ordinal];
54
- if (!vecMag || vecMag === 0 || queryMagnitude === 0) return 1;
55
- return 1 - realDot / (queryMagnitude * vecMag);
56
- }
57
- function arenaQuantizedDistance(simd, queryByteOffset, codeByteOffset, dimensions, constants, querySum, queryMagnitude, documentSum, documentMagnitude, metric) {
58
- if (metric === "euclidean") {
59
- const intSqDist = simd.sqdist_u8(queryByteOffset, codeByteOffset, dimensions);
60
- return constants.alpha * Math.sqrt(intSqDist);
61
- }
62
- const intDot = simd.dot_u8(queryByteOffset, codeByteOffset, dimensions);
63
- const realDot = realDotFromInt(constants, intDot, querySum, documentSum);
64
- if (metric === "dotProduct") {
65
- return -realDot;
66
- }
67
- if (!documentMagnitude || documentMagnitude === 0 || queryMagnitude === 0) return 1;
68
- return 1 - realDot / (queryMagnitude * documentMagnitude);
69
- }
70
-
71
- // src/vector/shared-generation/worker-view.ts
72
- function createVectorReader(snapshot, simd, scratchSlot) {
73
- const { layout, magnitudes, rankByOrdinal } = snapshot;
74
- const { dimension, slots } = layout;
75
- const vectors = new Float32Array(snapshot.memory.buffer, layout.vectorsOffset, slots * dimension);
76
- const scratchByteOffset = scratchSlot * layout.float32ScratchStride;
77
- const scratch = simd ? new Float32Array(snapshot.memory.buffer, scratchByteOffset, dimension) : null;
78
- const holdsDocument = (ordinal) => ordinal >= 0 && ordinal < slots && rankByOrdinal[ordinal] !== ABSENT_DOCUMENT_RANK;
79
- return {
80
- entryForOrdinal(ordinal) {
81
- if (!holdsDocument(ordinal)) return void 0;
82
- const base = ordinal * dimension;
83
- return { vector: vectors.subarray(base, base + dimension), magnitude: magnitudes[ordinal] };
84
- },
85
- prepareQueryArena(query) {
86
- if (!simd || !scratch || query.length !== dimension) return null;
87
- scratch.set(query, 0);
88
- return { magnitude: simd.magnitude(scratchByteOffset, dimension) };
89
- },
90
- distanceFromArena(prepared, ordinal, metric) {
91
- if (!simd || !holdsDocument(ordinal)) return Number.POSITIVE_INFINITY;
92
- const byteOffset = layout.vectorsOffset + ordinal * dimension * 4;
93
- return arenaFloat32Distance(
94
- simd,
95
- scratchByteOffset,
96
- byteOffset,
97
- dimension,
98
- metric,
99
- prepared.magnitude,
100
- magnitudes[ordinal]
101
- );
102
- }
103
- };
104
- }
105
- function createQuantizerReader(snapshot, simd, scratchSlot) {
106
- if (snapshot.quantization !== "sq8" || snapshot.calibration === null) return void 0;
107
- const { layout, codeSums, codeMagnitudes, codePresent } = snapshot;
108
- const { dimension, slots } = layout;
109
- const constants = deriveSq8Constants(snapshot.calibration.alpha, snapshot.calibration.offset, dimension);
110
- const codes = new Uint8Array(snapshot.memory.buffer, layout.codesOffset, slots * dimension);
111
- const scratchByteOffset = layout.codeScratchOffset + scratchSlot * layout.codeScratchStride;
112
- const scratch = simd ? new Uint8Array(snapshot.memory.buffer, scratchByteOffset, dimension) : null;
113
- let liveCodes = 0;
114
- for (let ordinal = 0; ordinal < codePresent.length; ordinal++) {
115
- if (codePresent[ordinal] === 1) liveCodes++;
116
- }
117
- const holdsCodes = (ordinal) => ordinal >= 0 && ordinal < slots && codePresent[ordinal] === 1;
118
- return {
119
- get size() {
120
- return liveCodes;
121
- },
122
- isCalibrated: () => true,
123
- prepareQuery(query) {
124
- const quantized = new Uint8Array(dimension);
125
- const { sum, sumSq } = quantizeVectorInto(quantized, query, dimension, constants);
126
- return { quantized, sum, sumSq, magnitude: quantizedMagnitude(constants, sumSq, sum) };
127
- },
128
- distanceFromPreparedByOrdinal(prepared, ordinal, metric) {
129
- if (!holdsCodes(ordinal)) return Number.POSITIVE_INFINITY;
130
- return scalarQuantizedDistance(
131
- codes,
132
- codeSums,
133
- codeMagnitudes,
134
- dimension,
135
- constants,
136
- prepared.quantized,
137
- prepared.sum,
138
- prepared.magnitude,
139
- ordinal,
140
- metric
141
- );
142
- },
143
- prepareQueryArena(query) {
144
- if (!simd || !scratch) return null;
145
- const { sum, sumSq } = quantizeVectorInto(scratch, query, dimension, constants);
146
- return { sum, sumSq, magnitude: quantizedMagnitude(constants, sumSq, sum) };
147
- },
148
- distanceFromArena(prepared, ordinal, metric) {
149
- if (!simd || !holdsCodes(ordinal)) return Number.POSITIVE_INFINITY;
150
- return arenaQuantizedDistance(
151
- simd,
152
- scratchByteOffset,
153
- layout.codesOffset + ordinal * dimension,
154
- dimension,
155
- constants,
156
- prepared.sum,
157
- prepared.magnitude,
158
- codeSums[ordinal],
159
- codeMagnitudes[ordinal],
160
- metric
161
- );
162
- }
163
- };
164
- }
165
- function openSharedWorkerCopy(snapshot, scratchSlot) {
166
- if (scratchSlot < 0 || scratchSlot >= snapshot.layout.workerSlots) {
167
- throw new Error(`Scratch slot ${scratchSlot} is outside the ${snapshot.layout.workerSlots} reserved slots`);
168
- }
169
- const simd = createSharedArenaSimd(snapshot.memory);
170
- const adjacency = importAdjacency(snapshot.graph.adjacency);
171
- const capacity = Math.max(snapshot.graph.capacity, adjacency.capacity);
172
- const searchState = {
173
- dimension: snapshot.dimension,
174
- store: createVectorReader(snapshot, simd, scratchSlot),
175
- quantizer: createQuantizerReader(snapshot, simd, scratchSlot),
176
- adjacency,
177
- tombstones: snapshot.graph.tombstones,
178
- tombstoneCount: snapshot.graph.tombstoneCount,
179
- nodeCount: snapshot.graph.nodeCount,
180
- capacity,
181
- visited: new Uint32Array(capacity),
182
- visitStamp: 0,
183
- entryPointOrd: snapshot.graph.entryPointOrd,
184
- topLayer: snapshot.graph.topLayer,
185
- workspace: createHNSWWorkspace()
186
- };
187
- return { searchState, rankByOrdinal: snapshot.rankByOrdinal };
188
- }
189
-
190
- // src/vector/scalar-quantization-calibration.ts
191
- function computeCalibrationBounds(vectors, dimensions) {
192
- let globalMin = Number.POSITIVE_INFINITY;
193
- let globalMax = Number.NEGATIVE_INFINITY;
194
- let count = 0;
195
- for (const vec of vectors) {
196
- for (let d = 0; d < dimensions; d++) {
197
- const val = vec[d];
198
- if (val < globalMin) globalMin = val;
199
- if (val > globalMax) globalMax = val;
200
- }
201
- count++;
202
- }
203
- if (count === 0) return null;
204
- const range = globalMax - globalMin;
205
- const pad = range * QUANTIZATION_PADDING_FACTOR;
206
- globalMin -= pad;
207
- globalMax += pad;
208
- if (globalMin === globalMax) {
209
- globalMin -= 1e-3;
210
- globalMax += 1e-3;
211
- }
212
- return { alpha: (globalMax - globalMin) / 255, offset: globalMin };
213
- }
214
-
215
- // src/vector/scalar-quantization.ts
216
- function createScalarQuantizer(dimensions, ordinalSource) {
217
- const docToOrd = /* @__PURE__ */ new Map();
218
- let simd = createArenaSimd();
219
- const arenaByteOffset = simd ? Math.max(16, Math.ceil(dimensions / 16) * 16) : 0;
220
- let capacity = 0;
221
- let quantizedArena = simd ? new Uint8Array(simd.memory.buffer, arenaByteOffset) : new Uint8Array(0);
222
- let scratch = simd ? new Uint8Array(simd.memory.buffer, 0, arenaByteOffset) : new Uint8Array(0);
223
- let sums = new Float64Array(0);
224
- let sumSqs = new Float64Array(0);
225
- let mags = new Float64Array(0);
226
- let present = new Uint8Array(0);
227
- let selfNextOrd = 0;
228
- let liveCount = 0;
229
- let constants = deriveSq8Constants(0, 0, dimensions);
230
- let calibrated = false;
231
- function ensureCapacity(needed) {
232
- if (needed <= capacity) return;
233
- let newCap = capacity === 0 ? VECTOR_STORE_INITIAL_CAPACITY : capacity;
234
- while (newCap < needed) newCap *= 2;
235
- const nextSums = new Float64Array(newCap);
236
- nextSums.set(sums);
237
- sums = nextSums;
238
- const nextSumSqs = new Float64Array(newCap);
239
- nextSumSqs.set(sumSqs);
240
- sumSqs = nextSumSqs;
241
- const nextMags = new Float64Array(newCap);
242
- nextMags.set(mags);
243
- mags = nextMags;
244
- const nextPresent = new Uint8Array(newCap);
245
- nextPresent.set(present);
246
- present = nextPresent;
247
- if (simd) {
248
- const requiredBytes = arenaByteOffset + newCap * dimensions;
249
- const have = simd.memory.buffer.byteLength;
250
- if (requiredBytes > have) {
251
- try {
252
- simd.memory.grow(Math.ceil((requiredBytes - have) / WASM_PAGE_BYTES));
253
- } catch {
254
- const migrated = new Uint8Array(newCap * dimensions);
255
- migrated.set(quantizedArena.subarray(0, capacity * dimensions));
256
- quantizedArena = migrated;
257
- simd = null;
258
- capacity = newCap;
259
- return;
260
- }
261
- }
262
- quantizedArena = new Uint8Array(simd.memory.buffer, arenaByteOffset);
263
- scratch = new Uint8Array(simd.memory.buffer, 0, arenaByteOffset);
264
- } else {
265
- const nextArena = new Uint8Array(newCap * dimensions);
266
- nextArena.set(quantizedArena);
267
- quantizedArena = nextArena;
268
- }
269
- capacity = newCap;
270
- }
271
- function resolveOrdinal(docId) {
272
- const fromSource = ordinalSource?.getOrdinal(docId);
273
- if (fromSource !== void 0) return fromSource;
274
- const known = docToOrd.get(docId);
275
- if (known !== void 0) return known;
276
- return selfNextOrd++;
277
- }
278
- function quantizeInto(ord, vector) {
279
- const base = ord * dimensions;
280
- const { sum, sumSq } = quantizeVectorInto(
281
- quantizedArena.subarray(base, base + dimensions),
282
- vector,
283
- dimensions,
284
- constants
285
- );
286
- sums[ord] = sum;
287
- sumSqs[ord] = sumSq;
288
- mags[ord] = quantizedMagnitude(constants, sumSq, sum);
289
- }
290
- function storeEntry(docId, ord) {
291
- if (present[ord] === 0) {
292
- present[ord] = 1;
293
- liveCount++;
294
- }
295
- docToOrd.set(docId, ord);
296
- }
297
- function calibrateFromVectors(vectors) {
298
- const bounds = computeCalibrationBounds(vectors, dimensions);
299
- if (bounds === null) return;
300
- constants = deriveSq8Constants(bounds.alpha, bounds.offset, dimensions);
301
- calibrated = true;
302
- }
303
- function isOutsideBounds(vector) {
304
- const currentMin = constants.offset;
305
- const currentMax = constants.offset + constants.alpha * 255;
306
- for (let d = 0; d < dimensions; d++) {
307
- if (vector[d] < currentMin || vector[d] > currentMax) {
308
- return true;
309
- }
310
- }
311
- return false;
312
- }
313
- function distanceScalar(queryQuantized, querySum, queryMagnitude, ord, metric) {
314
- if (ord < 0 || ord >= capacity || present[ord] === 0) return Number.POSITIVE_INFINITY;
315
- return scalarQuantizedDistance(
316
- quantizedArena,
317
- sums,
318
- mags,
319
- dimensions,
320
- constants,
321
- queryQuantized,
322
- querySum,
323
- queryMagnitude,
324
- ord,
325
- metric
326
- );
327
- }
328
- return {
329
- get dimensions() {
330
- return dimensions;
331
- },
332
- get size() {
333
- return liveCount;
334
- },
335
- get calibration() {
336
- return calibrated ? { alpha: constants.alpha, offset: constants.offset } : null;
337
- },
338
- isCalibrated() {
339
- return calibrated;
340
- },
341
- calibrate(vectors) {
342
- calibrateFromVectors(vectors);
343
- },
344
- needsRecalibration(vector) {
345
- if (!calibrated) return false;
346
- return isOutsideBounds(vector);
347
- },
348
- recalibrateAll(vectors) {
349
- const collected = [];
350
- const rawVectors = [];
351
- for (const pair of vectors) {
352
- collected.push(pair);
353
- rawVectors.push(pair[1]);
354
- }
355
- calibrateFromVectors(rawVectors);
356
- docToOrd.clear();
357
- present.fill(0);
358
- liveCount = 0;
359
- for (const [docId, vec] of collected) {
360
- const ord = resolveOrdinal(docId);
361
- ensureCapacity(ord + 1);
362
- quantizeInto(ord, vec);
363
- storeEntry(docId, ord);
364
- }
365
- },
366
- quantize(docId, vector) {
367
- if (!calibrated) {
368
- calibrateFromVectors([vector]);
369
- }
370
- const ord = resolveOrdinal(docId);
371
- ensureCapacity(ord + 1);
372
- quantizeInto(ord, vector);
373
- storeEntry(docId, ord);
374
- },
375
- remove(docId) {
376
- const ord = docToOrd.get(docId);
377
- if (ord === void 0) return;
378
- docToOrd.delete(docId);
379
- if (present[ord] === 1) {
380
- present[ord] = 0;
381
- liveCount--;
382
- }
383
- },
384
- getQuantized(docId) {
385
- const ord = docToOrd.get(docId);
386
- if (ord === void 0 || present[ord] === 0) return void 0;
387
- const base = ord * dimensions;
388
- return quantizedArena.subarray(base, base + dimensions);
389
- },
390
- prepareQuery(query) {
391
- if (!calibrated) return null;
392
- const quantized = new Uint8Array(dimensions);
393
- const { sum, sumSq } = quantizeVectorInto(quantized, query, dimensions, constants);
394
- const mag = quantizedMagnitude(constants, sumSq, sum);
395
- return { quantized, sum, sumSq, magnitude: mag };
396
- },
397
- distanceFromPrepared(prepared, docId, metric) {
398
- const ord = docToOrd.get(docId);
399
- if (ord === void 0) return Number.POSITIVE_INFINITY;
400
- return distanceScalar(prepared.quantized, prepared.sum, prepared.magnitude, ord, metric);
401
- },
402
- distanceFromPreparedByOrdinal(prepared, ordinal, metric) {
403
- return distanceScalar(prepared.quantized, prepared.sum, prepared.magnitude, ordinal, metric);
404
- },
405
- prepareQueryArena(query) {
406
- if (!calibrated || !simd) return null;
407
- const { sum, sumSq } = quantizeVectorInto(scratch, query, dimensions, constants);
408
- const magnitude = quantizedMagnitude(constants, sumSq, sum);
409
- return { sum, sumSq, magnitude };
410
- },
411
- distanceFromArena(prepared, ordinal, metric) {
412
- if (!simd || ordinal < 0 || ordinal >= capacity || present[ordinal] === 0) {
413
- return Number.POSITIVE_INFINITY;
414
- }
415
- const arenaOffset = arenaByteOffset + ordinal * dimensions;
416
- return arenaQuantizedDistance(
417
- simd,
418
- 0,
419
- arenaOffset,
420
- dimensions,
421
- constants,
422
- prepared.sum,
423
- prepared.magnitude,
424
- sums[ordinal],
425
- mags[ordinal],
426
- metric
427
- );
428
- },
429
- hasOrdinal(ordinal) {
430
- return ordinal >= 0 && ordinal < capacity && present[ordinal] === 1;
431
- },
432
- restoreCalibration(restoredAlpha, restoredOffset) {
433
- constants = deriveSq8Constants(restoredAlpha, restoredOffset, dimensions);
434
- calibrated = true;
435
- },
436
- restoreEntry(docId, quantized, sum, sumSq) {
437
- const ord = resolveOrdinal(docId);
438
- ensureCapacity(ord + 1);
439
- const base = ord * dimensions;
440
- quantizedArena.set(quantized.subarray(0, dimensions), base);
441
- sums[ord] = sum;
442
- sumSqs[ord] = sumSq;
443
- mags[ord] = quantizedMagnitude(constants, sumSq, sum);
444
- storeEntry(docId, ord);
445
- },
446
- copyStateInto(codes, targetSums, targetSumSqs, targetMagnitudes, targetPresent) {
447
- const copySlots = Math.min(capacity, Math.floor(codes.length / dimensions));
448
- if (copySlots <= 0) return;
449
- codes.set(quantizedArena.subarray(0, copySlots * dimensions));
450
- targetSums.set(sums.subarray(0, copySlots));
451
- targetSumSqs.set(sumSqs.subarray(0, copySlots));
452
- targetMagnitudes.set(mags.subarray(0, copySlots));
453
- targetPresent.set(present.subarray(0, copySlots));
454
- },
455
- serialize() {
456
- const serializedVectors = {};
457
- const serializedSums = {};
458
- const serializedSumSqs = {};
459
- for (const [docId, ord] of docToOrd) {
460
- if (present[ord] === 0) continue;
461
- const base = ord * dimensions;
462
- serializedVectors[docId] = Array.from(quantizedArena.subarray(base, base + dimensions));
463
- serializedSums[docId] = sums[ord];
464
- serializedSumSqs[docId] = sumSqs[ord];
465
- }
466
- return {
467
- alpha: constants.alpha,
468
- offset: constants.offset,
469
- quantizedVectors: serializedVectors,
470
- vectorSums: serializedSums,
471
- vectorSumSqs: serializedSumSqs
472
- };
473
- },
474
- clear() {
475
- docToOrd.clear();
476
- if (!simd) {
477
- quantizedArena = new Uint8Array(0);
478
- }
479
- sums = new Float64Array(0);
480
- sumSqs = new Float64Array(0);
481
- mags = new Float64Array(0);
482
- present = new Uint8Array(0);
483
- capacity = 0;
484
- selfNextOrd = 0;
485
- liveCount = 0;
486
- constants = deriveSq8Constants(0, 0, dimensions);
487
- calibrated = false;
488
- }
489
- };
490
- }
491
-
492
- export { createScalarQuantizer, openSharedWorkerCopy };
@@ -1,11 +0,0 @@
1
- // src/vector/hnsw/constants.ts
2
- var MAX_LAYER_CAP = 32;
3
- var MAX_M = 512;
4
- var INITIAL_UPPER_SLOTS = 64;
5
- var INITIAL_LIST_CAPACITY = 64;
6
- var COMPACTION_TOMBSTONE_RATIO = 0.1;
7
- var COMPACTION_ABSOLUTE_THRESHOLD = 1e3;
8
- var SQ8_OVERSELECTION_FACTOR = 2;
9
- var SQ8_RERANK_FLOOR = 10;
10
-
11
- export { COMPACTION_ABSOLUTE_THRESHOLD, COMPACTION_TOMBSTONE_RATIO, INITIAL_LIST_CAPACITY, INITIAL_UPPER_SLOTS, MAX_LAYER_CAP, MAX_M, SQ8_OVERSELECTION_FACTOR, SQ8_RERANK_FLOOR };