rag-lite-ts 1.0.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 +21 -0
- package/README.md +240 -0
- package/dist/api-errors.d.ts +90 -0
- package/dist/api-errors.d.ts.map +1 -0
- package/dist/api-errors.js +320 -0
- package/dist/api-errors.js.map +1 -0
- package/dist/chunker.d.ts +47 -0
- package/dist/chunker.d.ts.map +1 -0
- package/dist/chunker.js +256 -0
- package/dist/chunker.js.map +1 -0
- package/dist/cli/indexer.d.ts +11 -0
- package/dist/cli/indexer.d.ts.map +1 -0
- package/dist/cli/indexer.js +272 -0
- package/dist/cli/indexer.js.map +1 -0
- package/dist/cli/search.d.ts +7 -0
- package/dist/cli/search.d.ts.map +1 -0
- package/dist/cli/search.js +206 -0
- package/dist/cli/search.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +362 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +90 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +281 -0
- package/dist/config.js.map +1 -0
- package/dist/db.d.ts +90 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +340 -0
- package/dist/db.js.map +1 -0
- package/dist/embedder.d.ts +101 -0
- package/dist/embedder.d.ts.map +1 -0
- package/dist/embedder.js +323 -0
- package/dist/embedder.js.map +1 -0
- package/dist/error-handler.d.ts +91 -0
- package/dist/error-handler.d.ts.map +1 -0
- package/dist/error-handler.js +196 -0
- package/dist/error-handler.js.map +1 -0
- package/dist/file-processor.d.ts +59 -0
- package/dist/file-processor.d.ts.map +1 -0
- package/dist/file-processor.js +312 -0
- package/dist/file-processor.js.map +1 -0
- package/dist/index-manager.d.ts +99 -0
- package/dist/index-manager.d.ts.map +1 -0
- package/dist/index-manager.js +444 -0
- package/dist/index-manager.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer.d.ts +7 -0
- package/dist/indexer.d.ts.map +1 -0
- package/dist/indexer.js +51 -0
- package/dist/indexer.js.map +1 -0
- package/dist/ingestion.d.ts +175 -0
- package/dist/ingestion.d.ts.map +1 -0
- package/dist/ingestion.js +705 -0
- package/dist/ingestion.js.map +1 -0
- package/dist/mcp-server.d.ts +14 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +680 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/path-manager.d.ts +42 -0
- package/dist/path-manager.d.ts.map +1 -0
- package/dist/path-manager.js +66 -0
- package/dist/path-manager.js.map +1 -0
- package/dist/preprocess.d.ts +19 -0
- package/dist/preprocess.d.ts.map +1 -0
- package/dist/preprocess.js +203 -0
- package/dist/preprocess.js.map +1 -0
- package/dist/preprocessors/index.d.ts +17 -0
- package/dist/preprocessors/index.d.ts.map +1 -0
- package/dist/preprocessors/index.js +38 -0
- package/dist/preprocessors/index.js.map +1 -0
- package/dist/preprocessors/mdx.d.ts +25 -0
- package/dist/preprocessors/mdx.d.ts.map +1 -0
- package/dist/preprocessors/mdx.js +101 -0
- package/dist/preprocessors/mdx.js.map +1 -0
- package/dist/preprocessors/mermaid.d.ts +68 -0
- package/dist/preprocessors/mermaid.d.ts.map +1 -0
- package/dist/preprocessors/mermaid.js +329 -0
- package/dist/preprocessors/mermaid.js.map +1 -0
- package/dist/preprocessors/registry.d.ts +56 -0
- package/dist/preprocessors/registry.d.ts.map +1 -0
- package/dist/preprocessors/registry.js +179 -0
- package/dist/preprocessors/registry.js.map +1 -0
- package/dist/reranker.d.ts +40 -0
- package/dist/reranker.d.ts.map +1 -0
- package/dist/reranker.js +212 -0
- package/dist/reranker.js.map +1 -0
- package/dist/resource-manager-demo.d.ts +7 -0
- package/dist/resource-manager-demo.d.ts.map +1 -0
- package/dist/resource-manager-demo.js +52 -0
- package/dist/resource-manager-demo.js.map +1 -0
- package/dist/resource-manager.d.ts +129 -0
- package/dist/resource-manager.d.ts.map +1 -0
- package/dist/resource-manager.js +389 -0
- package/dist/resource-manager.js.map +1 -0
- package/dist/search-standalone.d.ts +7 -0
- package/dist/search-standalone.d.ts.map +1 -0
- package/dist/search-standalone.js +117 -0
- package/dist/search-standalone.js.map +1 -0
- package/dist/search.d.ts +92 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +454 -0
- package/dist/search.js.map +1 -0
- package/dist/test-utils.d.ts +36 -0
- package/dist/test-utils.d.ts.map +1 -0
- package/dist/test-utils.js +27 -0
- package/dist/test-utils.js.map +1 -0
- package/dist/tokenizer.d.ts +21 -0
- package/dist/tokenizer.d.ts.map +1 -0
- package/dist/tokenizer.js +59 -0
- package/dist/tokenizer.js.map +1 -0
- package/dist/types.d.ts +44 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/vector-index.d.ts +64 -0
- package/dist/vector-index.d.ts.map +1 -0
- package/dist/vector-index.js +308 -0
- package/dist/vector-index.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { SearchResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Cross-encoder reranker for improving search result quality
|
|
4
|
+
* Uses a cross-encoder model to rerank initial vector search results
|
|
5
|
+
*/
|
|
6
|
+
export declare class CrossEncoderReranker {
|
|
7
|
+
private model;
|
|
8
|
+
private tokenizer;
|
|
9
|
+
private modelName;
|
|
10
|
+
private static readonly FALLBACK_MODELS;
|
|
11
|
+
/**
|
|
12
|
+
* Load the cross-encoder model with graceful fallback
|
|
13
|
+
*/
|
|
14
|
+
loadModel(): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Try to load a specific model
|
|
17
|
+
*/
|
|
18
|
+
private tryLoadModel;
|
|
19
|
+
/**
|
|
20
|
+
* Rerank search results using cross-encoder scoring
|
|
21
|
+
* @param query - Original search query
|
|
22
|
+
* @param results - Initial search results from vector search
|
|
23
|
+
* @returns Promise resolving to reranked results
|
|
24
|
+
*/
|
|
25
|
+
rerank(query: string, results: SearchResult[]): Promise<SearchResult[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Check if the model is loaded
|
|
28
|
+
*/
|
|
29
|
+
isLoaded(): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Get the model name being used
|
|
32
|
+
*/
|
|
33
|
+
getModelName(): string;
|
|
34
|
+
/**
|
|
35
|
+
* Simple text-based reranking using keyword matching and text similarity
|
|
36
|
+
* This is a fallback when cross-encoder models don't work well for the content
|
|
37
|
+
*/
|
|
38
|
+
private simpleTextReranking;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=reranker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reranker.d.ts","sourceRoot":"","sources":["../src/reranker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,SAAS,CAA2C;IAE5D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAKrC;IAEF;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBhC;;OAEG;YACW,YAAY;IAsB1B;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAqE7E;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;CAqF5B"}
|
package/dist/reranker.js
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { AutoTokenizer, AutoModelForSequenceClassification } from '@huggingface/transformers';
|
|
2
|
+
import { config } from './config.js';
|
|
3
|
+
/**
|
|
4
|
+
* Cross-encoder reranker for improving search result quality
|
|
5
|
+
* Uses a cross-encoder model to rerank initial vector search results
|
|
6
|
+
*/
|
|
7
|
+
export class CrossEncoderReranker {
|
|
8
|
+
model = null; // Use any to avoid complex transformers.js typing issues
|
|
9
|
+
tokenizer = null;
|
|
10
|
+
modelName = 'Xenova/ms-marco-MiniLM-L-6-v2'; // Use working model as default
|
|
11
|
+
// Alternative models in case the primary fails
|
|
12
|
+
static FALLBACK_MODELS = [
|
|
13
|
+
'Xenova/ms-marco-MiniLM-L-6-v2', // Primary - optimized for transformers.js
|
|
14
|
+
'cross-encoder/ms-marco-MiniLM-L-6-v2', // Original (likely to fail)
|
|
15
|
+
'cross-encoder/ms-marco-MiniLM-L-2-v2', // Smaller original (likely to fail)
|
|
16
|
+
// Note: sentence-transformers/all-MiniLM-L6-v2 is a bi-encoder, not cross-encoder, so removed
|
|
17
|
+
];
|
|
18
|
+
/**
|
|
19
|
+
* Load the cross-encoder model with graceful fallback
|
|
20
|
+
*/
|
|
21
|
+
async loadModel() {
|
|
22
|
+
// Try primary model first (should work since it's Xenova)
|
|
23
|
+
if (await this.tryLoadModel(this.modelName)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
// Try fallback models if primary fails
|
|
27
|
+
console.warn(`Primary model ${this.modelName} failed, trying fallbacks...`);
|
|
28
|
+
for (const fallbackModel of CrossEncoderReranker.FALLBACK_MODELS) {
|
|
29
|
+
if (fallbackModel === this.modelName)
|
|
30
|
+
continue; // Skip already tried model
|
|
31
|
+
console.warn(`Trying fallback model: ${fallbackModel}`);
|
|
32
|
+
if (await this.tryLoadModel(fallbackModel)) {
|
|
33
|
+
this.modelName = fallbackModel;
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
console.warn('All cross-encoder models failed to load. Reranking will be disabled.');
|
|
38
|
+
this.model = null;
|
|
39
|
+
this.tokenizer = null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Try to load a specific model
|
|
43
|
+
*/
|
|
44
|
+
async tryLoadModel(modelName) {
|
|
45
|
+
try {
|
|
46
|
+
console.log(`Loading cross-encoder model: ${modelName}`);
|
|
47
|
+
// Load model and tokenizer separately for proper cross-encoder usage
|
|
48
|
+
this.model = await AutoModelForSequenceClassification.from_pretrained(modelName, {
|
|
49
|
+
cache_dir: config.model_cache_path,
|
|
50
|
+
dtype: 'fp32' // Suppress dtype warnings
|
|
51
|
+
});
|
|
52
|
+
this.tokenizer = await AutoTokenizer.from_pretrained(modelName, {
|
|
53
|
+
cache_dir: config.model_cache_path
|
|
54
|
+
});
|
|
55
|
+
console.log(`Cross-encoder model loaded successfully: ${modelName}`);
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.warn(`Failed to load model ${modelName}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Rerank search results using cross-encoder scoring
|
|
65
|
+
* @param query - Original search query
|
|
66
|
+
* @param results - Initial search results from vector search
|
|
67
|
+
* @returns Promise resolving to reranked results
|
|
68
|
+
*/
|
|
69
|
+
async rerank(query, results) {
|
|
70
|
+
if (!this.model || !this.tokenizer) {
|
|
71
|
+
throw new Error('Cross-encoder model not loaded. Call loadModel() first.');
|
|
72
|
+
}
|
|
73
|
+
if (results.length === 0) {
|
|
74
|
+
return results;
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
// Prepare queries and documents for proper cross-encoder format
|
|
78
|
+
const queries = results.map(() => query);
|
|
79
|
+
const documents = results.map(result => result.text);
|
|
80
|
+
// Tokenize using the proper cross-encoder format with text_pair
|
|
81
|
+
const features = this.tokenizer(queries, {
|
|
82
|
+
text_pair: documents,
|
|
83
|
+
padding: true,
|
|
84
|
+
truncation: true,
|
|
85
|
+
return_tensors: 'pt'
|
|
86
|
+
});
|
|
87
|
+
// Get model predictions
|
|
88
|
+
const output = await this.model(features);
|
|
89
|
+
// Extract logits - these are the raw relevance scores
|
|
90
|
+
const logits = output.logits;
|
|
91
|
+
// Convert logits to scores and pair with results
|
|
92
|
+
const scores = results.map((result, i) => {
|
|
93
|
+
// For cross-encoders, we typically use the raw logit as the relevance score
|
|
94
|
+
// Higher logits = more relevant
|
|
95
|
+
const rawScore = Array.isArray(logits) ? logits[i] : logits.data[i];
|
|
96
|
+
// Apply sigmoid to convert logit to probability-like score
|
|
97
|
+
const score = 1 / (1 + Math.exp(-rawScore));
|
|
98
|
+
return {
|
|
99
|
+
score: score,
|
|
100
|
+
result: result
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
// Check if scores look reasonable
|
|
104
|
+
const maxScore = Math.max(...scores.map(s => s.score));
|
|
105
|
+
const minScore = Math.min(...scores.map(s => s.score));
|
|
106
|
+
const scoreRange = maxScore - minScore;
|
|
107
|
+
// If there's very little variation in scores, fall back to simple reranking
|
|
108
|
+
if (scoreRange < 0.1) {
|
|
109
|
+
console.log(`Cross-encoder scores have low variation (range: ${scoreRange.toFixed(3)}), using simple text reranking`);
|
|
110
|
+
return this.simpleTextReranking(query, results);
|
|
111
|
+
}
|
|
112
|
+
// Sort by cross-encoder scores (descending)
|
|
113
|
+
scores.sort((a, b) => b.score - a.score);
|
|
114
|
+
// Update results with new scores and return reranked results
|
|
115
|
+
return scores.map(item => ({
|
|
116
|
+
...item.result,
|
|
117
|
+
score: item.score
|
|
118
|
+
}));
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
console.warn(`Reranking failed, falling back to simple text reranking: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
122
|
+
return this.simpleTextReranking(query, results);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Check if the model is loaded
|
|
127
|
+
*/
|
|
128
|
+
isLoaded() {
|
|
129
|
+
return this.model !== null && this.tokenizer !== null;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get the model name being used
|
|
133
|
+
*/
|
|
134
|
+
getModelName() {
|
|
135
|
+
return this.modelName;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Simple text-based reranking using keyword matching and text similarity
|
|
139
|
+
* This is a fallback when cross-encoder models don't work well for the content
|
|
140
|
+
*/
|
|
141
|
+
simpleTextReranking(query, results) {
|
|
142
|
+
const queryLower = query.toLowerCase();
|
|
143
|
+
const queryWords = queryLower.split(/\s+/).filter(word => word.length > 2);
|
|
144
|
+
const rerankedResults = results.map(result => {
|
|
145
|
+
const textLower = result.text.toLowerCase();
|
|
146
|
+
const titleLower = result.document.title?.toLowerCase() || '';
|
|
147
|
+
let score = result.score; // Start with vector search score
|
|
148
|
+
let bonus = 0;
|
|
149
|
+
// Bonus for exact query matches
|
|
150
|
+
if (textLower.includes(queryLower)) {
|
|
151
|
+
bonus += 0.15;
|
|
152
|
+
}
|
|
153
|
+
// Bonus for title matches
|
|
154
|
+
if (titleLower.includes(queryLower)) {
|
|
155
|
+
bonus += 0.1;
|
|
156
|
+
}
|
|
157
|
+
// Special handling for "What is X?" queries
|
|
158
|
+
if (queryLower.startsWith('what is')) {
|
|
159
|
+
const subject = queryLower.replace('what is', '').trim().replace(/\?$/, '');
|
|
160
|
+
// Major bonus for definitional patterns like "X is a/an..."
|
|
161
|
+
const definitionPatterns = [
|
|
162
|
+
`${subject} is a`,
|
|
163
|
+
`${subject} is an`,
|
|
164
|
+
`${subject} is the`,
|
|
165
|
+
`${subject} provides`,
|
|
166
|
+
`${subject} helps`
|
|
167
|
+
];
|
|
168
|
+
for (const pattern of definitionPatterns) {
|
|
169
|
+
if (textLower.includes(pattern)) {
|
|
170
|
+
bonus += 0.3; // Large bonus for definitional content
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Bonus for individual word matches
|
|
176
|
+
let wordMatches = 0;
|
|
177
|
+
for (const word of queryWords) {
|
|
178
|
+
if (textLower.includes(word)) {
|
|
179
|
+
wordMatches++;
|
|
180
|
+
}
|
|
181
|
+
if (titleLower.includes(word)) {
|
|
182
|
+
wordMatches += 0.5; // Title matches are worth more
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Normalize word match bonus
|
|
186
|
+
if (queryWords.length > 0) {
|
|
187
|
+
bonus += (wordMatches / queryWords.length) * 0.1;
|
|
188
|
+
}
|
|
189
|
+
// Bonus for content that appears to be introductory/definitional
|
|
190
|
+
const introKeywords = ['introduction', 'what is', 'overview', 'about', 'definition', '# introduction'];
|
|
191
|
+
for (const keyword of introKeywords) {
|
|
192
|
+
if (textLower.includes(keyword) || titleLower.includes(keyword)) {
|
|
193
|
+
bonus += 0.08;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Extra bonus for files with "intro" in the path
|
|
197
|
+
if (result.document.source?.toLowerCase().includes('intro')) {
|
|
198
|
+
bonus += 0.1;
|
|
199
|
+
}
|
|
200
|
+
// Apply bonus but cap the total score at 1.0
|
|
201
|
+
const newScore = Math.min(1.0, score + bonus);
|
|
202
|
+
return {
|
|
203
|
+
...result,
|
|
204
|
+
score: newScore
|
|
205
|
+
};
|
|
206
|
+
});
|
|
207
|
+
// Sort by new scores (descending)
|
|
208
|
+
rerankedResults.sort((a, b) => b.score - a.score);
|
|
209
|
+
return rerankedResults;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=reranker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reranker.js","sourceRoot":"","sources":["../src/reranker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Demo script showing ResourceManager usage
|
|
3
|
+
* This demonstrates the internal resource management system
|
|
4
|
+
*/
|
|
5
|
+
declare function demonstrateResourceManager(): Promise<void>;
|
|
6
|
+
export { demonstrateResourceManager };
|
|
7
|
+
//# sourceMappingURL=resource-manager-demo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-manager-demo.d.ts","sourceRoot":"","sources":["../src/resource-manager-demo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,iBAAe,0BAA0B,kBA4CxC;AAOD,OAAO,EAAE,0BAA0B,EAAE,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Demo script showing ResourceManager usage
|
|
3
|
+
* This demonstrates the internal resource management system
|
|
4
|
+
*/
|
|
5
|
+
import { ResourceManager } from './resource-manager.js';
|
|
6
|
+
import { CommonErrors } from './api-errors.js';
|
|
7
|
+
async function demonstrateResourceManager() {
|
|
8
|
+
console.log('=== ResourceManager Demo ===\n');
|
|
9
|
+
// 1. Create ResourceManager instances
|
|
10
|
+
console.log('1. Creating ResourceManager instances...');
|
|
11
|
+
const manager1 = ResourceManager.getInstance({ basePath: './demo-data' });
|
|
12
|
+
const manager2 = ResourceManager.getInstance({ basePath: './demo-data' }); // Same config
|
|
13
|
+
const manager3 = ResourceManager.getInstance({ basePath: './other-data' }); // Different config
|
|
14
|
+
console.log(` - manager1 === manager2: ${manager1 === manager2} (singleton pattern)`);
|
|
15
|
+
console.log(` - manager1 === manager3: ${manager1 === manager3} (different configs)`);
|
|
16
|
+
console.log(` - Active instances: ${ResourceManager.getActiveInstanceCount()}`);
|
|
17
|
+
// 2. Check if instances exist
|
|
18
|
+
console.log('\n2. Checking instance existence...');
|
|
19
|
+
console.log(` - Has instance for './demo-data': ${ResourceManager.hasInstance({ basePath: './demo-data' })}`);
|
|
20
|
+
console.log(` - Has instance for './nonexistent': ${ResourceManager.hasInstance({ basePath: './nonexistent' })}`);
|
|
21
|
+
// 3. Validate search files (will fail since files don't exist)
|
|
22
|
+
console.log('\n3. Validating search files...');
|
|
23
|
+
try {
|
|
24
|
+
await manager1.validateSearchFiles();
|
|
25
|
+
console.log(' - Validation passed');
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
console.log(` - Validation failed (expected): ${error instanceof Error ? error.message.split('\n')[0] : 'Unknown error'}`);
|
|
29
|
+
}
|
|
30
|
+
// 4. Demonstrate error handling
|
|
31
|
+
console.log('\n4. Demonstrating error handling...');
|
|
32
|
+
try {
|
|
33
|
+
throw CommonErrors.NO_DOCUMENTS_INGESTED;
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error instanceof Error) {
|
|
37
|
+
console.log(` - Error caught: ${error.message}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// 5. Cleanup resources
|
|
41
|
+
console.log('\n5. Cleaning up resources...');
|
|
42
|
+
console.log(` - Before cleanup: ${ResourceManager.getActiveInstanceCount()} instances`);
|
|
43
|
+
await ResourceManager.cleanupAll();
|
|
44
|
+
console.log(` - After cleanup: ${ResourceManager.getActiveInstanceCount()} instances`);
|
|
45
|
+
console.log('\n=== Demo Complete ===');
|
|
46
|
+
}
|
|
47
|
+
// Run the demo if this file is executed directly
|
|
48
|
+
if (process.argv[1] && process.argv[1].endsWith('resource-manager-demo.js')) {
|
|
49
|
+
demonstrateResourceManager().catch(console.error);
|
|
50
|
+
}
|
|
51
|
+
export { demonstrateResourceManager };
|
|
52
|
+
//# sourceMappingURL=resource-manager-demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-manager-demo.js","sourceRoot":"","sources":["../src/resource-manager-demo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { DatabaseConnection } from './db.js';
|
|
2
|
+
import { IndexManager } from './index-manager.js';
|
|
3
|
+
import { EmbeddingEngine } from './embedder.js';
|
|
4
|
+
/**
|
|
5
|
+
* Configuration for resource initialization
|
|
6
|
+
*/
|
|
7
|
+
export interface ResourceConfig {
|
|
8
|
+
basePath?: string;
|
|
9
|
+
dbPath?: string;
|
|
10
|
+
indexPath?: string;
|
|
11
|
+
modelName?: string;
|
|
12
|
+
batchSize?: number;
|
|
13
|
+
skipModelCheck?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Managed resources container
|
|
17
|
+
*/
|
|
18
|
+
export interface ManagedResources {
|
|
19
|
+
database: DatabaseConnection;
|
|
20
|
+
indexManager: IndexManager;
|
|
21
|
+
embedder: EmbeddingEngine;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Internal ResourceManager for automatic initialization and cleanup
|
|
25
|
+
* Implements singleton pattern for resource sharing across instances
|
|
26
|
+
* Requirements: 5.1, 5.4 - Automatic resource management and lifecycle handling
|
|
27
|
+
*/
|
|
28
|
+
export declare class ResourceManager {
|
|
29
|
+
private static instances;
|
|
30
|
+
private static cleanupHandlersSet;
|
|
31
|
+
private database;
|
|
32
|
+
private indexManager;
|
|
33
|
+
private embedder;
|
|
34
|
+
private isInitialized;
|
|
35
|
+
private initializationPromise;
|
|
36
|
+
private readonly resourceKey;
|
|
37
|
+
private readonly config;
|
|
38
|
+
/**
|
|
39
|
+
* Get or create ResourceManager instance for the given configuration
|
|
40
|
+
* Implements singleton pattern for resource sharing
|
|
41
|
+
* @param config - Resource configuration
|
|
42
|
+
* @returns ResourceManager instance
|
|
43
|
+
*/
|
|
44
|
+
static getInstance(config?: ResourceConfig): ResourceManager;
|
|
45
|
+
/**
|
|
46
|
+
* Resolve and normalize configuration with defaults
|
|
47
|
+
*/
|
|
48
|
+
private static resolveConfig;
|
|
49
|
+
/**
|
|
50
|
+
* Private constructor - use getInstance() instead
|
|
51
|
+
*/
|
|
52
|
+
private constructor();
|
|
53
|
+
/**
|
|
54
|
+
* Initialize all resources with lazy loading
|
|
55
|
+
* Requirements: 5.1 - Automatic resource management
|
|
56
|
+
*/
|
|
57
|
+
initialize(): Promise<ManagedResources>;
|
|
58
|
+
/**
|
|
59
|
+
* Perform the actual initialization steps
|
|
60
|
+
*/
|
|
61
|
+
private performInitialization;
|
|
62
|
+
/**
|
|
63
|
+
* Initialize database connection and schema
|
|
64
|
+
*/
|
|
65
|
+
private initializeDatabase;
|
|
66
|
+
/**
|
|
67
|
+
* Initialize embedder based on stored model info or configuration
|
|
68
|
+
* Requirements: 5.1 - Embedder initialization based on stored model info from database
|
|
69
|
+
*/
|
|
70
|
+
private initializeEmbedder;
|
|
71
|
+
/**
|
|
72
|
+
* Initialize index manager with model compatibility validation
|
|
73
|
+
*/
|
|
74
|
+
private initializeIndexManager;
|
|
75
|
+
/**
|
|
76
|
+
* Get initialized resources
|
|
77
|
+
* @throws Error if resources are not initialized
|
|
78
|
+
*/
|
|
79
|
+
private getResources;
|
|
80
|
+
/**
|
|
81
|
+
* Get database connection (lazy initialization)
|
|
82
|
+
*/
|
|
83
|
+
getDatabase(): Promise<DatabaseConnection>;
|
|
84
|
+
/**
|
|
85
|
+
* Get index manager (lazy initialization)
|
|
86
|
+
*/
|
|
87
|
+
getIndexManager(): Promise<IndexManager>;
|
|
88
|
+
/**
|
|
89
|
+
* Get embedder (lazy initialization)
|
|
90
|
+
*/
|
|
91
|
+
getEmbedder(): Promise<EmbeddingEngine>;
|
|
92
|
+
/**
|
|
93
|
+
* Check if resources are initialized
|
|
94
|
+
*/
|
|
95
|
+
isResourcesInitialized(): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Validate that required files exist for search operations
|
|
98
|
+
* @throws ResourceError with user-friendly message if files are missing
|
|
99
|
+
*/
|
|
100
|
+
validateSearchFiles(): Promise<void>;
|
|
101
|
+
/**
|
|
102
|
+
* Set up automatic cleanup handlers
|
|
103
|
+
* Requirements: 5.5 - Automatic cleanup on process exit
|
|
104
|
+
*/
|
|
105
|
+
private setupCleanupHandlers;
|
|
106
|
+
/**
|
|
107
|
+
* Synchronous cleanup for process exit handlers
|
|
108
|
+
*/
|
|
109
|
+
private performSyncCleanup;
|
|
110
|
+
/**
|
|
111
|
+
* Clean up all resources with proper error handling
|
|
112
|
+
* Requirements: 5.5 - Proper resource disposal and error handling during cleanup
|
|
113
|
+
*/
|
|
114
|
+
cleanup(): Promise<void>;
|
|
115
|
+
/**
|
|
116
|
+
* Clean up all instances (for testing or shutdown)
|
|
117
|
+
* Requirements: 5.5 - Ensure resources are properly disposed when no longer needed
|
|
118
|
+
*/
|
|
119
|
+
static cleanupAll(): Promise<void>;
|
|
120
|
+
/**
|
|
121
|
+
* Get the number of active resource instances
|
|
122
|
+
*/
|
|
123
|
+
static getActiveInstanceCount(): number;
|
|
124
|
+
/**
|
|
125
|
+
* Check if a specific resource configuration is already managed
|
|
126
|
+
*/
|
|
127
|
+
static hasInstance(config: ResourceConfig): boolean;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=resource-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-manager.d.ts","sourceRoot":"","sources":["../src/resource-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAA0E,MAAM,SAAS,CAAC;AACrH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAA6B,MAAM,eAAe,CAAC;AAM3E;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAsC;IAC9D,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAS;IAE1C,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,qBAAqB,CAA8B;IAE3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAElD;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,GAAE,cAAmB,GAAG,eAAe;IAYhE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAa5B;;OAEG;IACH,OAAO;IAQP;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAgB7C;;OAEG;YACW,qBAAqB;IAyBnC;;OAEG;YACW,kBAAkB;IAUhC;;;OAGG;YACW,kBAAkB;IAyChC;;OAEG;YACW,sBAAsB;IA0BpC;;;OAGG;IACH,OAAO,CAAC,YAAY;IAYpB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAOhD;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC;IAO9C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC;IAO7C;;OAEG;IACH,sBAAsB,IAAI,OAAO;IAIjC;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB1C;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA+C5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqD9B;;;OAGG;WACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBxC;;OAEG;IACH,MAAM,CAAC,sBAAsB,IAAI,MAAM;IAIvC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO;CAKpD"}
|