@danielsimonjr/memory-mcp 11.0.1 → 11.1.1
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/LICENSE +22 -22
- package/dist/core/EntityManager.d.ts +10 -15
- package/dist/core/EntityManager.d.ts.map +1 -1
- package/dist/core/EntityManager.js +21 -54
- package/dist/core/GraphStorage.d.ts +0 -51
- package/dist/core/GraphStorage.d.ts.map +1 -1
- package/dist/core/GraphStorage.js +2 -79
- package/dist/core/GraphTraversal.d.ts +2 -7
- package/dist/core/GraphTraversal.d.ts.map +1 -1
- package/dist/core/GraphTraversal.js +2 -19
- package/dist/core/ManagerContext.d.ts +0 -4
- package/dist/core/ManagerContext.d.ts.map +1 -1
- package/dist/core/ManagerContext.js +2 -12
- package/dist/core/RelationManager.d.ts.map +1 -1
- package/dist/core/RelationManager.js +4 -5
- package/dist/core/SQLiteStorage.d.ts.map +1 -1
- package/dist/core/SQLiteStorage.js +2 -3
- package/dist/core/TransactionManager.d.ts +2 -207
- package/dist/core/TransactionManager.d.ts.map +1 -1
- package/dist/core/TransactionManager.js +6 -482
- package/dist/core/index.d.ts +1 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -3
- package/dist/features/ArchiveManager.d.ts +2 -14
- package/dist/features/ArchiveManager.d.ts.map +1 -1
- package/dist/features/ArchiveManager.js +3 -44
- package/dist/features/CompressionManager.d.ts +4 -14
- package/dist/features/CompressionManager.d.ts.map +1 -1
- package/dist/features/CompressionManager.js +9 -74
- package/dist/features/IOManager.d.ts +2 -6
- package/dist/features/IOManager.d.ts.map +1 -1
- package/dist/features/IOManager.js +10 -105
- package/dist/features/StreamingExporter.d.ts +4 -27
- package/dist/features/StreamingExporter.d.ts.map +1 -1
- package/dist/features/StreamingExporter.js +4 -65
- package/dist/features/index.d.ts +0 -2
- package/dist/features/index.d.ts.map +1 -1
- package/dist/features/index.js +0 -3
- package/dist/search/EmbeddingService.d.ts +9 -108
- package/dist/search/EmbeddingService.d.ts.map +1 -1
- package/dist/search/EmbeddingService.js +15 -187
- package/dist/search/FuzzySearch.js +1 -1
- package/dist/search/SavedSearchManager.d.ts.map +1 -1
- package/dist/search/SavedSearchManager.js +2 -3
- package/dist/search/SearchManager.d.ts +1 -42
- package/dist/search/SearchManager.d.ts.map +1 -1
- package/dist/search/SearchManager.js +0 -115
- package/dist/search/SemanticSearch.d.ts +1 -4
- package/dist/search/SemanticSearch.d.ts.map +1 -1
- package/dist/search/SemanticSearch.js +2 -12
- package/dist/search/TFIDFIndexManager.d.ts +0 -88
- package/dist/search/TFIDFIndexManager.d.ts.map +1 -1
- package/dist/search/TFIDFIndexManager.js +0 -217
- package/dist/search/index.d.ts +1 -18
- package/dist/search/index.d.ts.map +1 -1
- package/dist/search/index.js +1 -32
- package/dist/server/MCPServer.d.ts.map +1 -1
- package/dist/server/MCPServer.js +4 -1
- package/dist/server/responseCompressor.js +5 -5
- package/dist/server/toolDefinitions.d.ts.map +1 -1
- package/dist/server/toolDefinitions.js +5 -1
- package/dist/server/toolHandlers.d.ts +9 -5
- package/dist/server/toolHandlers.d.ts.map +1 -1
- package/dist/server/toolHandlers.js +23 -8
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types.d.ts +2 -579
- package/dist/types/types.d.ts.map +1 -1
- package/dist/utils/compressedCache.d.ts +0 -29
- package/dist/utils/compressedCache.d.ts.map +1 -1
- package/dist/utils/compressedCache.js +0 -39
- package/dist/utils/entityUtils.d.ts +1 -59
- package/dist/utils/entityUtils.d.ts.map +1 -1
- package/dist/utils/entityUtils.js +3 -113
- package/dist/utils/errors.d.ts +0 -18
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +0 -24
- package/dist/utils/index.d.ts +2 -6
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -14
- package/dist/utils/logger.d.ts +0 -7
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +2 -9
- package/dist/utils/parallelUtils.d.ts +1 -5
- package/dist/utils/parallelUtils.d.ts.map +1 -1
- package/dist/utils/parallelUtils.js +1 -23
- package/dist/utils/schemas.d.ts +16 -16
- package/dist/utils/schemas.d.ts.map +1 -1
- package/dist/utils/schemas.js +12 -12
- package/dist/utils/taskScheduler.d.ts +0 -4
- package/dist/utils/taskScheduler.d.ts.map +1 -1
- package/dist/utils/taskScheduler.js +1 -21
- package/dist/workers/WorkerPool.d.ts +81 -0
- package/dist/workers/WorkerPool.d.ts.map +1 -0
- package/dist/workers/WorkerPool.js +121 -0
- package/dist/workers/index.d.ts +1 -1
- package/dist/workers/index.d.ts.map +1 -1
- package/dist/workers/levenshteinWorker.js +1 -1
- package/package.json +1 -4
- package/dist/__tests__/file-path.test.js +0 -119
- package/dist/__tests__/knowledge-graph.test.js +0 -318
- package/dist/core/GraphEventEmitter.d.ts +0 -202
- package/dist/core/GraphEventEmitter.d.ts.map +0 -1
- package/dist/core/GraphEventEmitter.js +0 -346
- package/dist/features/KeywordExtractor.d.ts +0 -61
- package/dist/features/KeywordExtractor.d.ts.map +0 -1
- package/dist/features/KeywordExtractor.js +0 -126
- package/dist/features/ObservationNormalizer.d.ts +0 -90
- package/dist/features/ObservationNormalizer.d.ts.map +0 -1
- package/dist/features/ObservationNormalizer.js +0 -193
- package/dist/memory.jsonl +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 -339
- package/dist/search/EarlyTerminationManager.d.ts +0 -140
- package/dist/search/EarlyTerminationManager.d.ts.map +0 -1
- package/dist/search/EarlyTerminationManager.js +0 -279
- package/dist/search/EmbeddingCache.d.ts +0 -175
- package/dist/search/EmbeddingCache.d.ts.map +0 -1
- package/dist/search/EmbeddingCache.js +0 -246
- package/dist/search/HybridScorer.d.ts +0 -181
- package/dist/search/HybridScorer.d.ts.map +0 -1
- package/dist/search/HybridScorer.js +0 -257
- package/dist/search/HybridSearchManager.d.ts +0 -80
- package/dist/search/HybridSearchManager.d.ts.map +0 -1
- package/dist/search/HybridSearchManager.js +0 -187
- package/dist/search/IncrementalIndexer.d.ts +0 -201
- package/dist/search/IncrementalIndexer.d.ts.map +0 -1
- package/dist/search/IncrementalIndexer.js +0 -342
- package/dist/search/OptimizedInvertedIndex.d.ts +0 -163
- package/dist/search/OptimizedInvertedIndex.d.ts.map +0 -1
- package/dist/search/OptimizedInvertedIndex.js +0 -358
- package/dist/search/ParallelSearchExecutor.d.ts +0 -172
- package/dist/search/ParallelSearchExecutor.d.ts.map +0 -1
- package/dist/search/ParallelSearchExecutor.js +0 -309
- package/dist/search/QuantizedVectorStore.d.ts +0 -171
- package/dist/search/QuantizedVectorStore.d.ts.map +0 -1
- package/dist/search/QuantizedVectorStore.js +0 -307
- package/dist/search/QueryAnalyzer.d.ts +0 -76
- package/dist/search/QueryAnalyzer.d.ts.map +0 -1
- package/dist/search/QueryAnalyzer.js +0 -227
- package/dist/search/QueryCostEstimator.d.ts +0 -244
- package/dist/search/QueryCostEstimator.d.ts.map +0 -1
- package/dist/search/QueryCostEstimator.js +0 -652
- package/dist/search/QueryPlanCache.d.ts +0 -220
- package/dist/search/QueryPlanCache.d.ts.map +0 -1
- package/dist/search/QueryPlanCache.js +0 -379
- package/dist/search/QueryPlanner.d.ts +0 -58
- package/dist/search/QueryPlanner.d.ts.map +0 -1
- package/dist/search/QueryPlanner.js +0 -137
- package/dist/search/ReflectionManager.d.ts +0 -120
- package/dist/search/ReflectionManager.d.ts.map +0 -1
- package/dist/search/ReflectionManager.js +0 -231
- package/dist/search/SymbolicSearch.d.ts +0 -61
- package/dist/search/SymbolicSearch.d.ts.map +0 -1
- package/dist/search/SymbolicSearch.js +0 -163
- package/dist/search/TFIDFEventSync.d.ts +0 -85
- package/dist/search/TFIDFEventSync.d.ts.map +0 -1
- package/dist/search/TFIDFEventSync.js +0 -133
- package/dist/utils/BatchProcessor.d.ts +0 -271
- package/dist/utils/BatchProcessor.d.ts.map +0 -1
- package/dist/utils/BatchProcessor.js +0 -376
- package/dist/utils/MemoryMonitor.d.ts +0 -176
- package/dist/utils/MemoryMonitor.d.ts.map +0 -1
- package/dist/utils/MemoryMonitor.js +0 -305
- package/dist/utils/WorkerPoolManager.d.ts +0 -233
- package/dist/utils/WorkerPoolManager.d.ts.map +0 -1
- package/dist/utils/WorkerPoolManager.js +0 -420
- package/dist/utils/operationUtils.d.ts +0 -124
- package/dist/utils/operationUtils.d.ts.map +0 -1
- package/dist/utils/operationUtils.js +0 -175
- package/dist/vitest.config.js +0 -13
|
@@ -2,55 +2,21 @@
|
|
|
2
2
|
* Embedding Service
|
|
3
3
|
*
|
|
4
4
|
* Phase 4 Sprint 10: Provides embedding abstractions for semantic search.
|
|
5
|
-
* Phase 12 Sprint 5: Added query/document prefixes, l2Normalize, mode parameter,
|
|
6
|
-
* and batch embedding with progress callback.
|
|
7
5
|
* Supports multiple providers: OpenAI (cloud) and local (transformers.js).
|
|
8
6
|
*
|
|
9
7
|
* @module search/EmbeddingService
|
|
10
8
|
*/
|
|
11
|
-
import type { EmbeddingService, EmbeddingConfig
|
|
12
|
-
/**
|
|
13
|
-
* Phase 12 Sprint 5: Prefixes for query-optimized embedding encoding.
|
|
14
|
-
*
|
|
15
|
-
* These prefixes are used to distinguish between query and document embeddings,
|
|
16
|
-
* which can improve retrieval performance with asymmetric embedding models.
|
|
17
|
-
*/
|
|
18
|
-
export declare const QUERY_PREFIX = "query: ";
|
|
19
|
-
export declare const DOCUMENT_PREFIX = "passage: ";
|
|
20
|
-
/**
|
|
21
|
-
* Phase 12 Sprint 5: Callback for batch embedding progress.
|
|
22
|
-
*/
|
|
23
|
-
export type EmbeddingProgressCallback = (progress: {
|
|
24
|
-
current: number;
|
|
25
|
-
total: number;
|
|
26
|
-
percentage: number;
|
|
27
|
-
}) => void;
|
|
28
|
-
/**
|
|
29
|
-
* Phase 12 Sprint 5: L2 normalize a vector for cosine similarity.
|
|
30
|
-
*
|
|
31
|
-
* Normalizes a vector to unit length (magnitude 1), which is required
|
|
32
|
-
* for accurate cosine similarity calculations.
|
|
33
|
-
*
|
|
34
|
-
* @param vector - Input vector to normalize
|
|
35
|
-
* @returns L2 normalized vector
|
|
36
|
-
*
|
|
37
|
-
* @example
|
|
38
|
-
* ```typescript
|
|
39
|
-
* const normalized = l2Normalize([3, 4]); // [0.6, 0.8]
|
|
40
|
-
* ```
|
|
41
|
-
*/
|
|
42
|
-
export declare function l2Normalize(vector: number[]): number[];
|
|
9
|
+
import type { EmbeddingService, EmbeddingConfig } from '../types/index.js';
|
|
43
10
|
/**
|
|
44
11
|
* OpenAI Embedding Service
|
|
45
12
|
*
|
|
46
13
|
* Uses OpenAI's text-embedding-3-small model for generating embeddings.
|
|
47
14
|
* Supports single and batch embedding with rate limit handling.
|
|
48
|
-
* Phase 12 Sprint 5: Added mode parameter and progress callback support.
|
|
49
15
|
*
|
|
50
16
|
* @example
|
|
51
17
|
* ```typescript
|
|
52
18
|
* const service = new OpenAIEmbeddingService('sk-...');
|
|
53
|
-
* const embedding = await service.embed("Hello world"
|
|
19
|
+
* const embedding = await service.embed("Hello world");
|
|
54
20
|
* console.log(`Generated ${embedding.length} dimensions`);
|
|
55
21
|
* ```
|
|
56
22
|
*/
|
|
@@ -70,41 +36,20 @@ export declare class OpenAIEmbeddingService implements EmbeddingService {
|
|
|
70
36
|
* Check if the service is ready.
|
|
71
37
|
*/
|
|
72
38
|
isReady(): Promise<boolean>;
|
|
73
|
-
/**
|
|
74
|
-
* Apply prefix to text based on embedding mode.
|
|
75
|
-
*
|
|
76
|
-
* @param text - Original text
|
|
77
|
-
* @param mode - Embedding mode ('query' or 'document')
|
|
78
|
-
* @returns Text with appropriate prefix
|
|
79
|
-
*/
|
|
80
|
-
private applyPrefix;
|
|
81
39
|
/**
|
|
82
40
|
* Generate embedding for a single text.
|
|
83
41
|
*
|
|
84
42
|
* @param text - Text to embed
|
|
85
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
86
43
|
* @returns Embedding vector
|
|
87
44
|
*/
|
|
88
|
-
embed(text: string
|
|
45
|
+
embed(text: string): Promise<number[]>;
|
|
89
46
|
/**
|
|
90
47
|
* Generate embeddings for multiple texts in batch.
|
|
91
48
|
*
|
|
92
49
|
* @param texts - Array of texts to embed
|
|
93
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
94
|
-
* @returns Array of embedding vectors
|
|
95
|
-
*/
|
|
96
|
-
embedBatch(texts: string[], mode?: EmbeddingMode): Promise<number[][]>;
|
|
97
|
-
/**
|
|
98
|
-
* Generate embeddings with progress callback support.
|
|
99
|
-
*
|
|
100
|
-
* Phase 12 Sprint 5: Added for tracking progress on large batch operations.
|
|
101
|
-
*
|
|
102
|
-
* @param texts - Array of texts to embed
|
|
103
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
104
|
-
* @param onProgress - Optional progress callback
|
|
105
50
|
* @returns Array of embedding vectors
|
|
106
51
|
*/
|
|
107
|
-
|
|
52
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
108
53
|
/**
|
|
109
54
|
* Internal batch embedding with retry logic.
|
|
110
55
|
*/
|
|
@@ -123,7 +68,6 @@ export declare class OpenAIEmbeddingService implements EmbeddingService {
|
|
|
123
68
|
*
|
|
124
69
|
* Uses @xenova/transformers for local embedding generation.
|
|
125
70
|
* No API calls needed - runs entirely offline after initial model download.
|
|
126
|
-
* Phase 12 Sprint 5: Added mode parameter and progress callback support.
|
|
127
71
|
*
|
|
128
72
|
* Note: Requires @xenova/transformers to be installed as an optional dependency.
|
|
129
73
|
* If not available, initialization will fail gracefully.
|
|
@@ -132,7 +76,7 @@ export declare class OpenAIEmbeddingService implements EmbeddingService {
|
|
|
132
76
|
* ```typescript
|
|
133
77
|
* const service = new LocalEmbeddingService();
|
|
134
78
|
* await service.initialize();
|
|
135
|
-
* const embedding = await service.embed("Hello world"
|
|
79
|
+
* const embedding = await service.embed("Hello world");
|
|
136
80
|
* ```
|
|
137
81
|
*/
|
|
138
82
|
export declare class LocalEmbeddingService implements EmbeddingService {
|
|
@@ -161,42 +105,21 @@ export declare class LocalEmbeddingService implements EmbeddingService {
|
|
|
161
105
|
* Check if the service is ready.
|
|
162
106
|
*/
|
|
163
107
|
isReady(): Promise<boolean>;
|
|
164
|
-
/**
|
|
165
|
-
* Apply prefix to text based on embedding mode.
|
|
166
|
-
*
|
|
167
|
-
* @param text - Original text
|
|
168
|
-
* @param mode - Embedding mode ('query' or 'document')
|
|
169
|
-
* @returns Text with appropriate prefix
|
|
170
|
-
*/
|
|
171
|
-
private applyPrefix;
|
|
172
108
|
/**
|
|
173
109
|
* Generate embedding for a single text.
|
|
174
110
|
*
|
|
175
111
|
* @param text - Text to embed
|
|
176
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
177
112
|
* @returns Embedding vector
|
|
178
113
|
*/
|
|
179
|
-
embed(text: string
|
|
114
|
+
embed(text: string): Promise<number[]>;
|
|
180
115
|
/**
|
|
181
116
|
* Generate embeddings for multiple texts in batch.
|
|
182
117
|
* Note: Local processing is done sequentially to avoid memory issues.
|
|
183
118
|
*
|
|
184
119
|
* @param texts - Array of texts to embed
|
|
185
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
186
|
-
* @returns Array of embedding vectors
|
|
187
|
-
*/
|
|
188
|
-
embedBatch(texts: string[], mode?: EmbeddingMode): Promise<number[][]>;
|
|
189
|
-
/**
|
|
190
|
-
* Generate embeddings with progress callback support.
|
|
191
|
-
*
|
|
192
|
-
* Phase 12 Sprint 5: Added for tracking progress on large batch operations.
|
|
193
|
-
*
|
|
194
|
-
* @param texts - Array of texts to embed
|
|
195
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
196
|
-
* @param onProgress - Optional progress callback
|
|
197
120
|
* @returns Array of embedding vectors
|
|
198
121
|
*/
|
|
199
|
-
|
|
122
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
200
123
|
/**
|
|
201
124
|
* Ensure the service is initialized.
|
|
202
125
|
*/
|
|
@@ -207,7 +130,6 @@ export declare class LocalEmbeddingService implements EmbeddingService {
|
|
|
207
130
|
*
|
|
208
131
|
* Generates deterministic mock embeddings for testing purposes.
|
|
209
132
|
* Useful for unit tests that don't need real embeddings.
|
|
210
|
-
* Phase 12 Sprint 5: Added mode parameter and progress callback support.
|
|
211
133
|
*/
|
|
212
134
|
export declare class MockEmbeddingService implements EmbeddingService {
|
|
213
135
|
readonly dimensions: number;
|
|
@@ -223,41 +145,20 @@ export declare class MockEmbeddingService implements EmbeddingService {
|
|
|
223
145
|
* Check if the service is ready.
|
|
224
146
|
*/
|
|
225
147
|
isReady(): Promise<boolean>;
|
|
226
|
-
/**
|
|
227
|
-
* Apply prefix to text based on embedding mode.
|
|
228
|
-
*
|
|
229
|
-
* @param text - Original text
|
|
230
|
-
* @param mode - Embedding mode ('query' or 'document')
|
|
231
|
-
* @returns Text with appropriate prefix
|
|
232
|
-
*/
|
|
233
|
-
private applyPrefix;
|
|
234
148
|
/**
|
|
235
149
|
* Generate a deterministic mock embedding for a text.
|
|
236
150
|
*
|
|
237
151
|
* @param text - Text to embed
|
|
238
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
239
152
|
* @returns Mock embedding vector
|
|
240
153
|
*/
|
|
241
|
-
embed(text: string
|
|
154
|
+
embed(text: string): Promise<number[]>;
|
|
242
155
|
/**
|
|
243
156
|
* Generate mock embeddings for multiple texts.
|
|
244
157
|
*
|
|
245
158
|
* @param texts - Array of texts to embed
|
|
246
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
247
|
-
* @returns Array of mock embedding vectors
|
|
248
|
-
*/
|
|
249
|
-
embedBatch(texts: string[], mode?: EmbeddingMode): Promise<number[][]>;
|
|
250
|
-
/**
|
|
251
|
-
* Generate mock embeddings with progress callback support.
|
|
252
|
-
*
|
|
253
|
-
* Phase 12 Sprint 5: Added for tracking progress on large batch operations.
|
|
254
|
-
*
|
|
255
|
-
* @param texts - Array of texts to embed
|
|
256
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
257
|
-
* @param onProgress - Optional progress callback
|
|
258
159
|
* @returns Array of mock embedding vectors
|
|
259
160
|
*/
|
|
260
|
-
|
|
161
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
261
162
|
/**
|
|
262
163
|
* Simple string hash function.
|
|
263
164
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmbeddingService.d.ts","sourceRoot":"","sources":["../../src/search/EmbeddingService.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"EmbeddingService.d.ts","sourceRoot":"","sources":["../../src/search/EmbeddingService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAO3E;;;;;;;;;;;;GAYG;AACH,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,YAAY;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,MAAM,CAAS;IAEvB;;;;;OAKG;gBACS,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAS1C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAIjC;;;;;OAKG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAK5C;;;;;OAKG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAkBtD;;OAEG;YACW,kBAAkB;IA0DhC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd;AAmBD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,qBAAsB,YAAW,gBAAgB;IAC5D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAuC;IAClE,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAA8B;IAEjD;;;;OAIG;gBACS,KAAK,CAAC,EAAE,MAAM;IAI1B;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAWjC;;OAEG;YACW,kBAAkB;IAkBhC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAWjC;;;;;OAKG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAS5C;;;;;;OAMG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAWtD;;OAEG;YACW,iBAAiB;CAKhC;AAED;;;;;GAKG;AACH,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,UAAU;IAC3B,QAAQ,CAAC,KAAK,gBAAgB;IAE9B;;;;OAIG;gBACS,UAAU,GAAE,MAAY;IAIpC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAIjC;;;;;OAKG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAe5C;;;;;OAKG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAItD;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACH,OAAO,CAAC,SAAS;CAalB;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,gBAAgB,GAAG,IAAI,CAoBjG"}
|
|
@@ -2,57 +2,21 @@
|
|
|
2
2
|
* Embedding Service
|
|
3
3
|
*
|
|
4
4
|
* Phase 4 Sprint 10: Provides embedding abstractions for semantic search.
|
|
5
|
-
* Phase 12 Sprint 5: Added query/document prefixes, l2Normalize, mode parameter,
|
|
6
|
-
* and batch embedding with progress callback.
|
|
7
5
|
* Supports multiple providers: OpenAI (cloud) and local (transformers.js).
|
|
8
6
|
*
|
|
9
7
|
* @module search/EmbeddingService
|
|
10
8
|
*/
|
|
11
9
|
import { EMBEDDING_DEFAULTS, OPENAI_API_CONFIG, getEmbeddingConfig, } from '../utils/constants.js';
|
|
12
|
-
/**
|
|
13
|
-
* Phase 12 Sprint 5: Prefixes for query-optimized embedding encoding.
|
|
14
|
-
*
|
|
15
|
-
* These prefixes are used to distinguish between query and document embeddings,
|
|
16
|
-
* which can improve retrieval performance with asymmetric embedding models.
|
|
17
|
-
*/
|
|
18
|
-
export const QUERY_PREFIX = 'query: ';
|
|
19
|
-
export const DOCUMENT_PREFIX = 'passage: ';
|
|
20
|
-
/**
|
|
21
|
-
* Phase 12 Sprint 5: L2 normalize a vector for cosine similarity.
|
|
22
|
-
*
|
|
23
|
-
* Normalizes a vector to unit length (magnitude 1), which is required
|
|
24
|
-
* for accurate cosine similarity calculations.
|
|
25
|
-
*
|
|
26
|
-
* @param vector - Input vector to normalize
|
|
27
|
-
* @returns L2 normalized vector
|
|
28
|
-
*
|
|
29
|
-
* @example
|
|
30
|
-
* ```typescript
|
|
31
|
-
* const normalized = l2Normalize([3, 4]); // [0.6, 0.8]
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
export function l2Normalize(vector) {
|
|
35
|
-
let magnitude = 0;
|
|
36
|
-
for (const v of vector) {
|
|
37
|
-
magnitude += v * v;
|
|
38
|
-
}
|
|
39
|
-
magnitude = Math.sqrt(magnitude);
|
|
40
|
-
if (magnitude === 0 || magnitude === 1) {
|
|
41
|
-
return magnitude === 0 ? vector : vector.slice();
|
|
42
|
-
}
|
|
43
|
-
return vector.map(v => v / magnitude);
|
|
44
|
-
}
|
|
45
10
|
/**
|
|
46
11
|
* OpenAI Embedding Service
|
|
47
12
|
*
|
|
48
13
|
* Uses OpenAI's text-embedding-3-small model for generating embeddings.
|
|
49
14
|
* Supports single and batch embedding with rate limit handling.
|
|
50
|
-
* Phase 12 Sprint 5: Added mode parameter and progress callback support.
|
|
51
15
|
*
|
|
52
16
|
* @example
|
|
53
17
|
* ```typescript
|
|
54
18
|
* const service = new OpenAIEmbeddingService('sk-...');
|
|
55
|
-
* const embedding = await service.embed("Hello world"
|
|
19
|
+
* const embedding = await service.embed("Hello world");
|
|
56
20
|
* console.log(`Generated ${embedding.length} dimensions`);
|
|
57
21
|
* ```
|
|
58
22
|
*/
|
|
@@ -81,86 +45,36 @@ export class OpenAIEmbeddingService {
|
|
|
81
45
|
async isReady() {
|
|
82
46
|
return !!this.apiKey;
|
|
83
47
|
}
|
|
84
|
-
/**
|
|
85
|
-
* Apply prefix to text based on embedding mode.
|
|
86
|
-
*
|
|
87
|
-
* @param text - Original text
|
|
88
|
-
* @param mode - Embedding mode ('query' or 'document')
|
|
89
|
-
* @returns Text with appropriate prefix
|
|
90
|
-
*/
|
|
91
|
-
applyPrefix(text, mode = 'document') {
|
|
92
|
-
return mode === 'query' ? `${QUERY_PREFIX}${text}` : `${DOCUMENT_PREFIX}${text}`;
|
|
93
|
-
}
|
|
94
48
|
/**
|
|
95
49
|
* Generate embedding for a single text.
|
|
96
50
|
*
|
|
97
51
|
* @param text - Text to embed
|
|
98
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
99
52
|
* @returns Embedding vector
|
|
100
53
|
*/
|
|
101
|
-
async embed(text
|
|
102
|
-
const results = await this.embedBatch([text]
|
|
54
|
+
async embed(text) {
|
|
55
|
+
const results = await this.embedBatch([text]);
|
|
103
56
|
return results[0];
|
|
104
57
|
}
|
|
105
58
|
/**
|
|
106
59
|
* Generate embeddings for multiple texts in batch.
|
|
107
60
|
*
|
|
108
61
|
* @param texts - Array of texts to embed
|
|
109
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
110
62
|
* @returns Array of embedding vectors
|
|
111
63
|
*/
|
|
112
|
-
async embedBatch(texts
|
|
64
|
+
async embedBatch(texts) {
|
|
113
65
|
if (texts.length === 0) {
|
|
114
66
|
return [];
|
|
115
67
|
}
|
|
116
|
-
// Apply prefix based on mode
|
|
117
|
-
const prefixedTexts = texts.map(text => this.applyPrefix(text, mode));
|
|
118
68
|
// Split into batches if needed
|
|
119
69
|
const maxBatchSize = EMBEDDING_DEFAULTS.OPENAI_MAX_BATCH_SIZE;
|
|
120
70
|
const results = [];
|
|
121
|
-
for (let i = 0; i <
|
|
122
|
-
const batch =
|
|
71
|
+
for (let i = 0; i < texts.length; i += maxBatchSize) {
|
|
72
|
+
const batch = texts.slice(i, i + maxBatchSize);
|
|
123
73
|
const batchResults = await this.embedBatchInternal(batch);
|
|
124
74
|
results.push(...batchResults);
|
|
125
75
|
}
|
|
126
76
|
return results;
|
|
127
77
|
}
|
|
128
|
-
/**
|
|
129
|
-
* Generate embeddings with progress callback support.
|
|
130
|
-
*
|
|
131
|
-
* Phase 12 Sprint 5: Added for tracking progress on large batch operations.
|
|
132
|
-
*
|
|
133
|
-
* @param texts - Array of texts to embed
|
|
134
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
135
|
-
* @param onProgress - Optional progress callback
|
|
136
|
-
* @returns Array of embedding vectors
|
|
137
|
-
*/
|
|
138
|
-
async embedBatchWithProgress(texts, mode = 'document', onProgress) {
|
|
139
|
-
if (texts.length === 0) {
|
|
140
|
-
return [];
|
|
141
|
-
}
|
|
142
|
-
// Apply prefix based on mode
|
|
143
|
-
const prefixedTexts = texts.map(text => this.applyPrefix(text, mode));
|
|
144
|
-
// Split into batches if needed
|
|
145
|
-
const maxBatchSize = EMBEDDING_DEFAULTS.OPENAI_MAX_BATCH_SIZE;
|
|
146
|
-
const results = [];
|
|
147
|
-
const total = prefixedTexts.length;
|
|
148
|
-
for (let i = 0; i < prefixedTexts.length; i += maxBatchSize) {
|
|
149
|
-
const batch = prefixedTexts.slice(i, i + maxBatchSize);
|
|
150
|
-
const batchResults = await this.embedBatchInternal(batch);
|
|
151
|
-
results.push(...batchResults);
|
|
152
|
-
// Report progress
|
|
153
|
-
if (onProgress) {
|
|
154
|
-
const current = Math.min(i + maxBatchSize, total);
|
|
155
|
-
onProgress({
|
|
156
|
-
current,
|
|
157
|
-
total,
|
|
158
|
-
percentage: Math.round((current / total) * 100),
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
return results;
|
|
163
|
-
}
|
|
164
78
|
/**
|
|
165
79
|
* Internal batch embedding with retry logic.
|
|
166
80
|
*/
|
|
@@ -234,7 +148,6 @@ export class OpenAIEmbeddingService {
|
|
|
234
148
|
*
|
|
235
149
|
* Uses @xenova/transformers for local embedding generation.
|
|
236
150
|
* No API calls needed - runs entirely offline after initial model download.
|
|
237
|
-
* Phase 12 Sprint 5: Added mode parameter and progress callback support.
|
|
238
151
|
*
|
|
239
152
|
* Note: Requires @xenova/transformers to be installed as an optional dependency.
|
|
240
153
|
* If not available, initialization will fail gracefully.
|
|
@@ -243,7 +156,7 @@ export class OpenAIEmbeddingService {
|
|
|
243
156
|
* ```typescript
|
|
244
157
|
* const service = new LocalEmbeddingService();
|
|
245
158
|
* await service.initialize();
|
|
246
|
-
* const embedding = await service.embed("Hello world"
|
|
159
|
+
* const embedding = await service.embed("Hello world");
|
|
247
160
|
* ```
|
|
248
161
|
*/
|
|
249
162
|
export class LocalEmbeddingService {
|
|
@@ -306,28 +219,16 @@ export class LocalEmbeddingService {
|
|
|
306
219
|
}
|
|
307
220
|
return this.initialized;
|
|
308
221
|
}
|
|
309
|
-
/**
|
|
310
|
-
* Apply prefix to text based on embedding mode.
|
|
311
|
-
*
|
|
312
|
-
* @param text - Original text
|
|
313
|
-
* @param mode - Embedding mode ('query' or 'document')
|
|
314
|
-
* @returns Text with appropriate prefix
|
|
315
|
-
*/
|
|
316
|
-
applyPrefix(text, mode = 'document') {
|
|
317
|
-
return mode === 'query' ? `${QUERY_PREFIX}${text}` : `${DOCUMENT_PREFIX}${text}`;
|
|
318
|
-
}
|
|
319
222
|
/**
|
|
320
223
|
* Generate embedding for a single text.
|
|
321
224
|
*
|
|
322
225
|
* @param text - Text to embed
|
|
323
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
324
226
|
* @returns Embedding vector
|
|
325
227
|
*/
|
|
326
|
-
async embed(text
|
|
228
|
+
async embed(text) {
|
|
327
229
|
await this.ensureInitialized();
|
|
328
|
-
const prefixedText = this.applyPrefix(text, mode);
|
|
329
230
|
const pipelineFn = this.pipeline;
|
|
330
|
-
const output = await pipelineFn(
|
|
231
|
+
const output = await pipelineFn(text, { pooling: 'mean', normalize: true });
|
|
331
232
|
return Array.from(output.data);
|
|
332
233
|
}
|
|
333
234
|
/**
|
|
@@ -335,44 +236,14 @@ export class LocalEmbeddingService {
|
|
|
335
236
|
* Note: Local processing is done sequentially to avoid memory issues.
|
|
336
237
|
*
|
|
337
238
|
* @param texts - Array of texts to embed
|
|
338
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
339
239
|
* @returns Array of embedding vectors
|
|
340
240
|
*/
|
|
341
|
-
async embedBatch(texts
|
|
241
|
+
async embedBatch(texts) {
|
|
342
242
|
await this.ensureInitialized();
|
|
343
243
|
const results = [];
|
|
344
244
|
for (const text of texts) {
|
|
345
|
-
const embedding = await this.embed(text
|
|
346
|
-
results.push(embedding);
|
|
347
|
-
}
|
|
348
|
-
return results;
|
|
349
|
-
}
|
|
350
|
-
/**
|
|
351
|
-
* Generate embeddings with progress callback support.
|
|
352
|
-
*
|
|
353
|
-
* Phase 12 Sprint 5: Added for tracking progress on large batch operations.
|
|
354
|
-
*
|
|
355
|
-
* @param texts - Array of texts to embed
|
|
356
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
357
|
-
* @param onProgress - Optional progress callback
|
|
358
|
-
* @returns Array of embedding vectors
|
|
359
|
-
*/
|
|
360
|
-
async embedBatchWithProgress(texts, mode = 'document', onProgress) {
|
|
361
|
-
await this.ensureInitialized();
|
|
362
|
-
const results = [];
|
|
363
|
-
const total = texts.length;
|
|
364
|
-
for (let i = 0; i < texts.length; i++) {
|
|
365
|
-
const embedding = await this.embed(texts[i], mode);
|
|
245
|
+
const embedding = await this.embed(text);
|
|
366
246
|
results.push(embedding);
|
|
367
|
-
// Report progress
|
|
368
|
-
if (onProgress) {
|
|
369
|
-
const current = i + 1;
|
|
370
|
-
onProgress({
|
|
371
|
-
current,
|
|
372
|
-
total,
|
|
373
|
-
percentage: Math.round((current / total) * 100),
|
|
374
|
-
});
|
|
375
|
-
}
|
|
376
247
|
}
|
|
377
248
|
return results;
|
|
378
249
|
}
|
|
@@ -390,7 +261,6 @@ export class LocalEmbeddingService {
|
|
|
390
261
|
*
|
|
391
262
|
* Generates deterministic mock embeddings for testing purposes.
|
|
392
263
|
* Useful for unit tests that don't need real embeddings.
|
|
393
|
-
* Phase 12 Sprint 5: Added mode parameter and progress callback support.
|
|
394
264
|
*/
|
|
395
265
|
export class MockEmbeddingService {
|
|
396
266
|
dimensions;
|
|
@@ -410,28 +280,15 @@ export class MockEmbeddingService {
|
|
|
410
280
|
async isReady() {
|
|
411
281
|
return true;
|
|
412
282
|
}
|
|
413
|
-
/**
|
|
414
|
-
* Apply prefix to text based on embedding mode.
|
|
415
|
-
*
|
|
416
|
-
* @param text - Original text
|
|
417
|
-
* @param mode - Embedding mode ('query' or 'document')
|
|
418
|
-
* @returns Text with appropriate prefix
|
|
419
|
-
*/
|
|
420
|
-
applyPrefix(text, mode = 'document') {
|
|
421
|
-
return mode === 'query' ? `${QUERY_PREFIX}${text}` : `${DOCUMENT_PREFIX}${text}`;
|
|
422
|
-
}
|
|
423
283
|
/**
|
|
424
284
|
* Generate a deterministic mock embedding for a text.
|
|
425
285
|
*
|
|
426
286
|
* @param text - Text to embed
|
|
427
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
428
287
|
* @returns Mock embedding vector
|
|
429
288
|
*/
|
|
430
|
-
async embed(text
|
|
431
|
-
// Apply prefix based on mode (affects hash for different embeddings per mode)
|
|
432
|
-
const prefixedText = this.applyPrefix(text, mode);
|
|
289
|
+
async embed(text) {
|
|
433
290
|
// Generate deterministic embedding based on text hash
|
|
434
|
-
const hash = this.hashString(
|
|
291
|
+
const hash = this.hashString(text);
|
|
435
292
|
const embedding = [];
|
|
436
293
|
for (let i = 0; i < this.dimensions; i++) {
|
|
437
294
|
// Use hash and index to generate deterministic values
|
|
@@ -445,39 +302,10 @@ export class MockEmbeddingService {
|
|
|
445
302
|
* Generate mock embeddings for multiple texts.
|
|
446
303
|
*
|
|
447
304
|
* @param texts - Array of texts to embed
|
|
448
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
449
|
-
* @returns Array of mock embedding vectors
|
|
450
|
-
*/
|
|
451
|
-
async embedBatch(texts, mode = 'document') {
|
|
452
|
-
return Promise.all(texts.map(text => this.embed(text, mode)));
|
|
453
|
-
}
|
|
454
|
-
/**
|
|
455
|
-
* Generate mock embeddings with progress callback support.
|
|
456
|
-
*
|
|
457
|
-
* Phase 12 Sprint 5: Added for tracking progress on large batch operations.
|
|
458
|
-
*
|
|
459
|
-
* @param texts - Array of texts to embed
|
|
460
|
-
* @param mode - Embedding mode ('query' or 'document', default: 'document')
|
|
461
|
-
* @param onProgress - Optional progress callback
|
|
462
305
|
* @returns Array of mock embedding vectors
|
|
463
306
|
*/
|
|
464
|
-
async
|
|
465
|
-
|
|
466
|
-
const total = texts.length;
|
|
467
|
-
for (let i = 0; i < texts.length; i++) {
|
|
468
|
-
const embedding = await this.embed(texts[i], mode);
|
|
469
|
-
results.push(embedding);
|
|
470
|
-
// Report progress
|
|
471
|
-
if (onProgress) {
|
|
472
|
-
const current = i + 1;
|
|
473
|
-
onProgress({
|
|
474
|
-
current,
|
|
475
|
-
total,
|
|
476
|
-
percentage: Math.round((current / total) * 100),
|
|
477
|
-
});
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
return results;
|
|
307
|
+
async embedBatch(texts) {
|
|
308
|
+
return Promise.all(texts.map(text => this.embed(text)));
|
|
481
309
|
}
|
|
482
310
|
/**
|
|
483
311
|
* Simple string hash function.
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
import { levenshteinDistance } from '../utils/index.js';
|
|
10
10
|
import { SEARCH_LIMITS } from '../utils/constants.js';
|
|
11
11
|
import { SearchFilterChain } from './SearchFilterChain.js';
|
|
12
|
-
import workerpool from '@danielsimonjr/workerpool';
|
|
12
|
+
import workerpool from '@danielsimonjr/workerpool/modern';
|
|
13
13
|
import { fileURLToPath } from 'url';
|
|
14
14
|
import { dirname, join, sep } from 'path';
|
|
15
15
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SavedSearchManager.d.ts","sourceRoot":"","sources":["../../src/search/SavedSearchManager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"SavedSearchManager.d.ts","sourceRoot":"","sources":["../../src/search/SavedSearchManager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,qBAAqB;IAC7B,OAAO,CAAC,WAAW;gBADX,qBAAqB,EAAE,MAAM,EAC7B,WAAW,EAAE,WAAW;IAGlC;;;;OAIG;YACW,iBAAiB;IAa/B;;;;OAIG;YACW,iBAAiB;IAK/B;;;;;;OAMG;IACG,UAAU,CACd,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC,GAC/D,OAAO,CAAC,WAAW,CAAC;IAoBvB;;;;OAIG;IACG,iBAAiB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAIjD;;;;;OAKG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAK/D;;;;;;;;OAQG;IACG,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAsB/D;;;;;OAKG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAavD;;;;;;;;;OASG;IACG,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC,GAClF,OAAO,CAAC,WAAW,CAAC;CAcxB"}
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
* @module search/SavedSearchManager
|
|
7
7
|
*/
|
|
8
8
|
import * as fs from 'fs/promises';
|
|
9
|
-
import { sanitizeObject } from '../utils/index.js';
|
|
10
9
|
/**
|
|
11
10
|
* Manages saved search queries with usage tracking.
|
|
12
11
|
*/
|
|
@@ -138,8 +137,8 @@ export class SavedSearchManager {
|
|
|
138
137
|
if (!search) {
|
|
139
138
|
throw new Error(`Saved search "${name}" not found`);
|
|
140
139
|
}
|
|
141
|
-
// Apply updates
|
|
142
|
-
Object.assign(search,
|
|
140
|
+
// Apply updates
|
|
141
|
+
Object.assign(search, updates);
|
|
143
142
|
await this.saveSavedSearches(searches);
|
|
144
143
|
return search;
|
|
145
144
|
}
|
|
@@ -6,9 +6,8 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module search/SearchManager
|
|
8
8
|
*/
|
|
9
|
-
import type { KnowledgeGraph, SearchResult, SavedSearch
|
|
9
|
+
import type { KnowledgeGraph, SearchResult, SavedSearch } from '../types/index.js';
|
|
10
10
|
import type { GraphStorage } from '../core/GraphStorage.js';
|
|
11
|
-
import { QueryCostEstimator } from './QueryCostEstimator.js';
|
|
12
11
|
/**
|
|
13
12
|
* Unified search manager providing access to all search types.
|
|
14
13
|
*
|
|
@@ -21,8 +20,6 @@ export declare class SearchManager {
|
|
|
21
20
|
private fuzzySearcher;
|
|
22
21
|
private searchSuggestions;
|
|
23
22
|
private savedSearchManager;
|
|
24
|
-
private storage;
|
|
25
|
-
private queryEstimator;
|
|
26
23
|
constructor(storage: GraphStorage, savedSearchesFilePath: string);
|
|
27
24
|
/**
|
|
28
25
|
* Phase 4 Sprint 5: Clear all search caches.
|
|
@@ -284,43 +281,5 @@ export declare class SearchManager {
|
|
|
284
281
|
* @returns Updated saved search
|
|
285
282
|
*/
|
|
286
283
|
updateSavedSearch(name: string, updates: Partial<Omit<SavedSearch, 'name' | 'createdAt' | 'useCount' | 'lastUsed'>>): Promise<SavedSearch>;
|
|
287
|
-
/**
|
|
288
|
-
* Phase 10 Sprint 4: Automatically select and execute the best search method.
|
|
289
|
-
*
|
|
290
|
-
* Analyzes the query and graph size to determine the optimal search method,
|
|
291
|
-
* then executes it and returns both the results and the selection reasoning.
|
|
292
|
-
*
|
|
293
|
-
* @param query - The search query
|
|
294
|
-
* @param limit - Maximum number of results (default: 10)
|
|
295
|
-
* @returns AutoSearchResult with selected method, results, and estimates
|
|
296
|
-
*
|
|
297
|
-
* @example
|
|
298
|
-
* ```typescript
|
|
299
|
-
* const manager = new SearchManager(storage, savedSearchesPath);
|
|
300
|
-
*
|
|
301
|
-
* // Let the system choose the best search method
|
|
302
|
-
* const result = await manager.autoSearch('software engineer skills');
|
|
303
|
-
*
|
|
304
|
-
* console.log(`Used ${result.selectedMethod} because: ${result.selectionReason}`);
|
|
305
|
-
* console.log(`Found ${result.results.length} results in ${result.executionTimeMs}ms`);
|
|
306
|
-
* ```
|
|
307
|
-
*/
|
|
308
|
-
autoSearch(query: string, limit?: number): Promise<AutoSearchResult>;
|
|
309
|
-
/**
|
|
310
|
-
* Phase 10 Sprint 4: Get cost estimates for all search methods.
|
|
311
|
-
*
|
|
312
|
-
* Useful for clients that want to display cost information or
|
|
313
|
-
* make their own method selection decisions.
|
|
314
|
-
*
|
|
315
|
-
* @param query - The search query
|
|
316
|
-
* @returns Array of cost estimates for all methods
|
|
317
|
-
*/
|
|
318
|
-
getSearchCostEstimates(query: string): Promise<import('../types/index.js').QueryCostEstimate[]>;
|
|
319
|
-
/**
|
|
320
|
-
* Phase 10 Sprint 4: Get the query cost estimator instance.
|
|
321
|
-
*
|
|
322
|
-
* @returns The QueryCostEstimator instance
|
|
323
|
-
*/
|
|
324
|
-
getQueryEstimator(): QueryCostEstimator;
|
|
325
284
|
}
|
|
326
285
|
//# sourceMappingURL=SearchManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchManager.d.ts","sourceRoot":"","sources":["../../src/search/SearchManager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"SearchManager.d.ts","sourceRoot":"","sources":["../../src/search/SearchManager.ts"],"names":[],"mappings":"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"}
|