rag-lite-ts 2.1.1 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +88 -5
- package/dist/{cli → cjs/cli}/indexer.js +73 -15
- package/dist/cjs/cli/ui-server.d.ts +5 -0
- package/dist/cjs/cli/ui-server.js +152 -0
- package/dist/{cli.js → cjs/cli.js} +25 -6
- package/dist/{core → cjs/core}/binary-index-format.js +6 -3
- package/dist/{core → cjs/core}/db.d.ts +56 -0
- package/dist/{core → cjs/core}/db.js +105 -0
- package/dist/{core → cjs/core}/ingestion.js +3 -0
- package/dist/cjs/core/knowledge-base-manager.d.ts +109 -0
- package/dist/cjs/core/knowledge-base-manager.js +256 -0
- package/dist/{core → cjs/core}/model-validator.js +1 -1
- package/dist/{core → cjs/core}/search-pipeline.js +1 -1
- package/dist/{core → cjs/core}/search.js +1 -1
- package/dist/cjs/core/vector-index-messages.d.ts +52 -0
- package/dist/cjs/core/vector-index-messages.js +5 -0
- package/dist/cjs/core/vector-index-worker.d.ts +6 -0
- package/dist/cjs/core/vector-index-worker.js +304 -0
- package/dist/cjs/core/vector-index.d.ts +107 -0
- package/dist/cjs/core/vector-index.js +344 -0
- package/dist/{factories → cjs/factories}/ingestion-factory.js +3 -7
- package/dist/{factories → cjs/factories}/search-factory.js +11 -0
- package/dist/{index-manager.d.ts → cjs/index-manager.d.ts} +23 -3
- package/dist/{index-manager.js → cjs/index-manager.js} +84 -15
- package/dist/{index.d.ts → cjs/index.d.ts} +2 -1
- package/dist/{index.js → cjs/index.js} +3 -1
- package/dist/esm/api-errors.d.ts +90 -0
- package/dist/esm/api-errors.js +320 -0
- package/dist/esm/cli/indexer.d.ts +11 -0
- package/dist/esm/cli/indexer.js +529 -0
- package/dist/esm/cli/search.d.ts +7 -0
- package/dist/esm/cli/search.js +332 -0
- package/dist/esm/cli/ui-server.d.ts +5 -0
- package/dist/esm/cli/ui-server.js +152 -0
- package/dist/esm/cli.d.ts +3 -0
- package/dist/esm/cli.js +548 -0
- package/dist/esm/config.d.ts +51 -0
- package/dist/esm/config.js +79 -0
- package/dist/esm/core/abstract-embedder.d.ts +125 -0
- package/dist/esm/core/abstract-embedder.js +264 -0
- package/dist/esm/core/actionable-error-messages.d.ts +60 -0
- package/dist/esm/core/actionable-error-messages.js +397 -0
- package/dist/esm/core/adapters.d.ts +93 -0
- package/dist/esm/core/adapters.js +139 -0
- package/dist/esm/core/batch-processing-optimizer.d.ts +155 -0
- package/dist/esm/core/batch-processing-optimizer.js +536 -0
- package/dist/esm/core/binary-index-format.d.ts +78 -0
- package/dist/esm/core/binary-index-format.js +294 -0
- package/dist/esm/core/chunker.d.ts +119 -0
- package/dist/esm/core/chunker.js +73 -0
- package/dist/esm/core/cli-database-utils.d.ts +53 -0
- package/dist/esm/core/cli-database-utils.js +239 -0
- package/dist/esm/core/config.d.ts +102 -0
- package/dist/esm/core/config.js +247 -0
- package/dist/esm/core/content-errors.d.ts +111 -0
- package/dist/esm/core/content-errors.js +362 -0
- package/dist/esm/core/content-manager.d.ts +335 -0
- package/dist/esm/core/content-manager.js +1476 -0
- package/dist/esm/core/content-performance-optimizer.d.ts +150 -0
- package/dist/esm/core/content-performance-optimizer.js +516 -0
- package/dist/esm/core/content-resolver.d.ts +104 -0
- package/dist/esm/core/content-resolver.js +285 -0
- package/dist/esm/core/cross-modal-search.d.ts +164 -0
- package/dist/esm/core/cross-modal-search.js +342 -0
- package/dist/esm/core/database-connection-manager.d.ts +109 -0
- package/dist/esm/core/database-connection-manager.js +310 -0
- package/dist/esm/core/db.d.ts +269 -0
- package/dist/esm/core/db.js +1000 -0
- package/dist/esm/core/embedder-factory.d.ts +154 -0
- package/dist/esm/core/embedder-factory.js +311 -0
- package/dist/esm/core/error-handler.d.ts +112 -0
- package/dist/esm/core/error-handler.js +239 -0
- package/dist/esm/core/index.d.ts +59 -0
- package/dist/esm/core/index.js +69 -0
- package/dist/esm/core/ingestion.d.ts +202 -0
- package/dist/esm/core/ingestion.js +904 -0
- package/dist/esm/core/interfaces.d.ts +408 -0
- package/dist/esm/core/interfaces.js +106 -0
- package/dist/esm/core/knowledge-base-manager.d.ts +109 -0
- package/dist/esm/core/knowledge-base-manager.js +256 -0
- package/dist/esm/core/lazy-dependency-loader.d.ts +147 -0
- package/dist/esm/core/lazy-dependency-loader.js +435 -0
- package/dist/esm/core/mode-detection-service.d.ts +150 -0
- package/dist/esm/core/mode-detection-service.js +565 -0
- package/dist/esm/core/mode-model-validator.d.ts +92 -0
- package/dist/esm/core/mode-model-validator.js +203 -0
- package/dist/esm/core/model-registry.d.ts +116 -0
- package/dist/esm/core/model-registry.js +411 -0
- package/dist/esm/core/model-validator.d.ts +217 -0
- package/dist/esm/core/model-validator.js +782 -0
- package/dist/esm/core/path-manager.d.ts +47 -0
- package/dist/esm/core/path-manager.js +71 -0
- package/dist/esm/core/raglite-paths.d.ts +121 -0
- package/dist/esm/core/raglite-paths.js +145 -0
- package/dist/esm/core/reranking-config.d.ts +42 -0
- package/dist/esm/core/reranking-config.js +147 -0
- package/dist/esm/core/reranking-factory.d.ts +92 -0
- package/dist/esm/core/reranking-factory.js +410 -0
- package/dist/esm/core/reranking-strategies.d.ts +310 -0
- package/dist/esm/core/reranking-strategies.js +650 -0
- package/dist/esm/core/resource-cleanup.d.ts +163 -0
- package/dist/esm/core/resource-cleanup.js +371 -0
- package/dist/esm/core/resource-manager.d.ts +212 -0
- package/dist/esm/core/resource-manager.js +564 -0
- package/dist/esm/core/search-pipeline.d.ts +111 -0
- package/dist/esm/core/search-pipeline.js +287 -0
- package/dist/esm/core/search.d.ts +141 -0
- package/dist/esm/core/search.js +320 -0
- package/dist/esm/core/streaming-operations.d.ts +145 -0
- package/dist/esm/core/streaming-operations.js +409 -0
- package/dist/esm/core/types.d.ts +66 -0
- package/dist/esm/core/types.js +6 -0
- package/dist/esm/core/universal-embedder.d.ts +177 -0
- package/dist/esm/core/universal-embedder.js +139 -0
- package/dist/esm/core/validation-messages.d.ts +99 -0
- package/dist/esm/core/validation-messages.js +334 -0
- package/dist/esm/core/vector-index-messages.d.ts +52 -0
- package/dist/esm/core/vector-index-messages.js +5 -0
- package/dist/esm/core/vector-index-worker.d.ts +6 -0
- package/dist/esm/core/vector-index-worker.js +304 -0
- package/dist/esm/core/vector-index.d.ts +107 -0
- package/dist/esm/core/vector-index.js +344 -0
- package/dist/esm/dom-polyfills.d.ts +6 -0
- package/dist/esm/dom-polyfills.js +37 -0
- package/dist/esm/factories/index.d.ts +27 -0
- package/dist/esm/factories/index.js +29 -0
- package/dist/esm/factories/ingestion-factory.d.ts +200 -0
- package/dist/esm/factories/ingestion-factory.js +473 -0
- package/dist/esm/factories/search-factory.d.ts +154 -0
- package/dist/esm/factories/search-factory.js +355 -0
- package/dist/esm/file-processor.d.ts +147 -0
- package/dist/esm/file-processor.js +963 -0
- package/dist/esm/index-manager.d.ts +136 -0
- package/dist/esm/index-manager.js +667 -0
- package/dist/esm/index.d.ts +76 -0
- package/dist/esm/index.js +112 -0
- package/dist/esm/indexer.d.ts +7 -0
- package/dist/esm/indexer.js +54 -0
- package/dist/esm/ingestion.d.ts +63 -0
- package/dist/esm/ingestion.js +124 -0
- package/dist/esm/mcp-server.d.ts +46 -0
- package/dist/esm/mcp-server.js +1820 -0
- package/dist/esm/multimodal/clip-embedder.d.ts +327 -0
- package/dist/esm/multimodal/clip-embedder.js +996 -0
- package/dist/esm/multimodal/index.d.ts +6 -0
- package/dist/esm/multimodal/index.js +6 -0
- package/dist/esm/preprocess.d.ts +19 -0
- package/dist/esm/preprocess.js +203 -0
- package/dist/esm/preprocessors/index.d.ts +17 -0
- package/dist/esm/preprocessors/index.js +38 -0
- package/dist/esm/preprocessors/mdx.d.ts +25 -0
- package/dist/esm/preprocessors/mdx.js +101 -0
- package/dist/esm/preprocessors/mermaid.d.ts +68 -0
- package/dist/esm/preprocessors/mermaid.js +329 -0
- package/dist/esm/preprocessors/registry.d.ts +56 -0
- package/dist/esm/preprocessors/registry.js +179 -0
- package/dist/esm/run-error-recovery-tests.d.ts +7 -0
- package/dist/esm/run-error-recovery-tests.js +101 -0
- package/dist/esm/search-standalone.d.ts +7 -0
- package/dist/esm/search-standalone.js +117 -0
- package/dist/esm/search.d.ts +99 -0
- package/dist/esm/search.js +177 -0
- package/dist/esm/test-utils.d.ts +18 -0
- package/dist/esm/test-utils.js +27 -0
- package/dist/esm/text/chunker.d.ts +33 -0
- package/dist/esm/text/chunker.js +279 -0
- package/dist/esm/text/embedder.d.ts +111 -0
- package/dist/esm/text/embedder.js +386 -0
- package/dist/esm/text/index.d.ts +8 -0
- package/dist/esm/text/index.js +9 -0
- package/dist/esm/text/preprocessors/index.d.ts +17 -0
- package/dist/esm/text/preprocessors/index.js +38 -0
- package/dist/esm/text/preprocessors/mdx.d.ts +25 -0
- package/dist/esm/text/preprocessors/mdx.js +101 -0
- package/dist/esm/text/preprocessors/mermaid.d.ts +68 -0
- package/dist/esm/text/preprocessors/mermaid.js +330 -0
- package/dist/esm/text/preprocessors/registry.d.ts +56 -0
- package/dist/esm/text/preprocessors/registry.js +180 -0
- package/dist/esm/text/reranker.d.ts +49 -0
- package/dist/esm/text/reranker.js +274 -0
- package/dist/esm/text/sentence-transformer-embedder.d.ts +96 -0
- package/dist/esm/text/sentence-transformer-embedder.js +340 -0
- package/dist/esm/text/tokenizer.d.ts +22 -0
- package/dist/esm/text/tokenizer.js +64 -0
- package/dist/esm/types.d.ts +83 -0
- package/dist/esm/types.js +3 -0
- package/dist/esm/utils/vector-math.d.ts +31 -0
- package/dist/esm/utils/vector-math.js +70 -0
- package/package.json +39 -14
- package/dist/core/vector-index.d.ts +0 -72
- package/dist/core/vector-index.js +0 -331
- /package/dist/{api-errors.d.ts → cjs/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → cjs/api-errors.js} +0 -0
- /package/dist/{cli → cjs/cli}/indexer.d.ts +0 -0
- /package/dist/{cli → cjs/cli}/search.d.ts +0 -0
- /package/dist/{cli → cjs/cli}/search.js +0 -0
- /package/dist/{cli.d.ts → cjs/cli.d.ts} +0 -0
- /package/dist/{config.d.ts → cjs/config.d.ts} +0 -0
- /package/dist/{config.js → cjs/config.js} +0 -0
- /package/dist/{core → cjs/core}/abstract-embedder.d.ts +0 -0
- /package/dist/{core → cjs/core}/abstract-embedder.js +0 -0
- /package/dist/{core → cjs/core}/actionable-error-messages.d.ts +0 -0
- /package/dist/{core → cjs/core}/actionable-error-messages.js +0 -0
- /package/dist/{core → cjs/core}/adapters.d.ts +0 -0
- /package/dist/{core → cjs/core}/adapters.js +0 -0
- /package/dist/{core → cjs/core}/batch-processing-optimizer.d.ts +0 -0
- /package/dist/{core → cjs/core}/batch-processing-optimizer.js +0 -0
- /package/dist/{core → cjs/core}/binary-index-format.d.ts +0 -0
- /package/dist/{core → cjs/core}/chunker.d.ts +0 -0
- /package/dist/{core → cjs/core}/chunker.js +0 -0
- /package/dist/{core → cjs/core}/cli-database-utils.d.ts +0 -0
- /package/dist/{core → cjs/core}/cli-database-utils.js +0 -0
- /package/dist/{core → cjs/core}/config.d.ts +0 -0
- /package/dist/{core → cjs/core}/config.js +0 -0
- /package/dist/{core → cjs/core}/content-errors.d.ts +0 -0
- /package/dist/{core → cjs/core}/content-errors.js +0 -0
- /package/dist/{core → cjs/core}/content-manager.d.ts +0 -0
- /package/dist/{core → cjs/core}/content-manager.js +0 -0
- /package/dist/{core → cjs/core}/content-performance-optimizer.d.ts +0 -0
- /package/dist/{core → cjs/core}/content-performance-optimizer.js +0 -0
- /package/dist/{core → cjs/core}/content-resolver.d.ts +0 -0
- /package/dist/{core → cjs/core}/content-resolver.js +0 -0
- /package/dist/{core → cjs/core}/cross-modal-search.d.ts +0 -0
- /package/dist/{core → cjs/core}/cross-modal-search.js +0 -0
- /package/dist/{core → cjs/core}/database-connection-manager.d.ts +0 -0
- /package/dist/{core → cjs/core}/database-connection-manager.js +0 -0
- /package/dist/{core → cjs/core}/embedder-factory.d.ts +0 -0
- /package/dist/{core → cjs/core}/embedder-factory.js +0 -0
- /package/dist/{core → cjs/core}/error-handler.d.ts +0 -0
- /package/dist/{core → cjs/core}/error-handler.js +0 -0
- /package/dist/{core → cjs/core}/index.d.ts +0 -0
- /package/dist/{core → cjs/core}/index.js +0 -0
- /package/dist/{core → cjs/core}/ingestion.d.ts +0 -0
- /package/dist/{core → cjs/core}/interfaces.d.ts +0 -0
- /package/dist/{core → cjs/core}/interfaces.js +0 -0
- /package/dist/{core → cjs/core}/lazy-dependency-loader.d.ts +0 -0
- /package/dist/{core → cjs/core}/lazy-dependency-loader.js +0 -0
- /package/dist/{core → cjs/core}/mode-detection-service.d.ts +0 -0
- /package/dist/{core → cjs/core}/mode-detection-service.js +0 -0
- /package/dist/{core → cjs/core}/mode-model-validator.d.ts +0 -0
- /package/dist/{core → cjs/core}/mode-model-validator.js +0 -0
- /package/dist/{core → cjs/core}/model-registry.d.ts +0 -0
- /package/dist/{core → cjs/core}/model-registry.js +0 -0
- /package/dist/{core → cjs/core}/model-validator.d.ts +0 -0
- /package/dist/{core → cjs/core}/path-manager.d.ts +0 -0
- /package/dist/{core → cjs/core}/path-manager.js +0 -0
- /package/dist/{core → cjs/core}/raglite-paths.d.ts +0 -0
- /package/dist/{core → cjs/core}/raglite-paths.js +0 -0
- /package/dist/{core → cjs/core}/reranking-config.d.ts +0 -0
- /package/dist/{core → cjs/core}/reranking-config.js +0 -0
- /package/dist/{core → cjs/core}/reranking-factory.d.ts +0 -0
- /package/dist/{core → cjs/core}/reranking-factory.js +0 -0
- /package/dist/{core → cjs/core}/reranking-strategies.d.ts +0 -0
- /package/dist/{core → cjs/core}/reranking-strategies.js +0 -0
- /package/dist/{core → cjs/core}/resource-cleanup.d.ts +0 -0
- /package/dist/{core → cjs/core}/resource-cleanup.js +0 -0
- /package/dist/{core → cjs/core}/resource-manager.d.ts +0 -0
- /package/dist/{core → cjs/core}/resource-manager.js +0 -0
- /package/dist/{core → cjs/core}/search-pipeline.d.ts +0 -0
- /package/dist/{core → cjs/core}/search.d.ts +0 -0
- /package/dist/{core → cjs/core}/streaming-operations.d.ts +0 -0
- /package/dist/{core → cjs/core}/streaming-operations.js +0 -0
- /package/dist/{core → cjs/core}/types.d.ts +0 -0
- /package/dist/{core → cjs/core}/types.js +0 -0
- /package/dist/{core → cjs/core}/universal-embedder.d.ts +0 -0
- /package/dist/{core → cjs/core}/universal-embedder.js +0 -0
- /package/dist/{core → cjs/core}/validation-messages.d.ts +0 -0
- /package/dist/{core → cjs/core}/validation-messages.js +0 -0
- /package/dist/{dom-polyfills.d.ts → cjs/dom-polyfills.d.ts} +0 -0
- /package/dist/{dom-polyfills.js → cjs/dom-polyfills.js} +0 -0
- /package/dist/{factories → cjs/factories}/index.d.ts +0 -0
- /package/dist/{factories → cjs/factories}/index.js +0 -0
- /package/dist/{factories → cjs/factories}/ingestion-factory.d.ts +0 -0
- /package/dist/{factories → cjs/factories}/search-factory.d.ts +0 -0
- /package/dist/{file-processor.d.ts → cjs/file-processor.d.ts} +0 -0
- /package/dist/{file-processor.js → cjs/file-processor.js} +0 -0
- /package/dist/{indexer.d.ts → cjs/indexer.d.ts} +0 -0
- /package/dist/{indexer.js → cjs/indexer.js} +0 -0
- /package/dist/{ingestion.d.ts → cjs/ingestion.d.ts} +0 -0
- /package/dist/{ingestion.js → cjs/ingestion.js} +0 -0
- /package/dist/{mcp-server.d.ts → cjs/mcp-server.d.ts} +0 -0
- /package/dist/{mcp-server.js → cjs/mcp-server.js} +0 -0
- /package/dist/{multimodal → cjs/multimodal}/clip-embedder.d.ts +0 -0
- /package/dist/{multimodal → cjs/multimodal}/clip-embedder.js +0 -0
- /package/dist/{multimodal → cjs/multimodal}/index.d.ts +0 -0
- /package/dist/{multimodal → cjs/multimodal}/index.js +0 -0
- /package/dist/{preprocess.d.ts → cjs/preprocess.d.ts} +0 -0
- /package/dist/{preprocess.js → cjs/preprocess.js} +0 -0
- /package/dist/{preprocessors → cjs/preprocessors}/index.d.ts +0 -0
- /package/dist/{preprocessors → cjs/preprocessors}/index.js +0 -0
- /package/dist/{preprocessors → cjs/preprocessors}/mdx.d.ts +0 -0
- /package/dist/{preprocessors → cjs/preprocessors}/mdx.js +0 -0
- /package/dist/{preprocessors → cjs/preprocessors}/mermaid.d.ts +0 -0
- /package/dist/{preprocessors → cjs/preprocessors}/mermaid.js +0 -0
- /package/dist/{preprocessors → cjs/preprocessors}/registry.d.ts +0 -0
- /package/dist/{preprocessors → cjs/preprocessors}/registry.js +0 -0
- /package/dist/{run-error-recovery-tests.d.ts → cjs/run-error-recovery-tests.d.ts} +0 -0
- /package/dist/{run-error-recovery-tests.js → cjs/run-error-recovery-tests.js} +0 -0
- /package/dist/{search-standalone.d.ts → cjs/search-standalone.d.ts} +0 -0
- /package/dist/{search-standalone.js → cjs/search-standalone.js} +0 -0
- /package/dist/{search.d.ts → cjs/search.d.ts} +0 -0
- /package/dist/{search.js → cjs/search.js} +0 -0
- /package/dist/{test-utils.d.ts → cjs/test-utils.d.ts} +0 -0
- /package/dist/{test-utils.js → cjs/test-utils.js} +0 -0
- /package/dist/{text → cjs/text}/chunker.d.ts +0 -0
- /package/dist/{text → cjs/text}/chunker.js +0 -0
- /package/dist/{text → cjs/text}/embedder.d.ts +0 -0
- /package/dist/{text → cjs/text}/embedder.js +0 -0
- /package/dist/{text → cjs/text}/index.d.ts +0 -0
- /package/dist/{text → cjs/text}/index.js +0 -0
- /package/dist/{text → cjs/text}/preprocessors/index.d.ts +0 -0
- /package/dist/{text → cjs/text}/preprocessors/index.js +0 -0
- /package/dist/{text → cjs/text}/preprocessors/mdx.d.ts +0 -0
- /package/dist/{text → cjs/text}/preprocessors/mdx.js +0 -0
- /package/dist/{text → cjs/text}/preprocessors/mermaid.d.ts +0 -0
- /package/dist/{text → cjs/text}/preprocessors/mermaid.js +0 -0
- /package/dist/{text → cjs/text}/preprocessors/registry.d.ts +0 -0
- /package/dist/{text → cjs/text}/preprocessors/registry.js +0 -0
- /package/dist/{text → cjs/text}/reranker.d.ts +0 -0
- /package/dist/{text → cjs/text}/reranker.js +0 -0
- /package/dist/{text → cjs/text}/sentence-transformer-embedder.d.ts +0 -0
- /package/dist/{text → cjs/text}/sentence-transformer-embedder.js +0 -0
- /package/dist/{text → cjs/text}/tokenizer.d.ts +0 -0
- /package/dist/{text → cjs/text}/tokenizer.js +0 -0
- /package/dist/{types.d.ts → cjs/types.d.ts} +0 -0
- /package/dist/{types.js → cjs/types.js} +0 -0
- /package/dist/{utils → cjs/utils}/vector-math.d.ts +0 -0
- /package/dist/{utils → cjs/utils}/vector-math.js +0 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Knowledge Base Manager
|
|
3
|
+
*
|
|
4
|
+
* Provides a unified API for managing the knowledge base (database + vector index).
|
|
5
|
+
* This module is designed to solve file locking issues on Windows by using
|
|
6
|
+
* in-place reset operations instead of file deletion.
|
|
7
|
+
*
|
|
8
|
+
* Key Features:
|
|
9
|
+
* - Reset database and index without file deletion (avoids EBUSY/EACCES errors)
|
|
10
|
+
* - Coordinated reset of both database and index in a single operation
|
|
11
|
+
* - Connection management to prevent orphaned handles
|
|
12
|
+
* - Cross-platform compatibility (especially Windows)
|
|
13
|
+
*
|
|
14
|
+
* @module knowledge-base-manager
|
|
15
|
+
*/
|
|
16
|
+
import { openDatabase, resetDatabase, hasDatabaseData } from './db.js';
|
|
17
|
+
import { IndexManager } from '../index-manager.js';
|
|
18
|
+
import { DatabaseConnectionManager } from './database-connection-manager.js';
|
|
19
|
+
import { getModelDefaults, config } from './config.js';
|
|
20
|
+
import { existsSync } from 'fs';
|
|
21
|
+
/**
|
|
22
|
+
* Knowledge Base Manager
|
|
23
|
+
*
|
|
24
|
+
* Manages the complete knowledge base lifecycle including database and vector index.
|
|
25
|
+
* Provides safe reset operations that avoid file locking issues on Windows.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* // Reset knowledge base for force rebuild
|
|
30
|
+
* const result = await KnowledgeBaseManager.reset('./db.sqlite', './index.bin');
|
|
31
|
+
* console.log(`Reset ${result.database.documentsDeleted} documents and ${result.index.vectorsCleared} vectors`);
|
|
32
|
+
*
|
|
33
|
+
* // Reset with options
|
|
34
|
+
* const result = await KnowledgeBaseManager.reset('./db.sqlite', './index.bin', {
|
|
35
|
+
* preserveSystemInfo: true, // Keep mode/model configuration
|
|
36
|
+
* modelName: 'all-MiniLM-L6-v2' // Specify model for index
|
|
37
|
+
* });
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export class KnowledgeBaseManager {
|
|
41
|
+
/**
|
|
42
|
+
* Reset the knowledge base by clearing all data while keeping files intact.
|
|
43
|
+
* This is a safer alternative to file deletion that avoids file locking issues on Windows.
|
|
44
|
+
*
|
|
45
|
+
* The reset operation:
|
|
46
|
+
* 1. Closes any existing connections via DatabaseConnectionManager
|
|
47
|
+
* 2. Opens a fresh connection to the database
|
|
48
|
+
* 3. Deletes all rows from documents, chunks, content_metadata tables
|
|
49
|
+
* 4. Optionally runs VACUUM to reclaim disk space
|
|
50
|
+
* 5. Reinitializes the vector index (clears all vectors)
|
|
51
|
+
* 6. Saves the empty index to disk (overwrites existing file content)
|
|
52
|
+
*
|
|
53
|
+
* This approach works because:
|
|
54
|
+
* - We don't delete files, so no EBUSY/EACCES errors
|
|
55
|
+
* - The same file handles can be reused or replaced safely
|
|
56
|
+
* - SQLite transactions ensure data integrity
|
|
57
|
+
* - Index overwrite uses standard file write operations
|
|
58
|
+
*
|
|
59
|
+
* @param dbPath - Path to the SQLite database file
|
|
60
|
+
* @param indexPath - Path to the vector index file
|
|
61
|
+
* @param options - Reset options
|
|
62
|
+
* @returns Promise resolving to reset result statistics
|
|
63
|
+
*
|
|
64
|
+
* @throws Error if database or index reset fails
|
|
65
|
+
*/
|
|
66
|
+
static async reset(dbPath, indexPath, options = {}) {
|
|
67
|
+
const startTime = Date.now();
|
|
68
|
+
const warnings = [];
|
|
69
|
+
console.log('🔄 Starting knowledge base reset...');
|
|
70
|
+
console.log(` Database: ${dbPath}`);
|
|
71
|
+
console.log(` Index: ${indexPath}`);
|
|
72
|
+
// Step 1: Close any existing managed connections to prevent conflicts
|
|
73
|
+
console.log('\n📡 Step 1: Closing existing connections...');
|
|
74
|
+
try {
|
|
75
|
+
if (DatabaseConnectionManager.hasConnection(dbPath)) {
|
|
76
|
+
await DatabaseConnectionManager.forceCloseConnection(dbPath);
|
|
77
|
+
console.log(' ✓ Closed existing database connection');
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
console.log(' ✓ No existing connection to close');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
const warning = `Warning: Error closing existing connection: ${error instanceof Error ? error.message : 'Unknown error'}`;
|
|
85
|
+
warnings.push(warning);
|
|
86
|
+
console.warn(` ⚠️ ${warning}`);
|
|
87
|
+
}
|
|
88
|
+
// Small delay to ensure handles are fully released
|
|
89
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
90
|
+
// Step 2: Reset the database
|
|
91
|
+
console.log('\n💾 Step 2: Resetting database...');
|
|
92
|
+
let db = null;
|
|
93
|
+
let dbResetResult;
|
|
94
|
+
try {
|
|
95
|
+
// Open a fresh connection
|
|
96
|
+
db = await openDatabase(dbPath);
|
|
97
|
+
// Perform the reset
|
|
98
|
+
dbResetResult = await resetDatabase(db, {
|
|
99
|
+
preserveSystemInfo: options.preserveSystemInfo,
|
|
100
|
+
runVacuum: options.runVacuum
|
|
101
|
+
});
|
|
102
|
+
console.log(' ✓ Database reset complete');
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
console.error(' ❌ Database reset failed:', error);
|
|
106
|
+
throw new Error(`Failed to reset database: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
// Close the database connection
|
|
110
|
+
if (db) {
|
|
111
|
+
try {
|
|
112
|
+
await db.close();
|
|
113
|
+
}
|
|
114
|
+
catch (closeError) {
|
|
115
|
+
warnings.push(`Warning: Error closing database after reset: ${closeError}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Step 3: Reset the vector index
|
|
120
|
+
console.log('\n📇 Step 3: Resetting vector index...');
|
|
121
|
+
let indexResetResult;
|
|
122
|
+
const indexStartTime = Date.now();
|
|
123
|
+
try {
|
|
124
|
+
// Determine model and dimensions
|
|
125
|
+
const modelName = options.modelName || config.embedding_model;
|
|
126
|
+
const modelDefaults = getModelDefaults(modelName);
|
|
127
|
+
// Check if index file exists
|
|
128
|
+
if (!existsSync(indexPath)) {
|
|
129
|
+
console.log(' Index file does not exist, will be created during ingestion');
|
|
130
|
+
indexResetResult = {
|
|
131
|
+
vectorsCleared: 0,
|
|
132
|
+
resetTimeMs: Date.now() - indexStartTime
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
// Create IndexManager and reset
|
|
137
|
+
// We need to handle dimension mismatch gracefully since the user might be
|
|
138
|
+
// switching models (e.g., from MPNet 768D to MiniLM 384D)
|
|
139
|
+
const indexManager = new IndexManager(indexPath, dbPath, modelDefaults.dimensions, modelName);
|
|
140
|
+
let previousVectorCount = 0;
|
|
141
|
+
try {
|
|
142
|
+
// Try to initialize with forceRecreate=false first to get the vector count
|
|
143
|
+
// skipModelCheck=true since we're resetting anyway
|
|
144
|
+
await indexManager.initialize(true, false);
|
|
145
|
+
// Get current vector count before reset
|
|
146
|
+
previousVectorCount = (await indexManager.hasVectors()) ?
|
|
147
|
+
(await indexManager.getStats()).totalVectors : 0;
|
|
148
|
+
// Perform the reset
|
|
149
|
+
await indexManager.reset();
|
|
150
|
+
}
|
|
151
|
+
catch (initError) {
|
|
152
|
+
// If initialization failed (e.g., dimension mismatch), force recreate the index
|
|
153
|
+
// This handles the case where user is switching models
|
|
154
|
+
const errorMessage = initError?.message || String(initError);
|
|
155
|
+
if (errorMessage.includes('dimension mismatch') || errorMessage.includes('Vector dimension')) {
|
|
156
|
+
console.log(' ⚠️ Dimension mismatch detected - forcing index recreation');
|
|
157
|
+
console.log(' (This is expected when switching embedding models)');
|
|
158
|
+
// Create a fresh IndexManager and force recreate
|
|
159
|
+
const freshIndexManager = new IndexManager(indexPath, dbPath, modelDefaults.dimensions, modelName);
|
|
160
|
+
await freshIndexManager.initialize(true, true); // skipModelCheck=true, forceRecreate=true
|
|
161
|
+
await freshIndexManager.saveIndex();
|
|
162
|
+
await freshIndexManager.close();
|
|
163
|
+
// We don't know the previous count since we couldn't load the old index
|
|
164
|
+
// But we can estimate it was non-zero since the file existed
|
|
165
|
+
previousVectorCount = -1; // Indicate unknown
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
// Re-throw other errors
|
|
169
|
+
throw initError;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Close the index manager
|
|
173
|
+
await indexManager.close();
|
|
174
|
+
indexResetResult = {
|
|
175
|
+
vectorsCleared: previousVectorCount,
|
|
176
|
+
resetTimeMs: Date.now() - indexStartTime
|
|
177
|
+
};
|
|
178
|
+
console.log(' ✓ Index reset complete');
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
console.error(' ❌ Index reset failed:', error);
|
|
183
|
+
throw new Error(`Failed to reset index: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
184
|
+
}
|
|
185
|
+
const totalTimeMs = Date.now() - startTime;
|
|
186
|
+
// Summary
|
|
187
|
+
console.log('\n✅ Knowledge base reset complete!');
|
|
188
|
+
console.log(` Total time: ${totalTimeMs}ms`);
|
|
189
|
+
console.log(` Documents deleted: ${dbResetResult.documentsDeleted}`);
|
|
190
|
+
console.log(` Chunks deleted: ${dbResetResult.chunksDeleted}`);
|
|
191
|
+
console.log(` Vectors cleared: ${indexResetResult.vectorsCleared === -1 ? '(unknown - index recreated due to model change)' : indexResetResult.vectorsCleared}`);
|
|
192
|
+
if (warnings.length > 0) {
|
|
193
|
+
console.log(` Warnings: ${warnings.length}`);
|
|
194
|
+
}
|
|
195
|
+
return {
|
|
196
|
+
success: true,
|
|
197
|
+
database: dbResetResult,
|
|
198
|
+
index: indexResetResult,
|
|
199
|
+
totalTimeMs,
|
|
200
|
+
warnings
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Check if the knowledge base has any data
|
|
205
|
+
*
|
|
206
|
+
* @param dbPath - Path to the SQLite database file
|
|
207
|
+
* @returns Promise resolving to true if database has data, false if empty
|
|
208
|
+
*/
|
|
209
|
+
static async hasData(dbPath) {
|
|
210
|
+
let db = null;
|
|
211
|
+
try {
|
|
212
|
+
db = await openDatabase(dbPath);
|
|
213
|
+
return await hasDatabaseData(db);
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
// If we can't open the database, assume no data
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
finally {
|
|
220
|
+
if (db) {
|
|
221
|
+
try {
|
|
222
|
+
await db.close();
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
// Ignore close errors
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Close all connections to the knowledge base
|
|
232
|
+
* Useful before operations that might conflict with open handles
|
|
233
|
+
*
|
|
234
|
+
* @param dbPath - Path to the SQLite database file
|
|
235
|
+
*/
|
|
236
|
+
static async closeAllConnections(dbPath) {
|
|
237
|
+
console.log('🔒 Closing all knowledge base connections...');
|
|
238
|
+
try {
|
|
239
|
+
if (DatabaseConnectionManager.hasConnection(dbPath)) {
|
|
240
|
+
await DatabaseConnectionManager.forceCloseConnection(dbPath);
|
|
241
|
+
}
|
|
242
|
+
// Also close WAL/SHM connections if they exist
|
|
243
|
+
const sidecars = [`${dbPath}-wal`, `${dbPath}-shm`];
|
|
244
|
+
for (const sidecar of sidecars) {
|
|
245
|
+
if (DatabaseConnectionManager.hasConnection(sidecar)) {
|
|
246
|
+
await DatabaseConnectionManager.forceCloseConnection(sidecar);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
console.log('✓ All connections closed');
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
console.warn('⚠️ Error closing connections:', error);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=knowledge-base-manager.js.map
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CORE MODULE — Lazy Dependency Loading System
|
|
3
|
+
* Implements dynamic imports for multimodal-specific dependencies
|
|
4
|
+
* Ensures text mode performance is not impacted by multimodal code
|
|
5
|
+
*
|
|
6
|
+
* Requirements: 9.2 - Lazy loading for multimodal dependencies
|
|
7
|
+
*/
|
|
8
|
+
import '../dom-polyfills.js';
|
|
9
|
+
import type { UniversalEmbedder } from './universal-embedder.js';
|
|
10
|
+
import type { RerankFunction } from './interfaces.js';
|
|
11
|
+
/**
|
|
12
|
+
* Lazy loader for embedder implementations
|
|
13
|
+
* Only loads the specific embedder type when needed
|
|
14
|
+
*/
|
|
15
|
+
export declare class LazyEmbedderLoader {
|
|
16
|
+
private static cache;
|
|
17
|
+
/**
|
|
18
|
+
* Lazily load and create a sentence transformer embedder
|
|
19
|
+
* Only imports the module when actually needed for text mode
|
|
20
|
+
*/
|
|
21
|
+
static loadSentenceTransformerEmbedder(modelName: string, options?: any): Promise<UniversalEmbedder>;
|
|
22
|
+
/**
|
|
23
|
+
* Lazily load and create a CLIP embedder
|
|
24
|
+
* Only imports the module when actually needed for multimodal mode
|
|
25
|
+
*/
|
|
26
|
+
static loadCLIPEmbedder(modelName: string, options?: any): Promise<UniversalEmbedder>;
|
|
27
|
+
/**
|
|
28
|
+
* Check if an embedder is already loaded in cache
|
|
29
|
+
*/
|
|
30
|
+
static isEmbedderLoaded(modelName: string, modelType: 'sentence-transformer' | 'clip'): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Remove an embedder from the cache (called when embedder is cleaned up)
|
|
33
|
+
*/
|
|
34
|
+
static removeEmbedderFromCache(modelName: string, modelType: 'sentence-transformer' | 'clip'): void;
|
|
35
|
+
/**
|
|
36
|
+
* Get statistics about loaded embedders
|
|
37
|
+
*/
|
|
38
|
+
static getLoadingStats(): {
|
|
39
|
+
loadedEmbedders: string[];
|
|
40
|
+
totalLoaded: number;
|
|
41
|
+
textEmbedders: number;
|
|
42
|
+
multimodalEmbedders: number;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Lazy loader for reranking implementations
|
|
47
|
+
* Only loads the specific reranker type when needed
|
|
48
|
+
*/
|
|
49
|
+
export declare class LazyRerankerLoader {
|
|
50
|
+
private static cache;
|
|
51
|
+
/**
|
|
52
|
+
* Lazily load text reranker (cross-encoder)
|
|
53
|
+
* Always available for both text and multimodal modes
|
|
54
|
+
*/
|
|
55
|
+
static loadTextReranker(): Promise<RerankFunction>;
|
|
56
|
+
/**
|
|
57
|
+
* Lazily load text-derived reranker for multimodal mode
|
|
58
|
+
* Only imports multimodal-specific dependencies when needed
|
|
59
|
+
*/
|
|
60
|
+
static loadTextDerivedReranker(): Promise<RerankFunction>;
|
|
61
|
+
/**
|
|
62
|
+
* Lazily load CLIP AutoProcessor for consistent image preprocessing
|
|
63
|
+
* Shares processor instances across embedder instances to ensure identical preprocessing
|
|
64
|
+
*/
|
|
65
|
+
static loadCLIPAutoProcessor(modelName: string): Promise<any>;
|
|
66
|
+
/**
|
|
67
|
+
* Check if a reranker is already loaded in cache
|
|
68
|
+
*/
|
|
69
|
+
static isRerankerLoaded(strategy: string): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Get statistics about loaded rerankers
|
|
72
|
+
*/
|
|
73
|
+
static getLoadingStats(): {
|
|
74
|
+
loadedRerankers: string[];
|
|
75
|
+
totalLoaded: number;
|
|
76
|
+
textRerankers: number;
|
|
77
|
+
multimodalRerankers: number;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Lazy loader for multimodal content processing
|
|
82
|
+
* Only loads image processing dependencies when needed
|
|
83
|
+
*/
|
|
84
|
+
export declare class LazyMultimodalLoader {
|
|
85
|
+
private static cache;
|
|
86
|
+
/**
|
|
87
|
+
* Lazily load image-to-text processing capabilities
|
|
88
|
+
* Only imports when multimodal content processing is needed
|
|
89
|
+
*/
|
|
90
|
+
static loadImageToTextProcessor(modelName?: string): Promise<any>;
|
|
91
|
+
/**
|
|
92
|
+
* Lazily load image metadata extraction capabilities
|
|
93
|
+
* Only imports Sharp when image metadata processing is needed
|
|
94
|
+
*/
|
|
95
|
+
static loadImageMetadataExtractor(): Promise<any>;
|
|
96
|
+
/**
|
|
97
|
+
* Check if multimodal processing capabilities are loaded
|
|
98
|
+
*/
|
|
99
|
+
static getMultimodalLoadingStatus(): {
|
|
100
|
+
imageToTextLoaded: boolean;
|
|
101
|
+
metadataExtractorLoaded: boolean;
|
|
102
|
+
loadedProcessors: string[];
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Unified interface for all lazy loading operations
|
|
107
|
+
* Provides a single entry point for dependency management
|
|
108
|
+
*/
|
|
109
|
+
export declare class LazyDependencyManager {
|
|
110
|
+
/**
|
|
111
|
+
* Load embedder based on model type with lazy loading
|
|
112
|
+
*/
|
|
113
|
+
static loadEmbedder(modelName: string, modelType: 'sentence-transformer' | 'clip', options?: any): Promise<UniversalEmbedder>;
|
|
114
|
+
/**
|
|
115
|
+
* Load reranker based on strategy with lazy loading
|
|
116
|
+
*/
|
|
117
|
+
static loadReranker(strategy: string): Promise<RerankFunction | undefined>;
|
|
118
|
+
/**
|
|
119
|
+
* Get comprehensive loading statistics
|
|
120
|
+
*/
|
|
121
|
+
static getLoadingStatistics(): {
|
|
122
|
+
embedders: ReturnType<typeof LazyEmbedderLoader.getLoadingStats>;
|
|
123
|
+
rerankers: ReturnType<typeof LazyRerankerLoader.getLoadingStats>;
|
|
124
|
+
multimodal: ReturnType<typeof LazyMultimodalLoader.getMultimodalLoadingStatus>;
|
|
125
|
+
totalModulesLoaded: number;
|
|
126
|
+
memoryImpact: 'low' | 'medium' | 'high';
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Clear all cached modules (for testing or memory management)
|
|
130
|
+
*/
|
|
131
|
+
static clearCache(): void;
|
|
132
|
+
/**
|
|
133
|
+
* Check if system is running in text-only mode (no multimodal dependencies loaded)
|
|
134
|
+
*/
|
|
135
|
+
static isTextOnlyMode(): boolean;
|
|
136
|
+
/**
|
|
137
|
+
* Get performance impact assessment
|
|
138
|
+
*/
|
|
139
|
+
static getPerformanceImpact(): {
|
|
140
|
+
mode: 'text-only' | 'multimodal';
|
|
141
|
+
startupTime: 'fast' | 'medium' | 'slow';
|
|
142
|
+
memoryUsage: 'low' | 'medium' | 'high';
|
|
143
|
+
recommendations: string[];
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
export default LazyDependencyManager;
|
|
147
|
+
//# sourceMappingURL=lazy-dependency-loader.d.ts.map
|