@theihtisham/agent-shadow-brain 6.0.0 → 6.0.2

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 (144) hide show
  1. package/README.md +107 -7
  2. package/dist/brain/brain-3d.d.ts +79 -0
  3. package/dist/brain/brain-3d.d.ts.map +1 -0
  4. package/dist/brain/brain-3d.js +468 -0
  5. package/dist/brain/brain-3d.js.map +1 -0
  6. package/dist/brain/brain-active-learner.d.ts +74 -0
  7. package/dist/brain/brain-active-learner.d.ts.map +1 -0
  8. package/dist/brain/brain-active-learner.js +425 -0
  9. package/dist/brain/brain-active-learner.js.map +1 -0
  10. package/dist/brain/brain-ascii.d.ts +32 -0
  11. package/dist/brain/brain-ascii.d.ts.map +1 -0
  12. package/dist/brain/brain-ascii.js +402 -0
  13. package/dist/brain/brain-ascii.js.map +1 -0
  14. package/dist/brain/brain-cinema.d.ts +45 -0
  15. package/dist/brain/brain-cinema.d.ts.map +1 -0
  16. package/dist/brain/brain-cinema.js +393 -0
  17. package/dist/brain/brain-cinema.js.map +1 -0
  18. package/dist/brain/brain-coach.d.ts +45 -0
  19. package/dist/brain/brain-coach.d.ts.map +1 -0
  20. package/dist/brain/brain-coach.js +383 -0
  21. package/dist/brain/brain-coach.js.map +1 -0
  22. package/dist/brain/brain-consolidator.d.ts +56 -0
  23. package/dist/brain/brain-consolidator.d.ts.map +1 -0
  24. package/dist/brain/brain-consolidator.js +386 -0
  25. package/dist/brain/brain-consolidator.js.map +1 -0
  26. package/dist/brain/brain-contradictions.d.ts +57 -0
  27. package/dist/brain/brain-contradictions.d.ts.map +1 -0
  28. package/dist/brain/brain-contradictions.js +443 -0
  29. package/dist/brain/brain-contradictions.js.map +1 -0
  30. package/dist/brain/brain-diff.d.ts +61 -0
  31. package/dist/brain/brain-diff.d.ts.map +1 -0
  32. package/dist/brain/brain-diff.js +439 -0
  33. package/dist/brain/brain-diff.js.map +1 -0
  34. package/dist/brain/brain-dna.d.ts +59 -0
  35. package/dist/brain/brain-dna.d.ts.map +1 -0
  36. package/dist/brain/brain-dna.js +336 -0
  37. package/dist/brain/brain-dna.js.map +1 -0
  38. package/dist/brain/brain-doppelganger.d.ts +32 -0
  39. package/dist/brain/brain-doppelganger.d.ts.map +1 -0
  40. package/dist/brain/brain-doppelganger.js +417 -0
  41. package/dist/brain/brain-doppelganger.js.map +1 -0
  42. package/dist/brain/brain-graph-walker.d.ts +54 -0
  43. package/dist/brain/brain-graph-walker.d.ts.map +1 -0
  44. package/dist/brain/brain-graph-walker.js +412 -0
  45. package/dist/brain/brain-graph-walker.js.map +1 -0
  46. package/dist/brain/brain-holiday-card.d.ts +50 -0
  47. package/dist/brain/brain-holiday-card.d.ts.map +1 -0
  48. package/dist/brain/brain-holiday-card.js +432 -0
  49. package/dist/brain/brain-holiday-card.js.map +1 -0
  50. package/dist/brain/brain-memes.d.ts +44 -0
  51. package/dist/brain/brain-memes.d.ts.map +1 -0
  52. package/dist/brain/brain-memes.js +438 -0
  53. package/dist/brain/brain-memes.js.map +1 -0
  54. package/dist/brain/brain-memory-tiers.d.ts +67 -0
  55. package/dist/brain/brain-memory-tiers.d.ts.map +1 -0
  56. package/dist/brain/brain-memory-tiers.js +292 -0
  57. package/dist/brain/brain-memory-tiers.js.map +1 -0
  58. package/dist/brain/brain-notebook.d.ts +68 -0
  59. package/dist/brain/brain-notebook.d.ts.map +1 -0
  60. package/dist/brain/brain-notebook.js +379 -0
  61. package/dist/brain/brain-notebook.js.map +1 -0
  62. package/dist/brain/brain-quantize.d.ts +62 -0
  63. package/dist/brain/brain-quantize.d.ts.map +1 -0
  64. package/dist/brain/brain-quantize.js +346 -0
  65. package/dist/brain/brain-quantize.js.map +1 -0
  66. package/dist/brain/brain-query-expander.d.ts +31 -0
  67. package/dist/brain/brain-query-expander.d.ts.map +1 -0
  68. package/dist/brain/brain-query-expander.js +417 -0
  69. package/dist/brain/brain-query-expander.js.map +1 -0
  70. package/dist/brain/brain-quest.d.ts +58 -0
  71. package/dist/brain/brain-quest.d.ts.map +1 -0
  72. package/dist/brain/brain-quest.js +541 -0
  73. package/dist/brain/brain-quest.js.map +1 -0
  74. package/dist/brain/brain-recall-cache.d.ts +73 -0
  75. package/dist/brain/brain-recall-cache.d.ts.map +1 -0
  76. package/dist/brain/brain-recall-cache.js +444 -0
  77. package/dist/brain/brain-recall-cache.js.map +1 -0
  78. package/dist/brain/brain-reflex.d.ts +55 -0
  79. package/dist/brain/brain-reflex.d.ts.map +1 -0
  80. package/dist/brain/brain-reflex.js +364 -0
  81. package/dist/brain/brain-reflex.js.map +1 -0
  82. package/dist/brain/brain-replay.d.ts +74 -0
  83. package/dist/brain/brain-replay.d.ts.map +1 -0
  84. package/dist/brain/brain-replay.js +336 -0
  85. package/dist/brain/brain-replay.js.map +1 -0
  86. package/dist/brain/brain-rerank.d.ts +39 -0
  87. package/dist/brain/brain-rerank.d.ts.map +1 -0
  88. package/dist/brain/brain-rerank.js +216 -0
  89. package/dist/brain/brain-rerank.js.map +1 -0
  90. package/dist/brain/brain-roast.d.ts +44 -0
  91. package/dist/brain/brain-roast.d.ts.map +1 -0
  92. package/dist/brain/brain-roast.js +566 -0
  93. package/dist/brain/brain-roast.js.map +1 -0
  94. package/dist/brain/brain-sonification.d.ts +57 -0
  95. package/dist/brain/brain-sonification.d.ts.map +1 -0
  96. package/dist/brain/brain-sonification.js +286 -0
  97. package/dist/brain/brain-sonification.js.map +1 -0
  98. package/dist/brain/brain-tarot.d.ts +49 -0
  99. package/dist/brain/brain-tarot.d.ts.map +1 -0
  100. package/dist/brain/brain-tarot.js +634 -0
  101. package/dist/brain/brain-tarot.js.map +1 -0
  102. package/dist/brain/brain-time-capsule.d.ts +80 -0
  103. package/dist/brain/brain-time-capsule.d.ts.map +1 -0
  104. package/dist/brain/brain-time-capsule.js +289 -0
  105. package/dist/brain/brain-time-capsule.js.map +1 -0
  106. package/dist/brain/brain-trophies.d.ts +60 -0
  107. package/dist/brain/brain-trophies.d.ts.map +1 -0
  108. package/dist/brain/brain-trophies.js +431 -0
  109. package/dist/brain/brain-trophies.js.map +1 -0
  110. package/dist/brain/brain-working-memory.d.ts +78 -0
  111. package/dist/brain/brain-working-memory.d.ts.map +1 -0
  112. package/dist/brain/brain-working-memory.js +367 -0
  113. package/dist/brain/brain-working-memory.js.map +1 -0
  114. package/dist/brain/confidence-gate.d.ts +69 -0
  115. package/dist/brain/confidence-gate.d.ts.map +1 -0
  116. package/dist/brain/confidence-gate.js +244 -0
  117. package/dist/brain/confidence-gate.js.map +1 -0
  118. package/dist/brain/constitution.d.ts +59 -0
  119. package/dist/brain/constitution.d.ts.map +1 -0
  120. package/dist/brain/constitution.js +315 -0
  121. package/dist/brain/constitution.js.map +1 -0
  122. package/dist/brain/embeddings-v2.d.ts +58 -0
  123. package/dist/brain/embeddings-v2.d.ts.map +1 -0
  124. package/dist/brain/embeddings-v2.js +344 -0
  125. package/dist/brain/embeddings-v2.js.map +1 -0
  126. package/dist/brain/hive-voice.d.ts +71 -0
  127. package/dist/brain/hive-voice.d.ts.map +1 -0
  128. package/dist/brain/hive-voice.js +352 -0
  129. package/dist/brain/hive-voice.js.map +1 -0
  130. package/dist/brain/markdown-export.d.ts +48 -0
  131. package/dist/brain/markdown-export.d.ts.map +1 -0
  132. package/dist/brain/markdown-export.js +382 -0
  133. package/dist/brain/markdown-export.js.map +1 -0
  134. package/dist/brain/multimodal-vision.d.ts +38 -0
  135. package/dist/brain/multimodal-vision.d.ts.map +1 -0
  136. package/dist/brain/multimodal-vision.js +257 -0
  137. package/dist/brain/multimodal-vision.js.map +1 -0
  138. package/dist/brain/otel-lite.d.ts +71 -0
  139. package/dist/brain/otel-lite.d.ts.map +1 -0
  140. package/dist/brain/otel-lite.js +232 -0
  141. package/dist/brain/otel-lite.js.map +1 -0
  142. package/dist/cli.js +881 -2
  143. package/dist/cli.js.map +1 -1
  144. package/package.json +2 -2
@@ -0,0 +1,346 @@
1
+ // src/brain/brain-quantize.ts — int8 vector quantization for the brain
2
+ // v6.0.2 — Hive Mind Edition
3
+ //
4
+ // Float32 vectors are 4x bigger on disk and in memory than they need to be for
5
+ // approximate-nearest-neighbor recall. Symmetric int8 quantization preserves
6
+ // recall to within ~1% on unit-norm vectors while shrinking the working set
7
+ // by 4x. That means the same RAM budget covers four times as many memories
8
+ // and the cold-start read of a sharded JSON index is dramatically faster.
9
+ //
10
+ // Design:
11
+ // - Symmetric per-vector int8: scale = max(|v_i|) / 127, q_i = round(v_i/scale).
12
+ // Per-vector scale (not per-tensor) handles the case where some memories
13
+ // have a much wider dynamic range than others (e.g. Ollama dense vs hash).
14
+ // - Compressed format ".q8" is a tight binary:
15
+ // magic : 4 bytes ascii "Q8I0"
16
+ // version : uint32 1
17
+ // dim : uint32 embedding dimension
18
+ // count : uint32 number of entries
19
+ // entries[] : { float64 scale; int8[dim] q; uint16 idLen; utf8 id[idLen] }
20
+ // - Direct cosine on int8: integer dot then divide by scaleA*scaleB and
21
+ // (dim * 127^2). Skips a dequantize-into-float32 round trip in the hot path.
22
+ //
23
+ // Exposed: BrainQuantize, getBrainQuantize(), resetBrainQuantizeForTests().
24
+ // .quantize(vec)
25
+ // .dequantize(q, scale)
26
+ // .cosineQuantized(a, scaleA, b, scaleB)
27
+ // .compressIndex(srcPath, outPath)
28
+ // .loadCompressedIndex(path)
29
+ // .quantizeRoundtripError(vectors)
30
+ import * as fs from 'fs';
31
+ import * as path from 'path';
32
+ const MAGIC = Buffer.from('Q8I0', 'ascii');
33
+ const VERSION = 1;
34
+ const HEADER_BYTES = 4 + 4 + 4 + 4; // magic + version + dim + count
35
+ export class BrainQuantize {
36
+ /** Symmetric int8 quantization with per-vector scale. */
37
+ quantize(vector) {
38
+ if (!vector || vector.length === 0)
39
+ return new Int8Array(0);
40
+ let maxAbs = 0;
41
+ for (let i = 0; i < vector.length; i++) {
42
+ const a = Math.abs(vector[i]);
43
+ if (a > maxAbs)
44
+ maxAbs = a;
45
+ }
46
+ const out = new Int8Array(vector.length);
47
+ if (maxAbs === 0)
48
+ return out; // all zeros — quantizes to all zeros
49
+ const scale = maxAbs / 127;
50
+ const inv = 1 / scale;
51
+ for (let i = 0; i < vector.length; i++) {
52
+ const q = Math.round(vector[i] * inv);
53
+ out[i] = q > 127 ? 127 : q < -127 ? -127 : q;
54
+ }
55
+ return out;
56
+ }
57
+ /** Recover an approximation of the original float vector. */
58
+ dequantize(q, scale) {
59
+ if (!q || q.length === 0)
60
+ return [];
61
+ const out = new Array(q.length);
62
+ for (let i = 0; i < q.length; i++)
63
+ out[i] = q[i] * scale;
64
+ return out;
65
+ }
66
+ /**
67
+ * Cosine similarity on quantized vectors WITHOUT dequantizing first.
68
+ *
69
+ * If `a` and `b` were derived from unit-norm float vectors, the cosine is
70
+ * just the dot product after rescaling. We compute the integer dot then
71
+ * apply `scaleA * scaleB` to convert back to the float dot, and clamp to
72
+ * [-1, 1] for numeric safety. Note: the dim/127^2 factor in the spec is the
73
+ * theoretical worst-case scale (when every element is ±127); the actual
74
+ * normalization is captured entirely by scaleA*scaleB, so we use that and
75
+ * do not double-divide. The clamp guards against quantization rounding
76
+ * pushing the result slightly out of range.
77
+ */
78
+ cosineQuantized(a, scaleA, b, scaleB) {
79
+ if (!a || !b || a.length === 0 || b.length === 0)
80
+ return 0;
81
+ const n = Math.min(a.length, b.length);
82
+ let dot = 0;
83
+ for (let i = 0; i < n; i++)
84
+ dot += a[i] * b[i];
85
+ const sim = dot * scaleA * scaleB;
86
+ if (sim > 1)
87
+ return 1;
88
+ if (sim < -1)
89
+ return -1;
90
+ return sim;
91
+ }
92
+ /** Convert a v2 sharded JSON index into a single compressed .q8 binary. */
93
+ async compressIndex(srcPath, outPath) {
94
+ const start = Date.now();
95
+ const docs = this.readShardDocs(srcPath);
96
+ if (docs.length === 0) {
97
+ // Empty index → still write a valid empty file.
98
+ const header = Buffer.alloc(HEADER_BYTES);
99
+ MAGIC.copy(header, 0);
100
+ header.writeUInt32LE(VERSION, 4);
101
+ header.writeUInt32LE(0, 8);
102
+ header.writeUInt32LE(0, 12);
103
+ this.atomicWrite(outPath, header);
104
+ return {
105
+ originalBytes: this.measureBytes(srcPath),
106
+ compressedBytes: header.length,
107
+ compressionRatio: 0,
108
+ vectorCount: 0,
109
+ dim: 0,
110
+ encodingError: { meanAbs: 0, max: 0 },
111
+ durationMs: Date.now() - start,
112
+ };
113
+ }
114
+ const dim = docs[0].vector.length;
115
+ const quantized = [];
116
+ for (const d of docs) {
117
+ if (!d.vector || d.vector.length !== dim)
118
+ continue; // skip ragged
119
+ const q = this.quantize(d.vector);
120
+ const scale = this.scaleOf(d.vector);
121
+ quantized.push({ id: d.id, q, scale, original: d.vector });
122
+ }
123
+ // Estimate output size up front so we allocate one Buffer.
124
+ let bodyBytes = 0;
125
+ const idBufs = [];
126
+ for (const e of quantized) {
127
+ const idBuf = Buffer.from(e.id, 'utf-8');
128
+ idBufs.push(idBuf);
129
+ bodyBytes += 8 + dim + 2 + idBuf.length;
130
+ }
131
+ const totalBytes = HEADER_BYTES + bodyBytes;
132
+ const buf = Buffer.alloc(totalBytes);
133
+ MAGIC.copy(buf, 0);
134
+ buf.writeUInt32LE(VERSION, 4);
135
+ buf.writeUInt32LE(dim, 8);
136
+ buf.writeUInt32LE(quantized.length, 12);
137
+ let offset = HEADER_BYTES;
138
+ for (let i = 0; i < quantized.length; i++) {
139
+ const e = quantized[i];
140
+ buf.writeDoubleLE(e.scale, offset);
141
+ offset += 8;
142
+ // int8 array copy — Buffer views the Int8Array directly.
143
+ Buffer.from(e.q.buffer, e.q.byteOffset, e.q.byteLength).copy(buf, offset);
144
+ offset += dim;
145
+ const idBuf = idBufs[i];
146
+ buf.writeUInt16LE(idBuf.length, offset);
147
+ offset += 2;
148
+ idBuf.copy(buf, offset);
149
+ offset += idBuf.length;
150
+ }
151
+ this.atomicWrite(outPath, buf);
152
+ // Encoding error sample (cap at 500 vectors so this stays cheap).
153
+ const sampleN = Math.min(500, quantized.length);
154
+ let sumAbs = 0, maxAbs = 0, count = 0;
155
+ for (let i = 0; i < sampleN; i++) {
156
+ const e = quantized[i];
157
+ const recon = this.dequantize(e.q, e.scale);
158
+ for (let j = 0; j < dim; j++) {
159
+ const err = Math.abs(recon[j] - e.original[j]);
160
+ sumAbs += err;
161
+ if (err > maxAbs)
162
+ maxAbs = err;
163
+ count++;
164
+ }
165
+ }
166
+ const originalBytes = this.measureBytes(srcPath);
167
+ return {
168
+ originalBytes,
169
+ compressedBytes: totalBytes,
170
+ compressionRatio: originalBytes > 0 ? +(originalBytes / totalBytes).toFixed(3) : 0,
171
+ vectorCount: quantized.length,
172
+ dim,
173
+ encodingError: {
174
+ meanAbs: count > 0 ? +(sumAbs / count).toFixed(6) : 0,
175
+ max: +maxAbs.toFixed(6),
176
+ },
177
+ durationMs: Date.now() - start,
178
+ };
179
+ }
180
+ /** Load a .q8 file and return vectors plus a ready-to-use recall function. */
181
+ async loadCompressedIndex(filePath) {
182
+ const buf = await fs.promises.readFile(filePath);
183
+ if (buf.length < HEADER_BYTES)
184
+ throw new Error(`q8 index too short: ${buf.length} bytes`);
185
+ if (buf.subarray(0, 4).compare(MAGIC) !== 0)
186
+ throw new Error('q8 index: bad magic');
187
+ const version = buf.readUInt32LE(4);
188
+ if (version !== VERSION)
189
+ throw new Error(`q8 index: unsupported version ${version}`);
190
+ const dim = buf.readUInt32LE(8);
191
+ const count = buf.readUInt32LE(12);
192
+ const vectors = new Map();
193
+ let offset = HEADER_BYTES;
194
+ for (let i = 0; i < count; i++) {
195
+ if (offset + 8 + dim + 2 > buf.length)
196
+ throw new Error(`q8 index truncated at entry ${i}`);
197
+ const scale = buf.readDoubleLE(offset);
198
+ offset += 8;
199
+ // Copy out of the parent buffer so the underlying ArrayBuffer can be GC'd
200
+ // and the Int8Array view stays tight to its dim bytes.
201
+ const q = new Int8Array(dim);
202
+ buf.copy(Buffer.from(q.buffer, q.byteOffset, q.byteLength), 0, offset, offset + dim);
203
+ offset += dim;
204
+ const idLen = buf.readUInt16LE(offset);
205
+ offset += 2;
206
+ if (offset + idLen > buf.length)
207
+ throw new Error(`q8 index truncated id at entry ${i}`);
208
+ const id = buf.subarray(offset, offset + idLen).toString('utf-8');
209
+ offset += idLen;
210
+ vectors.set(id, { q, scale });
211
+ }
212
+ const recallFn = (query, topK) => {
213
+ if (vectors.size === 0 || !query || query.length === 0 || topK <= 0)
214
+ return [];
215
+ const qVec = query.length === dim ? query : padOrTruncate(query, dim);
216
+ const qInt = this.quantize(qVec);
217
+ const qScale = this.scaleOf(qVec);
218
+ const hits = [];
219
+ for (const [id, entry] of vectors) {
220
+ const score = this.cosineQuantized(qInt, qScale, entry.q, entry.scale);
221
+ hits.push({ id, score });
222
+ }
223
+ hits.sort((a, b) => b.score - a.score);
224
+ return hits.slice(0, topK);
225
+ };
226
+ return { vectors, dim, recallFn };
227
+ }
228
+ /** Self-test: report mean / max absolute reconstruction error on `vectors`. */
229
+ quantizeRoundtripError(vectors) {
230
+ if (!vectors || vectors.length === 0)
231
+ return { meanAbs: 0, max: 0, samples: 0 };
232
+ let sum = 0, maxAbs = 0, n = 0;
233
+ for (const v of vectors) {
234
+ if (!v || v.length === 0)
235
+ continue;
236
+ const q = this.quantize(v);
237
+ const scale = this.scaleOf(v);
238
+ for (let i = 0; i < v.length; i++) {
239
+ const recon = q[i] * scale;
240
+ const err = Math.abs(recon - v[i]);
241
+ sum += err;
242
+ if (err > maxAbs)
243
+ maxAbs = err;
244
+ n++;
245
+ }
246
+ }
247
+ return {
248
+ meanAbs: n > 0 ? +(sum / n).toFixed(6) : 0,
249
+ max: +maxAbs.toFixed(6),
250
+ samples: n,
251
+ };
252
+ }
253
+ // ── Internals ──────────────────────────────────────────────────────────
254
+ scaleOf(vector) {
255
+ let maxAbs = 0;
256
+ for (let i = 0; i < vector.length; i++) {
257
+ const a = Math.abs(vector[i]);
258
+ if (a > maxAbs)
259
+ maxAbs = a;
260
+ }
261
+ return maxAbs === 0 ? 0 : maxAbs / 127;
262
+ }
263
+ readShardDocs(srcPath) {
264
+ // Accept either a single JSON file with {docs: [...]} or a directory of shards.
265
+ const docs = [];
266
+ try {
267
+ const stat = fs.statSync(srcPath);
268
+ if (stat.isDirectory()) {
269
+ for (const f of fs.readdirSync(srcPath)) {
270
+ if (!f.endsWith('.json'))
271
+ continue;
272
+ const raw = fs.readFileSync(path.join(srcPath, f), 'utf-8');
273
+ this.collectDocs(raw, docs);
274
+ }
275
+ }
276
+ else {
277
+ const raw = fs.readFileSync(srcPath, 'utf-8');
278
+ this.collectDocs(raw, docs);
279
+ }
280
+ }
281
+ catch { /* missing or unreadable → empty result */ }
282
+ return docs;
283
+ }
284
+ collectDocs(raw, out) {
285
+ try {
286
+ const parsed = JSON.parse(raw);
287
+ if (Array.isArray(parsed.docs)) {
288
+ for (const d of parsed.docs) {
289
+ if (d && typeof d.id === 'string' && Array.isArray(d.vector))
290
+ out.push({ id: d.id, vector: d.vector });
291
+ }
292
+ }
293
+ else if (parsed.vectors && typeof parsed.vectors === 'object') {
294
+ // Legacy v1 cache shape: { vectors: { id: number[] } }
295
+ for (const [id, vec] of Object.entries(parsed.vectors)) {
296
+ if (Array.isArray(vec))
297
+ out.push({ id, vector: vec });
298
+ }
299
+ }
300
+ }
301
+ catch { /* skip corrupt shard */ }
302
+ }
303
+ measureBytes(srcPath) {
304
+ try {
305
+ const stat = fs.statSync(srcPath);
306
+ if (stat.isFile())
307
+ return stat.size;
308
+ if (stat.isDirectory()) {
309
+ let total = 0;
310
+ for (const f of fs.readdirSync(srcPath)) {
311
+ try {
312
+ total += fs.statSync(path.join(srcPath, f)).size;
313
+ }
314
+ catch { /* skip */ }
315
+ }
316
+ return total;
317
+ }
318
+ }
319
+ catch { /* missing */ }
320
+ return 0;
321
+ }
322
+ atomicWrite(filePath, data) {
323
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
324
+ const tmp = filePath + '.tmp';
325
+ fs.writeFileSync(tmp, data);
326
+ fs.renameSync(tmp, filePath);
327
+ }
328
+ }
329
+ function padOrTruncate(v, dim) {
330
+ if (v.length === dim)
331
+ return v;
332
+ if (v.length > dim)
333
+ return v.slice(0, dim);
334
+ const out = v.slice();
335
+ while (out.length < dim)
336
+ out.push(0);
337
+ return out;
338
+ }
339
+ let _instance = null;
340
+ export function getBrainQuantize() {
341
+ if (!_instance)
342
+ _instance = new BrainQuantize();
343
+ return _instance;
344
+ }
345
+ export function resetBrainQuantizeForTests() { _instance = null; }
346
+ //# sourceMappingURL=brain-quantize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-quantize.js","sourceRoot":"","sources":["../../src/brain/brain-quantize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export type ExpansionTechnique = 'synonyms' | 'abbrev' | 'related' | 'hyde';
2
+ export interface ExpansionOptions {
3
+ techniques?: ExpansionTechnique[];
4
+ maxTerms?: number;
5
+ hydeModel?: string;
6
+ }
7
+ export interface ExpansionResult {
8
+ original: string;
9
+ expanded: string;
10
+ techniques_used: string[];
11
+ terms_added: string[];
12
+ hyde_doc?: string;
13
+ durationMs: number;
14
+ }
15
+ export declare class BrainQueryExpander {
16
+ /** Expand a query using selected techniques; returns the densified search text. */
17
+ expand(query: string, opts?: ExpansionOptions): Promise<ExpansionResult>;
18
+ /**
19
+ * Run all techniques and return the densest expansion. Best for direct use
20
+ * by retrievers that don't want to think about technique selection.
21
+ */
22
+ combineAll(query: string, opts?: ExpansionOptions): Promise<ExpansionResult>;
23
+ private lookupRelatedEntities;
24
+ private generateHyde;
25
+ private probeHydeModel;
26
+ private templateHyde;
27
+ private persist;
28
+ }
29
+ export declare function getBrainQueryExpander(): BrainQueryExpander;
30
+ export declare function resetBrainQueryExpanderForTests(): void;
31
+ //# sourceMappingURL=brain-query-expander.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-query-expander.d.ts","sourceRoot":"","sources":["../../src/brain/brain-query-expander.ts"],"names":[],"mappings":"AAkCA,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAE5E,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AA0LD,qBAAa,kBAAkB;IAC7B,mFAAmF;IAC7E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAkF9E;;;OAGG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;YASpE,qBAAqB;YAiCrB,YAAY;YAyBZ,cAAc;IAsB5B,OAAO,CAAC,YAAY;YAaN,OAAO;CAOtB;AAYD,wBAAgB,qBAAqB,IAAI,kBAAkB,CAG1D;AACD,wBAAgB,+BAA+B,IAAI,IAAI,CAAsB"}