rag-lite-ts 2.1.0 → 2.2.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/dist/{cli → cjs/cli}/indexer.js +1 -1
- package/dist/{cli → cjs/cli}/search.js +5 -10
- package/dist/{core → cjs/core}/binary-index-format.d.ts +28 -2
- package/dist/cjs/core/binary-index-format.js +291 -0
- package/dist/{core → cjs/core}/ingestion.d.ts +5 -1
- package/dist/{core → cjs/core}/ingestion.js +76 -9
- package/dist/{core → cjs/core}/model-validator.js +1 -1
- package/dist/{core → cjs/core}/reranking-strategies.js +4 -5
- package/dist/{core → cjs/core}/search.js +2 -1
- package/dist/{core → cjs/core}/types.d.ts +1 -1
- package/dist/{core → cjs/core}/vector-index.d.ts +4 -0
- package/dist/{core → cjs/core}/vector-index.js +10 -2
- package/dist/{file-processor.d.ts → cjs/file-processor.d.ts} +2 -0
- package/dist/{file-processor.js → cjs/file-processor.js} +20 -0
- package/dist/{index-manager.d.ts → cjs/index-manager.d.ts} +17 -1
- package/dist/{index-manager.js → cjs/index-manager.js} +148 -7
- package/dist/{multimodal → cjs/multimodal}/clip-embedder.js +71 -66
- 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 +471 -0
- package/dist/esm/cli/search.d.ts +7 -0
- package/dist/esm/cli/search.js +332 -0
- package/dist/esm/cli.d.ts +3 -0
- package/dist/esm/cli.js +529 -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 +291 -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 +213 -0
- package/dist/esm/core/db.js +895 -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 +901 -0
- package/dist/esm/core/interfaces.d.ts +408 -0
- package/dist/esm/core/interfaces.js +106 -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.d.ts +72 -0
- package/dist/esm/core/vector-index.js +333 -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 +477 -0
- package/dist/esm/factories/search-factory.d.ts +154 -0
- package/dist/esm/factories/search-factory.js +344 -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 +116 -0
- package/dist/esm/index-manager.js +598 -0
- package/dist/esm/index.d.ts +75 -0
- package/dist/esm/index.js +110 -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 +30 -12
- package/dist/core/binary-index-format.js +0 -122
- /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.d.ts → cjs/cli.d.ts} +0 -0
- /package/dist/{cli.js → cjs/cli.js} +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}/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}/db.d.ts +0 -0
- /package/dist/{core → cjs/core}/db.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}/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}/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-pipeline.js +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.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}/ingestion-factory.js +0 -0
- /package/dist/{factories → cjs/factories}/search-factory.d.ts +0 -0
- /package/dist/{factories → cjs/factories}/search-factory.js +0 -0
- /package/dist/{index.d.ts → cjs/index.d.ts} +0 -0
- /package/dist/{index.js → cjs/index.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}/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,435 @@
|
|
|
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
|
+
// Ensure DOM polyfills are set up before any transformers.js usage
|
|
9
|
+
import '../dom-polyfills.js';
|
|
10
|
+
import { handleError, ErrorCategory, ErrorSeverity, createError } from './error-handler.js';
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// LAZY LOADING CACHE
|
|
13
|
+
// =============================================================================
|
|
14
|
+
/**
|
|
15
|
+
* Cache for loaded modules to avoid repeated imports
|
|
16
|
+
*/
|
|
17
|
+
class LazyLoadingCache {
|
|
18
|
+
static instance;
|
|
19
|
+
loadedModules = new Map();
|
|
20
|
+
loadingPromises = new Map();
|
|
21
|
+
static getInstance() {
|
|
22
|
+
if (!LazyLoadingCache.instance) {
|
|
23
|
+
LazyLoadingCache.instance = new LazyLoadingCache();
|
|
24
|
+
}
|
|
25
|
+
return LazyLoadingCache.instance;
|
|
26
|
+
}
|
|
27
|
+
async getOrLoad(key, loader) {
|
|
28
|
+
// Return cached module if available
|
|
29
|
+
if (this.loadedModules.has(key)) {
|
|
30
|
+
return this.loadedModules.get(key);
|
|
31
|
+
}
|
|
32
|
+
// Return existing loading promise if in progress
|
|
33
|
+
if (this.loadingPromises.has(key)) {
|
|
34
|
+
return this.loadingPromises.get(key);
|
|
35
|
+
}
|
|
36
|
+
// Start loading and cache the promise
|
|
37
|
+
const loadingPromise = loader().then(module => {
|
|
38
|
+
this.loadedModules.set(key, module);
|
|
39
|
+
this.loadingPromises.delete(key);
|
|
40
|
+
return module;
|
|
41
|
+
}).catch(error => {
|
|
42
|
+
this.loadingPromises.delete(key);
|
|
43
|
+
throw error;
|
|
44
|
+
});
|
|
45
|
+
this.loadingPromises.set(key, loadingPromise);
|
|
46
|
+
return loadingPromise;
|
|
47
|
+
}
|
|
48
|
+
clear() {
|
|
49
|
+
this.loadedModules.clear();
|
|
50
|
+
this.loadingPromises.clear();
|
|
51
|
+
}
|
|
52
|
+
remove(key) {
|
|
53
|
+
this.loadedModules.delete(key);
|
|
54
|
+
this.loadingPromises.delete(key);
|
|
55
|
+
}
|
|
56
|
+
getLoadedModules() {
|
|
57
|
+
return Array.from(this.loadedModules.keys());
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// =============================================================================
|
|
61
|
+
// LAZY EMBEDDER LOADING
|
|
62
|
+
// =============================================================================
|
|
63
|
+
/**
|
|
64
|
+
* Lazy loader for embedder implementations
|
|
65
|
+
* Only loads the specific embedder type when needed
|
|
66
|
+
*/
|
|
67
|
+
export class LazyEmbedderLoader {
|
|
68
|
+
static cache = LazyLoadingCache.getInstance();
|
|
69
|
+
/**
|
|
70
|
+
* Lazily load and create a sentence transformer embedder
|
|
71
|
+
* Only imports the module when actually needed for text mode
|
|
72
|
+
*/
|
|
73
|
+
static async loadSentenceTransformerEmbedder(modelName, options = {}) {
|
|
74
|
+
const cacheKey = `sentence-transformer:${modelName}`;
|
|
75
|
+
return this.cache.getOrLoad(cacheKey, async () => {
|
|
76
|
+
try {
|
|
77
|
+
console.log(`🔄 Lazy loading sentence transformer embedder: ${modelName}`);
|
|
78
|
+
// Dynamic import - only loaded when text mode is used
|
|
79
|
+
const { SentenceTransformerEmbedder } = await import('../text/sentence-transformer-embedder.js');
|
|
80
|
+
const embedder = new SentenceTransformerEmbedder(modelName, options);
|
|
81
|
+
await embedder.loadModel();
|
|
82
|
+
console.log(`✅ Sentence transformer embedder loaded: ${modelName}`);
|
|
83
|
+
return embedder;
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
const enhancedError = createError.model(`Failed to lazy load sentence transformer embedder '${modelName}': ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
87
|
+
handleError(enhancedError, 'LazyEmbedderLoader', {
|
|
88
|
+
severity: ErrorSeverity.ERROR,
|
|
89
|
+
category: ErrorCategory.MODEL
|
|
90
|
+
});
|
|
91
|
+
throw enhancedError;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Lazily load and create a CLIP embedder
|
|
97
|
+
* Only imports the module when actually needed for multimodal mode
|
|
98
|
+
*/
|
|
99
|
+
static async loadCLIPEmbedder(modelName, options = {}) {
|
|
100
|
+
const cacheKey = `clip:${modelName}`;
|
|
101
|
+
return this.cache.getOrLoad(cacheKey, async () => {
|
|
102
|
+
try {
|
|
103
|
+
console.log(`🔄 Lazy loading CLIP embedder: ${modelName}`);
|
|
104
|
+
// Dynamic import - only loaded when multimodal mode is used
|
|
105
|
+
const { CLIPEmbedder } = await import('../multimodal/clip-embedder.js');
|
|
106
|
+
const embedder = new CLIPEmbedder(modelName, options);
|
|
107
|
+
await embedder.loadModel();
|
|
108
|
+
console.log(`✅ CLIP embedder loaded: ${modelName}`);
|
|
109
|
+
return embedder;
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
const enhancedError = createError.model(`Failed to lazy load CLIP embedder '${modelName}': ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
113
|
+
handleError(enhancedError, 'LazyEmbedderLoader', {
|
|
114
|
+
severity: ErrorSeverity.ERROR,
|
|
115
|
+
category: ErrorCategory.MODEL
|
|
116
|
+
});
|
|
117
|
+
throw enhancedError;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Check if an embedder is already loaded in cache
|
|
123
|
+
*/
|
|
124
|
+
static isEmbedderLoaded(modelName, modelType) {
|
|
125
|
+
const cacheKey = `${modelType}:${modelName}`;
|
|
126
|
+
return this.cache.getLoadedModules().includes(cacheKey);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Remove an embedder from the cache (called when embedder is cleaned up)
|
|
130
|
+
*/
|
|
131
|
+
static removeEmbedderFromCache(modelName, modelType) {
|
|
132
|
+
const cacheKey = `${modelType}:${modelName}`;
|
|
133
|
+
this.cache.remove(cacheKey);
|
|
134
|
+
console.log(`🧹 Removed embedder from cache: ${cacheKey}`);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get statistics about loaded embedders
|
|
138
|
+
*/
|
|
139
|
+
static getLoadingStats() {
|
|
140
|
+
const loadedModules = this.cache.getLoadedModules();
|
|
141
|
+
const textEmbedders = loadedModules.filter(key => key.startsWith('sentence-transformer:')).length;
|
|
142
|
+
const multimodalEmbedders = loadedModules.filter(key => key.startsWith('clip:')).length;
|
|
143
|
+
return {
|
|
144
|
+
loadedEmbedders: loadedModules,
|
|
145
|
+
totalLoaded: loadedModules.length,
|
|
146
|
+
textEmbedders,
|
|
147
|
+
multimodalEmbedders
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// =============================================================================
|
|
152
|
+
// LAZY RERANKER LOADING
|
|
153
|
+
// =============================================================================
|
|
154
|
+
/**
|
|
155
|
+
* Lazy loader for reranking implementations
|
|
156
|
+
* Only loads the specific reranker type when needed
|
|
157
|
+
*/
|
|
158
|
+
export class LazyRerankerLoader {
|
|
159
|
+
static cache = LazyLoadingCache.getInstance();
|
|
160
|
+
/**
|
|
161
|
+
* Lazily load text reranker (cross-encoder)
|
|
162
|
+
* Always available for both text and multimodal modes
|
|
163
|
+
*/
|
|
164
|
+
static async loadTextReranker() {
|
|
165
|
+
const cacheKey = 'reranker:text';
|
|
166
|
+
return this.cache.getOrLoad(cacheKey, async () => {
|
|
167
|
+
try {
|
|
168
|
+
console.log('🔄 Lazy loading text reranker (cross-encoder)');
|
|
169
|
+
// Dynamic import - loaded when reranking is needed
|
|
170
|
+
const { createTextRerankFunction } = await import('../text/reranker.js');
|
|
171
|
+
const rerankFn = createTextRerankFunction();
|
|
172
|
+
console.log('✅ Text reranker loaded');
|
|
173
|
+
return rerankFn;
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
const enhancedError = createError.model(`Failed to lazy load text reranker: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
177
|
+
handleError(enhancedError, 'LazyRerankerLoader', {
|
|
178
|
+
severity: ErrorSeverity.WARNING,
|
|
179
|
+
category: ErrorCategory.MODEL
|
|
180
|
+
});
|
|
181
|
+
throw enhancedError;
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Lazily load text-derived reranker for multimodal mode
|
|
187
|
+
* Only imports multimodal-specific dependencies when needed
|
|
188
|
+
*/
|
|
189
|
+
static async loadTextDerivedReranker() {
|
|
190
|
+
const cacheKey = 'reranker:text-derived';
|
|
191
|
+
return this.cache.getOrLoad(cacheKey, async () => {
|
|
192
|
+
console.log('🔄 Lazy loading text-derived reranker (multimodal)');
|
|
193
|
+
// Dynamic import - only loaded when multimodal mode uses text-derived reranking
|
|
194
|
+
const { TextDerivedRerankingStrategy } = await import('./reranking-strategies.js');
|
|
195
|
+
const reranker = new TextDerivedRerankingStrategy();
|
|
196
|
+
console.log('✅ Text-derived reranker loaded');
|
|
197
|
+
return reranker.rerank.bind(reranker);
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Lazily load CLIP AutoProcessor for consistent image preprocessing
|
|
202
|
+
* Shares processor instances across embedder instances to ensure identical preprocessing
|
|
203
|
+
*/
|
|
204
|
+
static async loadCLIPAutoProcessor(modelName) {
|
|
205
|
+
const cacheKey = `processor:clip:${modelName}`;
|
|
206
|
+
return this.cache.getOrLoad(cacheKey, async () => {
|
|
207
|
+
console.log(`🔄 Lazy loading CLIP AutoProcessor: ${modelName}`);
|
|
208
|
+
// Dynamic import - only loaded when CLIP models are used
|
|
209
|
+
const { AutoProcessor } = await import('@huggingface/transformers');
|
|
210
|
+
const processor = await AutoProcessor.from_pretrained(modelName);
|
|
211
|
+
console.log(`✅ CLIP AutoProcessor loaded: ${modelName}`);
|
|
212
|
+
return processor;
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Check if a reranker is already loaded in cache
|
|
217
|
+
*/
|
|
218
|
+
static isRerankerLoaded(strategy) {
|
|
219
|
+
const cacheKey = `reranker:${strategy}`;
|
|
220
|
+
return this.cache.getLoadedModules().includes(cacheKey);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Get statistics about loaded rerankers
|
|
224
|
+
*/
|
|
225
|
+
static getLoadingStats() {
|
|
226
|
+
const loadedModules = this.cache.getLoadedModules().filter(key => key.startsWith('reranker:'));
|
|
227
|
+
const textRerankers = loadedModules.filter(key => key === 'reranker:text').length;
|
|
228
|
+
const multimodalRerankers = loadedModules.filter(key => key.includes('text-derived') || key.includes('metadata') || key.includes('hybrid')).length;
|
|
229
|
+
return {
|
|
230
|
+
loadedRerankers: loadedModules,
|
|
231
|
+
totalLoaded: loadedModules.length,
|
|
232
|
+
textRerankers,
|
|
233
|
+
multimodalRerankers
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// =============================================================================
|
|
238
|
+
// LAZY MULTIMODAL PROCESSING LOADING
|
|
239
|
+
// =============================================================================
|
|
240
|
+
/**
|
|
241
|
+
* Lazy loader for multimodal content processing
|
|
242
|
+
* Only loads image processing dependencies when needed
|
|
243
|
+
*/
|
|
244
|
+
export class LazyMultimodalLoader {
|
|
245
|
+
static cache = LazyLoadingCache.getInstance();
|
|
246
|
+
/**
|
|
247
|
+
* Lazily load image-to-text processing capabilities
|
|
248
|
+
* Only imports when multimodal content processing is needed
|
|
249
|
+
*/
|
|
250
|
+
static async loadImageToTextProcessor(modelName = 'Xenova/vit-gpt2-image-captioning') {
|
|
251
|
+
const cacheKey = `image-to-text:${modelName}`;
|
|
252
|
+
return this.cache.getOrLoad(cacheKey, async () => {
|
|
253
|
+
try {
|
|
254
|
+
console.log(`🔄 Lazy loading image-to-text processor: ${modelName}`);
|
|
255
|
+
// Dynamic import - only loaded when multimodal content processing is needed
|
|
256
|
+
const { pipeline } = await import('@huggingface/transformers');
|
|
257
|
+
const processor = await pipeline('image-to-text', modelName, {
|
|
258
|
+
progress_callback: (progress) => {
|
|
259
|
+
if (progress.status === 'downloading') {
|
|
260
|
+
console.log(`📥 Downloading image-to-text model: ${Math.round(progress.progress || 0)}%`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
console.log(`✅ Image-to-text processor loaded: ${modelName}`);
|
|
265
|
+
return processor;
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
const enhancedError = createError.model(`Failed to lazy load image-to-text processor '${modelName}': ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
269
|
+
handleError(enhancedError, 'LazyMultimodalLoader', {
|
|
270
|
+
severity: ErrorSeverity.ERROR,
|
|
271
|
+
category: ErrorCategory.MODEL
|
|
272
|
+
});
|
|
273
|
+
throw enhancedError;
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Lazily load image metadata extraction capabilities
|
|
279
|
+
* Only imports Sharp when image metadata processing is needed
|
|
280
|
+
*/
|
|
281
|
+
static async loadImageMetadataExtractor() {
|
|
282
|
+
const cacheKey = 'image-metadata-extractor';
|
|
283
|
+
return this.cache.getOrLoad(cacheKey, async () => {
|
|
284
|
+
try {
|
|
285
|
+
console.log('🔄 Lazy loading image metadata extractor (Sharp)');
|
|
286
|
+
// Dynamic import - only loaded when image metadata extraction is needed
|
|
287
|
+
// Sharp is an optional dependency for image metadata extraction
|
|
288
|
+
let sharp;
|
|
289
|
+
try {
|
|
290
|
+
// Use dynamic import with string to avoid TypeScript checking
|
|
291
|
+
sharp = await import('sharp');
|
|
292
|
+
}
|
|
293
|
+
catch (error) {
|
|
294
|
+
// Sharp is not available, will use fallback
|
|
295
|
+
throw new Error('Sharp not available for image metadata extraction');
|
|
296
|
+
}
|
|
297
|
+
console.log('✅ Image metadata extractor loaded (Sharp)');
|
|
298
|
+
return sharp.default || sharp;
|
|
299
|
+
}
|
|
300
|
+
catch (error) {
|
|
301
|
+
console.warn(`Failed to load Sharp for image metadata extraction: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
302
|
+
console.log('📊 Image metadata extraction will be limited without Sharp');
|
|
303
|
+
// Return a fallback metadata extractor
|
|
304
|
+
return {
|
|
305
|
+
metadata: async () => ({
|
|
306
|
+
width: 0,
|
|
307
|
+
height: 0,
|
|
308
|
+
format: 'unknown',
|
|
309
|
+
size: 0
|
|
310
|
+
})
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Check if multimodal processing capabilities are loaded
|
|
317
|
+
*/
|
|
318
|
+
static getMultimodalLoadingStatus() {
|
|
319
|
+
const loadedModules = this.cache.getLoadedModules();
|
|
320
|
+
return {
|
|
321
|
+
imageToTextLoaded: loadedModules.some(key => key.startsWith('image-to-text:')),
|
|
322
|
+
metadataExtractorLoaded: loadedModules.includes('image-metadata-extractor'),
|
|
323
|
+
loadedProcessors: loadedModules.filter(key => key.startsWith('image-to-text:') || key === 'image-metadata-extractor')
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
// =============================================================================
|
|
328
|
+
// UNIFIED LAZY LOADING INTERFACE
|
|
329
|
+
// =============================================================================
|
|
330
|
+
/**
|
|
331
|
+
* Unified interface for all lazy loading operations
|
|
332
|
+
* Provides a single entry point for dependency management
|
|
333
|
+
*/
|
|
334
|
+
export class LazyDependencyManager {
|
|
335
|
+
/**
|
|
336
|
+
* Load embedder based on model type with lazy loading
|
|
337
|
+
*/
|
|
338
|
+
static async loadEmbedder(modelName, modelType, options = {}) {
|
|
339
|
+
switch (modelType) {
|
|
340
|
+
case 'sentence-transformer':
|
|
341
|
+
return LazyEmbedderLoader.loadSentenceTransformerEmbedder(modelName, options);
|
|
342
|
+
case 'clip':
|
|
343
|
+
return LazyEmbedderLoader.loadCLIPEmbedder(modelName, options);
|
|
344
|
+
default:
|
|
345
|
+
throw createError.validation(`Unsupported model type for lazy loading: ${modelType}`);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Load reranker based on strategy with lazy loading
|
|
350
|
+
*/
|
|
351
|
+
static async loadReranker(strategy) {
|
|
352
|
+
if (strategy === 'disabled') {
|
|
353
|
+
return undefined;
|
|
354
|
+
}
|
|
355
|
+
switch (strategy) {
|
|
356
|
+
case 'cross-encoder':
|
|
357
|
+
return LazyRerankerLoader.loadTextReranker();
|
|
358
|
+
case 'text-derived':
|
|
359
|
+
return LazyRerankerLoader.loadTextDerivedReranker();
|
|
360
|
+
default:
|
|
361
|
+
throw new Error(`Unknown reranking strategy '${strategy}'. Supported strategies: cross-encoder, text-derived, disabled`);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Get comprehensive loading statistics
|
|
366
|
+
*/
|
|
367
|
+
static getLoadingStatistics() {
|
|
368
|
+
const embedderStats = LazyEmbedderLoader.getLoadingStats();
|
|
369
|
+
const rerankerStats = LazyRerankerLoader.getLoadingStats();
|
|
370
|
+
const multimodalStats = LazyMultimodalLoader.getMultimodalLoadingStatus();
|
|
371
|
+
const totalModules = embedderStats.totalLoaded + rerankerStats.totalLoaded + multimodalStats.loadedProcessors.length;
|
|
372
|
+
// Estimate memory impact based on loaded modules
|
|
373
|
+
let memoryImpact = 'low';
|
|
374
|
+
if (embedderStats.multimodalEmbedders > 0 || multimodalStats.imageToTextLoaded) {
|
|
375
|
+
memoryImpact = 'high';
|
|
376
|
+
}
|
|
377
|
+
else if (totalModules > 2) {
|
|
378
|
+
memoryImpact = 'medium';
|
|
379
|
+
}
|
|
380
|
+
return {
|
|
381
|
+
embedders: embedderStats,
|
|
382
|
+
rerankers: rerankerStats,
|
|
383
|
+
multimodal: multimodalStats,
|
|
384
|
+
totalModulesLoaded: totalModules,
|
|
385
|
+
memoryImpact
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Clear all cached modules (for testing or memory management)
|
|
390
|
+
*/
|
|
391
|
+
static clearCache() {
|
|
392
|
+
LazyLoadingCache.getInstance().clear();
|
|
393
|
+
console.log('🧹 Lazy loading cache cleared');
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Check if system is running in text-only mode (no multimodal dependencies loaded)
|
|
397
|
+
*/
|
|
398
|
+
static isTextOnlyMode() {
|
|
399
|
+
const stats = this.getLoadingStatistics();
|
|
400
|
+
return stats.embedders.multimodalEmbedders === 0 &&
|
|
401
|
+
stats.rerankers.multimodalRerankers === 0 &&
|
|
402
|
+
!stats.multimodal.imageToTextLoaded;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Get performance impact assessment
|
|
406
|
+
*/
|
|
407
|
+
static getPerformanceImpact() {
|
|
408
|
+
const stats = this.getLoadingStatistics();
|
|
409
|
+
const isTextOnly = this.isTextOnlyMode();
|
|
410
|
+
const recommendations = [];
|
|
411
|
+
if (isTextOnly) {
|
|
412
|
+
recommendations.push('Optimal performance: Only text dependencies loaded');
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
415
|
+
recommendations.push('Multimodal mode: Additional dependencies loaded as needed');
|
|
416
|
+
if (stats.embedders.multimodalEmbedders > 1) {
|
|
417
|
+
recommendations.push('Consider using a single multimodal model to reduce memory usage');
|
|
418
|
+
}
|
|
419
|
+
if (stats.multimodal.imageToTextLoaded && stats.multimodal.metadataExtractorLoaded) {
|
|
420
|
+
recommendations.push('Full multimodal processing active - expect higher memory usage');
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
return {
|
|
424
|
+
mode: isTextOnly ? 'text-only' : 'multimodal',
|
|
425
|
+
startupTime: stats.totalModulesLoaded === 0 ? 'fast' : stats.totalModulesLoaded < 3 ? 'medium' : 'slow',
|
|
426
|
+
memoryUsage: stats.memoryImpact,
|
|
427
|
+
recommendations
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
// =============================================================================
|
|
432
|
+
// DEFAULT EXPORT
|
|
433
|
+
// =============================================================================
|
|
434
|
+
export default LazyDependencyManager;
|
|
435
|
+
//# sourceMappingURL=lazy-dependency-loader.js.map
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CORE MODULE — Mode Detection Service for Chameleon Architecture
|
|
3
|
+
* Handles automatic mode detection from database and provides default configurations
|
|
4
|
+
* Supports graceful error handling and fallback to text mode
|
|
5
|
+
* Enhanced with shared database connection management to prevent locking issues
|
|
6
|
+
*/
|
|
7
|
+
import type { DatabaseConnection } from './db.js';
|
|
8
|
+
import type { SystemInfo, ModeType, ModelType } from '../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Service for detecting and storing system mode configuration
|
|
11
|
+
* Provides automatic mode detection from database with graceful error handling
|
|
12
|
+
* Uses shared database connections to prevent locking issues
|
|
13
|
+
*/
|
|
14
|
+
export declare class ModeDetectionService {
|
|
15
|
+
private dbPath;
|
|
16
|
+
constructor(dbPath: string);
|
|
17
|
+
/**
|
|
18
|
+
* Detects the current system mode from the database
|
|
19
|
+
* Falls back to default text mode configuration for new installations
|
|
20
|
+
* Enhanced with comprehensive error handling and recovery mechanisms
|
|
21
|
+
* Uses shared database connections to prevent locking issues
|
|
22
|
+
*
|
|
23
|
+
* @param existingConnection - Optional existing connection to reuse
|
|
24
|
+
* @returns Promise resolving to SystemInfo with current or default configuration
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const modeService = new ModeDetectionService('./db.sqlite');
|
|
29
|
+
* const systemInfo = await modeService.detectMode();
|
|
30
|
+
* console.log(`Current mode: ${systemInfo.mode}`);
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
detectMode(existingConnection?: DatabaseConnection): Promise<SystemInfo>;
|
|
34
|
+
/**
|
|
35
|
+
* Stores system mode configuration in the database
|
|
36
|
+
* Creates or updates the system_info table with the provided configuration
|
|
37
|
+
* Uses shared database connections to prevent locking issues
|
|
38
|
+
*
|
|
39
|
+
* @param systemInfo - SystemInfo object to store (can be partial for updates)
|
|
40
|
+
* @param existingConnection - Optional existing connection to reuse
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* const modeService = new ModeDetectionService('./db.sqlite');
|
|
45
|
+
* await modeService.storeMode({
|
|
46
|
+
* mode: 'multimodal',
|
|
47
|
+
* modelName: 'Xenova/clip-vit-base-patch32',
|
|
48
|
+
* modelType: 'clip',
|
|
49
|
+
* modelDimensions: 512,
|
|
50
|
+
* supportedContentTypes: ['text', 'image'],
|
|
51
|
+
* rerankingStrategy: 'text-derived'
|
|
52
|
+
* });
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
storeMode(systemInfo: Partial<SystemInfo>, existingConnection?: DatabaseConnection): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Gets the current mode from the database (convenience method)
|
|
58
|
+
* @returns Promise resolving to the current mode string
|
|
59
|
+
*/
|
|
60
|
+
getCurrentMode(): Promise<ModeType>;
|
|
61
|
+
/**
|
|
62
|
+
* Checks if the system is in multimodal mode
|
|
63
|
+
* @returns Promise resolving to boolean indicating multimodal mode
|
|
64
|
+
*/
|
|
65
|
+
isMultimodalMode(): Promise<boolean>;
|
|
66
|
+
/**
|
|
67
|
+
* Gets complete model information from the database
|
|
68
|
+
* @returns Promise resolving to current model configuration
|
|
69
|
+
*/
|
|
70
|
+
getCurrentModelInfo(): Promise<{
|
|
71
|
+
modelName: string;
|
|
72
|
+
modelType: ModelType;
|
|
73
|
+
dimensions: number;
|
|
74
|
+
supportedContentTypes: string[];
|
|
75
|
+
}>;
|
|
76
|
+
/**
|
|
77
|
+
* Get default system info for new installations
|
|
78
|
+
* @private
|
|
79
|
+
*/
|
|
80
|
+
private getDefaultSystemInfo;
|
|
81
|
+
/**
|
|
82
|
+
* Check database file accessibility
|
|
83
|
+
* @private
|
|
84
|
+
*/
|
|
85
|
+
private checkDatabaseAccessibility;
|
|
86
|
+
/**
|
|
87
|
+
* Verify database schema integrity
|
|
88
|
+
* @private
|
|
89
|
+
*/
|
|
90
|
+
private verifySchemaIntegrity;
|
|
91
|
+
/**
|
|
92
|
+
* Ensure database schema exists
|
|
93
|
+
* @private
|
|
94
|
+
*/
|
|
95
|
+
private ensureSchemaExists;
|
|
96
|
+
/**
|
|
97
|
+
* Handle detection errors with fallback to default configuration
|
|
98
|
+
* @private
|
|
99
|
+
*/
|
|
100
|
+
private handleDetectionError;
|
|
101
|
+
/**
|
|
102
|
+
* Log error-specific guidance for users
|
|
103
|
+
* @private
|
|
104
|
+
*/
|
|
105
|
+
private logErrorGuidance;
|
|
106
|
+
/**
|
|
107
|
+
* Enhances storage errors with more context and helpful suggestions
|
|
108
|
+
* @private
|
|
109
|
+
*/
|
|
110
|
+
private enhanceStorageError;
|
|
111
|
+
/**
|
|
112
|
+
* Validate complete system info object
|
|
113
|
+
* @private
|
|
114
|
+
*/
|
|
115
|
+
private validateSystemInfo;
|
|
116
|
+
/**
|
|
117
|
+
* Validate mode value
|
|
118
|
+
* @private
|
|
119
|
+
*/
|
|
120
|
+
private validateMode;
|
|
121
|
+
/**
|
|
122
|
+
* Validate model type value
|
|
123
|
+
* @private
|
|
124
|
+
*/
|
|
125
|
+
private validateModelType;
|
|
126
|
+
/**
|
|
127
|
+
* Validate reranking strategy value
|
|
128
|
+
* @private
|
|
129
|
+
*/
|
|
130
|
+
private validateRerankingStrategy;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Quick function to detect mode from database
|
|
134
|
+
* @param dbPath - Path to database file
|
|
135
|
+
* @returns Promise resolving to SystemInfo
|
|
136
|
+
*/
|
|
137
|
+
export declare function detectSystemMode(dbPath: string): Promise<SystemInfo>;
|
|
138
|
+
/**
|
|
139
|
+
* Quick function to store mode configuration
|
|
140
|
+
* @param dbPath - Path to database file
|
|
141
|
+
* @param systemInfo - System configuration to store
|
|
142
|
+
*/
|
|
143
|
+
export declare function storeSystemMode(dbPath: string, systemInfo: Partial<SystemInfo>): Promise<void>;
|
|
144
|
+
/**
|
|
145
|
+
* Quick function to check if system is in multimodal mode
|
|
146
|
+
* @param dbPath - Path to database file
|
|
147
|
+
* @returns Promise resolving to boolean
|
|
148
|
+
*/
|
|
149
|
+
export declare function isMultimodalMode(dbPath: string): Promise<boolean>;
|
|
150
|
+
//# sourceMappingURL=mode-detection-service.d.ts.map
|