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,344 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CORE MODULE — Polymorphic Search Factory for Chameleon Architecture
|
|
3
|
+
*
|
|
4
|
+
* Automatically detects mode from database and creates the appropriate search engine.
|
|
5
|
+
* No fallback mechanisms - each mode uses its optimal implementation reliably.
|
|
6
|
+
*
|
|
7
|
+
* Mode Behavior:
|
|
8
|
+
* - Text Mode: Uses sentence-transformer models for fast text-only search
|
|
9
|
+
* - Multimodal Mode: Uses CLIP models for cross-modal text/image search
|
|
10
|
+
*
|
|
11
|
+
* The mode is determined during ingestion and stored in the database, then
|
|
12
|
+
* automatically detected during search - no manual configuration needed.
|
|
13
|
+
*/
|
|
14
|
+
// Ensure DOM polyfills are set up before any transformers.js usage
|
|
15
|
+
import '../dom-polyfills.js';
|
|
16
|
+
import { SearchEngine } from '../core/search.js';
|
|
17
|
+
import { ModeDetectionService } from '../core/mode-detection-service.js';
|
|
18
|
+
import { IndexManager } from '../index-manager.js';
|
|
19
|
+
import { DatabaseConnectionManager } from '../core/database-connection-manager.js';
|
|
20
|
+
import { createEmbedder } from '../core/embedder-factory.js';
|
|
21
|
+
import { ContentResolver } from '../core/content-resolver.js';
|
|
22
|
+
import { validateModeModelCompatibilityOrThrow } from '../core/mode-model-validator.js';
|
|
23
|
+
import { createMissingFileError } from '../core/actionable-error-messages.js';
|
|
24
|
+
import { handleError, ErrorCategory, ErrorSeverity, createError } from '../core/error-handler.js';
|
|
25
|
+
import { existsSync } from 'fs';
|
|
26
|
+
// =============================================================================
|
|
27
|
+
// POLYMORPHIC SEARCH FACTORY
|
|
28
|
+
// =============================================================================
|
|
29
|
+
/**
|
|
30
|
+
* Factory for creating search engines with automatic mode detection
|
|
31
|
+
*
|
|
32
|
+
* Detects the mode from database configuration and creates the appropriate
|
|
33
|
+
* search engine without fallback mechanisms. Each mode uses its optimal
|
|
34
|
+
* implementation for predictable, reliable behavior.
|
|
35
|
+
*
|
|
36
|
+
* Mode Selection (configured during ingestion):
|
|
37
|
+
* - Text Mode: Optimized for text-only content
|
|
38
|
+
* - Uses sentence-transformer models
|
|
39
|
+
* - Fast text similarity search
|
|
40
|
+
* - Images converted to text descriptions
|
|
41
|
+
*
|
|
42
|
+
* - Multimodal Mode: Optimized for mixed text/image content
|
|
43
|
+
* - Uses CLIP models
|
|
44
|
+
* - Unified embedding space for text and images
|
|
45
|
+
* - True cross-modal search capabilities
|
|
46
|
+
* - Text queries find images, image queries find text
|
|
47
|
+
*/
|
|
48
|
+
export class SearchFactory {
|
|
49
|
+
/**
|
|
50
|
+
* Create a SearchEngine with automatic mode detection and configuration
|
|
51
|
+
*
|
|
52
|
+
* Automatically detects the mode from database configuration and creates
|
|
53
|
+
* the appropriate search engine. No fallback mechanisms - each mode works
|
|
54
|
+
* reliably with its optimal implementation.
|
|
55
|
+
*
|
|
56
|
+
* Process:
|
|
57
|
+
* 1. Detects mode from database (text or multimodal)
|
|
58
|
+
* 2. Validates mode-model compatibility
|
|
59
|
+
* 3. Creates appropriate embedder (sentence-transformer or CLIP)
|
|
60
|
+
* 4. Creates appropriate reranker based on mode and strategy
|
|
61
|
+
* 5. Initializes SearchEngine with proper dependency injection
|
|
62
|
+
*
|
|
63
|
+
* Mode Behavior:
|
|
64
|
+
* - Text Mode: Fast text-only search with sentence-transformers
|
|
65
|
+
* - Optimized for text similarity
|
|
66
|
+
* - Optional cross-encoder reranking
|
|
67
|
+
*
|
|
68
|
+
* - Multimodal Mode: Cross-modal search with CLIP
|
|
69
|
+
* - Unified embedding space for text and images
|
|
70
|
+
* - Text queries find images, image queries find text
|
|
71
|
+
* - Optional text-derived or metadata reranking
|
|
72
|
+
*
|
|
73
|
+
* @param indexPath - Path to the vector index file (must exist)
|
|
74
|
+
* @param dbPath - Path to the SQLite database file (must exist)
|
|
75
|
+
* @returns Promise resolving to configured SearchEngine
|
|
76
|
+
* @throws {Error} If files don't exist, mode-model incompatible, or initialization fails
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* // Automatic mode detection and engine creation
|
|
81
|
+
* const search = await SearchFactory.create('./index.bin', './db.sqlite');
|
|
82
|
+
*
|
|
83
|
+
* // Search works based on detected mode:
|
|
84
|
+
* // Text mode: fast text similarity search
|
|
85
|
+
* const textResults = await search.search('machine learning');
|
|
86
|
+
*
|
|
87
|
+
* // Multimodal mode: cross-modal search
|
|
88
|
+
* const imageResults = await search.search('red sports car'); // Finds images
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
static async create(indexPath, dbPath) {
|
|
92
|
+
try {
|
|
93
|
+
console.log('🎭 SearchFactory: Initializing search engine with mode detection...');
|
|
94
|
+
// Step 1: Validate input paths
|
|
95
|
+
if (!indexPath || !dbPath) {
|
|
96
|
+
throw createError.validation('Both indexPath and dbPath are required');
|
|
97
|
+
}
|
|
98
|
+
// Step 2: Validate that required files exist
|
|
99
|
+
this.validateRequiredFiles(indexPath, dbPath);
|
|
100
|
+
// Step 3: Get shared database connection
|
|
101
|
+
const db = await DatabaseConnectionManager.getConnection(dbPath);
|
|
102
|
+
// Step 4: Detect mode from database using shared connection
|
|
103
|
+
const modeService = new ModeDetectionService(dbPath);
|
|
104
|
+
const systemInfo = await modeService.detectMode(db);
|
|
105
|
+
console.log(`🎯 Detected mode: ${systemInfo.mode} (model: ${systemInfo.modelName})`);
|
|
106
|
+
// Step 4.5: Validate mode-model compatibility at creation time
|
|
107
|
+
console.log('🔍 Validating mode-model compatibility...');
|
|
108
|
+
validateModeModelCompatibilityOrThrow(systemInfo.mode, systemInfo.modelName);
|
|
109
|
+
console.log('✓ Mode-model compatibility validated');
|
|
110
|
+
// Step 5: Create search engine based on detected mode
|
|
111
|
+
switch (systemInfo.mode) {
|
|
112
|
+
case 'text':
|
|
113
|
+
return await this.createTextSearchEngine(indexPath, dbPath, systemInfo, db);
|
|
114
|
+
case 'multimodal':
|
|
115
|
+
return await this.createMultimodalSearchEngine(indexPath, dbPath, systemInfo, db);
|
|
116
|
+
default:
|
|
117
|
+
throw createError.validation(`Unsupported mode: ${systemInfo.mode}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
const enhancedError = this.enhanceCreationError(error, indexPath, dbPath);
|
|
122
|
+
handleError(enhancedError, 'Polymorphic Search Factory', {
|
|
123
|
+
severity: ErrorSeverity.ERROR,
|
|
124
|
+
category: ErrorCategory.GENERAL
|
|
125
|
+
});
|
|
126
|
+
throw enhancedError;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// =============================================================================
|
|
130
|
+
// MODE-SPECIFIC ENGINE CREATION
|
|
131
|
+
// =============================================================================
|
|
132
|
+
/**
|
|
133
|
+
* Create a search engine configured for text mode
|
|
134
|
+
* @private
|
|
135
|
+
*/
|
|
136
|
+
static async createTextSearchEngine(indexPath, dbPath, systemInfo, db) {
|
|
137
|
+
console.log('📝 Creating text search engine...');
|
|
138
|
+
try {
|
|
139
|
+
// Step 1: Create text embedder
|
|
140
|
+
const embedder = await createEmbedder(systemInfo.modelName);
|
|
141
|
+
console.log(`✓ Text embedder created: ${systemInfo.modelName} (${systemInfo.modelDimensions}D)`);
|
|
142
|
+
// Step 2: Create reranker based on strategy
|
|
143
|
+
const rerankFn = await this.createTextReranker(systemInfo.rerankingStrategy);
|
|
144
|
+
if (rerankFn) {
|
|
145
|
+
console.log(`✓ Text reranker created: ${systemInfo.rerankingStrategy}`);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
console.log('ℹ️ Reranking disabled');
|
|
149
|
+
}
|
|
150
|
+
// Step 3: Initialize core components (using shared connection)
|
|
151
|
+
const indexManager = new IndexManager(indexPath, dbPath, systemInfo.modelDimensions, systemInfo.modelName);
|
|
152
|
+
await indexManager.initialize();
|
|
153
|
+
// Step 4: Create ContentResolver for unified content system
|
|
154
|
+
const contentResolver = new ContentResolver(db);
|
|
155
|
+
// Step 5: Create search engine with dependency injection
|
|
156
|
+
const searchEngine = new SearchEngine(embedder.embedText.bind(embedder), indexManager, db, rerankFn, contentResolver);
|
|
157
|
+
console.log('✅ Text search engine initialized successfully');
|
|
158
|
+
return searchEngine;
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
throw createError.model(`Failed to create text search engine: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Create a search engine configured for multimodal mode
|
|
166
|
+
* @private
|
|
167
|
+
*/
|
|
168
|
+
static async createMultimodalSearchEngine(indexPath, dbPath, systemInfo, db) {
|
|
169
|
+
console.log('🖼️ Creating multimodal search engine...');
|
|
170
|
+
try {
|
|
171
|
+
// Step 1: Create multimodal embedder (CLIP)
|
|
172
|
+
const embedder = await createEmbedder(systemInfo.modelName);
|
|
173
|
+
console.log(`✓ Multimodal embedder created: ${systemInfo.modelName} (${systemInfo.modelDimensions}D)`);
|
|
174
|
+
// Step 2: Create multimodal reranker based on strategy
|
|
175
|
+
const rerankFn = await this.createMultimodalReranker(systemInfo.rerankingStrategy);
|
|
176
|
+
if (rerankFn) {
|
|
177
|
+
console.log(`✓ Multimodal reranker created: ${systemInfo.rerankingStrategy}`);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
console.log('ℹ️ Reranking disabled');
|
|
181
|
+
}
|
|
182
|
+
// Step 3: Initialize core components (using shared connection)
|
|
183
|
+
const indexManager = new IndexManager(indexPath, dbPath, systemInfo.modelDimensions, systemInfo.modelName);
|
|
184
|
+
await indexManager.initialize();
|
|
185
|
+
// Step 4: Create ContentResolver for unified content system
|
|
186
|
+
const contentResolver = new ContentResolver(db);
|
|
187
|
+
// Step 5: Create search engine with dependency injection
|
|
188
|
+
const searchEngine = new SearchEngine(embedder.embedText.bind(embedder), indexManager, db, rerankFn, contentResolver);
|
|
189
|
+
console.log('✅ Multimodal search engine initialized successfully');
|
|
190
|
+
return searchEngine;
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
throw createError.model(`Failed to create multimodal search engine: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// =============================================================================
|
|
197
|
+
// RERANKER CREATION FUNCTIONS
|
|
198
|
+
// =============================================================================
|
|
199
|
+
/**
|
|
200
|
+
* Create reranker for text mode using lazy loading
|
|
201
|
+
* @private
|
|
202
|
+
*/
|
|
203
|
+
static async createTextReranker(strategy) {
|
|
204
|
+
try {
|
|
205
|
+
if (strategy === 'disabled') {
|
|
206
|
+
return undefined;
|
|
207
|
+
}
|
|
208
|
+
// Use lazy loading to avoid loading reranking dependencies unless needed
|
|
209
|
+
const { LazyRerankerLoader } = await import('../core/lazy-dependency-loader.js');
|
|
210
|
+
// For text mode, use cross-encoder reranking
|
|
211
|
+
if (strategy === 'cross-encoder') {
|
|
212
|
+
return LazyRerankerLoader.loadTextReranker();
|
|
213
|
+
}
|
|
214
|
+
// Fail clearly for unknown strategies in text mode
|
|
215
|
+
throw createError.validation(`Unknown text reranking strategy '${strategy}'. Supported strategies: cross-encoder, disabled`);
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
throw createError.model(`Failed to create text reranker with strategy '${strategy}': ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Create reranker for multimodal mode using lazy loading
|
|
223
|
+
* @private
|
|
224
|
+
*/
|
|
225
|
+
static async createMultimodalReranker(strategy) {
|
|
226
|
+
try {
|
|
227
|
+
if (strategy === 'disabled') {
|
|
228
|
+
return undefined;
|
|
229
|
+
}
|
|
230
|
+
// Use lazy loading to avoid loading multimodal dependencies unless needed
|
|
231
|
+
const { LazyDependencyManager } = await import('../core/lazy-dependency-loader.js');
|
|
232
|
+
// Load the appropriate reranker based on strategy
|
|
233
|
+
return LazyDependencyManager.loadReranker(strategy);
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
throw createError.model(`Failed to create multimodal reranker with strategy '${strategy}': ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// =============================================================================
|
|
240
|
+
// VALIDATION AND ERROR HANDLING
|
|
241
|
+
// =============================================================================
|
|
242
|
+
/**
|
|
243
|
+
* Validate that required files exist
|
|
244
|
+
* @private
|
|
245
|
+
*/
|
|
246
|
+
static validateRequiredFiles(indexPath, dbPath) {
|
|
247
|
+
if (!existsSync(indexPath)) {
|
|
248
|
+
throw createMissingFileError(indexPath, 'index', {
|
|
249
|
+
operationContext: 'SearchFactory.create'
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
if (!existsSync(dbPath)) {
|
|
253
|
+
throw createMissingFileError(dbPath, 'database', {
|
|
254
|
+
operationContext: 'SearchFactory.create'
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Enhance creation errors with helpful context
|
|
260
|
+
* @private
|
|
261
|
+
*/
|
|
262
|
+
static enhanceCreationError(error, indexPath, dbPath) {
|
|
263
|
+
if (error instanceof Error) {
|
|
264
|
+
// Add context about the operation that failed
|
|
265
|
+
let enhancedMessage = `SearchFactory.create failed: ${error.message}`;
|
|
266
|
+
// Provide specific guidance based on error type
|
|
267
|
+
if (error.message.includes('ENOENT')) {
|
|
268
|
+
enhancedMessage += '\n\n💡 Make sure both the vector index and database files exist.';
|
|
269
|
+
enhancedMessage += '\n Run ingestion first: raglite ingest <directory>';
|
|
270
|
+
}
|
|
271
|
+
else if (error.message.includes('SQLITE_CORRUPT')) {
|
|
272
|
+
enhancedMessage += '\n\n💡 Database appears to be corrupted.';
|
|
273
|
+
enhancedMessage += '\n Try deleting the database and re-running ingestion.';
|
|
274
|
+
}
|
|
275
|
+
else if (error.message.includes('Model') && error.message.includes('not found')) {
|
|
276
|
+
enhancedMessage += '\n\n💡 The model specified in the database is not supported.';
|
|
277
|
+
enhancedMessage += '\n Check the model name or re-run ingestion with a supported model.';
|
|
278
|
+
}
|
|
279
|
+
else if (error.message.includes('dimensions')) {
|
|
280
|
+
enhancedMessage += '\n\n💡 Vector dimension mismatch detected.';
|
|
281
|
+
enhancedMessage += '\n The index was created with a different model. Rebuild the index:';
|
|
282
|
+
enhancedMessage += '\n raglite ingest <directory> --force-rebuild';
|
|
283
|
+
}
|
|
284
|
+
return new Error(enhancedMessage);
|
|
285
|
+
}
|
|
286
|
+
return new Error(`SearchFactory.create failed: Unknown error`);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// =============================================================================
|
|
290
|
+
// CONVENIENCE FUNCTIONS
|
|
291
|
+
// =============================================================================
|
|
292
|
+
/**
|
|
293
|
+
* Quick function to create a search engine with automatic mode detection
|
|
294
|
+
* Convenience wrapper around SearchFactory.create
|
|
295
|
+
*
|
|
296
|
+
* @param indexPath - Path to the vector index file
|
|
297
|
+
* @param dbPath - Path to the database file
|
|
298
|
+
* @returns Promise resolving to configured SearchEngine
|
|
299
|
+
*
|
|
300
|
+
* @example
|
|
301
|
+
* ```typescript
|
|
302
|
+
* const search = await createSearchEngine('./index.bin', './db.sqlite');
|
|
303
|
+
* const results = await search.search('query');
|
|
304
|
+
* ```
|
|
305
|
+
*/
|
|
306
|
+
export async function createSearchEngine(indexPath, dbPath) {
|
|
307
|
+
return SearchFactory.create(indexPath, dbPath);
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Check what mode a database is configured for
|
|
311
|
+
* Convenience function for inspecting database configuration
|
|
312
|
+
*
|
|
313
|
+
* @param dbPath - Path to the database file
|
|
314
|
+
* @returns Promise resolving to the detected mode
|
|
315
|
+
*
|
|
316
|
+
* @example
|
|
317
|
+
* ```typescript
|
|
318
|
+
* const mode = await detectSearchEngineMode('./db.sqlite');
|
|
319
|
+
* console.log(`Database is configured for ${mode} mode`);
|
|
320
|
+
* ```
|
|
321
|
+
*/
|
|
322
|
+
export async function detectSearchEngineMode(dbPath) {
|
|
323
|
+
const modeService = new ModeDetectionService(dbPath);
|
|
324
|
+
const systemInfo = await modeService.detectMode();
|
|
325
|
+
return systemInfo.mode;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Get system information for a database
|
|
329
|
+
* Convenience function for inspecting complete database configuration
|
|
330
|
+
*
|
|
331
|
+
* @param dbPath - Path to the database file
|
|
332
|
+
* @returns Promise resolving to complete SystemInfo
|
|
333
|
+
*
|
|
334
|
+
* @example
|
|
335
|
+
* ```typescript
|
|
336
|
+
* const info = await getSearchEngineInfo('./db.sqlite');
|
|
337
|
+
* console.log(`Mode: ${info.mode}, Model: ${info.modelName}, Dimensions: ${info.modelDimensions}`);
|
|
338
|
+
* ```
|
|
339
|
+
*/
|
|
340
|
+
export async function getSearchEngineInfo(dbPath) {
|
|
341
|
+
const modeService = new ModeDetectionService(dbPath);
|
|
342
|
+
return modeService.detectMode();
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=search-factory.js.map
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { DocumentPathManager } from './core/path-manager.js';
|
|
2
|
+
import type { Document } from './core/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Options for file discovery and processing
|
|
5
|
+
*/
|
|
6
|
+
export interface FileProcessorOptions {
|
|
7
|
+
/** Whether to process files recursively in subdirectories */
|
|
8
|
+
recursive?: boolean;
|
|
9
|
+
/** Maximum file size in bytes (default: 10MB) */
|
|
10
|
+
maxFileSize?: number;
|
|
11
|
+
/** Processing mode to filter compatible files */
|
|
12
|
+
mode?: 'text' | 'multimodal';
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Default options for file processing
|
|
16
|
+
*/
|
|
17
|
+
export declare const DEFAULT_FILE_PROCESSOR_OPTIONS: FileProcessorOptions;
|
|
18
|
+
/**
|
|
19
|
+
* Default options for image-to-text processing
|
|
20
|
+
*/
|
|
21
|
+
export declare const DEFAULT_IMAGE_TO_TEXT_OPTIONS: ImageToTextOptions;
|
|
22
|
+
/**
|
|
23
|
+
* Result of file discovery operation
|
|
24
|
+
*/
|
|
25
|
+
export interface FileDiscoveryResult {
|
|
26
|
+
/** Successfully discovered files */
|
|
27
|
+
files: string[];
|
|
28
|
+
/** Files that were skipped due to errors */
|
|
29
|
+
skipped: Array<{
|
|
30
|
+
path: string;
|
|
31
|
+
reason: string;
|
|
32
|
+
}>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Result of document processing operation
|
|
36
|
+
*/
|
|
37
|
+
export interface DocumentProcessingResult {
|
|
38
|
+
/** Successfully processed documents */
|
|
39
|
+
documents: Document[];
|
|
40
|
+
/** Files that failed to process */
|
|
41
|
+
errors: Array<{
|
|
42
|
+
path: string;
|
|
43
|
+
error: string;
|
|
44
|
+
}>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Image description generation result
|
|
48
|
+
*/
|
|
49
|
+
export interface ImageDescriptionResult {
|
|
50
|
+
/** Generated text description */
|
|
51
|
+
description: string;
|
|
52
|
+
/** Confidence score (0-1) */
|
|
53
|
+
confidence?: number;
|
|
54
|
+
/** Model used for generation */
|
|
55
|
+
model: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Options for image-to-text processing
|
|
59
|
+
*/
|
|
60
|
+
export interface ImageToTextOptions {
|
|
61
|
+
/** Model to use for image captioning */
|
|
62
|
+
model?: string;
|
|
63
|
+
/** Maximum description length */
|
|
64
|
+
maxLength?: number;
|
|
65
|
+
/** Batch size for processing multiple images */
|
|
66
|
+
batchSize?: number;
|
|
67
|
+
/** Whether to include confidence scores */
|
|
68
|
+
includeConfidence?: boolean;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Image metadata extracted from image files
|
|
72
|
+
*/
|
|
73
|
+
export interface ImageMetadata {
|
|
74
|
+
/** Original file path */
|
|
75
|
+
originalPath: string;
|
|
76
|
+
/** Image dimensions */
|
|
77
|
+
dimensions: {
|
|
78
|
+
width: number;
|
|
79
|
+
height: number;
|
|
80
|
+
};
|
|
81
|
+
/** File size in bytes */
|
|
82
|
+
fileSize: number;
|
|
83
|
+
/** Image format (jpeg, png, gif, webp, bmp) */
|
|
84
|
+
format: string;
|
|
85
|
+
/** File creation date */
|
|
86
|
+
createdAt?: Date;
|
|
87
|
+
/** Generated text description (if available) */
|
|
88
|
+
description?: string;
|
|
89
|
+
/** Model used for description generation */
|
|
90
|
+
descriptionModel?: string;
|
|
91
|
+
/** Confidence score for description */
|
|
92
|
+
descriptionConfidence?: number;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Discover files for ingestion
|
|
96
|
+
* Supports both single files and directories (with optional recursion)
|
|
97
|
+
*/
|
|
98
|
+
export declare function discoverFiles(path: string, options?: FileProcessorOptions): Promise<FileDiscoveryResult>;
|
|
99
|
+
/**
|
|
100
|
+
* Process multiple files into Documents
|
|
101
|
+
* Handles errors gracefully by skipping problematic files
|
|
102
|
+
*/
|
|
103
|
+
export declare function processFiles(filePaths: string[], pathManager: DocumentPathManager, imageToTextOptions?: ImageToTextOptions): Promise<DocumentProcessingResult>;
|
|
104
|
+
/**
|
|
105
|
+
* Complete file discovery and processing pipeline
|
|
106
|
+
* Discovers files and processes them into Documents
|
|
107
|
+
*/
|
|
108
|
+
export declare function discoverAndProcessFiles(path: string, options?: FileProcessorOptions, pathManager?: DocumentPathManager, imageToTextOptions?: ImageToTextOptions): Promise<{
|
|
109
|
+
documents: Document[];
|
|
110
|
+
discoveryResult: FileDiscoveryResult;
|
|
111
|
+
processingResult: DocumentProcessingResult;
|
|
112
|
+
}>;
|
|
113
|
+
/**
|
|
114
|
+
* Clean up image processing resources
|
|
115
|
+
* Call this when shutting down the application to free memory
|
|
116
|
+
*/
|
|
117
|
+
export declare function cleanupImageProcessingResources(): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* Clean up image-to-text pipeline resources (legacy function for backward compatibility)
|
|
120
|
+
* @deprecated Use cleanupImageProcessingResources() instead
|
|
121
|
+
*/
|
|
122
|
+
export declare function cleanupImageToTextPipeline(): Promise<void>;
|
|
123
|
+
/**
|
|
124
|
+
* Generate description for a single image (exported for external use)
|
|
125
|
+
*/
|
|
126
|
+
export declare function generateImageDescriptionForFile(imagePath: string, options?: ImageToTextOptions): Promise<ImageDescriptionResult>;
|
|
127
|
+
/**
|
|
128
|
+
* Generate descriptions for multiple images (exported for external use)
|
|
129
|
+
*/
|
|
130
|
+
export declare function generateImageDescriptionsForFiles(imagePaths: string[], options?: ImageToTextOptions): Promise<Array<{
|
|
131
|
+
path: string;
|
|
132
|
+
result?: ImageDescriptionResult;
|
|
133
|
+
error?: string;
|
|
134
|
+
}>>;
|
|
135
|
+
/**
|
|
136
|
+
* Extract metadata from a single image file (exported for external use)
|
|
137
|
+
*/
|
|
138
|
+
export declare function extractImageMetadataForFile(imagePath: string): Promise<ImageMetadata>;
|
|
139
|
+
/**
|
|
140
|
+
* Extract metadata from multiple image files (exported for external use)
|
|
141
|
+
*/
|
|
142
|
+
export declare function extractImageMetadataForFiles(imagePaths: string[]): Promise<Array<{
|
|
143
|
+
path: string;
|
|
144
|
+
metadata?: ImageMetadata;
|
|
145
|
+
error?: string;
|
|
146
|
+
}>>;
|
|
147
|
+
//# sourceMappingURL=file-processor.d.ts.map
|