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,397 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CORE MODULE — Actionable Error Messages
|
|
3
|
+
* Provides user-friendly, actionable error messages with specific guidance
|
|
4
|
+
* Replaces technical error messages with helpful troubleshooting steps
|
|
5
|
+
*/
|
|
6
|
+
import { dirname, basename } from 'path';
|
|
7
|
+
/**
|
|
8
|
+
* Default configuration for error messages
|
|
9
|
+
*/
|
|
10
|
+
const DEFAULT_CONFIG = {
|
|
11
|
+
includeExamples: true,
|
|
12
|
+
includeTroubleshooting: true,
|
|
13
|
+
operationContext: 'operation'
|
|
14
|
+
};
|
|
15
|
+
// =============================================================================
|
|
16
|
+
// FILE AND PATH ERROR MESSAGES
|
|
17
|
+
// =============================================================================
|
|
18
|
+
/**
|
|
19
|
+
* Create actionable error message for missing files
|
|
20
|
+
*/
|
|
21
|
+
export function createMissingFileError(filePath, fileType, config = {}) {
|
|
22
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
23
|
+
const fileName = basename(filePath);
|
|
24
|
+
const dirName = dirname(filePath);
|
|
25
|
+
const messages = [];
|
|
26
|
+
// Main error message
|
|
27
|
+
switch (fileType) {
|
|
28
|
+
case 'index':
|
|
29
|
+
messages.push(`❌ Vector index file not found: ${filePath}`);
|
|
30
|
+
messages.push('');
|
|
31
|
+
messages.push('🔍 This usually means you need to run ingestion first to create the search index.');
|
|
32
|
+
break;
|
|
33
|
+
case 'database':
|
|
34
|
+
messages.push(`❌ Database file not found: ${filePath}`);
|
|
35
|
+
messages.push('');
|
|
36
|
+
messages.push('🔍 This usually means you need to run ingestion first to create the database.');
|
|
37
|
+
break;
|
|
38
|
+
case 'config':
|
|
39
|
+
messages.push(`❌ Configuration file not found: ${filePath}`);
|
|
40
|
+
messages.push('');
|
|
41
|
+
messages.push('🔍 The configuration file is missing or in the wrong location.');
|
|
42
|
+
break;
|
|
43
|
+
case 'content':
|
|
44
|
+
messages.push(`❌ Content file not found: ${filePath}`);
|
|
45
|
+
messages.push('');
|
|
46
|
+
messages.push('🔍 The content file may have been moved, deleted, or the path is incorrect.');
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
if (cfg.includeTroubleshooting) {
|
|
50
|
+
messages.push('');
|
|
51
|
+
messages.push('🛠️ How to fix this:');
|
|
52
|
+
if (fileType === 'index' || fileType === 'database') {
|
|
53
|
+
messages.push(' 1. Run ingestion to create the required files:');
|
|
54
|
+
messages.push(' raglite ingest <your-documents-directory>');
|
|
55
|
+
messages.push('');
|
|
56
|
+
messages.push(' 2. Or create an ingestion pipeline programmatically:');
|
|
57
|
+
if (cfg.includeExamples) {
|
|
58
|
+
messages.push(' ```typescript');
|
|
59
|
+
messages.push(' import { IngestionFactory } from "rag-lite-ts";');
|
|
60
|
+
messages.push(' const pipeline = await IngestionFactory.create(');
|
|
61
|
+
messages.push(` "${filePath.endsWith('.bin') ? filePath.replace('.bin', '.sqlite') : filePath}",`);
|
|
62
|
+
messages.push(` "${filePath.endsWith('.sqlite') ? filePath.replace('.sqlite', '.bin') : filePath}"`);
|
|
63
|
+
messages.push(' );');
|
|
64
|
+
messages.push(' await pipeline.ingestDirectory("./your-documents");');
|
|
65
|
+
messages.push(' ```');
|
|
66
|
+
}
|
|
67
|
+
messages.push('');
|
|
68
|
+
messages.push(' 3. Verify the file paths are correct');
|
|
69
|
+
messages.push(` Expected directory: ${dirName}`);
|
|
70
|
+
messages.push(` Expected filename: ${fileName}`);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
messages.push(` 1. Check if the file exists at: ${filePath}`);
|
|
74
|
+
messages.push(' 2. Verify the file path is correct');
|
|
75
|
+
messages.push(' 3. Check file permissions');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return new Error(messages.join('\n'));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Create actionable error message for invalid paths
|
|
82
|
+
*/
|
|
83
|
+
export function createInvalidPathError(paths, config = {}) {
|
|
84
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
85
|
+
const messages = [];
|
|
86
|
+
messages.push('❌ Invalid file paths provided');
|
|
87
|
+
messages.push('');
|
|
88
|
+
const missingPaths = paths.filter(p => !p.value || p.value.trim() === '');
|
|
89
|
+
if (missingPaths.length > 0) {
|
|
90
|
+
messages.push('🔍 Missing required paths:');
|
|
91
|
+
missingPaths.forEach(p => messages.push(` • ${p.name}: not provided`));
|
|
92
|
+
messages.push('');
|
|
93
|
+
}
|
|
94
|
+
if (cfg.includeTroubleshooting) {
|
|
95
|
+
messages.push('🛠️ How to fix this:');
|
|
96
|
+
messages.push(' 1. Provide all required file paths:');
|
|
97
|
+
if (cfg.includeExamples) {
|
|
98
|
+
messages.push(' ```typescript');
|
|
99
|
+
messages.push(' // ✅ Correct usage');
|
|
100
|
+
messages.push(' const search = await TextSearchFactory.create(');
|
|
101
|
+
messages.push(' "./my-index.bin", // Vector index path');
|
|
102
|
+
messages.push(' "./my-database.sqlite" // Database path');
|
|
103
|
+
messages.push(' );');
|
|
104
|
+
messages.push(' ```');
|
|
105
|
+
messages.push('');
|
|
106
|
+
messages.push(' ```typescript');
|
|
107
|
+
messages.push(' // ❌ Incorrect - missing paths');
|
|
108
|
+
messages.push(' const search = await TextSearchFactory.create("", "");');
|
|
109
|
+
messages.push(' ```');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return new Error(messages.join('\n'));
|
|
113
|
+
}
|
|
114
|
+
// =============================================================================
|
|
115
|
+
// MODEL AND CONFIGURATION ERROR MESSAGES
|
|
116
|
+
// =============================================================================
|
|
117
|
+
/**
|
|
118
|
+
* Create actionable error message for model loading failures
|
|
119
|
+
*/
|
|
120
|
+
export function createModelLoadingError(modelName, originalError, config = {}) {
|
|
121
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
122
|
+
const messages = [];
|
|
123
|
+
messages.push(`❌ Failed to load embedding model: ${modelName}`);
|
|
124
|
+
messages.push('');
|
|
125
|
+
messages.push(`🔍 Original error: ${originalError}`);
|
|
126
|
+
messages.push('');
|
|
127
|
+
if (cfg.includeTroubleshooting) {
|
|
128
|
+
messages.push('🛠️ How to fix this:');
|
|
129
|
+
if (originalError.includes('network') || originalError.includes('download') || originalError.includes('fetch')) {
|
|
130
|
+
messages.push(' 📡 Network/Download Issues:');
|
|
131
|
+
messages.push(' 1. Check your internet connection');
|
|
132
|
+
messages.push(' 2. Try again in a few minutes (temporary server issues)');
|
|
133
|
+
messages.push(' 3. Check if you\'re behind a firewall or proxy');
|
|
134
|
+
messages.push('');
|
|
135
|
+
}
|
|
136
|
+
if (originalError.includes('memory') || originalError.includes('OOM')) {
|
|
137
|
+
messages.push(' 💾 Memory Issues:');
|
|
138
|
+
messages.push(' 1. Close other applications to free up memory');
|
|
139
|
+
messages.push(' 2. Try a smaller model:');
|
|
140
|
+
messages.push(' • sentence-transformers/all-MiniLM-L6-v2 (lightweight)');
|
|
141
|
+
messages.push(' • Xenova/clip-vit-base-patch32 (for multimodal)');
|
|
142
|
+
messages.push('');
|
|
143
|
+
}
|
|
144
|
+
messages.push(' 🔧 General Solutions:');
|
|
145
|
+
messages.push(' 1. Verify the model name is correct');
|
|
146
|
+
messages.push(' 2. Check available models:');
|
|
147
|
+
if (cfg.includeExamples) {
|
|
148
|
+
messages.push(' ```typescript');
|
|
149
|
+
messages.push(' import { listAvailableModels } from "rag-lite-ts";');
|
|
150
|
+
messages.push(' const models = listAvailableModels();');
|
|
151
|
+
messages.push(' console.log("Available models:", models);');
|
|
152
|
+
messages.push(' ```');
|
|
153
|
+
}
|
|
154
|
+
messages.push(' 3. Try a different model if the current one is problematic');
|
|
155
|
+
}
|
|
156
|
+
return new Error(messages.join('\n'));
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Create actionable error message for dimension mismatches
|
|
160
|
+
*/
|
|
161
|
+
export function createDimensionMismatchError(expected, actual, context, config = {}) {
|
|
162
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
163
|
+
const messages = [];
|
|
164
|
+
messages.push(`❌ Vector dimension mismatch in ${context}`);
|
|
165
|
+
messages.push('');
|
|
166
|
+
messages.push(`🔍 Expected: ${expected} dimensions`);
|
|
167
|
+
messages.push(`🔍 Actual: ${actual} dimensions`);
|
|
168
|
+
messages.push('');
|
|
169
|
+
messages.push('This usually means the model used to create the index is different from the current model.');
|
|
170
|
+
if (cfg.includeTroubleshooting) {
|
|
171
|
+
messages.push('');
|
|
172
|
+
messages.push('🛠️ How to fix this:');
|
|
173
|
+
messages.push(' 1. Rebuild the index with the current model:');
|
|
174
|
+
messages.push(' raglite ingest <directory> --force-rebuild');
|
|
175
|
+
messages.push('');
|
|
176
|
+
messages.push(' 2. Or use the same model that was used to create the index');
|
|
177
|
+
messages.push('');
|
|
178
|
+
messages.push(' 3. Check which model was used originally:');
|
|
179
|
+
if (cfg.includeExamples) {
|
|
180
|
+
messages.push(' ```typescript');
|
|
181
|
+
messages.push(' import { getSearchEngineInfo } from "rag-lite-ts";');
|
|
182
|
+
messages.push(' const info = await getSearchEngineInfo("./database.sqlite");');
|
|
183
|
+
messages.push(' console.log("Original model:", info.modelName);');
|
|
184
|
+
messages.push(' console.log("Original dimensions:", info.modelDimensions);');
|
|
185
|
+
messages.push(' ```');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return new Error(messages.join('\n'));
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Create actionable error message for mode mismatches
|
|
192
|
+
*/
|
|
193
|
+
export function createModeMismatchError(expectedMode, actualMode, config = {}) {
|
|
194
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
195
|
+
const messages = [];
|
|
196
|
+
messages.push(`❌ Mode mismatch detected`);
|
|
197
|
+
messages.push('');
|
|
198
|
+
messages.push(`🔍 Database is configured for: ${expectedMode} mode`);
|
|
199
|
+
messages.push(`🔍 You requested: ${actualMode} mode`);
|
|
200
|
+
messages.push('');
|
|
201
|
+
messages.push('Each database can only be used with one mode consistently.');
|
|
202
|
+
if (cfg.includeTroubleshooting) {
|
|
203
|
+
messages.push('');
|
|
204
|
+
messages.push('🛠️ How to fix this:');
|
|
205
|
+
messages.push(' 1. Use the existing mode (recommended):');
|
|
206
|
+
if (cfg.includeExamples) {
|
|
207
|
+
messages.push(' ```typescript');
|
|
208
|
+
messages.push(' // Let the system auto-detect the mode');
|
|
209
|
+
messages.push(' const search = await TextSearchFactory.create("./index.bin", "./db.sqlite");');
|
|
210
|
+
messages.push(' ```');
|
|
211
|
+
}
|
|
212
|
+
messages.push('');
|
|
213
|
+
messages.push(' 2. Or rebuild with the new mode:');
|
|
214
|
+
messages.push(` raglite ingest <directory> --mode ${actualMode} --force-rebuild`);
|
|
215
|
+
messages.push('');
|
|
216
|
+
messages.push(' 3. Or create a new database for the different mode:');
|
|
217
|
+
if (cfg.includeExamples) {
|
|
218
|
+
messages.push(' ```typescript');
|
|
219
|
+
messages.push(' const pipeline = await IngestionFactory.create(');
|
|
220
|
+
messages.push(' "./new-database.sqlite",');
|
|
221
|
+
messages.push(' "./new-index.bin",');
|
|
222
|
+
messages.push(` { mode: "${actualMode}" }`);
|
|
223
|
+
messages.push(' );');
|
|
224
|
+
messages.push(' ```');
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return new Error(messages.join('\n'));
|
|
228
|
+
}
|
|
229
|
+
// =============================================================================
|
|
230
|
+
// CONTENT AND PROCESSING ERROR MESSAGES
|
|
231
|
+
// =============================================================================
|
|
232
|
+
/**
|
|
233
|
+
* Create actionable error message for empty or invalid content
|
|
234
|
+
*/
|
|
235
|
+
export function createInvalidContentError(contentType, issue, config = {}) {
|
|
236
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
237
|
+
const messages = [];
|
|
238
|
+
switch (issue) {
|
|
239
|
+
case 'empty':
|
|
240
|
+
messages.push(`❌ Empty ${contentType} content provided`);
|
|
241
|
+
messages.push('');
|
|
242
|
+
messages.push('🔍 Content cannot be empty or contain only whitespace.');
|
|
243
|
+
break;
|
|
244
|
+
case 'invalid_format':
|
|
245
|
+
messages.push(`❌ Invalid ${contentType} format`);
|
|
246
|
+
messages.push('');
|
|
247
|
+
messages.push('🔍 The content format is not supported or is corrupted.');
|
|
248
|
+
break;
|
|
249
|
+
case 'too_large':
|
|
250
|
+
messages.push(`❌ ${contentType} content is too large`);
|
|
251
|
+
messages.push('');
|
|
252
|
+
messages.push('🔍 Content exceeds the maximum allowed size.');
|
|
253
|
+
break;
|
|
254
|
+
case 'unsupported':
|
|
255
|
+
messages.push(`❌ Unsupported ${contentType} content type`);
|
|
256
|
+
messages.push('');
|
|
257
|
+
messages.push('🔍 This content type is not supported in the current mode.');
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
if (cfg.includeTroubleshooting) {
|
|
261
|
+
messages.push('');
|
|
262
|
+
messages.push('🛠️ How to fix this:');
|
|
263
|
+
switch (issue) {
|
|
264
|
+
case 'empty':
|
|
265
|
+
messages.push(' 1. Provide non-empty content');
|
|
266
|
+
messages.push(' 2. Check that your content source is working correctly');
|
|
267
|
+
messages.push(' 3. Verify file reading/processing is working');
|
|
268
|
+
break;
|
|
269
|
+
case 'invalid_format':
|
|
270
|
+
messages.push(' 1. Check the file format is supported');
|
|
271
|
+
messages.push(' 2. Verify the file is not corrupted');
|
|
272
|
+
messages.push(' 3. Try with a different file');
|
|
273
|
+
break;
|
|
274
|
+
case 'too_large':
|
|
275
|
+
messages.push(' 1. Split large content into smaller chunks');
|
|
276
|
+
messages.push(' 2. Increase the maximum content size limit');
|
|
277
|
+
messages.push(' 3. Process content in batches');
|
|
278
|
+
break;
|
|
279
|
+
case 'unsupported':
|
|
280
|
+
messages.push(' 1. Check if you\'re using the right mode:');
|
|
281
|
+
messages.push(' • Text mode: supports text content');
|
|
282
|
+
messages.push(' • Multimodal mode: supports text and images');
|
|
283
|
+
messages.push(' 2. Convert content to a supported format');
|
|
284
|
+
break;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return new Error(messages.join('\n'));
|
|
288
|
+
}
|
|
289
|
+
// =============================================================================
|
|
290
|
+
// INITIALIZATION AND DEPENDENCY ERROR MESSAGES
|
|
291
|
+
// =============================================================================
|
|
292
|
+
/**
|
|
293
|
+
* Create actionable error message for missing dependencies
|
|
294
|
+
*/
|
|
295
|
+
export function createMissingDependencyError(dependencyName, dependencyType, config = {}) {
|
|
296
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
297
|
+
const messages = [];
|
|
298
|
+
messages.push(`❌ Missing required ${dependencyType}: ${dependencyName}`);
|
|
299
|
+
messages.push('');
|
|
300
|
+
messages.push(`🔍 The ${dependencyName} ${dependencyType} is required but was not provided or is invalid.`);
|
|
301
|
+
if (cfg.includeTroubleshooting) {
|
|
302
|
+
messages.push('');
|
|
303
|
+
messages.push('🛠️ How to fix this:');
|
|
304
|
+
messages.push(` 1. Ensure ${dependencyName} is properly initialized`);
|
|
305
|
+
messages.push(' 2. Check the initialization order of your components');
|
|
306
|
+
messages.push(' 3. Verify all required parameters are provided');
|
|
307
|
+
if (cfg.includeExamples) {
|
|
308
|
+
messages.push('');
|
|
309
|
+
messages.push(' Example of correct initialization:');
|
|
310
|
+
messages.push(' ```typescript');
|
|
311
|
+
messages.push(' // Make sure all dependencies are created first');
|
|
312
|
+
messages.push(' const embedder = await createEmbedder("model-name");');
|
|
313
|
+
messages.push(' const indexManager = new IndexManager(...);');
|
|
314
|
+
messages.push(' const db = await openDatabase(...);');
|
|
315
|
+
messages.push(' ');
|
|
316
|
+
messages.push(' // Then create the main component');
|
|
317
|
+
messages.push(' const searchEngine = new SearchEngine(embedder, indexManager, db);');
|
|
318
|
+
messages.push(' ```');
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return new Error(messages.join('\n'));
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Create actionable error message for factory creation failures
|
|
325
|
+
*/
|
|
326
|
+
export function createFactoryCreationError(factoryName, originalError, config = {}) {
|
|
327
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
328
|
+
const messages = [];
|
|
329
|
+
messages.push(`❌ ${factoryName} creation failed`);
|
|
330
|
+
messages.push('');
|
|
331
|
+
messages.push(`🔍 Original error: ${originalError}`);
|
|
332
|
+
messages.push('');
|
|
333
|
+
if (cfg.includeTroubleshooting) {
|
|
334
|
+
messages.push('🛠️ Common solutions:');
|
|
335
|
+
messages.push(' 1. Check that all required files exist');
|
|
336
|
+
messages.push(' 2. Verify file paths are correct');
|
|
337
|
+
messages.push(' 3. Ensure you have proper file permissions');
|
|
338
|
+
messages.push(' 4. Check that the model name is valid');
|
|
339
|
+
messages.push(' 5. Verify network connectivity (for model downloads)');
|
|
340
|
+
messages.push('');
|
|
341
|
+
messages.push('🔍 For detailed troubleshooting:');
|
|
342
|
+
messages.push(' 1. Check the original error message above');
|
|
343
|
+
messages.push(' 2. Look for specific error patterns (file not found, network issues, etc.)');
|
|
344
|
+
messages.push(' 3. Try the operation with simpler parameters first');
|
|
345
|
+
}
|
|
346
|
+
return new Error(messages.join('\n'));
|
|
347
|
+
}
|
|
348
|
+
// =============================================================================
|
|
349
|
+
// UTILITY FUNCTIONS
|
|
350
|
+
// =============================================================================
|
|
351
|
+
/**
|
|
352
|
+
* Enhance an existing error with actionable information
|
|
353
|
+
*/
|
|
354
|
+
export function enhanceError(originalError, context, suggestions = [], config = {}) {
|
|
355
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
356
|
+
const messages = [];
|
|
357
|
+
messages.push(`❌ Error in ${context}`);
|
|
358
|
+
messages.push('');
|
|
359
|
+
messages.push(`🔍 ${originalError.message}`);
|
|
360
|
+
if (suggestions.length > 0) {
|
|
361
|
+
messages.push('');
|
|
362
|
+
messages.push('🛠️ Suggestions:');
|
|
363
|
+
suggestions.forEach((suggestion, index) => {
|
|
364
|
+
messages.push(` ${index + 1}. ${suggestion}`);
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
const enhancedError = new Error(messages.join('\n'));
|
|
368
|
+
enhancedError.name = originalError.name;
|
|
369
|
+
enhancedError.stack = originalError.stack;
|
|
370
|
+
return enhancedError;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Create a user-friendly error message with context
|
|
374
|
+
*/
|
|
375
|
+
export function createContextualError(message, context, suggestions = [], examples = [], config = {}) {
|
|
376
|
+
const cfg = { ...DEFAULT_CONFIG, ...config };
|
|
377
|
+
const messages = [];
|
|
378
|
+
messages.push(`❌ ${message}`);
|
|
379
|
+
messages.push('');
|
|
380
|
+
messages.push(`🔍 Context: ${context}`);
|
|
381
|
+
if (suggestions.length > 0) {
|
|
382
|
+
messages.push('');
|
|
383
|
+
messages.push('🛠️ How to fix this:');
|
|
384
|
+
suggestions.forEach((suggestion, index) => {
|
|
385
|
+
messages.push(` ${index + 1}. ${suggestion}`);
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
if (cfg.includeExamples && examples.length > 0) {
|
|
389
|
+
messages.push('');
|
|
390
|
+
messages.push('💡 Examples:');
|
|
391
|
+
examples.forEach(example => {
|
|
392
|
+
messages.push(` ${example}`);
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
return new Error(messages.join('\n'));
|
|
396
|
+
}
|
|
397
|
+
//# sourceMappingURL=actionable-error-messages.js.map
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CORE MODULE — Shared between text-only (rag-lite-ts) and future multimodal (rag-lite-mm)
|
|
3
|
+
* Model-agnostic. No transformer or modality-specific logic.
|
|
4
|
+
*
|
|
5
|
+
* This module provides adapter utilities to convert existing implementations to the new
|
|
6
|
+
* dependency injection interfaces. These adapters enable:
|
|
7
|
+
*
|
|
8
|
+
* 1. Integration with existing embedding and reranking implementations
|
|
9
|
+
* 2. Support for dependency injection patterns
|
|
10
|
+
* 3. Wrapping of third-party libraries to match core interfaces
|
|
11
|
+
* 4. Testing with mock implementations
|
|
12
|
+
*
|
|
13
|
+
* ADAPTER PATTERN USAGE:
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // Convert embedder to dependency injection
|
|
16
|
+
* const embedder = new TextEmbeddingEngine();
|
|
17
|
+
* const embedFn = EmbeddingAdapter.fromEmbedder(embedder);
|
|
18
|
+
* const search = new SearchEngine(embedFn, indexManager, db);
|
|
19
|
+
*
|
|
20
|
+
* // Convert reranker to dependency injection
|
|
21
|
+
* const reranker = new CrossEncoderReranker();
|
|
22
|
+
* const rerankFn = RerankingAdapter.fromReranker(reranker);
|
|
23
|
+
* const search = new SearchEngine(embedFn, indexManager, db, rerankFn);
|
|
24
|
+
*
|
|
25
|
+
* // Create full interfaces for advanced usage
|
|
26
|
+
* const embeddingInterface = EmbeddingAdapter.createInterface(
|
|
27
|
+
* embedder,
|
|
28
|
+
* ['text'],
|
|
29
|
+
* 384,
|
|
30
|
+
* 'all-MiniLM-L6-v2'
|
|
31
|
+
* );
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
import type { EmbedFunction, RerankFunction, EmbeddingQueryInterface, RerankingInterface } from './interfaces.js';
|
|
35
|
+
/**
|
|
36
|
+
* Adapter to convert embedding engines to core EmbedFunction
|
|
37
|
+
* Enables integration while supporting dependency injection
|
|
38
|
+
*
|
|
39
|
+
* USAGE EXAMPLES:
|
|
40
|
+
* ```typescript
|
|
41
|
+
* // Basic adapter usage
|
|
42
|
+
* const embedder = new TextEmbeddingEngine();
|
|
43
|
+
* const embedFn = EmbeddingAdapter.fromEmbedder(embedder);
|
|
44
|
+
*
|
|
45
|
+
* // Use in SearchEngine
|
|
46
|
+
* const search = new SearchEngine(embedFn, indexManager, db);
|
|
47
|
+
*
|
|
48
|
+
* // Create full interface for advanced features
|
|
49
|
+
* const embeddingInterface = EmbeddingAdapter.createInterface(
|
|
50
|
+
* embedder,
|
|
51
|
+
* ['text', 'code'], // Supported content types
|
|
52
|
+
* 384, // Embedding dimensions
|
|
53
|
+
* 'all-MiniLM-L6-v2' // Model identifier
|
|
54
|
+
* );
|
|
55
|
+
*
|
|
56
|
+
* // Use interface for validation and metadata
|
|
57
|
+
* if (embeddingInterface.supportedContentTypes.includes('text')) {
|
|
58
|
+
* const result = await embeddingInterface.embedQuery('test query');
|
|
59
|
+
* }
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare class EmbeddingAdapter {
|
|
63
|
+
/**
|
|
64
|
+
* Convert an embedding engine to an EmbedFunction
|
|
65
|
+
* @param embedder - Embedder with embedSingle method
|
|
66
|
+
* @returns EmbedFunction compatible with core dependency injection
|
|
67
|
+
*/
|
|
68
|
+
static fromEmbedder(embedder: any): EmbedFunction;
|
|
69
|
+
/**
|
|
70
|
+
* Create an EmbeddingQueryInterface from an embedder
|
|
71
|
+
* @param embedder - Embedder with embedSingle method
|
|
72
|
+
* @param supportedContentTypes - Content types this embedder supports
|
|
73
|
+
* @param embeddingDimensions - Dimensions of embedding vectors
|
|
74
|
+
* @param modelIdentifier - Model name or identifier
|
|
75
|
+
* @returns Full EmbeddingQueryInterface with metadata
|
|
76
|
+
*/
|
|
77
|
+
static createInterface(embedder: any, supportedContentTypes?: string[], embeddingDimensions?: number, modelIdentifier?: string): EmbeddingQueryInterface;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Adapter to convert rerankers to core RerankFunction
|
|
81
|
+
* Enables integration while supporting dependency injection
|
|
82
|
+
*/
|
|
83
|
+
export declare class RerankingAdapter {
|
|
84
|
+
/**
|
|
85
|
+
* Convert a reranker to a RerankFunction
|
|
86
|
+
*/
|
|
87
|
+
static fromReranker(reranker: any): RerankFunction;
|
|
88
|
+
/**
|
|
89
|
+
* Create a RerankingInterface from a reranker
|
|
90
|
+
*/
|
|
91
|
+
static createInterface(reranker: any, supportedContentTypes?: string[], modelIdentifier?: string): RerankingInterface;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=adapters.d.ts.map
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CORE MODULE — Shared between text-only (rag-lite-ts) and future multimodal (rag-lite-mm)
|
|
3
|
+
* Model-agnostic. No transformer or modality-specific logic.
|
|
4
|
+
*
|
|
5
|
+
* This module provides adapter utilities to convert existing implementations to the new
|
|
6
|
+
* dependency injection interfaces. These adapters enable:
|
|
7
|
+
*
|
|
8
|
+
* 1. Integration with existing embedding and reranking implementations
|
|
9
|
+
* 2. Support for dependency injection patterns
|
|
10
|
+
* 3. Wrapping of third-party libraries to match core interfaces
|
|
11
|
+
* 4. Testing with mock implementations
|
|
12
|
+
*
|
|
13
|
+
* ADAPTER PATTERN USAGE:
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // Convert embedder to dependency injection
|
|
16
|
+
* const embedder = new TextEmbeddingEngine();
|
|
17
|
+
* const embedFn = EmbeddingAdapter.fromEmbedder(embedder);
|
|
18
|
+
* const search = new SearchEngine(embedFn, indexManager, db);
|
|
19
|
+
*
|
|
20
|
+
* // Convert reranker to dependency injection
|
|
21
|
+
* const reranker = new CrossEncoderReranker();
|
|
22
|
+
* const rerankFn = RerankingAdapter.fromReranker(reranker);
|
|
23
|
+
* const search = new SearchEngine(embedFn, indexManager, db, rerankFn);
|
|
24
|
+
*
|
|
25
|
+
* // Create full interfaces for advanced usage
|
|
26
|
+
* const embeddingInterface = EmbeddingAdapter.createInterface(
|
|
27
|
+
* embedder,
|
|
28
|
+
* ['text'],
|
|
29
|
+
* 384,
|
|
30
|
+
* 'all-MiniLM-L6-v2'
|
|
31
|
+
* );
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* Adapter to convert embedding engines to core EmbedFunction
|
|
36
|
+
* Enables integration while supporting dependency injection
|
|
37
|
+
*
|
|
38
|
+
* USAGE EXAMPLES:
|
|
39
|
+
* ```typescript
|
|
40
|
+
* // Basic adapter usage
|
|
41
|
+
* const embedder = new TextEmbeddingEngine();
|
|
42
|
+
* const embedFn = EmbeddingAdapter.fromEmbedder(embedder);
|
|
43
|
+
*
|
|
44
|
+
* // Use in SearchEngine
|
|
45
|
+
* const search = new SearchEngine(embedFn, indexManager, db);
|
|
46
|
+
*
|
|
47
|
+
* // Create full interface for advanced features
|
|
48
|
+
* const embeddingInterface = EmbeddingAdapter.createInterface(
|
|
49
|
+
* embedder,
|
|
50
|
+
* ['text', 'code'], // Supported content types
|
|
51
|
+
* 384, // Embedding dimensions
|
|
52
|
+
* 'all-MiniLM-L6-v2' // Model identifier
|
|
53
|
+
* );
|
|
54
|
+
*
|
|
55
|
+
* // Use interface for validation and metadata
|
|
56
|
+
* if (embeddingInterface.supportedContentTypes.includes('text')) {
|
|
57
|
+
* const result = await embeddingInterface.embedQuery('test query');
|
|
58
|
+
* }
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export class EmbeddingAdapter {
|
|
62
|
+
/**
|
|
63
|
+
* Convert an embedding engine to an EmbedFunction
|
|
64
|
+
* @param embedder - Embedder with embedSingle method
|
|
65
|
+
* @returns EmbedFunction compatible with core dependency injection
|
|
66
|
+
*/
|
|
67
|
+
static fromEmbedder(embedder) {
|
|
68
|
+
return async (query, contentType) => {
|
|
69
|
+
// Call the embedSingle method
|
|
70
|
+
return await embedder.embedSingle(query);
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Create an EmbeddingQueryInterface from an embedder
|
|
75
|
+
* @param embedder - Embedder with embedSingle method
|
|
76
|
+
* @param supportedContentTypes - Content types this embedder supports
|
|
77
|
+
* @param embeddingDimensions - Dimensions of embedding vectors
|
|
78
|
+
* @param modelIdentifier - Model name or identifier
|
|
79
|
+
* @returns Full EmbeddingQueryInterface with metadata
|
|
80
|
+
*/
|
|
81
|
+
static createInterface(embedder, supportedContentTypes = ['text'], embeddingDimensions = 384, modelIdentifier = 'unknown') {
|
|
82
|
+
return {
|
|
83
|
+
embedQuery: this.fromEmbedder(embedder),
|
|
84
|
+
supportedContentTypes,
|
|
85
|
+
embeddingDimensions,
|
|
86
|
+
modelIdentifier
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Adapter to convert rerankers to core RerankFunction
|
|
92
|
+
* Enables integration while supporting dependency injection
|
|
93
|
+
*/
|
|
94
|
+
export class RerankingAdapter {
|
|
95
|
+
/**
|
|
96
|
+
* Convert a reranker to a RerankFunction
|
|
97
|
+
*/
|
|
98
|
+
static fromReranker(reranker) {
|
|
99
|
+
return async (query, results, contentType) => {
|
|
100
|
+
// Convert core SearchResult format to reranker format
|
|
101
|
+
const rerankResults = results.map(result => ({
|
|
102
|
+
text: result.content,
|
|
103
|
+
score: result.score,
|
|
104
|
+
document: {
|
|
105
|
+
id: result.document.id,
|
|
106
|
+
source: result.document.source,
|
|
107
|
+
title: result.document.title
|
|
108
|
+
}
|
|
109
|
+
}));
|
|
110
|
+
// Call rerank method
|
|
111
|
+
const reranked = await reranker.rerank(query, rerankResults);
|
|
112
|
+
// Convert back to core SearchResult format
|
|
113
|
+
return reranked.map((result, index) => ({
|
|
114
|
+
content: result.text,
|
|
115
|
+
score: result.score,
|
|
116
|
+
contentType: results[index]?.contentType || 'text',
|
|
117
|
+
document: {
|
|
118
|
+
id: result.document.id,
|
|
119
|
+
source: result.document.source,
|
|
120
|
+
title: result.document.title,
|
|
121
|
+
contentType: results[index]?.document.contentType || 'text'
|
|
122
|
+
},
|
|
123
|
+
metadata: results[index]?.metadata
|
|
124
|
+
}));
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Create a RerankingInterface from a reranker
|
|
129
|
+
*/
|
|
130
|
+
static createInterface(reranker, supportedContentTypes = ['text'], modelIdentifier = 'unknown') {
|
|
131
|
+
return {
|
|
132
|
+
rerankResults: this.fromReranker(reranker),
|
|
133
|
+
supportedContentTypes,
|
|
134
|
+
isEnabled: reranker && reranker.isLoaded && reranker.isLoaded(),
|
|
135
|
+
modelIdentifier
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=adapters.js.map
|