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
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface SearchResult {
|
|
2
|
+
text: string;
|
|
3
|
+
score: number;
|
|
4
|
+
document: {
|
|
5
|
+
id: number;
|
|
6
|
+
source: string;
|
|
7
|
+
title: string;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export interface SearchOptions {
|
|
11
|
+
top_k?: number;
|
|
12
|
+
rerank?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface Chunk {
|
|
15
|
+
text: string;
|
|
16
|
+
chunk_index: number;
|
|
17
|
+
}
|
|
18
|
+
export interface Document {
|
|
19
|
+
source: string;
|
|
20
|
+
title: string;
|
|
21
|
+
content: string;
|
|
22
|
+
}
|
|
23
|
+
export interface EmbeddingResult {
|
|
24
|
+
embedding_id: string;
|
|
25
|
+
vector: Float32Array;
|
|
26
|
+
}
|
|
27
|
+
export interface Preprocessor {
|
|
28
|
+
appliesTo(language: string): boolean;
|
|
29
|
+
process(content: string, options: PreprocessorOptions): string;
|
|
30
|
+
}
|
|
31
|
+
export interface PreprocessorOptions {
|
|
32
|
+
mode: 'strip' | 'keep' | 'placeholder' | 'extract';
|
|
33
|
+
[key: string]: any;
|
|
34
|
+
}
|
|
35
|
+
export interface PreprocessingConfig {
|
|
36
|
+
mode: 'strict' | 'balanced' | 'rich';
|
|
37
|
+
overrides?: {
|
|
38
|
+
mdx?: 'strip' | 'keep' | 'placeholder';
|
|
39
|
+
mermaid?: 'strip' | 'extract' | 'placeholder';
|
|
40
|
+
code?: 'strip' | 'keep' | 'placeholder';
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export type { DatabaseConnection, ChunkResult } from './db.js';
|
|
44
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;CACtB;AAGD,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAAC;CAChE;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;IACnD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IACrC,SAAS,CAAC,EAAE;QACV,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,aAAa,CAAC;QACvC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,aAAa,CAAC;QAC9C,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,aAAa,CAAC;KACzC,CAAC;CACH;AAGD,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,mCAAmC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export interface VectorIndexOptions {
|
|
2
|
+
dimensions: number;
|
|
3
|
+
maxElements: number;
|
|
4
|
+
efConstruction?: number;
|
|
5
|
+
M?: number;
|
|
6
|
+
seed?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface SearchResult {
|
|
9
|
+
neighbors: number[];
|
|
10
|
+
distances: number[];
|
|
11
|
+
}
|
|
12
|
+
export declare class VectorIndex {
|
|
13
|
+
private index;
|
|
14
|
+
private hnswlib;
|
|
15
|
+
private indexPath;
|
|
16
|
+
private options;
|
|
17
|
+
private currentSize;
|
|
18
|
+
private vectorStorage;
|
|
19
|
+
constructor(indexPath: string, options: VectorIndexOptions);
|
|
20
|
+
/**
|
|
21
|
+
* Initialize the HNSW index with cosine similarity using hnswlib-wasm
|
|
22
|
+
*/
|
|
23
|
+
initialize(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Load existing index from file using hnswlib-wasm
|
|
26
|
+
*/
|
|
27
|
+
loadIndex(): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Save index to file using JSON format (since IDBFS doesn't work in Node.js)
|
|
30
|
+
*/
|
|
31
|
+
saveIndex(): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Add a single vector to the HNSW index
|
|
34
|
+
*/
|
|
35
|
+
addVector(embeddingId: number, vector: Float32Array): void;
|
|
36
|
+
/**
|
|
37
|
+
* Add multiple vectors to the index in batch
|
|
38
|
+
*/
|
|
39
|
+
addVectors(vectors: Array<{
|
|
40
|
+
id: number;
|
|
41
|
+
vector: Float32Array;
|
|
42
|
+
}>): void;
|
|
43
|
+
/**
|
|
44
|
+
* Search for k nearest neighbors using hnswlib-wasm
|
|
45
|
+
*/
|
|
46
|
+
search(queryVector: Float32Array, k?: number): SearchResult;
|
|
47
|
+
/**
|
|
48
|
+
* Get current number of vectors in the index
|
|
49
|
+
*/
|
|
50
|
+
getCurrentCount(): number;
|
|
51
|
+
/**
|
|
52
|
+
* Check if index exists on disk
|
|
53
|
+
*/
|
|
54
|
+
indexExists(): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Set search parameters for query time
|
|
57
|
+
*/
|
|
58
|
+
setEf(ef: number): void;
|
|
59
|
+
/**
|
|
60
|
+
* Resize index to accommodate more vectors
|
|
61
|
+
*/
|
|
62
|
+
resizeIndex(newMaxElements: number): void;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=vector-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-index.d.ts","sourceRoot":"","sources":["../src/vector-index.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AA0BD,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAAwC;gBAEjD,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB;IAU1D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmEjC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAwFhC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BhC;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAmB1D;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,CAAC,GAAG,IAAI;IAMtE;;OAEG;IACH,MAAM,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC,GAAE,MAAU,GAAG,YAAY;IAwB9D;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAkBvB;;OAEG;IACH,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;CAiB1C"}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
|
2
|
+
import { JSDOM } from 'jsdom';
|
|
3
|
+
import { ErrorCategory, ErrorSeverity, safeExecute } from './error-handler.js';
|
|
4
|
+
// Set up browser-like environment for hnswlib-wasm
|
|
5
|
+
if (typeof window === 'undefined') {
|
|
6
|
+
const dom = new JSDOM('<!DOCTYPE html><html><body></body></html>', {
|
|
7
|
+
url: 'http://localhost',
|
|
8
|
+
pretendToBeVisual: true,
|
|
9
|
+
resources: 'usable'
|
|
10
|
+
});
|
|
11
|
+
// Type assertion to avoid TypeScript issues with global polyfills
|
|
12
|
+
global.window = dom.window;
|
|
13
|
+
global.document = dom.window.document;
|
|
14
|
+
global.XMLHttpRequest = dom.window.XMLHttpRequest;
|
|
15
|
+
// Disable IndexedDB to prevent hnswlib-wasm from trying to use it
|
|
16
|
+
global.indexedDB = undefined;
|
|
17
|
+
// Override indexedDB on the window object to return undefined
|
|
18
|
+
Object.defineProperty(dom.window, 'indexedDB', {
|
|
19
|
+
value: undefined,
|
|
20
|
+
writable: false,
|
|
21
|
+
configurable: true
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export class VectorIndex {
|
|
25
|
+
index = null;
|
|
26
|
+
hnswlib = null;
|
|
27
|
+
indexPath;
|
|
28
|
+
options;
|
|
29
|
+
currentSize = 0;
|
|
30
|
+
vectorStorage = new Map(); // For persistence
|
|
31
|
+
constructor(indexPath, options) {
|
|
32
|
+
this.indexPath = indexPath;
|
|
33
|
+
this.options = {
|
|
34
|
+
efConstruction: 200,
|
|
35
|
+
M: 16,
|
|
36
|
+
seed: 100,
|
|
37
|
+
...options
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Initialize the HNSW index with cosine similarity using hnswlib-wasm
|
|
42
|
+
*/
|
|
43
|
+
async initialize() {
|
|
44
|
+
await safeExecute(async () => {
|
|
45
|
+
// Load the hnswlib module
|
|
46
|
+
if (!this.hnswlib) {
|
|
47
|
+
// Temporarily suppress stderr output during hnswlib loading to avoid IndexedDB warnings
|
|
48
|
+
const originalStderrWrite = process.stderr.write;
|
|
49
|
+
const originalConsoleError = console.error;
|
|
50
|
+
process.stderr.write = function (chunk, encoding, callback) {
|
|
51
|
+
const message = chunk.toString();
|
|
52
|
+
// Suppress specific IndexedDB/IDBFS related errors and WebAssembly errors
|
|
53
|
+
if (message.includes('IDBFS') || message.includes('indexedDB not supported') ||
|
|
54
|
+
message.includes('EmscriptenFileSystemManager') || message.includes('Aborted') ||
|
|
55
|
+
message.includes('jsFS Error') || message.includes('syncing FS') ||
|
|
56
|
+
message.includes('RuntimeError: unreachable') || message.includes('___trap') ||
|
|
57
|
+
message.includes('abort') || message.includes('assert') ||
|
|
58
|
+
message.includes('hnswlib-wasm/dist/hnswlib')) {
|
|
59
|
+
if (callback)
|
|
60
|
+
callback();
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
return originalStderrWrite.call(this, chunk, encoding, callback);
|
|
64
|
+
};
|
|
65
|
+
console.error = (...args) => {
|
|
66
|
+
const message = args.join(' ');
|
|
67
|
+
if (message.includes('IDBFS') || message.includes('indexedDB not supported') ||
|
|
68
|
+
message.includes('EmscriptenFileSystemManager') || message.includes('Aborted') ||
|
|
69
|
+
message.includes('jsFS Error') || message.includes('syncing FS') ||
|
|
70
|
+
message.includes('RuntimeError: unreachable') || message.includes('___trap') ||
|
|
71
|
+
message.includes('abort') || message.includes('assert') ||
|
|
72
|
+
message.includes('hnswlib-wasm/dist/hnswlib')) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
originalConsoleError.apply(console, args);
|
|
76
|
+
};
|
|
77
|
+
try {
|
|
78
|
+
const { loadHnswlib } = await import('hnswlib-wasm/dist/hnswlib.js');
|
|
79
|
+
this.hnswlib = await loadHnswlib();
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
// Restore original output streams
|
|
83
|
+
process.stderr.write = originalStderrWrite;
|
|
84
|
+
console.error = originalConsoleError;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Create new HNSW index (third parameter is autoSaveFilename, but we'll handle persistence manually)
|
|
88
|
+
this.index = new this.hnswlib.HierarchicalNSW('cosine', this.options.dimensions, '');
|
|
89
|
+
this.index.initIndex(this.options.maxElements, this.options.M || 16, this.options.efConstruction || 200, this.options.seed || 100);
|
|
90
|
+
this.currentSize = 0;
|
|
91
|
+
console.log(`Initialized HNSW index with ${this.options.dimensions} dimensions using hnswlib-wasm`);
|
|
92
|
+
}, 'Vector Index Initialization', {
|
|
93
|
+
category: ErrorCategory.INDEX,
|
|
94
|
+
severity: ErrorSeverity.FATAL
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Load existing index from file using hnswlib-wasm
|
|
99
|
+
*/
|
|
100
|
+
async loadIndex() {
|
|
101
|
+
if (!existsSync(this.indexPath)) {
|
|
102
|
+
throw new Error(`Index file not found: ${this.indexPath}`);
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
// Load the hnswlib module
|
|
106
|
+
if (!this.hnswlib) {
|
|
107
|
+
// Temporarily suppress stderr output during hnswlib loading to avoid IndexedDB warnings
|
|
108
|
+
const originalStderrWrite = process.stderr.write;
|
|
109
|
+
const originalConsoleError = console.error;
|
|
110
|
+
process.stderr.write = function (chunk, encoding, callback) {
|
|
111
|
+
const message = chunk.toString();
|
|
112
|
+
// Suppress specific IndexedDB/IDBFS related errors and WebAssembly errors
|
|
113
|
+
if (message.includes('IDBFS') || message.includes('indexedDB not supported') ||
|
|
114
|
+
message.includes('EmscriptenFileSystemManager') || message.includes('Aborted') ||
|
|
115
|
+
message.includes('jsFS Error') || message.includes('syncing FS') ||
|
|
116
|
+
message.includes('RuntimeError: unreachable') || message.includes('___trap') ||
|
|
117
|
+
message.includes('abort') || message.includes('assert') ||
|
|
118
|
+
message.includes('hnswlib-wasm/dist/hnswlib')) {
|
|
119
|
+
if (callback)
|
|
120
|
+
callback();
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
return originalStderrWrite.call(this, chunk, encoding, callback);
|
|
124
|
+
};
|
|
125
|
+
console.error = (...args) => {
|
|
126
|
+
const message = args.join(' ');
|
|
127
|
+
if (message.includes('IDBFS') || message.includes('indexedDB not supported') ||
|
|
128
|
+
message.includes('EmscriptenFileSystemManager') || message.includes('Aborted') ||
|
|
129
|
+
message.includes('jsFS Error') || message.includes('syncing FS') ||
|
|
130
|
+
message.includes('RuntimeError: unreachable') || message.includes('___trap') ||
|
|
131
|
+
message.includes('abort') || message.includes('assert') ||
|
|
132
|
+
message.includes('hnswlib-wasm/dist/hnswlib')) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
originalConsoleError.apply(console, args);
|
|
136
|
+
};
|
|
137
|
+
try {
|
|
138
|
+
const { loadHnswlib } = await import('hnswlib-wasm/dist/hnswlib.js');
|
|
139
|
+
this.hnswlib = await loadHnswlib();
|
|
140
|
+
}
|
|
141
|
+
finally {
|
|
142
|
+
// Restore original output streams
|
|
143
|
+
process.stderr.write = originalStderrWrite;
|
|
144
|
+
console.error = originalConsoleError;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Create new HNSW index (third parameter is autoSaveFilename, but we'll handle persistence manually)
|
|
148
|
+
this.index = new this.hnswlib.HierarchicalNSW('cosine', this.options.dimensions, '');
|
|
149
|
+
// Load from JSON format since IDBFS doesn't work in Node.js
|
|
150
|
+
const data = readFileSync(this.indexPath, 'utf-8');
|
|
151
|
+
const stored = JSON.parse(data);
|
|
152
|
+
// Update options from stored data
|
|
153
|
+
this.options.maxElements = stored.maxElements || this.options.maxElements;
|
|
154
|
+
this.options.M = stored.M || this.options.M;
|
|
155
|
+
this.options.efConstruction = stored.efConstruction || this.options.efConstruction;
|
|
156
|
+
this.options.seed = stored.seed || this.options.seed;
|
|
157
|
+
// Recreate the index from stored data
|
|
158
|
+
this.index.initIndex(this.options.maxElements, this.options.M || 16, this.options.efConstruction || 200, this.options.seed || 100);
|
|
159
|
+
// Clear and repopulate vector storage
|
|
160
|
+
this.vectorStorage.clear();
|
|
161
|
+
// Add all stored vectors back
|
|
162
|
+
for (const item of stored.vectors || []) {
|
|
163
|
+
const vector = new Float32Array(item.vector);
|
|
164
|
+
this.index.addPoint(vector, item.id, false);
|
|
165
|
+
this.vectorStorage.set(item.id, vector);
|
|
166
|
+
}
|
|
167
|
+
this.currentSize = stored.vectors?.length || 0;
|
|
168
|
+
console.log(`Loaded HNSW index with ${this.currentSize} vectors from ${this.indexPath}`);
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
throw new Error(`Failed to load index from ${this.indexPath}: ${error}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Save index to file using JSON format (since IDBFS doesn't work in Node.js)
|
|
176
|
+
*/
|
|
177
|
+
async saveIndex() {
|
|
178
|
+
if (!this.index) {
|
|
179
|
+
throw new Error('Index not initialized');
|
|
180
|
+
}
|
|
181
|
+
try {
|
|
182
|
+
// Convert stored vectors to serializable format
|
|
183
|
+
const vectors = Array.from(this.vectorStorage.entries()).map(([id, vector]) => ({
|
|
184
|
+
id,
|
|
185
|
+
vector: Array.from(vector)
|
|
186
|
+
}));
|
|
187
|
+
const stored = {
|
|
188
|
+
dimensions: this.options.dimensions,
|
|
189
|
+
maxElements: this.options.maxElements,
|
|
190
|
+
M: this.options.M || 16,
|
|
191
|
+
efConstruction: this.options.efConstruction || 200,
|
|
192
|
+
seed: this.options.seed || 100,
|
|
193
|
+
currentSize: this.currentSize,
|
|
194
|
+
vectors: vectors
|
|
195
|
+
};
|
|
196
|
+
writeFileSync(this.indexPath, JSON.stringify(stored, null, 2));
|
|
197
|
+
console.log(`Saved HNSW index with ${this.currentSize} vectors to ${this.indexPath}`);
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
throw new Error(`Failed to save index to ${this.indexPath}: ${error}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Add a single vector to the HNSW index
|
|
205
|
+
*/
|
|
206
|
+
addVector(embeddingId, vector) {
|
|
207
|
+
if (!this.index) {
|
|
208
|
+
throw new Error('Index not initialized');
|
|
209
|
+
}
|
|
210
|
+
if (vector.length !== this.options.dimensions) {
|
|
211
|
+
throw new Error(`Vector dimension mismatch: expected ${this.options.dimensions}, got ${vector.length}`);
|
|
212
|
+
}
|
|
213
|
+
try {
|
|
214
|
+
this.index.addPoint(vector, embeddingId, false);
|
|
215
|
+
// Store vector for persistence
|
|
216
|
+
this.vectorStorage.set(embeddingId, new Float32Array(vector));
|
|
217
|
+
this.currentSize++;
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
throw new Error(`Failed to add vector ${embeddingId}: ${error}`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Add multiple vectors to the index in batch
|
|
225
|
+
*/
|
|
226
|
+
addVectors(vectors) {
|
|
227
|
+
for (const { id, vector } of vectors) {
|
|
228
|
+
this.addVector(id, vector);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Search for k nearest neighbors using hnswlib-wasm
|
|
233
|
+
*/
|
|
234
|
+
search(queryVector, k = 5) {
|
|
235
|
+
if (!this.index) {
|
|
236
|
+
throw new Error('Index not initialized');
|
|
237
|
+
}
|
|
238
|
+
if (queryVector.length !== this.options.dimensions) {
|
|
239
|
+
throw new Error(`Query vector dimension mismatch: expected ${this.options.dimensions}, got ${queryVector.length}`);
|
|
240
|
+
}
|
|
241
|
+
if (this.currentSize === 0) {
|
|
242
|
+
return { neighbors: [], distances: [] };
|
|
243
|
+
}
|
|
244
|
+
try {
|
|
245
|
+
const result = this.index.searchKnn(queryVector, Math.min(k, this.currentSize), undefined);
|
|
246
|
+
return {
|
|
247
|
+
neighbors: result.neighbors,
|
|
248
|
+
distances: result.distances
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
throw new Error(`Search failed: ${error}`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Get current number of vectors in the index
|
|
257
|
+
*/
|
|
258
|
+
getCurrentCount() {
|
|
259
|
+
return this.currentSize;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Check if index exists on disk
|
|
263
|
+
*/
|
|
264
|
+
indexExists() {
|
|
265
|
+
return existsSync(this.indexPath);
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Set search parameters for query time
|
|
269
|
+
*/
|
|
270
|
+
setEf(ef) {
|
|
271
|
+
if (!this.index) {
|
|
272
|
+
throw new Error('Index not initialized');
|
|
273
|
+
}
|
|
274
|
+
try {
|
|
275
|
+
// hnswlib-wasm might not have setEf method, check if it exists
|
|
276
|
+
if (typeof this.index.setEfSearch === 'function') {
|
|
277
|
+
this.index.setEfSearch(ef);
|
|
278
|
+
console.log(`Set efSearch to ${ef}`);
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
console.log(`setEfSearch not available in hnswlib-wasm`);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
console.log(`Failed to set ef: ${error}`);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Resize index to accommodate more vectors
|
|
290
|
+
*/
|
|
291
|
+
resizeIndex(newMaxElements) {
|
|
292
|
+
if (!this.index) {
|
|
293
|
+
throw new Error('Index not initialized');
|
|
294
|
+
}
|
|
295
|
+
if (newMaxElements <= this.options.maxElements) {
|
|
296
|
+
throw new Error(`New max elements (${newMaxElements}) must be greater than current (${this.options.maxElements})`);
|
|
297
|
+
}
|
|
298
|
+
try {
|
|
299
|
+
this.index.resizeIndex(newMaxElements);
|
|
300
|
+
this.options.maxElements = newMaxElements;
|
|
301
|
+
console.log(`Resized index to accommodate ${newMaxElements} vectors`);
|
|
302
|
+
}
|
|
303
|
+
catch (error) {
|
|
304
|
+
throw new Error(`Failed to resize index: ${error}`);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=vector-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-index.js","sourceRoot":"","sources":["../src/vector-index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "rag-lite-ts",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "Local-first TypeScript retrieval engine for semantic search over static documents",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"raglite": "./dist/cli.js",
|
|
10
|
+
"raglite-mcp": "./dist/mcp-server.js"
|
|
11
|
+
},
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"import": "./dist/index.js",
|
|
15
|
+
"types": "./dist/index.d.ts"
|
|
16
|
+
},
|
|
17
|
+
"./mcp": {
|
|
18
|
+
"import": "./dist/mcp-server.js",
|
|
19
|
+
"types": "./dist/mcp-server.d.ts"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist/**/*",
|
|
24
|
+
"README.md",
|
|
25
|
+
"LICENSE"
|
|
26
|
+
],
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "tsc",
|
|
29
|
+
"build:test": "tsc --project tsconfig.test.json",
|
|
30
|
+
"clean": "rimraf dist",
|
|
31
|
+
"dev": "tsc --watch",
|
|
32
|
+
"test": "npm run build:test && node --test dist/tokenizer.test.js dist/chunker.test.js dist/embedder.test.js dist/vector-index.test.js dist/index-manager.test.js dist/search.test.js dist/file-processor.test.js dist/mcp-server.test.js dist/preprocess.test.js dist/config.test.js dist/preprocessors/integration.test.js",
|
|
33
|
+
"test:integration": "npm run build && npm run build:test && node --test dist/integration.test.js",
|
|
34
|
+
"test:all": "npm run test && npm run test:integration",
|
|
35
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
36
|
+
},
|
|
37
|
+
"keywords": [
|
|
38
|
+
"rag",
|
|
39
|
+
"retrieval",
|
|
40
|
+
"semantic-search",
|
|
41
|
+
"embeddings",
|
|
42
|
+
"typescript",
|
|
43
|
+
"local-first",
|
|
44
|
+
"mdx",
|
|
45
|
+
"mermaid",
|
|
46
|
+
"preprocessing",
|
|
47
|
+
"pdf",
|
|
48
|
+
"docx",
|
|
49
|
+
"document-processing"
|
|
50
|
+
],
|
|
51
|
+
"repository": {
|
|
52
|
+
"type": "git",
|
|
53
|
+
"url": "https://github.com/raglite/rag-lite-ts.git"
|
|
54
|
+
},
|
|
55
|
+
"bugs": {
|
|
56
|
+
"url": "https://github.com/raglite/rag-lite-ts/issues"
|
|
57
|
+
},
|
|
58
|
+
"homepage": "https://github.com/raglite/rag-lite-ts#readme",
|
|
59
|
+
"author": "RAG-lite TS Contributors",
|
|
60
|
+
"license": "MIT",
|
|
61
|
+
"engines": {
|
|
62
|
+
"node": ">=18.0.0"
|
|
63
|
+
},
|
|
64
|
+
"dependencies": {
|
|
65
|
+
"@huggingface/transformers": "^3.7.5",
|
|
66
|
+
"@modelcontextprotocol/sdk": "^1.18.2",
|
|
67
|
+
"hnswlib-wasm": "^0.8.2",
|
|
68
|
+
"jsdom": "^27.0.0",
|
|
69
|
+
"mammoth": "^1.11.0",
|
|
70
|
+
"pdf-parse": "^2.1.10",
|
|
71
|
+
"sqlite3": "^5.1.6"
|
|
72
|
+
},
|
|
73
|
+
"devDependencies": {
|
|
74
|
+
"@types/jsdom": "^21.1.7",
|
|
75
|
+
"@types/node": "^20.11.0",
|
|
76
|
+
"js-yaml": "^4.1.0",
|
|
77
|
+
"rimraf": "^5.0.5",
|
|
78
|
+
"typescript": "^5.3.0"
|
|
79
|
+
}
|
|
80
|
+
}
|