@danielsimonjr/memoryjs 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +385 -113
- package/README.md.backup-1768084780988 +266 -0
- package/dist/index.cjs +17364 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +12371 -0
- package/dist/index.d.ts +12367 -11
- package/dist/index.js +17102 -19
- package/dist/index.js.map +1 -1
- package/dist/workers/levenshteinWorker.cjs +102 -0
- package/dist/workers/levenshteinWorker.cjs.map +1 -0
- package/dist/workers/levenshteinWorker.js +57 -91
- package/dist/workers/levenshteinWorker.js.map +1 -1
- package/package.json +12 -6
- package/dist/core/EntityManager.d.ts +0 -268
- package/dist/core/EntityManager.d.ts.map +0 -1
- package/dist/core/EntityManager.js +0 -512
- package/dist/core/EntityManager.js.map +0 -1
- package/dist/core/GraphEventEmitter.d.ts +0 -202
- package/dist/core/GraphEventEmitter.d.ts.map +0 -1
- package/dist/core/GraphEventEmitter.js +0 -347
- package/dist/core/GraphEventEmitter.js.map +0 -1
- package/dist/core/GraphStorage.d.ts +0 -395
- package/dist/core/GraphStorage.d.ts.map +0 -1
- package/dist/core/GraphStorage.js +0 -786
- package/dist/core/GraphStorage.js.map +0 -1
- package/dist/core/GraphTraversal.d.ts +0 -141
- package/dist/core/GraphTraversal.d.ts.map +0 -1
- package/dist/core/GraphTraversal.js +0 -574
- package/dist/core/GraphTraversal.js.map +0 -1
- package/dist/core/HierarchyManager.d.ts +0 -111
- package/dist/core/HierarchyManager.d.ts.map +0 -1
- package/dist/core/HierarchyManager.js +0 -225
- package/dist/core/HierarchyManager.js.map +0 -1
- package/dist/core/ManagerContext.d.ts +0 -76
- package/dist/core/ManagerContext.d.ts.map +0 -1
- package/dist/core/ManagerContext.js +0 -129
- package/dist/core/ManagerContext.js.map +0 -1
- package/dist/core/ObservationManager.d.ts +0 -85
- package/dist/core/ObservationManager.d.ts.map +0 -1
- package/dist/core/ObservationManager.js +0 -124
- package/dist/core/ObservationManager.js.map +0 -1
- package/dist/core/RelationManager.d.ts +0 -131
- package/dist/core/RelationManager.d.ts.map +0 -1
- package/dist/core/RelationManager.js +0 -212
- package/dist/core/RelationManager.js.map +0 -1
- package/dist/core/SQLiteStorage.d.ts +0 -354
- package/dist/core/SQLiteStorage.d.ts.map +0 -1
- package/dist/core/SQLiteStorage.js +0 -919
- package/dist/core/SQLiteStorage.js.map +0 -1
- package/dist/core/StorageFactory.d.ts +0 -45
- package/dist/core/StorageFactory.d.ts.map +0 -1
- package/dist/core/StorageFactory.js +0 -65
- package/dist/core/StorageFactory.js.map +0 -1
- package/dist/core/TransactionManager.d.ts +0 -464
- package/dist/core/TransactionManager.d.ts.map +0 -1
- package/dist/core/TransactionManager.js +0 -869
- package/dist/core/TransactionManager.js.map +0 -1
- package/dist/core/index.d.ts +0 -17
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -20
- package/dist/core/index.js.map +0 -1
- package/dist/features/AnalyticsManager.d.ts +0 -44
- package/dist/features/AnalyticsManager.d.ts.map +0 -1
- package/dist/features/AnalyticsManager.js +0 -224
- package/dist/features/AnalyticsManager.js.map +0 -1
- package/dist/features/ArchiveManager.d.ts +0 -133
- package/dist/features/ArchiveManager.d.ts.map +0 -1
- package/dist/features/ArchiveManager.js +0 -282
- package/dist/features/ArchiveManager.js.map +0 -1
- package/dist/features/CompressionManager.d.ts +0 -119
- package/dist/features/CompressionManager.d.ts.map +0 -1
- package/dist/features/CompressionManager.js +0 -470
- package/dist/features/CompressionManager.js.map +0 -1
- package/dist/features/IOManager.d.ts +0 -225
- package/dist/features/IOManager.d.ts.map +0 -1
- package/dist/features/IOManager.js +0 -1093
- package/dist/features/IOManager.js.map +0 -1
- package/dist/features/KeywordExtractor.d.ts +0 -61
- package/dist/features/KeywordExtractor.d.ts.map +0 -1
- package/dist/features/KeywordExtractor.js +0 -127
- package/dist/features/KeywordExtractor.js.map +0 -1
- package/dist/features/ObservationNormalizer.d.ts +0 -90
- package/dist/features/ObservationNormalizer.d.ts.map +0 -1
- package/dist/features/ObservationNormalizer.js +0 -194
- package/dist/features/ObservationNormalizer.js.map +0 -1
- package/dist/features/StreamingExporter.d.ts +0 -128
- package/dist/features/StreamingExporter.d.ts.map +0 -1
- package/dist/features/StreamingExporter.js +0 -212
- package/dist/features/StreamingExporter.js.map +0 -1
- package/dist/features/TagManager.d.ts +0 -147
- package/dist/features/TagManager.d.ts.map +0 -1
- package/dist/features/TagManager.js +0 -211
- package/dist/features/TagManager.js.map +0 -1
- package/dist/features/index.d.ts +0 -14
- package/dist/features/index.d.ts.map +0 -1
- package/dist/features/index.js +0 -15
- package/dist/features/index.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/search/BM25Search.d.ts +0 -148
- package/dist/search/BM25Search.d.ts.map +0 -1
- package/dist/search/BM25Search.js +0 -340
- package/dist/search/BM25Search.js.map +0 -1
- package/dist/search/BasicSearch.d.ts +0 -51
- package/dist/search/BasicSearch.d.ts.map +0 -1
- package/dist/search/BasicSearch.js +0 -138
- package/dist/search/BasicSearch.js.map +0 -1
- package/dist/search/BooleanSearch.d.ts +0 -98
- package/dist/search/BooleanSearch.d.ts.map +0 -1
- package/dist/search/BooleanSearch.js +0 -431
- package/dist/search/BooleanSearch.js.map +0 -1
- package/dist/search/EarlyTerminationManager.d.ts +0 -140
- package/dist/search/EarlyTerminationManager.d.ts.map +0 -1
- package/dist/search/EarlyTerminationManager.js +0 -280
- package/dist/search/EarlyTerminationManager.js.map +0 -1
- package/dist/search/EmbeddingCache.d.ts +0 -175
- package/dist/search/EmbeddingCache.d.ts.map +0 -1
- package/dist/search/EmbeddingCache.js +0 -247
- package/dist/search/EmbeddingCache.js.map +0 -1
- package/dist/search/EmbeddingService.d.ts +0 -277
- package/dist/search/EmbeddingService.d.ts.map +0 -1
- package/dist/search/EmbeddingService.js +0 -531
- package/dist/search/EmbeddingService.js.map +0 -1
- package/dist/search/FuzzySearch.d.ts +0 -118
- package/dist/search/FuzzySearch.d.ts.map +0 -1
- package/dist/search/FuzzySearch.js +0 -313
- package/dist/search/FuzzySearch.js.map +0 -1
- package/dist/search/HybridScorer.d.ts +0 -181
- package/dist/search/HybridScorer.d.ts.map +0 -1
- package/dist/search/HybridScorer.js +0 -258
- package/dist/search/HybridScorer.js.map +0 -1
- package/dist/search/HybridSearchManager.d.ts +0 -80
- package/dist/search/HybridSearchManager.d.ts.map +0 -1
- package/dist/search/HybridSearchManager.js +0 -188
- package/dist/search/HybridSearchManager.js.map +0 -1
- package/dist/search/IncrementalIndexer.d.ts +0 -201
- package/dist/search/IncrementalIndexer.d.ts.map +0 -1
- package/dist/search/IncrementalIndexer.js +0 -343
- package/dist/search/IncrementalIndexer.js.map +0 -1
- package/dist/search/OptimizedInvertedIndex.d.ts +0 -163
- package/dist/search/OptimizedInvertedIndex.d.ts.map +0 -1
- package/dist/search/OptimizedInvertedIndex.js +0 -359
- package/dist/search/OptimizedInvertedIndex.js.map +0 -1
- package/dist/search/ParallelSearchExecutor.d.ts +0 -172
- package/dist/search/ParallelSearchExecutor.d.ts.map +0 -1
- package/dist/search/ParallelSearchExecutor.js +0 -310
- package/dist/search/ParallelSearchExecutor.js.map +0 -1
- package/dist/search/QuantizedVectorStore.d.ts +0 -171
- package/dist/search/QuantizedVectorStore.d.ts.map +0 -1
- package/dist/search/QuantizedVectorStore.js +0 -308
- package/dist/search/QuantizedVectorStore.js.map +0 -1
- package/dist/search/QueryAnalyzer.d.ts +0 -76
- package/dist/search/QueryAnalyzer.d.ts.map +0 -1
- package/dist/search/QueryAnalyzer.js +0 -228
- package/dist/search/QueryAnalyzer.js.map +0 -1
- package/dist/search/QueryCostEstimator.d.ts +0 -244
- package/dist/search/QueryCostEstimator.d.ts.map +0 -1
- package/dist/search/QueryCostEstimator.js +0 -653
- package/dist/search/QueryCostEstimator.js.map +0 -1
- package/dist/search/QueryPlanCache.d.ts +0 -220
- package/dist/search/QueryPlanCache.d.ts.map +0 -1
- package/dist/search/QueryPlanCache.js +0 -380
- package/dist/search/QueryPlanCache.js.map +0 -1
- package/dist/search/QueryPlanner.d.ts +0 -58
- package/dist/search/QueryPlanner.d.ts.map +0 -1
- package/dist/search/QueryPlanner.js +0 -138
- package/dist/search/QueryPlanner.js.map +0 -1
- package/dist/search/RankedSearch.d.ts +0 -71
- package/dist/search/RankedSearch.d.ts.map +0 -1
- package/dist/search/RankedSearch.js +0 -239
- package/dist/search/RankedSearch.js.map +0 -1
- package/dist/search/ReflectionManager.d.ts +0 -120
- package/dist/search/ReflectionManager.d.ts.map +0 -1
- package/dist/search/ReflectionManager.js +0 -232
- package/dist/search/ReflectionManager.js.map +0 -1
- package/dist/search/SavedSearchManager.d.ts +0 -79
- package/dist/search/SavedSearchManager.d.ts.map +0 -1
- package/dist/search/SavedSearchManager.js +0 -147
- package/dist/search/SavedSearchManager.js.map +0 -1
- package/dist/search/SearchFilterChain.d.ts +0 -120
- package/dist/search/SearchFilterChain.d.ts.map +0 -1
- package/dist/search/SearchFilterChain.js +0 -186
- package/dist/search/SearchFilterChain.js.map +0 -1
- package/dist/search/SearchManager.d.ts +0 -326
- package/dist/search/SearchManager.d.ts.map +0 -1
- package/dist/search/SearchManager.js +0 -454
- package/dist/search/SearchManager.js.map +0 -1
- package/dist/search/SearchSuggestions.d.ts +0 -27
- package/dist/search/SearchSuggestions.d.ts.map +0 -1
- package/dist/search/SearchSuggestions.js +0 -58
- package/dist/search/SearchSuggestions.js.map +0 -1
- package/dist/search/SemanticSearch.d.ts +0 -149
- package/dist/search/SemanticSearch.d.ts.map +0 -1
- package/dist/search/SemanticSearch.js +0 -324
- package/dist/search/SemanticSearch.js.map +0 -1
- package/dist/search/SymbolicSearch.d.ts +0 -61
- package/dist/search/SymbolicSearch.d.ts.map +0 -1
- package/dist/search/SymbolicSearch.js +0 -164
- package/dist/search/SymbolicSearch.js.map +0 -1
- package/dist/search/TFIDFEventSync.d.ts +0 -85
- package/dist/search/TFIDFEventSync.d.ts.map +0 -1
- package/dist/search/TFIDFEventSync.js +0 -134
- package/dist/search/TFIDFEventSync.js.map +0 -1
- package/dist/search/TFIDFIndexManager.d.ts +0 -151
- package/dist/search/TFIDFIndexManager.d.ts.map +0 -1
- package/dist/search/TFIDFIndexManager.js +0 -433
- package/dist/search/TFIDFIndexManager.js.map +0 -1
- package/dist/search/VectorStore.d.ts +0 -235
- package/dist/search/VectorStore.d.ts.map +0 -1
- package/dist/search/VectorStore.js +0 -312
- package/dist/search/VectorStore.js.map +0 -1
- package/dist/search/index.d.ts +0 -35
- package/dist/search/index.d.ts.map +0 -1
- package/dist/search/index.js +0 -53
- package/dist/search/index.js.map +0 -1
- package/dist/types/index.d.ts +0 -13
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -13
- package/dist/types/index.js.map +0 -1
- package/dist/types/types.d.ts +0 -1811
- package/dist/types/types.d.ts.map +0 -1
- package/dist/types/types.js +0 -10
- package/dist/types/types.js.map +0 -1
- package/dist/utils/BatchProcessor.d.ts +0 -271
- package/dist/utils/BatchProcessor.d.ts.map +0 -1
- package/dist/utils/BatchProcessor.js +0 -377
- package/dist/utils/BatchProcessor.js.map +0 -1
- package/dist/utils/MemoryMonitor.d.ts +0 -176
- package/dist/utils/MemoryMonitor.d.ts.map +0 -1
- package/dist/utils/MemoryMonitor.js +0 -306
- package/dist/utils/MemoryMonitor.js.map +0 -1
- package/dist/utils/WorkerPoolManager.d.ts +0 -233
- package/dist/utils/WorkerPoolManager.d.ts.map +0 -1
- package/dist/utils/WorkerPoolManager.js +0 -421
- package/dist/utils/WorkerPoolManager.js.map +0 -1
- package/dist/utils/compressedCache.d.ts +0 -221
- package/dist/utils/compressedCache.d.ts.map +0 -1
- package/dist/utils/compressedCache.js +0 -349
- package/dist/utils/compressedCache.js.map +0 -1
- package/dist/utils/compressionUtil.d.ts +0 -214
- package/dist/utils/compressionUtil.d.ts.map +0 -1
- package/dist/utils/compressionUtil.js +0 -248
- package/dist/utils/compressionUtil.js.map +0 -1
- package/dist/utils/constants.d.ts +0 -245
- package/dist/utils/constants.d.ts.map +0 -1
- package/dist/utils/constants.js +0 -253
- package/dist/utils/constants.js.map +0 -1
- package/dist/utils/entityUtils.d.ts +0 -379
- package/dist/utils/entityUtils.d.ts.map +0 -1
- package/dist/utils/entityUtils.js +0 -649
- package/dist/utils/entityUtils.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -95
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -146
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/formatters.d.ts +0 -145
- package/dist/utils/formatters.d.ts.map +0 -1
- package/dist/utils/formatters.js +0 -133
- package/dist/utils/formatters.js.map +0 -1
- package/dist/utils/index.d.ts +0 -26
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -88
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/indexes.d.ts +0 -270
- package/dist/utils/indexes.d.ts.map +0 -1
- package/dist/utils/indexes.js +0 -527
- package/dist/utils/indexes.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -31
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -41
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/operationUtils.d.ts +0 -124
- package/dist/utils/operationUtils.d.ts.map +0 -1
- package/dist/utils/operationUtils.js +0 -176
- package/dist/utils/operationUtils.js.map +0 -1
- package/dist/utils/parallelUtils.d.ts +0 -76
- package/dist/utils/parallelUtils.d.ts.map +0 -1
- package/dist/utils/parallelUtils.js +0 -192
- package/dist/utils/parallelUtils.js.map +0 -1
- package/dist/utils/schemas.d.ts +0 -556
- package/dist/utils/schemas.d.ts.map +0 -1
- package/dist/utils/schemas.js +0 -485
- package/dist/utils/schemas.js.map +0 -1
- package/dist/utils/searchAlgorithms.d.ts +0 -99
- package/dist/utils/searchAlgorithms.d.ts.map +0 -1
- package/dist/utils/searchAlgorithms.js +0 -168
- package/dist/utils/searchAlgorithms.js.map +0 -1
- package/dist/utils/searchCache.d.ts +0 -108
- package/dist/utils/searchCache.d.ts.map +0 -1
- package/dist/utils/searchCache.js +0 -210
- package/dist/utils/searchCache.js.map +0 -1
- package/dist/utils/taskScheduler.d.ts +0 -294
- package/dist/utils/taskScheduler.d.ts.map +0 -1
- package/dist/utils/taskScheduler.js +0 -487
- package/dist/utils/taskScheduler.js.map +0 -1
- package/dist/workers/index.d.ts +0 -12
- package/dist/workers/index.d.ts.map +0 -1
- package/dist/workers/index.js +0 -10
- package/dist/workers/index.js.map +0 -1
- package/dist/workers/levenshteinWorker.d.ts +0 -60
- package/dist/workers/levenshteinWorker.d.ts.map +0 -1
|
@@ -1,280 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Early Termination Manager
|
|
3
|
-
*
|
|
4
|
-
* Phase 12 Sprint 4: Manages early termination of hybrid search when
|
|
5
|
-
* results are adequate, executing layers in cost-order for efficiency.
|
|
6
|
-
*
|
|
7
|
-
* @module search/EarlyTerminationManager
|
|
8
|
-
*/
|
|
9
|
-
import { QueryCostEstimator } from './QueryCostEstimator.js';
|
|
10
|
-
/**
|
|
11
|
-
* Default options for early termination.
|
|
12
|
-
*/
|
|
13
|
-
const DEFAULT_OPTIONS = {
|
|
14
|
-
adequacyThreshold: 0.7,
|
|
15
|
-
minResults: 3,
|
|
16
|
-
maxResults: 20,
|
|
17
|
-
semanticAvailable: true,
|
|
18
|
-
minDiversity: 0.3,
|
|
19
|
-
minRelevance: 0.4,
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* Early Termination Manager
|
|
23
|
-
*
|
|
24
|
-
* Executes search layers in cost-order (fastest first) and terminates
|
|
25
|
-
* early when results are adequate, saving computation time.
|
|
26
|
-
*
|
|
27
|
-
* @example
|
|
28
|
-
* ```typescript
|
|
29
|
-
* const manager = new EarlyTerminationManager(hybridSearch);
|
|
30
|
-
* const result = await manager.searchWithEarlyTermination(
|
|
31
|
-
* graph,
|
|
32
|
-
* 'machine learning',
|
|
33
|
-
* { adequacyThreshold: 0.8, minResults: 5 }
|
|
34
|
-
* );
|
|
35
|
-
*
|
|
36
|
-
* if (result.earlyTerminated) {
|
|
37
|
-
* console.log(`Terminated after ${result.executedLayers.length} layers`);
|
|
38
|
-
* }
|
|
39
|
-
* ```
|
|
40
|
-
*/
|
|
41
|
-
export class EarlyTerminationManager {
|
|
42
|
-
hybridSearch;
|
|
43
|
-
costEstimator;
|
|
44
|
-
constructor(hybridSearch, costEstimator) {
|
|
45
|
-
this.hybridSearch = hybridSearch;
|
|
46
|
-
this.costEstimator = costEstimator ?? new QueryCostEstimator();
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Execute search with early termination support.
|
|
50
|
-
*
|
|
51
|
-
* Executes layers in cost-order and terminates early when results
|
|
52
|
-
* meet the adequacy threshold.
|
|
53
|
-
*
|
|
54
|
-
* @param graph - Knowledge graph to search
|
|
55
|
-
* @param query - Search query
|
|
56
|
-
* @param options - Early termination options
|
|
57
|
-
* @returns Search results with termination details
|
|
58
|
-
*/
|
|
59
|
-
async searchWithEarlyTermination(graph, query, options = {}) {
|
|
60
|
-
const startTime = Date.now();
|
|
61
|
-
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
62
|
-
const { semanticAvailable, maxResults } = opts;
|
|
63
|
-
// Get layers sorted by cost (fastest first)
|
|
64
|
-
const orderedLayers = this.costEstimator.getLayersByCost(query, graph.entities.length, semanticAvailable);
|
|
65
|
-
const allResults = [];
|
|
66
|
-
const executedLayers = [];
|
|
67
|
-
let earlyTerminated = false;
|
|
68
|
-
// Execute layers in cost order
|
|
69
|
-
for (const { layer } of orderedLayers) {
|
|
70
|
-
executedLayers.push(layer);
|
|
71
|
-
// Execute single layer search
|
|
72
|
-
const layerResults = await this.executeLayerSearch(graph, query, layer, maxResults);
|
|
73
|
-
// Merge results (deduplicate by entity name)
|
|
74
|
-
for (const result of layerResults) {
|
|
75
|
-
const existing = allResults.find(r => r.entity.name === result.entity.name);
|
|
76
|
-
if (existing) {
|
|
77
|
-
// Update scores if this layer has higher score
|
|
78
|
-
if (result.scores.combined > existing.scores.combined) {
|
|
79
|
-
Object.assign(existing, result);
|
|
80
|
-
}
|
|
81
|
-
// Add to matched layers
|
|
82
|
-
if (!existing.matchedLayers.includes(layer)) {
|
|
83
|
-
existing.matchedLayers.push(layer);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
// Ensure matchedLayers includes current layer
|
|
88
|
-
if (!result.matchedLayers.includes(layer)) {
|
|
89
|
-
result.matchedLayers = [...result.matchedLayers, layer];
|
|
90
|
-
}
|
|
91
|
-
allResults.push(result);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
// Check adequacy
|
|
95
|
-
const adequacy = this.checkAdequacy(allResults, opts, executedLayers);
|
|
96
|
-
if (adequacy.adequate) {
|
|
97
|
-
earlyTerminated = executedLayers.length < orderedLayers.length;
|
|
98
|
-
break;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
// Final sort by combined score
|
|
102
|
-
const sortedResults = allResults
|
|
103
|
-
.sort((a, b) => b.scores.combined - a.scores.combined)
|
|
104
|
-
.slice(0, maxResults);
|
|
105
|
-
const finalAdequacy = this.checkAdequacy(sortedResults, opts, executedLayers);
|
|
106
|
-
return {
|
|
107
|
-
results: sortedResults,
|
|
108
|
-
executedLayers,
|
|
109
|
-
adequacy: finalAdequacy,
|
|
110
|
-
earlyTerminated,
|
|
111
|
-
executionTimeMs: Date.now() - startTime,
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Execute a single layer search.
|
|
116
|
-
* @private
|
|
117
|
-
*/
|
|
118
|
-
async executeLayerSearch(graph, query, layer, limit) {
|
|
119
|
-
// Configure weights to emphasize the current layer
|
|
120
|
-
const weights = this.getLayerWeights(layer);
|
|
121
|
-
try {
|
|
122
|
-
return await this.hybridSearch.search(graph, query, {
|
|
123
|
-
...weights,
|
|
124
|
-
limit: limit * 2, // Over-fetch for better merging
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
catch {
|
|
128
|
-
// Layer failed, return empty results
|
|
129
|
-
return [];
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Get weight configuration for a specific layer.
|
|
134
|
-
* @private
|
|
135
|
-
*/
|
|
136
|
-
getLayerWeights(layer) {
|
|
137
|
-
switch (layer) {
|
|
138
|
-
case 'semantic':
|
|
139
|
-
return { semanticWeight: 1.0, lexicalWeight: 0.0, symbolicWeight: 0.0 };
|
|
140
|
-
case 'lexical':
|
|
141
|
-
return { semanticWeight: 0.0, lexicalWeight: 1.0, symbolicWeight: 0.0 };
|
|
142
|
-
case 'symbolic':
|
|
143
|
-
return { semanticWeight: 0.0, lexicalWeight: 0.0, symbolicWeight: 1.0 };
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Check if results are adequate based on configured thresholds.
|
|
148
|
-
*
|
|
149
|
-
* @param results - Current search results
|
|
150
|
-
* @param options - Adequacy options
|
|
151
|
-
* @param executedLayers - Layers that have been executed
|
|
152
|
-
* @returns Adequacy check result
|
|
153
|
-
*/
|
|
154
|
-
checkAdequacy(results, options, executedLayers) {
|
|
155
|
-
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
156
|
-
const { adequacyThreshold, minResults, minDiversity, minRelevance, analysis, } = opts;
|
|
157
|
-
const reasons = [];
|
|
158
|
-
let score = 0;
|
|
159
|
-
// Weight components
|
|
160
|
-
const weights = {
|
|
161
|
-
quantity: 0.35,
|
|
162
|
-
diversity: 0.25,
|
|
163
|
-
relevance: 0.25,
|
|
164
|
-
coverage: 0.15,
|
|
165
|
-
};
|
|
166
|
-
// 1. Quantity score (do we have enough results?)
|
|
167
|
-
const quantityScore = Math.min(results.length / minResults, 1);
|
|
168
|
-
score += quantityScore * weights.quantity;
|
|
169
|
-
if (quantityScore < 1) {
|
|
170
|
-
reasons.push(`Insufficient results: ${results.length}/${minResults}`);
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
reasons.push(`Sufficient results: ${results.length}`);
|
|
174
|
-
}
|
|
175
|
-
// 2. Diversity score (variety of entity types and layers)
|
|
176
|
-
const diversityScore = this.calculateDiversityScore(results);
|
|
177
|
-
score += Math.min(diversityScore / minDiversity, 1) * weights.diversity;
|
|
178
|
-
if (diversityScore < minDiversity) {
|
|
179
|
-
reasons.push(`Low diversity: ${diversityScore.toFixed(2)}/${minDiversity}`);
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
reasons.push(`Good diversity: ${diversityScore.toFixed(2)}`);
|
|
183
|
-
}
|
|
184
|
-
// 3. Relevance score (average combined score)
|
|
185
|
-
const avgRelevance = results.length > 0
|
|
186
|
-
? results.reduce((sum, r) => sum + r.scores.combined, 0) / results.length
|
|
187
|
-
: 0;
|
|
188
|
-
const relevanceScore = Math.min(avgRelevance / minRelevance, 1);
|
|
189
|
-
score += relevanceScore * weights.relevance;
|
|
190
|
-
if (avgRelevance < minRelevance) {
|
|
191
|
-
reasons.push(`Low relevance: ${avgRelevance.toFixed(2)}/${minRelevance}`);
|
|
192
|
-
}
|
|
193
|
-
else {
|
|
194
|
-
reasons.push(`Good relevance: ${avgRelevance.toFixed(2)}`);
|
|
195
|
-
}
|
|
196
|
-
// 4. Coverage score (how many layers contributed)
|
|
197
|
-
const contributingLayers = this.getContributingLayers(results);
|
|
198
|
-
const coverageScore = contributingLayers.length / executedLayers.length;
|
|
199
|
-
score += coverageScore * weights.coverage;
|
|
200
|
-
if (coverageScore < 0.5) {
|
|
201
|
-
reasons.push(`Low layer coverage: ${contributingLayers.length}/${executedLayers.length}`);
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
reasons.push(`Good layer coverage: ${contributingLayers.length}/${executedLayers.length}`);
|
|
205
|
-
}
|
|
206
|
-
// Bonus for matching required info types (if analysis provided)
|
|
207
|
-
if (analysis && analysis.requiredInfoTypes.length > 0) {
|
|
208
|
-
const entityTypes = new Set(results.map(r => r.entity.entityType.toLowerCase()));
|
|
209
|
-
const matchedTypes = analysis.requiredInfoTypes.filter(t => entityTypes.has(t) ||
|
|
210
|
-
(t === 'person' && entityTypes.has('person')) ||
|
|
211
|
-
(t === 'entity' && entityTypes.size > 0));
|
|
212
|
-
const typeMatchScore = matchedTypes.length / analysis.requiredInfoTypes.length;
|
|
213
|
-
score += typeMatchScore * 0.1; // Bonus weight
|
|
214
|
-
reasons.push(`Info type coverage: ${matchedTypes.length}/${analysis.requiredInfoTypes.length}`);
|
|
215
|
-
}
|
|
216
|
-
// Normalize score
|
|
217
|
-
score = Math.min(score, 1);
|
|
218
|
-
return {
|
|
219
|
-
adequate: score >= adequacyThreshold,
|
|
220
|
-
score,
|
|
221
|
-
reasons,
|
|
222
|
-
contributingLayers,
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Calculate diversity score from results.
|
|
227
|
-
* @private
|
|
228
|
-
*/
|
|
229
|
-
calculateDiversityScore(results) {
|
|
230
|
-
if (results.length === 0)
|
|
231
|
-
return 0;
|
|
232
|
-
// Type diversity
|
|
233
|
-
const entityTypes = new Set(results.map(r => r.entity.entityType));
|
|
234
|
-
const typeDiversity = Math.min(entityTypes.size / 3, 1);
|
|
235
|
-
// Layer diversity
|
|
236
|
-
const layerCounts = { semantic: 0, lexical: 0, symbolic: 0 };
|
|
237
|
-
for (const result of results) {
|
|
238
|
-
for (const layer of result.matchedLayers) {
|
|
239
|
-
layerCounts[layer]++;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
const activeLayers = Object.values(layerCounts).filter(c => c > 0).length;
|
|
243
|
-
const layerDiversity = activeLayers / 3;
|
|
244
|
-
// Combined diversity
|
|
245
|
-
return (typeDiversity + layerDiversity) / 2;
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Get layers that contributed to results.
|
|
249
|
-
* @private
|
|
250
|
-
*/
|
|
251
|
-
getContributingLayers(results) {
|
|
252
|
-
const layers = new Set();
|
|
253
|
-
for (const result of results) {
|
|
254
|
-
for (const layer of result.matchedLayers) {
|
|
255
|
-
layers.add(layer);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
return Array.from(layers);
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* Calculate adequacy score for a set of results.
|
|
262
|
-
*
|
|
263
|
-
* Standalone method for checking result adequacy without full search.
|
|
264
|
-
*
|
|
265
|
-
* @param results - Results to evaluate
|
|
266
|
-
* @param options - Adequacy options
|
|
267
|
-
* @returns Adequacy score (0-1)
|
|
268
|
-
*/
|
|
269
|
-
calculateAdequacyScore(results, options = {}) {
|
|
270
|
-
const allLayers = ['semantic', 'lexical', 'symbolic'];
|
|
271
|
-
return this.checkAdequacy(results, options, allLayers).score;
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* Get the cost estimator for external use.
|
|
275
|
-
*/
|
|
276
|
-
getCostEstimator() {
|
|
277
|
-
return this.costEstimator;
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
//# sourceMappingURL=EarlyTerminationManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EarlyTerminationManager.js","sourceRoot":"","sources":["../../src/search/EarlyTerminationManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Embedding Cache
|
|
3
|
-
*
|
|
4
|
-
* Phase 12 Sprint 5: LRU cache for embedding vectors with hit/miss tracking,
|
|
5
|
-
* auto-invalidation on text hash changes, and TTL support.
|
|
6
|
-
*
|
|
7
|
-
* @module search/EmbeddingCache
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* Statistics for the embedding cache.
|
|
11
|
-
*/
|
|
12
|
-
export interface EmbeddingCacheStats {
|
|
13
|
-
/** Number of entries in the cache */
|
|
14
|
-
size: number;
|
|
15
|
-
/** Estimated memory usage in bytes */
|
|
16
|
-
memoryBytes: number;
|
|
17
|
-
/** Cache hit rate (0-1) */
|
|
18
|
-
hitRate: number;
|
|
19
|
-
/** Total cache hits */
|
|
20
|
-
hits: number;
|
|
21
|
-
/** Total cache misses */
|
|
22
|
-
misses: number;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Options for EmbeddingCache.
|
|
26
|
-
*/
|
|
27
|
-
export interface EmbeddingCacheOptions {
|
|
28
|
-
/** Maximum number of entries in the cache (default: 1000) */
|
|
29
|
-
maxSize?: number;
|
|
30
|
-
/** Time-to-live in milliseconds (default: 3600000 = 1 hour) */
|
|
31
|
-
ttlMs?: number;
|
|
32
|
-
/** Dimensions of embedding vectors for memory estimation (default: 384) */
|
|
33
|
-
dimensions?: number;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Default cache options.
|
|
37
|
-
*/
|
|
38
|
-
export declare const DEFAULT_EMBEDDING_CACHE_OPTIONS: Required<EmbeddingCacheOptions>;
|
|
39
|
-
/**
|
|
40
|
-
* LRU cache for embedding vectors with hit/miss tracking.
|
|
41
|
-
*
|
|
42
|
-
* Features:
|
|
43
|
-
* - LRU eviction when max size is reached
|
|
44
|
-
* - Text hash-based invalidation (detects stale entries)
|
|
45
|
-
* - TTL support for automatic expiration
|
|
46
|
-
* - Hit/miss statistics tracking
|
|
47
|
-
*
|
|
48
|
-
* @example
|
|
49
|
-
* ```typescript
|
|
50
|
-
* const cache = new EmbeddingCache({ maxSize: 500, ttlMs: 60000 });
|
|
51
|
-
*
|
|
52
|
-
* // Cache an embedding
|
|
53
|
-
* cache.set('entity1', 'Original text content', [0.1, 0.2, ...]);
|
|
54
|
-
*
|
|
55
|
-
* // Retrieve from cache
|
|
56
|
-
* const result = cache.get('entity1', 'Original text content');
|
|
57
|
-
* if (result) {
|
|
58
|
-
* console.log('Cache hit!', result);
|
|
59
|
-
* }
|
|
60
|
-
*
|
|
61
|
-
* // Check stats
|
|
62
|
-
* console.log(cache.getStats()); // { size, memoryBytes, hitRate, hits, misses }
|
|
63
|
-
* ```
|
|
64
|
-
*/
|
|
65
|
-
export declare class EmbeddingCache {
|
|
66
|
-
private cache;
|
|
67
|
-
private options;
|
|
68
|
-
private hits;
|
|
69
|
-
private misses;
|
|
70
|
-
/**
|
|
71
|
-
* Create a new embedding cache.
|
|
72
|
-
*
|
|
73
|
-
* @param options - Cache configuration options
|
|
74
|
-
*/
|
|
75
|
-
constructor(options?: EmbeddingCacheOptions);
|
|
76
|
-
/**
|
|
77
|
-
* Hash a text string for cache invalidation.
|
|
78
|
-
*
|
|
79
|
-
* @param text - Text to hash
|
|
80
|
-
* @returns MD5 hash of the text
|
|
81
|
-
*/
|
|
82
|
-
private hashText;
|
|
83
|
-
/**
|
|
84
|
-
* Check if an entry is expired based on TTL.
|
|
85
|
-
*
|
|
86
|
-
* @param entry - Cache entry to check
|
|
87
|
-
* @returns True if expired
|
|
88
|
-
*/
|
|
89
|
-
private isExpired;
|
|
90
|
-
/**
|
|
91
|
-
* Evict the least recently used entry.
|
|
92
|
-
*/
|
|
93
|
-
private evictLRU;
|
|
94
|
-
/**
|
|
95
|
-
* Get an embedding from the cache.
|
|
96
|
-
*
|
|
97
|
-
* Returns null if:
|
|
98
|
-
* - Key not found
|
|
99
|
-
* - Entry is expired (TTL)
|
|
100
|
-
* - Text hash doesn't match (content changed)
|
|
101
|
-
*
|
|
102
|
-
* @param key - Cache key (typically entity name)
|
|
103
|
-
* @param text - Current text content (for hash validation)
|
|
104
|
-
* @returns Embedding vector if found and valid, null otherwise
|
|
105
|
-
*/
|
|
106
|
-
get(key: string, text: string): number[] | null;
|
|
107
|
-
/**
|
|
108
|
-
* Set an embedding in the cache.
|
|
109
|
-
*
|
|
110
|
-
* Automatically evicts LRU entries if max size is reached.
|
|
111
|
-
*
|
|
112
|
-
* @param key - Cache key (typically entity name)
|
|
113
|
-
* @param text - Text content (used for hash-based invalidation)
|
|
114
|
-
* @param vector - Embedding vector to cache
|
|
115
|
-
*/
|
|
116
|
-
set(key: string, text: string, vector: number[]): void;
|
|
117
|
-
/**
|
|
118
|
-
* Check if a key exists in the cache (without affecting hit/miss stats).
|
|
119
|
-
*
|
|
120
|
-
* @param key - Cache key to check
|
|
121
|
-
* @returns True if key exists (may be expired or stale)
|
|
122
|
-
*/
|
|
123
|
-
has(key: string): boolean;
|
|
124
|
-
/**
|
|
125
|
-
* Delete an entry from the cache.
|
|
126
|
-
*
|
|
127
|
-
* @param key - Cache key to delete
|
|
128
|
-
* @returns True if entry was deleted
|
|
129
|
-
*/
|
|
130
|
-
delete(key: string): boolean;
|
|
131
|
-
/**
|
|
132
|
-
* Clear all entries from the cache.
|
|
133
|
-
*/
|
|
134
|
-
clear(): void;
|
|
135
|
-
/**
|
|
136
|
-
* Get cache statistics.
|
|
137
|
-
*
|
|
138
|
-
* @returns Cache statistics including size, memory usage, and hit rate
|
|
139
|
-
*/
|
|
140
|
-
getStats(): EmbeddingCacheStats;
|
|
141
|
-
/**
|
|
142
|
-
* Reset hit/miss statistics (useful for benchmarks).
|
|
143
|
-
*/
|
|
144
|
-
resetStats(): void;
|
|
145
|
-
/**
|
|
146
|
-
* Remove expired entries from the cache.
|
|
147
|
-
*
|
|
148
|
-
* Called automatically during get operations, but can be
|
|
149
|
-
* manually triggered for maintenance.
|
|
150
|
-
*
|
|
151
|
-
* @returns Number of entries removed
|
|
152
|
-
*/
|
|
153
|
-
pruneExpired(): number;
|
|
154
|
-
/**
|
|
155
|
-
* Get the current cache size.
|
|
156
|
-
*
|
|
157
|
-
* @returns Number of entries in the cache
|
|
158
|
-
*/
|
|
159
|
-
size(): number;
|
|
160
|
-
/**
|
|
161
|
-
* Get all cached keys.
|
|
162
|
-
*
|
|
163
|
-
* @returns Array of cache keys
|
|
164
|
-
*/
|
|
165
|
-
keys(): string[];
|
|
166
|
-
/**
|
|
167
|
-
* Update options dynamically.
|
|
168
|
-
*
|
|
169
|
-
* Note: Reducing maxSize will not immediately evict entries.
|
|
170
|
-
*
|
|
171
|
-
* @param options - New options to apply
|
|
172
|
-
*/
|
|
173
|
-
updateOptions(options: Partial<EmbeddingCacheOptions>): void;
|
|
174
|
-
}
|
|
175
|
-
//# sourceMappingURL=EmbeddingCache.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EmbeddingCache.d.ts","sourceRoot":"","sources":["../../src/search/EmbeddingCache.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkBH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,+BAA+B,EAAE,QAAQ,CAAC,qBAAqB,CAI3E,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAa;IAE3B;;;;OAIG;gBACS,OAAO,CAAC,EAAE,qBAAqB;IAK3C;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAIhB;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAgBhB;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IA8B/C;;;;;;;;OAQG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAetD;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,QAAQ,IAAI,mBAAmB;IAmB/B;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;;;;;;OAOG;IACH,YAAY,IAAI,MAAM;IAWtB;;;;OAIG;IACH,IAAI,IAAI,MAAM;IAId;;;;OAIG;IACH,IAAI,IAAI,MAAM,EAAE;IAIhB;;;;;;OAMG;IACH,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,IAAI;CAG7D"}
|