@danielsimonjr/memoryjs 1.0.0 → 1.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 (300) hide show
  1. package/README.md +385 -113
  2. package/README.md.backup-1768084780988 +266 -0
  3. package/dist/index.cjs +24156 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +16967 -0
  6. package/dist/index.d.ts +16963 -11
  7. package/dist/index.js +23887 -19
  8. package/dist/index.js.map +1 -1
  9. package/dist/workers/levenshteinWorker.cjs +102 -0
  10. package/dist/workers/levenshteinWorker.cjs.map +1 -0
  11. package/dist/workers/levenshteinWorker.js +57 -91
  12. package/dist/workers/levenshteinWorker.js.map +1 -1
  13. package/package.json +75 -69
  14. package/dist/core/EntityManager.d.ts +0 -268
  15. package/dist/core/EntityManager.d.ts.map +0 -1
  16. package/dist/core/EntityManager.js +0 -512
  17. package/dist/core/EntityManager.js.map +0 -1
  18. package/dist/core/GraphEventEmitter.d.ts +0 -202
  19. package/dist/core/GraphEventEmitter.d.ts.map +0 -1
  20. package/dist/core/GraphEventEmitter.js +0 -347
  21. package/dist/core/GraphEventEmitter.js.map +0 -1
  22. package/dist/core/GraphStorage.d.ts +0 -395
  23. package/dist/core/GraphStorage.d.ts.map +0 -1
  24. package/dist/core/GraphStorage.js +0 -786
  25. package/dist/core/GraphStorage.js.map +0 -1
  26. package/dist/core/GraphTraversal.d.ts +0 -141
  27. package/dist/core/GraphTraversal.d.ts.map +0 -1
  28. package/dist/core/GraphTraversal.js +0 -574
  29. package/dist/core/GraphTraversal.js.map +0 -1
  30. package/dist/core/HierarchyManager.d.ts +0 -111
  31. package/dist/core/HierarchyManager.d.ts.map +0 -1
  32. package/dist/core/HierarchyManager.js +0 -225
  33. package/dist/core/HierarchyManager.js.map +0 -1
  34. package/dist/core/ManagerContext.d.ts +0 -76
  35. package/dist/core/ManagerContext.d.ts.map +0 -1
  36. package/dist/core/ManagerContext.js +0 -129
  37. package/dist/core/ManagerContext.js.map +0 -1
  38. package/dist/core/ObservationManager.d.ts +0 -85
  39. package/dist/core/ObservationManager.d.ts.map +0 -1
  40. package/dist/core/ObservationManager.js +0 -124
  41. package/dist/core/ObservationManager.js.map +0 -1
  42. package/dist/core/RelationManager.d.ts +0 -131
  43. package/dist/core/RelationManager.d.ts.map +0 -1
  44. package/dist/core/RelationManager.js +0 -212
  45. package/dist/core/RelationManager.js.map +0 -1
  46. package/dist/core/SQLiteStorage.d.ts +0 -354
  47. package/dist/core/SQLiteStorage.d.ts.map +0 -1
  48. package/dist/core/SQLiteStorage.js +0 -919
  49. package/dist/core/SQLiteStorage.js.map +0 -1
  50. package/dist/core/StorageFactory.d.ts +0 -45
  51. package/dist/core/StorageFactory.d.ts.map +0 -1
  52. package/dist/core/StorageFactory.js +0 -65
  53. package/dist/core/StorageFactory.js.map +0 -1
  54. package/dist/core/TransactionManager.d.ts +0 -464
  55. package/dist/core/TransactionManager.d.ts.map +0 -1
  56. package/dist/core/TransactionManager.js +0 -869
  57. package/dist/core/TransactionManager.js.map +0 -1
  58. package/dist/core/index.d.ts +0 -17
  59. package/dist/core/index.d.ts.map +0 -1
  60. package/dist/core/index.js +0 -20
  61. package/dist/core/index.js.map +0 -1
  62. package/dist/features/AnalyticsManager.d.ts +0 -44
  63. package/dist/features/AnalyticsManager.d.ts.map +0 -1
  64. package/dist/features/AnalyticsManager.js +0 -224
  65. package/dist/features/AnalyticsManager.js.map +0 -1
  66. package/dist/features/ArchiveManager.d.ts +0 -133
  67. package/dist/features/ArchiveManager.d.ts.map +0 -1
  68. package/dist/features/ArchiveManager.js +0 -282
  69. package/dist/features/ArchiveManager.js.map +0 -1
  70. package/dist/features/CompressionManager.d.ts +0 -119
  71. package/dist/features/CompressionManager.d.ts.map +0 -1
  72. package/dist/features/CompressionManager.js +0 -470
  73. package/dist/features/CompressionManager.js.map +0 -1
  74. package/dist/features/IOManager.d.ts +0 -225
  75. package/dist/features/IOManager.d.ts.map +0 -1
  76. package/dist/features/IOManager.js +0 -1093
  77. package/dist/features/IOManager.js.map +0 -1
  78. package/dist/features/KeywordExtractor.d.ts +0 -61
  79. package/dist/features/KeywordExtractor.d.ts.map +0 -1
  80. package/dist/features/KeywordExtractor.js +0 -127
  81. package/dist/features/KeywordExtractor.js.map +0 -1
  82. package/dist/features/ObservationNormalizer.d.ts +0 -90
  83. package/dist/features/ObservationNormalizer.d.ts.map +0 -1
  84. package/dist/features/ObservationNormalizer.js +0 -194
  85. package/dist/features/ObservationNormalizer.js.map +0 -1
  86. package/dist/features/StreamingExporter.d.ts +0 -128
  87. package/dist/features/StreamingExporter.d.ts.map +0 -1
  88. package/dist/features/StreamingExporter.js +0 -212
  89. package/dist/features/StreamingExporter.js.map +0 -1
  90. package/dist/features/TagManager.d.ts +0 -147
  91. package/dist/features/TagManager.d.ts.map +0 -1
  92. package/dist/features/TagManager.js +0 -211
  93. package/dist/features/TagManager.js.map +0 -1
  94. package/dist/features/index.d.ts +0 -14
  95. package/dist/features/index.d.ts.map +0 -1
  96. package/dist/features/index.js +0 -15
  97. package/dist/features/index.js.map +0 -1
  98. package/dist/index.d.ts.map +0 -1
  99. package/dist/search/BM25Search.d.ts +0 -148
  100. package/dist/search/BM25Search.d.ts.map +0 -1
  101. package/dist/search/BM25Search.js +0 -340
  102. package/dist/search/BM25Search.js.map +0 -1
  103. package/dist/search/BasicSearch.d.ts +0 -51
  104. package/dist/search/BasicSearch.d.ts.map +0 -1
  105. package/dist/search/BasicSearch.js +0 -138
  106. package/dist/search/BasicSearch.js.map +0 -1
  107. package/dist/search/BooleanSearch.d.ts +0 -98
  108. package/dist/search/BooleanSearch.d.ts.map +0 -1
  109. package/dist/search/BooleanSearch.js +0 -431
  110. package/dist/search/BooleanSearch.js.map +0 -1
  111. package/dist/search/EarlyTerminationManager.d.ts +0 -140
  112. package/dist/search/EarlyTerminationManager.d.ts.map +0 -1
  113. package/dist/search/EarlyTerminationManager.js +0 -280
  114. package/dist/search/EarlyTerminationManager.js.map +0 -1
  115. package/dist/search/EmbeddingCache.d.ts +0 -175
  116. package/dist/search/EmbeddingCache.d.ts.map +0 -1
  117. package/dist/search/EmbeddingCache.js +0 -247
  118. package/dist/search/EmbeddingCache.js.map +0 -1
  119. package/dist/search/EmbeddingService.d.ts +0 -277
  120. package/dist/search/EmbeddingService.d.ts.map +0 -1
  121. package/dist/search/EmbeddingService.js +0 -531
  122. package/dist/search/EmbeddingService.js.map +0 -1
  123. package/dist/search/FuzzySearch.d.ts +0 -118
  124. package/dist/search/FuzzySearch.d.ts.map +0 -1
  125. package/dist/search/FuzzySearch.js +0 -313
  126. package/dist/search/FuzzySearch.js.map +0 -1
  127. package/dist/search/HybridScorer.d.ts +0 -181
  128. package/dist/search/HybridScorer.d.ts.map +0 -1
  129. package/dist/search/HybridScorer.js +0 -258
  130. package/dist/search/HybridScorer.js.map +0 -1
  131. package/dist/search/HybridSearchManager.d.ts +0 -80
  132. package/dist/search/HybridSearchManager.d.ts.map +0 -1
  133. package/dist/search/HybridSearchManager.js +0 -188
  134. package/dist/search/HybridSearchManager.js.map +0 -1
  135. package/dist/search/IncrementalIndexer.d.ts +0 -201
  136. package/dist/search/IncrementalIndexer.d.ts.map +0 -1
  137. package/dist/search/IncrementalIndexer.js +0 -343
  138. package/dist/search/IncrementalIndexer.js.map +0 -1
  139. package/dist/search/OptimizedInvertedIndex.d.ts +0 -163
  140. package/dist/search/OptimizedInvertedIndex.d.ts.map +0 -1
  141. package/dist/search/OptimizedInvertedIndex.js +0 -359
  142. package/dist/search/OptimizedInvertedIndex.js.map +0 -1
  143. package/dist/search/ParallelSearchExecutor.d.ts +0 -172
  144. package/dist/search/ParallelSearchExecutor.d.ts.map +0 -1
  145. package/dist/search/ParallelSearchExecutor.js +0 -310
  146. package/dist/search/ParallelSearchExecutor.js.map +0 -1
  147. package/dist/search/QuantizedVectorStore.d.ts +0 -171
  148. package/dist/search/QuantizedVectorStore.d.ts.map +0 -1
  149. package/dist/search/QuantizedVectorStore.js +0 -308
  150. package/dist/search/QuantizedVectorStore.js.map +0 -1
  151. package/dist/search/QueryAnalyzer.d.ts +0 -76
  152. package/dist/search/QueryAnalyzer.d.ts.map +0 -1
  153. package/dist/search/QueryAnalyzer.js +0 -228
  154. package/dist/search/QueryAnalyzer.js.map +0 -1
  155. package/dist/search/QueryCostEstimator.d.ts +0 -244
  156. package/dist/search/QueryCostEstimator.d.ts.map +0 -1
  157. package/dist/search/QueryCostEstimator.js +0 -653
  158. package/dist/search/QueryCostEstimator.js.map +0 -1
  159. package/dist/search/QueryPlanCache.d.ts +0 -220
  160. package/dist/search/QueryPlanCache.d.ts.map +0 -1
  161. package/dist/search/QueryPlanCache.js +0 -380
  162. package/dist/search/QueryPlanCache.js.map +0 -1
  163. package/dist/search/QueryPlanner.d.ts +0 -58
  164. package/dist/search/QueryPlanner.d.ts.map +0 -1
  165. package/dist/search/QueryPlanner.js +0 -138
  166. package/dist/search/QueryPlanner.js.map +0 -1
  167. package/dist/search/RankedSearch.d.ts +0 -71
  168. package/dist/search/RankedSearch.d.ts.map +0 -1
  169. package/dist/search/RankedSearch.js +0 -239
  170. package/dist/search/RankedSearch.js.map +0 -1
  171. package/dist/search/ReflectionManager.d.ts +0 -120
  172. package/dist/search/ReflectionManager.d.ts.map +0 -1
  173. package/dist/search/ReflectionManager.js +0 -232
  174. package/dist/search/ReflectionManager.js.map +0 -1
  175. package/dist/search/SavedSearchManager.d.ts +0 -79
  176. package/dist/search/SavedSearchManager.d.ts.map +0 -1
  177. package/dist/search/SavedSearchManager.js +0 -147
  178. package/dist/search/SavedSearchManager.js.map +0 -1
  179. package/dist/search/SearchFilterChain.d.ts +0 -120
  180. package/dist/search/SearchFilterChain.d.ts.map +0 -1
  181. package/dist/search/SearchFilterChain.js +0 -186
  182. package/dist/search/SearchFilterChain.js.map +0 -1
  183. package/dist/search/SearchManager.d.ts +0 -326
  184. package/dist/search/SearchManager.d.ts.map +0 -1
  185. package/dist/search/SearchManager.js +0 -454
  186. package/dist/search/SearchManager.js.map +0 -1
  187. package/dist/search/SearchSuggestions.d.ts +0 -27
  188. package/dist/search/SearchSuggestions.d.ts.map +0 -1
  189. package/dist/search/SearchSuggestions.js +0 -58
  190. package/dist/search/SearchSuggestions.js.map +0 -1
  191. package/dist/search/SemanticSearch.d.ts +0 -149
  192. package/dist/search/SemanticSearch.d.ts.map +0 -1
  193. package/dist/search/SemanticSearch.js +0 -324
  194. package/dist/search/SemanticSearch.js.map +0 -1
  195. package/dist/search/SymbolicSearch.d.ts +0 -61
  196. package/dist/search/SymbolicSearch.d.ts.map +0 -1
  197. package/dist/search/SymbolicSearch.js +0 -164
  198. package/dist/search/SymbolicSearch.js.map +0 -1
  199. package/dist/search/TFIDFEventSync.d.ts +0 -85
  200. package/dist/search/TFIDFEventSync.d.ts.map +0 -1
  201. package/dist/search/TFIDFEventSync.js +0 -134
  202. package/dist/search/TFIDFEventSync.js.map +0 -1
  203. package/dist/search/TFIDFIndexManager.d.ts +0 -151
  204. package/dist/search/TFIDFIndexManager.d.ts.map +0 -1
  205. package/dist/search/TFIDFIndexManager.js +0 -433
  206. package/dist/search/TFIDFIndexManager.js.map +0 -1
  207. package/dist/search/VectorStore.d.ts +0 -235
  208. package/dist/search/VectorStore.d.ts.map +0 -1
  209. package/dist/search/VectorStore.js +0 -312
  210. package/dist/search/VectorStore.js.map +0 -1
  211. package/dist/search/index.d.ts +0 -35
  212. package/dist/search/index.d.ts.map +0 -1
  213. package/dist/search/index.js +0 -53
  214. package/dist/search/index.js.map +0 -1
  215. package/dist/types/index.d.ts +0 -13
  216. package/dist/types/index.d.ts.map +0 -1
  217. package/dist/types/index.js +0 -13
  218. package/dist/types/index.js.map +0 -1
  219. package/dist/types/types.d.ts +0 -1811
  220. package/dist/types/types.d.ts.map +0 -1
  221. package/dist/types/types.js +0 -10
  222. package/dist/types/types.js.map +0 -1
  223. package/dist/utils/BatchProcessor.d.ts +0 -271
  224. package/dist/utils/BatchProcessor.d.ts.map +0 -1
  225. package/dist/utils/BatchProcessor.js +0 -377
  226. package/dist/utils/BatchProcessor.js.map +0 -1
  227. package/dist/utils/MemoryMonitor.d.ts +0 -176
  228. package/dist/utils/MemoryMonitor.d.ts.map +0 -1
  229. package/dist/utils/MemoryMonitor.js +0 -306
  230. package/dist/utils/MemoryMonitor.js.map +0 -1
  231. package/dist/utils/WorkerPoolManager.d.ts +0 -233
  232. package/dist/utils/WorkerPoolManager.d.ts.map +0 -1
  233. package/dist/utils/WorkerPoolManager.js +0 -421
  234. package/dist/utils/WorkerPoolManager.js.map +0 -1
  235. package/dist/utils/compressedCache.d.ts +0 -221
  236. package/dist/utils/compressedCache.d.ts.map +0 -1
  237. package/dist/utils/compressedCache.js +0 -349
  238. package/dist/utils/compressedCache.js.map +0 -1
  239. package/dist/utils/compressionUtil.d.ts +0 -214
  240. package/dist/utils/compressionUtil.d.ts.map +0 -1
  241. package/dist/utils/compressionUtil.js +0 -248
  242. package/dist/utils/compressionUtil.js.map +0 -1
  243. package/dist/utils/constants.d.ts +0 -245
  244. package/dist/utils/constants.d.ts.map +0 -1
  245. package/dist/utils/constants.js +0 -253
  246. package/dist/utils/constants.js.map +0 -1
  247. package/dist/utils/entityUtils.d.ts +0 -379
  248. package/dist/utils/entityUtils.d.ts.map +0 -1
  249. package/dist/utils/entityUtils.js +0 -649
  250. package/dist/utils/entityUtils.js.map +0 -1
  251. package/dist/utils/errors.d.ts +0 -95
  252. package/dist/utils/errors.d.ts.map +0 -1
  253. package/dist/utils/errors.js +0 -146
  254. package/dist/utils/errors.js.map +0 -1
  255. package/dist/utils/formatters.d.ts +0 -145
  256. package/dist/utils/formatters.d.ts.map +0 -1
  257. package/dist/utils/formatters.js +0 -133
  258. package/dist/utils/formatters.js.map +0 -1
  259. package/dist/utils/index.d.ts +0 -26
  260. package/dist/utils/index.d.ts.map +0 -1
  261. package/dist/utils/index.js +0 -88
  262. package/dist/utils/index.js.map +0 -1
  263. package/dist/utils/indexes.d.ts +0 -270
  264. package/dist/utils/indexes.d.ts.map +0 -1
  265. package/dist/utils/indexes.js +0 -527
  266. package/dist/utils/indexes.js.map +0 -1
  267. package/dist/utils/logger.d.ts +0 -31
  268. package/dist/utils/logger.d.ts.map +0 -1
  269. package/dist/utils/logger.js +0 -41
  270. package/dist/utils/logger.js.map +0 -1
  271. package/dist/utils/operationUtils.d.ts +0 -124
  272. package/dist/utils/operationUtils.d.ts.map +0 -1
  273. package/dist/utils/operationUtils.js +0 -176
  274. package/dist/utils/operationUtils.js.map +0 -1
  275. package/dist/utils/parallelUtils.d.ts +0 -76
  276. package/dist/utils/parallelUtils.d.ts.map +0 -1
  277. package/dist/utils/parallelUtils.js +0 -192
  278. package/dist/utils/parallelUtils.js.map +0 -1
  279. package/dist/utils/schemas.d.ts +0 -556
  280. package/dist/utils/schemas.d.ts.map +0 -1
  281. package/dist/utils/schemas.js +0 -485
  282. package/dist/utils/schemas.js.map +0 -1
  283. package/dist/utils/searchAlgorithms.d.ts +0 -99
  284. package/dist/utils/searchAlgorithms.d.ts.map +0 -1
  285. package/dist/utils/searchAlgorithms.js +0 -168
  286. package/dist/utils/searchAlgorithms.js.map +0 -1
  287. package/dist/utils/searchCache.d.ts +0 -108
  288. package/dist/utils/searchCache.d.ts.map +0 -1
  289. package/dist/utils/searchCache.js +0 -210
  290. package/dist/utils/searchCache.js.map +0 -1
  291. package/dist/utils/taskScheduler.d.ts +0 -294
  292. package/dist/utils/taskScheduler.d.ts.map +0 -1
  293. package/dist/utils/taskScheduler.js +0 -487
  294. package/dist/utils/taskScheduler.js.map +0 -1
  295. package/dist/workers/index.d.ts +0 -12
  296. package/dist/workers/index.d.ts.map +0 -1
  297. package/dist/workers/index.js +0 -10
  298. package/dist/workers/index.js.map +0 -1
  299. package/dist/workers/levenshteinWorker.d.ts +0 -60
  300. package/dist/workers/levenshteinWorker.d.ts.map +0 -1
@@ -1,308 +0,0 @@
1
- /**
2
- * Quantized Vector Store
3
- *
4
- * Phase 12 Sprint 6: 8-bit scalar quantization for 4x vector memory reduction.
5
- * Uses asymmetric similarity computation for improved accuracy.
6
- *
7
- * @module search/QuantizedVectorStore
8
- */
9
- const DEFAULT_OPTIONS = {
10
- asymmetric: true,
11
- minVectorsForQuantization: 100,
12
- trackAccuracy: false,
13
- };
14
- /**
15
- * Quantized Vector Store with 8-bit scalar quantization.
16
- *
17
- * Provides 4x memory reduction while maintaining >95% accuracy
18
- * using asymmetric similarity computation.
19
- *
20
- * @example
21
- * ```typescript
22
- * const store = new QuantizedVectorStore();
23
- *
24
- * // Add vectors
25
- * store.add('entity1', [0.1, 0.2, 0.3, ...]);
26
- * store.add('entity2', [0.4, 0.5, 0.6, ...]);
27
- *
28
- * // Search
29
- * const results = store.search([0.15, 0.25, 0.35, ...], 10);
30
- *
31
- * // Get stats
32
- * const stats = store.getStats();
33
- * console.log(`Memory reduction: ${stats.memoryReductionRatio}x`);
34
- * ```
35
- */
36
- export class QuantizedVectorStore {
37
- fullPrecisionVectors;
38
- quantizedVectors;
39
- quantizationParams = null;
40
- options;
41
- isQuantized = false;
42
- quantizationErrors = [];
43
- constructor(options) {
44
- this.options = { ...DEFAULT_OPTIONS, ...options };
45
- this.fullPrecisionVectors = new Map();
46
- this.quantizedVectors = new Map();
47
- }
48
- /**
49
- * Add a vector to the store.
50
- *
51
- * @param id - Entity identifier
52
- * @param vector - Float vector (any dimension, must be consistent)
53
- */
54
- add(id, vector) {
55
- const float32 = new Float32Array(vector);
56
- this.fullPrecisionVectors.set(id, float32);
57
- // Check if we should quantize
58
- if (!this.isQuantized &&
59
- this.fullPrecisionVectors.size >= this.options.minVectorsForQuantization) {
60
- this.quantize();
61
- }
62
- else if (this.isQuantized) {
63
- // Add to quantized store
64
- const quantized = this.quantizeVector(float32);
65
- this.quantizedVectors.set(id, quantized);
66
- // Track error if enabled
67
- if (this.options.trackAccuracy) {
68
- const reconstructed = this.dequantizeVector(quantized);
69
- this.quantizationErrors.push(this.computeError(float32, reconstructed));
70
- }
71
- }
72
- }
73
- /**
74
- * Remove a vector from the store.
75
- *
76
- * @param id - Entity identifier
77
- * @returns True if vector was removed
78
- */
79
- remove(id) {
80
- const existed = this.fullPrecisionVectors.delete(id);
81
- this.quantizedVectors.delete(id);
82
- return existed;
83
- }
84
- /**
85
- * Check if a vector exists.
86
- *
87
- * @param id - Entity identifier
88
- */
89
- has(id) {
90
- return this.fullPrecisionVectors.has(id);
91
- }
92
- /**
93
- * Get a vector (dequantized if necessary).
94
- *
95
- * @param id - Entity identifier
96
- * @returns Vector or undefined
97
- */
98
- get(id) {
99
- const vector = this.fullPrecisionVectors.get(id);
100
- return vector ? Array.from(vector) : undefined;
101
- }
102
- /**
103
- * Search for similar vectors.
104
- *
105
- * @param query - Query vector
106
- * @param k - Number of results to return
107
- * @returns Top k similar vectors with scores
108
- */
109
- search(query, k) {
110
- const queryVector = new Float32Array(query);
111
- const results = [];
112
- if (this.isQuantized && this.options.asymmetric) {
113
- // Asymmetric search: query in full precision, stored vectors quantized
114
- for (const [id, quantized] of this.quantizedVectors) {
115
- const reconstructed = this.dequantizeVector(quantized);
116
- const similarity = this.cosineSimilarity(queryVector, reconstructed);
117
- results.push({ id, similarity, quantized: true });
118
- }
119
- }
120
- else {
121
- // Full precision search
122
- for (const [id, vector] of this.fullPrecisionVectors) {
123
- const similarity = this.cosineSimilarity(queryVector, vector);
124
- results.push({ id, similarity, quantized: false });
125
- }
126
- }
127
- // Sort by similarity descending and take top k
128
- return results
129
- .sort((a, b) => b.similarity - a.similarity)
130
- .slice(0, k);
131
- }
132
- /**
133
- * Compute similarity between a query and specific entity.
134
- *
135
- * @param query - Query vector
136
- * @param id - Entity identifier
137
- * @returns Similarity score or undefined if not found
138
- */
139
- computeSimilarity(query, id) {
140
- const queryVector = new Float32Array(query);
141
- if (this.isQuantized && this.options.asymmetric) {
142
- const quantized = this.quantizedVectors.get(id);
143
- if (!quantized)
144
- return undefined;
145
- const reconstructed = this.dequantizeVector(quantized);
146
- return this.cosineSimilarity(queryVector, reconstructed);
147
- }
148
- else {
149
- const vector = this.fullPrecisionVectors.get(id);
150
- if (!vector)
151
- return undefined;
152
- return this.cosineSimilarity(queryVector, vector);
153
- }
154
- }
155
- /**
156
- * Force quantization of all vectors.
157
- */
158
- quantize() {
159
- if (this.fullPrecisionVectors.size === 0)
160
- return;
161
- // Compute quantization parameters
162
- this.quantizationParams = this.computeQuantizationParams();
163
- this.isQuantized = true;
164
- // Quantize all vectors
165
- this.quantizedVectors.clear();
166
- for (const [id, vector] of this.fullPrecisionVectors) {
167
- const quantized = this.quantizeVector(vector);
168
- this.quantizedVectors.set(id, quantized);
169
- // Track error if enabled
170
- if (this.options.trackAccuracy) {
171
- const reconstructed = this.dequantizeVector(quantized);
172
- this.quantizationErrors.push(this.computeError(vector, reconstructed));
173
- }
174
- }
175
- }
176
- /**
177
- * Get store statistics.
178
- */
179
- getStats() {
180
- const vectorCount = this.fullPrecisionVectors.size;
181
- const dimension = this.quantizationParams?.dimension ??
182
- (vectorCount > 0 ? this.fullPrecisionVectors.values().next().value.length : 0);
183
- const fullPrecisionBytes = vectorCount * dimension * 4; // Float32
184
- const quantizedBytes = vectorCount * dimension * 1; // Uint8
185
- const avgQuantizationError = this.quantizationErrors.length > 0
186
- ? this.quantizationErrors.reduce((a, b) => a + b, 0) / this.quantizationErrors.length
187
- : 0;
188
- return {
189
- vectorCount,
190
- dimension,
191
- fullPrecisionBytes,
192
- quantizedBytes,
193
- memoryReductionRatio: fullPrecisionBytes > 0 ? fullPrecisionBytes / quantizedBytes : 1,
194
- avgQuantizationError,
195
- };
196
- }
197
- /**
198
- * Check if store is currently using quantization.
199
- */
200
- isUsingQuantization() {
201
- return this.isQuantized;
202
- }
203
- /**
204
- * Get the number of stored vectors.
205
- */
206
- size() {
207
- return this.fullPrecisionVectors.size;
208
- }
209
- /**
210
- * Clear all vectors from the store.
211
- */
212
- clear() {
213
- this.fullPrecisionVectors.clear();
214
- this.quantizedVectors.clear();
215
- this.quantizationParams = null;
216
- this.isQuantized = false;
217
- this.quantizationErrors = [];
218
- }
219
- /**
220
- * Export all vectors.
221
- */
222
- export() {
223
- const result = new Map();
224
- for (const [id, vector] of this.fullPrecisionVectors) {
225
- result.set(id, Array.from(vector));
226
- }
227
- return result;
228
- }
229
- /**
230
- * Import vectors from a map.
231
- *
232
- * @param vectors - Map of id to vector
233
- * @param quantize - Whether to quantize after import
234
- */
235
- import(vectors, quantize = true) {
236
- for (const [id, vector] of vectors) {
237
- const float32 = new Float32Array(vector);
238
- this.fullPrecisionVectors.set(id, float32);
239
- }
240
- if (quantize && this.fullPrecisionVectors.size >= this.options.minVectorsForQuantization) {
241
- this.quantize();
242
- }
243
- }
244
- // Private methods
245
- computeQuantizationParams() {
246
- let min = Infinity;
247
- let max = -Infinity;
248
- let dimension = 0;
249
- for (const vector of this.fullPrecisionVectors.values()) {
250
- dimension = vector.length;
251
- for (let i = 0; i < vector.length; i++) {
252
- if (vector[i] < min)
253
- min = vector[i];
254
- if (vector[i] > max)
255
- max = vector[i];
256
- }
257
- }
258
- const scale = (max - min) / 255;
259
- return { min, max, scale, dimension };
260
- }
261
- quantizeVector(vector) {
262
- if (!this.quantizationParams) {
263
- throw new Error('Quantization params not initialized');
264
- }
265
- const { min, scale } = this.quantizationParams;
266
- const quantized = new Uint8Array(vector.length);
267
- for (let i = 0; i < vector.length; i++) {
268
- // Clamp to 0-255 range
269
- const normalized = (vector[i] - min) / scale;
270
- quantized[i] = Math.max(0, Math.min(255, Math.round(normalized)));
271
- }
272
- return quantized;
273
- }
274
- dequantizeVector(quantized) {
275
- if (!this.quantizationParams) {
276
- throw new Error('Quantization params not initialized');
277
- }
278
- const { min, scale } = this.quantizationParams;
279
- const vector = new Float32Array(quantized.length);
280
- for (let i = 0; i < quantized.length; i++) {
281
- vector[i] = quantized[i] * scale + min;
282
- }
283
- return vector;
284
- }
285
- cosineSimilarity(a, b) {
286
- if (a.length !== b.length)
287
- return 0;
288
- let dotProduct = 0;
289
- let normA = 0;
290
- let normB = 0;
291
- for (let i = 0; i < a.length; i++) {
292
- dotProduct += a[i] * b[i];
293
- normA += a[i] * a[i];
294
- normB += b[i] * b[i];
295
- }
296
- const denominator = Math.sqrt(normA) * Math.sqrt(normB);
297
- return denominator === 0 ? 0 : dotProduct / denominator;
298
- }
299
- computeError(original, reconstructed) {
300
- let sumSquaredError = 0;
301
- for (let i = 0; i < original.length; i++) {
302
- const diff = original[i] - reconstructed[i];
303
- sumSquaredError += diff * diff;
304
- }
305
- return Math.sqrt(sumSquaredError / original.length);
306
- }
307
- }
308
- //# sourceMappingURL=QuantizedVectorStore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"QuantizedVectorStore.js","sourceRoot":"","sources":["../../src/search/QuantizedVectorStore.ts"],"names":[],"mappings":"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"}
@@ -1,76 +0,0 @@
1
- /**
2
- * Query Analyzer
3
- *
4
- * Phase 11: Extracts structured information from natural language queries
5
- * to enable intelligent search planning.
6
- *
7
- * @module search/QueryAnalyzer
8
- */
9
- import type { QueryAnalysis } from '../types/index.js';
10
- /**
11
- * Query Analyzer extracts structured information from queries.
12
- *
13
- * Uses rule-based heuristics for reliable extraction of:
14
- * - Person names
15
- * - Location names
16
- * - Organization names
17
- * - Temporal references
18
- * - Question type
19
- * - Query complexity
20
- *
21
- * @example
22
- * ```typescript
23
- * const analyzer = new QueryAnalyzer();
24
- * const analysis = analyzer.analyze(
25
- * 'What projects did Alice work on last month?'
26
- * );
27
- * // { query: '...', entities: [...], persons: ['Alice'], temporalRange: { relative: 'last month' }, ... }
28
- * ```
29
- */
30
- export declare class QueryAnalyzer {
31
- private personIndicators;
32
- private temporalKeywords;
33
- private questionKeywords;
34
- /**
35
- * Analyze a query using rule-based heuristics.
36
- * Main entry point - returns full QueryAnalysis.
37
- */
38
- analyze(query: string): QueryAnalysis;
39
- /**
40
- * Calculate confidence score for the analysis.
41
- */
42
- private calculateConfidence;
43
- /**
44
- * Extract person names from query.
45
- */
46
- private extractPersons;
47
- /**
48
- * Extract location names from query.
49
- */
50
- private extractLocations;
51
- /**
52
- * Extract organization names from query.
53
- */
54
- private extractOrganizations;
55
- /**
56
- * Extract temporal range from query.
57
- */
58
- private extractTemporalRange;
59
- /**
60
- * Detect the type of question.
61
- */
62
- private detectQuestionType;
63
- /**
64
- * Estimate query complexity.
65
- */
66
- private estimateComplexity;
67
- /**
68
- * Detect what types of information are being requested.
69
- */
70
- private detectRequiredInfoTypes;
71
- /**
72
- * Decompose complex queries into sub-queries.
73
- */
74
- private decomposeQuery;
75
- }
76
- //# sourceMappingURL=QueryAnalyzer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"QueryAnalyzer.d.ts","sourceRoot":"","sources":["../../src/search/QueryAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAkC,MAAM,mBAAmB,CAAC;AAEvF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,gBAAgB,CAA0C;IAClE,OAAO,CAAC,gBAAgB,CAKtB;IACF,OAAO,CAAC,gBAAgB,CAOtB;IAEF;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa;IAiCrC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;OAEG;IACH,OAAO,CAAC,cAAc;CAYvB"}
@@ -1,228 +0,0 @@
1
- /**
2
- * Query Analyzer
3
- *
4
- * Phase 11: Extracts structured information from natural language queries
5
- * to enable intelligent search planning.
6
- *
7
- * @module search/QueryAnalyzer
8
- */
9
- /**
10
- * Query Analyzer extracts structured information from queries.
11
- *
12
- * Uses rule-based heuristics for reliable extraction of:
13
- * - Person names
14
- * - Location names
15
- * - Organization names
16
- * - Temporal references
17
- * - Question type
18
- * - Query complexity
19
- *
20
- * @example
21
- * ```typescript
22
- * const analyzer = new QueryAnalyzer();
23
- * const analysis = analyzer.analyze(
24
- * 'What projects did Alice work on last month?'
25
- * );
26
- * // { query: '...', entities: [...], persons: ['Alice'], temporalRange: { relative: 'last month' }, ... }
27
- * ```
28
- */
29
- export class QueryAnalyzer {
30
- personIndicators = ['Mr.', 'Mrs.', 'Ms.', 'Dr.', 'Prof.'];
31
- temporalKeywords = [
32
- 'yesterday', 'today', 'tomorrow',
33
- 'last week', 'last month', 'last year',
34
- 'this week', 'this month', 'this year',
35
- 'next week', 'next month', 'next year',
36
- ];
37
- questionKeywords = {
38
- factual: ['what', 'who', 'where', 'which'],
39
- temporal: ['when', 'how long', 'since', 'until'],
40
- comparative: ['compare', 'difference', 'vs', 'versus', 'better', 'worse'],
41
- aggregation: ['how many', 'count', 'total', 'sum', 'average'],
42
- 'multi-hop': ['and then', 'which means', 'therefore', 'related to'],
43
- conceptual: ['explain', 'why', 'how does', 'what is the meaning', 'understand'],
44
- };
45
- /**
46
- * Analyze a query using rule-based heuristics.
47
- * Main entry point - returns full QueryAnalysis.
48
- */
49
- analyze(query) {
50
- const lowerQuery = query.toLowerCase();
51
- const persons = this.extractPersons(query);
52
- const locations = this.extractLocations(query);
53
- const organizations = this.extractOrganizations(query);
54
- const questionType = this.detectQuestionType(lowerQuery);
55
- const complexity = this.estimateComplexity(query);
56
- // Build entities array from extracted names
57
- const entities = [
58
- ...persons.map(name => ({ name, type: 'person' })),
59
- ...locations.map(name => ({ name, type: 'location' })),
60
- ...organizations.map(name => ({ name, type: 'organization' })),
61
- ];
62
- // Calculate confidence based on extraction quality
63
- const confidence = this.calculateConfidence(entities, complexity, questionType);
64
- return {
65
- query,
66
- entities,
67
- persons,
68
- locations,
69
- organizations,
70
- temporalRange: this.extractTemporalRange(query) ?? null,
71
- questionType,
72
- complexity,
73
- confidence,
74
- requiredInfoTypes: this.detectRequiredInfoTypes(lowerQuery),
75
- subQueries: this.decomposeQuery(query),
76
- };
77
- }
78
- /**
79
- * Calculate confidence score for the analysis.
80
- */
81
- calculateConfidence(entities, complexity, questionType) {
82
- let confidence = 0.5;
83
- // Higher confidence for simple queries
84
- if (complexity === 'low')
85
- confidence += 0.3;
86
- else if (complexity === 'medium')
87
- confidence += 0.1;
88
- // Higher confidence when entities are detected
89
- if (entities.length > 0)
90
- confidence += 0.1;
91
- // Lower confidence for conceptual queries (harder to satisfy)
92
- if (questionType === 'conceptual')
93
- confidence -= 0.2;
94
- return Math.max(0, Math.min(1, confidence));
95
- }
96
- /**
97
- * Extract person names from query.
98
- */
99
- extractPersons(query) {
100
- const persons = [];
101
- const words = query.split(/\s+/);
102
- for (let i = 0; i < words.length; i++) {
103
- const word = words[i];
104
- // Check for titles followed by names
105
- if (this.personIndicators.some(ind => word.startsWith(ind))) {
106
- if (i + 1 < words.length) {
107
- persons.push(words[i + 1].replace(/[^a-zA-Z]/g, ''));
108
- }
109
- }
110
- // Check for capitalized words that might be names
111
- if (/^[A-Z][a-z]+$/.test(word) && i > 0 && !/^[A-Z]/.test(words[i - 1])) {
112
- persons.push(word);
113
- }
114
- }
115
- return [...new Set(persons)];
116
- }
117
- /**
118
- * Extract location names from query.
119
- */
120
- extractLocations(query) {
121
- const locationIndicators = ['in', 'at', 'from', 'to', 'near'];
122
- const locations = [];
123
- const words = query.split(/\s+/);
124
- for (let i = 0; i < words.length; i++) {
125
- if (locationIndicators.includes(words[i].toLowerCase())) {
126
- if (i + 1 < words.length && /^[A-Z]/.test(words[i + 1])) {
127
- locations.push(words[i + 1].replace(/[^a-zA-Z]/g, ''));
128
- }
129
- }
130
- }
131
- return [...new Set(locations)];
132
- }
133
- /**
134
- * Extract organization names from query.
135
- */
136
- extractOrganizations(query) {
137
- const orgIndicators = ['Inc.', 'Corp.', 'LLC', 'Ltd.', 'Company', 'Co.'];
138
- const organizations = [];
139
- for (const indicator of orgIndicators) {
140
- const regex = new RegExp(`([A-Z][a-zA-Z]*)\\s*${indicator.replace('.', '\\.')}`, 'g');
141
- const matches = query.match(regex);
142
- if (matches) {
143
- organizations.push(...matches);
144
- }
145
- }
146
- return [...new Set(organizations)];
147
- }
148
- /**
149
- * Extract temporal range from query.
150
- */
151
- extractTemporalRange(query) {
152
- const lowerQuery = query.toLowerCase();
153
- for (const keyword of this.temporalKeywords) {
154
- if (lowerQuery.includes(keyword)) {
155
- return { relative: keyword };
156
- }
157
- }
158
- // Check for date patterns
159
- const datePattern = /\d{4}-\d{2}-\d{2}/g;
160
- const dates = query.match(datePattern);
161
- if (dates && dates.length >= 1) {
162
- return {
163
- start: dates[0],
164
- end: dates.length > 1 ? dates[1] : undefined,
165
- };
166
- }
167
- return undefined;
168
- }
169
- /**
170
- * Detect the type of question.
171
- */
172
- detectQuestionType(query) {
173
- for (const [type, keywords] of Object.entries(this.questionKeywords)) {
174
- if (keywords.some(kw => query.includes(kw))) {
175
- return type;
176
- }
177
- }
178
- return 'factual';
179
- }
180
- /**
181
- * Estimate query complexity.
182
- */
183
- estimateComplexity(query) {
184
- const wordCount = query.split(/\s+/).length;
185
- const hasConjunctions = /\b(and|or|but|then|therefore)\b/i.test(query);
186
- const hasMultipleClauses = /[,;]/.test(query);
187
- if (wordCount > 20 || (hasConjunctions && hasMultipleClauses)) {
188
- return 'high';
189
- }
190
- if (wordCount > 10 || hasConjunctions || hasMultipleClauses) {
191
- return 'medium';
192
- }
193
- return 'low';
194
- }
195
- /**
196
- * Detect what types of information are being requested.
197
- */
198
- detectRequiredInfoTypes(query) {
199
- const infoTypes = [];
200
- if (/\b(who|person|people|name)\b/.test(query))
201
- infoTypes.push('person');
202
- if (/\b(where|location|place|city)\b/.test(query))
203
- infoTypes.push('location');
204
- if (/\b(when|date|time|year|month)\b/.test(query))
205
- infoTypes.push('temporal');
206
- if (/\b(how many|count|number|total)\b/.test(query))
207
- infoTypes.push('quantity');
208
- if (/\b(why|reason|because)\b/.test(query))
209
- infoTypes.push('reason');
210
- if (/\b(what|which|project|task)\b/.test(query))
211
- infoTypes.push('entity');
212
- return infoTypes;
213
- }
214
- /**
215
- * Decompose complex queries into sub-queries.
216
- */
217
- decomposeQuery(query) {
218
- // Split on conjunctions
219
- const parts = query.split(/\b(and then|and|but|or)\b/i)
220
- .map(p => p.trim())
221
- .filter(p => p && !/^(and then|and|but|or)$/i.test(p));
222
- if (parts.length > 1) {
223
- return parts;
224
- }
225
- return undefined;
226
- }
227
- }
228
- //# sourceMappingURL=QueryAnalyzer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"QueryAnalyzer.js","sourceRoot":"","sources":["../../src/search/QueryAnalyzer.ts"],"names":[],"mappings":"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"}