ocr-provenance-mcp 1.0.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.
Potentially problematic release.
This version of ocr-provenance-mcp might be problematic. Click here for more details.
- package/.env.example +55 -0
- package/LICENSE +78 -0
- package/README.md +1154 -0
- package/dist/bin-http.d.ts +24 -0
- package/dist/bin-http.d.ts.map +1 -0
- package/dist/bin-http.js +275 -0
- package/dist/bin-http.js.map +1 -0
- package/dist/bin-setup.d.ts +11 -0
- package/dist/bin-setup.d.ts.map +1 -0
- package/dist/bin-setup.js +610 -0
- package/dist/bin-setup.js.map +1 -0
- package/dist/bin.d.ts +16 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +16 -0
- package/dist/bin.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +90 -0
- package/dist/index.js.map +1 -0
- package/dist/models/chunk.d.ts +136 -0
- package/dist/models/chunk.d.ts.map +1 -0
- package/dist/models/chunk.js +27 -0
- package/dist/models/chunk.js.map +1 -0
- package/dist/models/cluster.d.ts +79 -0
- package/dist/models/cluster.d.ts.map +1 -0
- package/dist/models/cluster.js +10 -0
- package/dist/models/cluster.js.map +1 -0
- package/dist/models/comparison.d.ts +62 -0
- package/dist/models/comparison.d.ts.map +1 -0
- package/dist/models/comparison.js +8 -0
- package/dist/models/comparison.js.map +1 -0
- package/dist/models/document.d.ts +104 -0
- package/dist/models/document.d.ts.map +1 -0
- package/dist/models/document.js +15 -0
- package/dist/models/document.js.map +1 -0
- package/dist/models/embedding.d.ts +87 -0
- package/dist/models/embedding.d.ts.map +1 -0
- package/dist/models/embedding.js +23 -0
- package/dist/models/embedding.js.map +1 -0
- package/dist/models/extraction.d.ts +15 -0
- package/dist/models/extraction.d.ts.map +1 -0
- package/dist/models/extraction.js +2 -0
- package/dist/models/extraction.js.map +1 -0
- package/dist/models/form-fill.d.ts +23 -0
- package/dist/models/form-fill.d.ts.map +1 -0
- package/dist/models/form-fill.js +2 -0
- package/dist/models/form-fill.js.map +1 -0
- package/dist/models/image.d.ts +177 -0
- package/dist/models/image.d.ts.map +1 -0
- package/dist/models/image.js +8 -0
- package/dist/models/image.js.map +1 -0
- package/dist/models/index.d.ts +14 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +22 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/provenance.d.ts +174 -0
- package/dist/models/provenance.d.ts.map +1 -0
- package/dist/models/provenance.js +53 -0
- package/dist/models/provenance.js.map +1 -0
- package/dist/models/uploaded-file.d.ts +20 -0
- package/dist/models/uploaded-file.d.ts.map +1 -0
- package/dist/models/uploaded-file.js +2 -0
- package/dist/models/uploaded-file.js.map +1 -0
- package/dist/server/errors.d.ts +93 -0
- package/dist/server/errors.d.ts.map +1 -0
- package/dist/server/errors.js +256 -0
- package/dist/server/errors.js.map +1 -0
- package/dist/server/events.d.ts +36 -0
- package/dist/server/events.d.ts.map +1 -0
- package/dist/server/events.js +48 -0
- package/dist/server/events.js.map +1 -0
- package/dist/server/permissions.d.ts +26 -0
- package/dist/server/permissions.d.ts.map +1 -0
- package/dist/server/permissions.js +194 -0
- package/dist/server/permissions.js.map +1 -0
- package/dist/server/register-tools.d.ts +25 -0
- package/dist/server/register-tools.d.ts.map +1 -0
- package/dist/server/register-tools.js +102 -0
- package/dist/server/register-tools.js.map +1 -0
- package/dist/server/startup.d.ts +16 -0
- package/dist/server/startup.d.ts.map +1 -0
- package/dist/server/startup.js +37 -0
- package/dist/server/startup.js.map +1 -0
- package/dist/server/state.d.ts +166 -0
- package/dist/server/state.d.ts.map +1 -0
- package/dist/server/state.js +424 -0
- package/dist/server/state.js.map +1 -0
- package/dist/server/transports/http-transport.d.ts +37 -0
- package/dist/server/transports/http-transport.d.ts.map +1 -0
- package/dist/server/transports/http-transport.js +204 -0
- package/dist/server/transports/http-transport.js.map +1 -0
- package/dist/server/transports/index.d.ts +9 -0
- package/dist/server/transports/index.d.ts.map +1 -0
- package/dist/server/transports/index.js +9 -0
- package/dist/server/transports/index.js.map +1 -0
- package/dist/server/transports/session-manager.d.ts +40 -0
- package/dist/server/transports/session-manager.d.ts.map +1 -0
- package/dist/server/transports/session-manager.js +74 -0
- package/dist/server/transports/session-manager.js.map +1 -0
- package/dist/server/types.d.ts +82 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +14 -0
- package/dist/server/types.js.map +1 -0
- package/dist/services/audit.d.ts +26 -0
- package/dist/services/audit.d.ts.map +1 -0
- package/dist/services/audit.js +43 -0
- package/dist/services/audit.js.map +1 -0
- package/dist/services/chunking/chunk-deduplicator.d.ts +33 -0
- package/dist/services/chunking/chunk-deduplicator.d.ts.map +1 -0
- package/dist/services/chunking/chunk-deduplicator.js +46 -0
- package/dist/services/chunking/chunk-deduplicator.js.map +1 -0
- package/dist/services/chunking/chunk-merger.d.ts +26 -0
- package/dist/services/chunking/chunk-merger.d.ts.map +1 -0
- package/dist/services/chunking/chunk-merger.js +94 -0
- package/dist/services/chunking/chunk-merger.js.map +1 -0
- package/dist/services/chunking/chunker.d.ts +62 -0
- package/dist/services/chunking/chunker.d.ts.map +1 -0
- package/dist/services/chunking/chunker.js +566 -0
- package/dist/services/chunking/chunker.js.map +1 -0
- package/dist/services/chunking/heading-normalizer.d.ts +33 -0
- package/dist/services/chunking/heading-normalizer.d.ts.map +1 -0
- package/dist/services/chunking/heading-normalizer.js +101 -0
- package/dist/services/chunking/heading-normalizer.js.map +1 -0
- package/dist/services/chunking/json-block-analyzer.d.ts +163 -0
- package/dist/services/chunking/json-block-analyzer.d.ts.map +1 -0
- package/dist/services/chunking/json-block-analyzer.js +1033 -0
- package/dist/services/chunking/json-block-analyzer.js.map +1 -0
- package/dist/services/chunking/markdown-parser.d.ts +75 -0
- package/dist/services/chunking/markdown-parser.d.ts.map +1 -0
- package/dist/services/chunking/markdown-parser.js +428 -0
- package/dist/services/chunking/markdown-parser.js.map +1 -0
- package/dist/services/chunking/text-normalizer.d.ts +20 -0
- package/dist/services/chunking/text-normalizer.d.ts.map +1 -0
- package/dist/services/chunking/text-normalizer.js +36 -0
- package/dist/services/chunking/text-normalizer.js.map +1 -0
- package/dist/services/clm/contract-schemas.d.ts +36 -0
- package/dist/services/clm/contract-schemas.d.ts.map +1 -0
- package/dist/services/clm/contract-schemas.js +92 -0
- package/dist/services/clm/contract-schemas.js.map +1 -0
- package/dist/services/clm/summarization.d.ts +46 -0
- package/dist/services/clm/summarization.d.ts.map +1 -0
- package/dist/services/clm/summarization.js +61 -0
- package/dist/services/clm/summarization.js.map +1 -0
- package/dist/services/clustering/clustering-service.d.ts +58 -0
- package/dist/services/clustering/clustering-service.d.ts.map +1 -0
- package/dist/services/clustering/clustering-service.js +467 -0
- package/dist/services/clustering/clustering-service.js.map +1 -0
- package/dist/services/comparison/diff-service.d.ts +41 -0
- package/dist/services/comparison/diff-service.d.ts.map +1 -0
- package/dist/services/comparison/diff-service.js +120 -0
- package/dist/services/comparison/diff-service.js.map +1 -0
- package/dist/services/embedding/embedder.d.ts +55 -0
- package/dist/services/embedding/embedder.d.ts.map +1 -0
- package/dist/services/embedding/embedder.js +202 -0
- package/dist/services/embedding/embedder.js.map +1 -0
- package/dist/services/embedding/nomic.d.ts +67 -0
- package/dist/services/embedding/nomic.d.ts.map +1 -0
- package/dist/services/embedding/nomic.js +280 -0
- package/dist/services/embedding/nomic.js.map +1 -0
- package/dist/services/gemini/circuit-breaker.d.ts +106 -0
- package/dist/services/gemini/circuit-breaker.d.ts.map +1 -0
- package/dist/services/gemini/circuit-breaker.js +237 -0
- package/dist/services/gemini/circuit-breaker.js.map +1 -0
- package/dist/services/gemini/client.d.ts +173 -0
- package/dist/services/gemini/client.d.ts.map +1 -0
- package/dist/services/gemini/client.js +483 -0
- package/dist/services/gemini/client.js.map +1 -0
- package/dist/services/gemini/config.d.ts +116 -0
- package/dist/services/gemini/config.d.ts.map +1 -0
- package/dist/services/gemini/config.js +118 -0
- package/dist/services/gemini/config.js.map +1 -0
- package/dist/services/gemini/index.d.ts +9 -0
- package/dist/services/gemini/index.d.ts.map +1 -0
- package/dist/services/gemini/index.js +13 -0
- package/dist/services/gemini/index.js.map +1 -0
- package/dist/services/gemini/rate-limiter.d.ts +62 -0
- package/dist/services/gemini/rate-limiter.d.ts.map +1 -0
- package/dist/services/gemini/rate-limiter.js +120 -0
- package/dist/services/gemini/rate-limiter.js.map +1 -0
- package/dist/services/images/extractor.d.ts +88 -0
- package/dist/services/images/extractor.d.ts.map +1 -0
- package/dist/services/images/extractor.js +340 -0
- package/dist/services/images/extractor.js.map +1 -0
- package/dist/services/images/optimizer.d.ts +130 -0
- package/dist/services/images/optimizer.d.ts.map +1 -0
- package/dist/services/images/optimizer.js +228 -0
- package/dist/services/images/optimizer.js.map +1 -0
- package/dist/services/ocr/datalab.d.ts +64 -0
- package/dist/services/ocr/datalab.d.ts.map +1 -0
- package/dist/services/ocr/datalab.js +425 -0
- package/dist/services/ocr/datalab.js.map +1 -0
- package/dist/services/ocr/errors.d.ts +38 -0
- package/dist/services/ocr/errors.d.ts.map +1 -0
- package/dist/services/ocr/errors.js +83 -0
- package/dist/services/ocr/errors.js.map +1 -0
- package/dist/services/ocr/file-manager.d.ts +76 -0
- package/dist/services/ocr/file-manager.d.ts.map +1 -0
- package/dist/services/ocr/file-manager.js +238 -0
- package/dist/services/ocr/file-manager.js.map +1 -0
- package/dist/services/ocr/form-fill.d.ts +48 -0
- package/dist/services/ocr/form-fill.d.ts.map +1 -0
- package/dist/services/ocr/form-fill.js +213 -0
- package/dist/services/ocr/form-fill.js.map +1 -0
- package/dist/services/ocr/processor.d.ts +95 -0
- package/dist/services/ocr/processor.d.ts.map +1 -0
- package/dist/services/ocr/processor.js +259 -0
- package/dist/services/ocr/processor.js.map +1 -0
- package/dist/services/provenance/agent-metadata.d.ts +82 -0
- package/dist/services/provenance/agent-metadata.d.ts.map +1 -0
- package/dist/services/provenance/agent-metadata.js +106 -0
- package/dist/services/provenance/agent-metadata.js.map +1 -0
- package/dist/services/provenance/chain-hash.d.ts +57 -0
- package/dist/services/provenance/chain-hash.d.ts.map +1 -0
- package/dist/services/provenance/chain-hash.js +131 -0
- package/dist/services/provenance/chain-hash.js.map +1 -0
- package/dist/services/provenance/exporter.d.ts +202 -0
- package/dist/services/provenance/exporter.d.ts.map +1 -0
- package/dist/services/provenance/exporter.js +457 -0
- package/dist/services/provenance/exporter.js.map +1 -0
- package/dist/services/provenance/index.d.ts +15 -0
- package/dist/services/provenance/index.d.ts.map +1 -0
- package/dist/services/provenance/index.js +17 -0
- package/dist/services/provenance/index.js.map +1 -0
- package/dist/services/provenance/tracker.d.ts +138 -0
- package/dist/services/provenance/tracker.d.ts.map +1 -0
- package/dist/services/provenance/tracker.js +293 -0
- package/dist/services/provenance/tracker.js.map +1 -0
- package/dist/services/provenance/verifier.d.ts +153 -0
- package/dist/services/provenance/verifier.d.ts.map +1 -0
- package/dist/services/provenance/verifier.js +536 -0
- package/dist/services/provenance/verifier.js.map +1 -0
- package/dist/services/python-pool.d.ts +70 -0
- package/dist/services/python-pool.d.ts.map +1 -0
- package/dist/services/python-pool.js +265 -0
- package/dist/services/python-pool.js.map +1 -0
- package/dist/services/search/bm25.d.ts +180 -0
- package/dist/services/search/bm25.d.ts.map +1 -0
- package/dist/services/search/bm25.js +656 -0
- package/dist/services/search/bm25.js.map +1 -0
- package/dist/services/search/fusion.d.ts +103 -0
- package/dist/services/search/fusion.d.ts.map +1 -0
- package/dist/services/search/fusion.js +122 -0
- package/dist/services/search/fusion.js.map +1 -0
- package/dist/services/search/local-reranker.d.ts +30 -0
- package/dist/services/search/local-reranker.d.ts.map +1 -0
- package/dist/services/search/local-reranker.js +123 -0
- package/dist/services/search/local-reranker.js.map +1 -0
- package/dist/services/search/quality.d.ts +11 -0
- package/dist/services/search/quality.d.ts.map +1 -0
- package/dist/services/search/quality.js +17 -0
- package/dist/services/search/quality.js.map +1 -0
- package/dist/services/search/query-classifier.d.ts +34 -0
- package/dist/services/search/query-classifier.d.ts.map +1 -0
- package/dist/services/search/query-classifier.js +114 -0
- package/dist/services/search/query-classifier.js.map +1 -0
- package/dist/services/search/query-expander.d.ts +73 -0
- package/dist/services/search/query-expander.d.ts.map +1 -0
- package/dist/services/search/query-expander.js +281 -0
- package/dist/services/search/query-expander.js.map +1 -0
- package/dist/services/search/reranker.d.ts +44 -0
- package/dist/services/search/reranker.d.ts.map +1 -0
- package/dist/services/search/reranker.js +101 -0
- package/dist/services/search/reranker.js.map +1 -0
- package/dist/services/storage/database/annotation-operations.d.ts +113 -0
- package/dist/services/storage/database/annotation-operations.d.ts.map +1 -0
- package/dist/services/storage/database/annotation-operations.js +177 -0
- package/dist/services/storage/database/annotation-operations.js.map +1 -0
- package/dist/services/storage/database/approval-operations.d.ts +132 -0
- package/dist/services/storage/database/approval-operations.d.ts.map +1 -0
- package/dist/services/storage/database/approval-operations.js +206 -0
- package/dist/services/storage/database/approval-operations.js.map +1 -0
- package/dist/services/storage/database/chunk-operations.d.ts +132 -0
- package/dist/services/storage/database/chunk-operations.d.ts.map +1 -0
- package/dist/services/storage/database/chunk-operations.js +306 -0
- package/dist/services/storage/database/chunk-operations.js.map +1 -0
- package/dist/services/storage/database/cluster-operations.d.ts +97 -0
- package/dist/services/storage/database/cluster-operations.d.ts.map +1 -0
- package/dist/services/storage/database/cluster-operations.js +258 -0
- package/dist/services/storage/database/cluster-operations.js.map +1 -0
- package/dist/services/storage/database/comparison-operations.d.ts +41 -0
- package/dist/services/storage/database/comparison-operations.d.ts.map +1 -0
- package/dist/services/storage/database/comparison-operations.js +65 -0
- package/dist/services/storage/database/comparison-operations.js.map +1 -0
- package/dist/services/storage/database/converters.d.ts +36 -0
- package/dist/services/storage/database/converters.d.ts.map +1 -0
- package/dist/services/storage/database/converters.js +244 -0
- package/dist/services/storage/database/converters.js.map +1 -0
- package/dist/services/storage/database/document-operations.d.ts +145 -0
- package/dist/services/storage/database/document-operations.d.ts.map +1 -0
- package/dist/services/storage/database/document-operations.js +498 -0
- package/dist/services/storage/database/document-operations.js.map +1 -0
- package/dist/services/storage/database/embedding-operations.d.ts +130 -0
- package/dist/services/storage/database/embedding-operations.d.ts.map +1 -0
- package/dist/services/storage/database/embedding-operations.js +315 -0
- package/dist/services/storage/database/embedding-operations.js.map +1 -0
- package/dist/services/storage/database/extraction-operations.d.ts +47 -0
- package/dist/services/storage/database/extraction-operations.d.ts.map +1 -0
- package/dist/services/storage/database/extraction-operations.js +85 -0
- package/dist/services/storage/database/extraction-operations.js.map +1 -0
- package/dist/services/storage/database/form-fill-operations.d.ts +58 -0
- package/dist/services/storage/database/form-fill-operations.d.ts.map +1 -0
- package/dist/services/storage/database/form-fill-operations.js +116 -0
- package/dist/services/storage/database/form-fill-operations.js.map +1 -0
- package/dist/services/storage/database/helpers.d.ts +29 -0
- package/dist/services/storage/database/helpers.d.ts.map +1 -0
- package/dist/services/storage/database/helpers.js +55 -0
- package/dist/services/storage/database/helpers.js.map +1 -0
- package/dist/services/storage/database/image-operations.d.ts +202 -0
- package/dist/services/storage/database/image-operations.d.ts.map +1 -0
- package/dist/services/storage/database/image-operations.js +484 -0
- package/dist/services/storage/database/image-operations.js.map +1 -0
- package/dist/services/storage/database/index.d.ts +13 -0
- package/dist/services/storage/database/index.d.ts.map +1 -0
- package/dist/services/storage/database/index.js +16 -0
- package/dist/services/storage/database/index.js.map +1 -0
- package/dist/services/storage/database/lock-operations.d.ts +59 -0
- package/dist/services/storage/database/lock-operations.d.ts.map +1 -0
- package/dist/services/storage/database/lock-operations.js +89 -0
- package/dist/services/storage/database/lock-operations.js.map +1 -0
- package/dist/services/storage/database/obligation-operations.d.ts +88 -0
- package/dist/services/storage/database/obligation-operations.d.ts.map +1 -0
- package/dist/services/storage/database/obligation-operations.js +206 -0
- package/dist/services/storage/database/obligation-operations.js.map +1 -0
- package/dist/services/storage/database/ocr-operations.d.ts +33 -0
- package/dist/services/storage/database/ocr-operations.d.ts.map +1 -0
- package/dist/services/storage/database/ocr-operations.js +70 -0
- package/dist/services/storage/database/ocr-operations.js.map +1 -0
- package/dist/services/storage/database/playbook-operations.d.ts +72 -0
- package/dist/services/storage/database/playbook-operations.d.ts.map +1 -0
- package/dist/services/storage/database/playbook-operations.js +247 -0
- package/dist/services/storage/database/playbook-operations.js.map +1 -0
- package/dist/services/storage/database/provenance-operations.d.ts +112 -0
- package/dist/services/storage/database/provenance-operations.d.ts.map +1 -0
- package/dist/services/storage/database/provenance-operations.js +251 -0
- package/dist/services/storage/database/provenance-operations.js.map +1 -0
- package/dist/services/storage/database/service.d.ts +142 -0
- package/dist/services/storage/database/service.d.ts.map +1 -0
- package/dist/services/storage/database/service.js +310 -0
- package/dist/services/storage/database/service.js.map +1 -0
- package/dist/services/storage/database/static-operations.d.ts +30 -0
- package/dist/services/storage/database/static-operations.d.ts.map +1 -0
- package/dist/services/storage/database/static-operations.js +218 -0
- package/dist/services/storage/database/static-operations.js.map +1 -0
- package/dist/services/storage/database/stats-operations.d.ts +101 -0
- package/dist/services/storage/database/stats-operations.d.ts.map +1 -0
- package/dist/services/storage/database/stats-operations.js +394 -0
- package/dist/services/storage/database/stats-operations.js.map +1 -0
- package/dist/services/storage/database/tag-operations.d.ts +76 -0
- package/dist/services/storage/database/tag-operations.d.ts.map +1 -0
- package/dist/services/storage/database/tag-operations.js +178 -0
- package/dist/services/storage/database/tag-operations.js.map +1 -0
- package/dist/services/storage/database/types.d.ts +286 -0
- package/dist/services/storage/database/types.d.ts.map +1 -0
- package/dist/services/storage/database/types.js +39 -0
- package/dist/services/storage/database/types.js.map +1 -0
- package/dist/services/storage/database/upload-operations.d.ts +71 -0
- package/dist/services/storage/database/upload-operations.d.ts.map +1 -0
- package/dist/services/storage/database/upload-operations.js +124 -0
- package/dist/services/storage/database/upload-operations.js.map +1 -0
- package/dist/services/storage/database/user-operations.d.ts +102 -0
- package/dist/services/storage/database/user-operations.d.ts.map +1 -0
- package/dist/services/storage/database/user-operations.js +151 -0
- package/dist/services/storage/database/user-operations.js.map +1 -0
- package/dist/services/storage/database/workflow-operations.d.ts +98 -0
- package/dist/services/storage/database/workflow-operations.d.ts.map +1 -0
- package/dist/services/storage/database/workflow-operations.js +157 -0
- package/dist/services/storage/database/workflow-operations.js.map +1 -0
- package/dist/services/storage/database.d.ts +16 -0
- package/dist/services/storage/database.d.ts.map +1 -0
- package/dist/services/storage/database.js +15 -0
- package/dist/services/storage/database.js.map +1 -0
- package/dist/services/storage/index.d.ts +10 -0
- package/dist/services/storage/index.d.ts.map +1 -0
- package/dist/services/storage/index.js +10 -0
- package/dist/services/storage/index.js.map +1 -0
- package/dist/services/storage/migrations/index.d.ts +16 -0
- package/dist/services/storage/migrations/index.d.ts.map +1 -0
- package/dist/services/storage/migrations/index.js +20 -0
- package/dist/services/storage/migrations/index.js.map +1 -0
- package/dist/services/storage/migrations/operations.d.ts +40 -0
- package/dist/services/storage/migrations/operations.d.ts.map +1 -0
- package/dist/services/storage/migrations/operations.js +2910 -0
- package/dist/services/storage/migrations/operations.js.map +1 -0
- package/dist/services/storage/migrations/schema-definitions.d.ts +306 -0
- package/dist/services/storage/migrations/schema-definitions.d.ts.map +1 -0
- package/dist/services/storage/migrations/schema-definitions.js +1006 -0
- package/dist/services/storage/migrations/schema-definitions.js.map +1 -0
- package/dist/services/storage/migrations/schema-helpers.d.ts +50 -0
- package/dist/services/storage/migrations/schema-helpers.d.ts.map +1 -0
- package/dist/services/storage/migrations/schema-helpers.js +176 -0
- package/dist/services/storage/migrations/schema-helpers.js.map +1 -0
- package/dist/services/storage/migrations/types.d.ts +15 -0
- package/dist/services/storage/migrations/types.d.ts.map +1 -0
- package/dist/services/storage/migrations/types.js +21 -0
- package/dist/services/storage/migrations/types.js.map +1 -0
- package/dist/services/storage/migrations/verification.d.ts +20 -0
- package/dist/services/storage/migrations/verification.d.ts.map +1 -0
- package/dist/services/storage/migrations/verification.js +78 -0
- package/dist/services/storage/migrations/verification.js.map +1 -0
- package/dist/services/storage/migrations.d.ts +16 -0
- package/dist/services/storage/migrations.d.ts.map +1 -0
- package/dist/services/storage/migrations.js +17 -0
- package/dist/services/storage/migrations.js.map +1 -0
- package/dist/services/storage/types.d.ts +12 -0
- package/dist/services/storage/types.d.ts.map +1 -0
- package/dist/services/storage/types.js +5 -0
- package/dist/services/storage/types.js.map +1 -0
- package/dist/services/storage/vector.d.ts +208 -0
- package/dist/services/storage/vector.d.ts.map +1 -0
- package/dist/services/storage/vector.js +526 -0
- package/dist/services/storage/vector.js.map +1 -0
- package/dist/services/vlm/pipeline.d.ts +194 -0
- package/dist/services/vlm/pipeline.d.ts.map +1 -0
- package/dist/services/vlm/pipeline.js +800 -0
- package/dist/services/vlm/pipeline.js.map +1 -0
- package/dist/services/vlm/prompts.d.ts +171 -0
- package/dist/services/vlm/prompts.d.ts.map +1 -0
- package/dist/services/vlm/prompts.js +229 -0
- package/dist/services/vlm/prompts.js.map +1 -0
- package/dist/services/vlm/service.d.ts +174 -0
- package/dist/services/vlm/service.d.ts.map +1 -0
- package/dist/services/vlm/service.js +256 -0
- package/dist/services/vlm/service.js.map +1 -0
- package/dist/services/webhook-delivery.d.ts +4 -0
- package/dist/services/webhook-delivery.d.ts.map +1 -0
- package/dist/services/webhook-delivery.js +140 -0
- package/dist/services/webhook-delivery.js.map +1 -0
- package/dist/tools/chunks.d.ts +19 -0
- package/dist/tools/chunks.d.ts.map +1 -0
- package/dist/tools/chunks.js +392 -0
- package/dist/tools/chunks.js.map +1 -0
- package/dist/tools/clm.d.ts +16 -0
- package/dist/tools/clm.d.ts.map +1 -0
- package/dist/tools/clm.js +668 -0
- package/dist/tools/clm.js.map +1 -0
- package/dist/tools/clustering.d.ts +13 -0
- package/dist/tools/clustering.d.ts.map +1 -0
- package/dist/tools/clustering.js +498 -0
- package/dist/tools/clustering.js.map +1 -0
- package/dist/tools/collaboration.d.ts +15 -0
- package/dist/tools/collaboration.d.ts.map +1 -0
- package/dist/tools/collaboration.js +516 -0
- package/dist/tools/collaboration.js.map +1 -0
- package/dist/tools/comparison.d.ts +13 -0
- package/dist/tools/comparison.d.ts.map +1 -0
- package/dist/tools/comparison.js +735 -0
- package/dist/tools/comparison.js.map +1 -0
- package/dist/tools/compliance.d.ts +15 -0
- package/dist/tools/compliance.d.ts.map +1 -0
- package/dist/tools/compliance.js +640 -0
- package/dist/tools/compliance.js.map +1 -0
- package/dist/tools/config.d.ts +19 -0
- package/dist/tools/config.d.ts.map +1 -0
- package/dist/tools/config.js +213 -0
- package/dist/tools/config.js.map +1 -0
- package/dist/tools/database.d.ts +62 -0
- package/dist/tools/database.d.ts.map +1 -0
- package/dist/tools/database.js +288 -0
- package/dist/tools/database.js.map +1 -0
- package/dist/tools/documents.d.ts +61 -0
- package/dist/tools/documents.d.ts.map +1 -0
- package/dist/tools/documents.js +1624 -0
- package/dist/tools/documents.js.map +1 -0
- package/dist/tools/embeddings.d.ts +14 -0
- package/dist/tools/embeddings.d.ts.map +1 -0
- package/dist/tools/embeddings.js +626 -0
- package/dist/tools/embeddings.js.map +1 -0
- package/dist/tools/evaluation.d.ts +25 -0
- package/dist/tools/evaluation.d.ts.map +1 -0
- package/dist/tools/evaluation.js +523 -0
- package/dist/tools/evaluation.js.map +1 -0
- package/dist/tools/events.d.ts +16 -0
- package/dist/tools/events.d.ts.map +1 -0
- package/dist/tools/events.js +493 -0
- package/dist/tools/events.js.map +1 -0
- package/dist/tools/extraction-structured.d.ts +13 -0
- package/dist/tools/extraction-structured.d.ts.map +1 -0
- package/dist/tools/extraction-structured.js +390 -0
- package/dist/tools/extraction-structured.js.map +1 -0
- package/dist/tools/extraction.d.ts +24 -0
- package/dist/tools/extraction.d.ts.map +1 -0
- package/dist/tools/extraction.js +424 -0
- package/dist/tools/extraction.js.map +1 -0
- package/dist/tools/file-management.d.ts +14 -0
- package/dist/tools/file-management.d.ts.map +1 -0
- package/dist/tools/file-management.js +523 -0
- package/dist/tools/file-management.js.map +1 -0
- package/dist/tools/form-fill.d.ts +13 -0
- package/dist/tools/form-fill.d.ts.map +1 -0
- package/dist/tools/form-fill.js +250 -0
- package/dist/tools/form-fill.js.map +1 -0
- package/dist/tools/health.d.ts +19 -0
- package/dist/tools/health.d.ts.map +1 -0
- package/dist/tools/health.js +229 -0
- package/dist/tools/health.js.map +1 -0
- package/dist/tools/images.d.ts +54 -0
- package/dist/tools/images.d.ts.map +1 -0
- package/dist/tools/images.js +787 -0
- package/dist/tools/images.js.map +1 -0
- package/dist/tools/ingestion.d.ts +94 -0
- package/dist/tools/ingestion.d.ts.map +1 -0
- package/dist/tools/ingestion.js +1659 -0
- package/dist/tools/ingestion.js.map +1 -0
- package/dist/tools/intelligence.d.ts +18 -0
- package/dist/tools/intelligence.d.ts.map +1 -0
- package/dist/tools/intelligence.js +1039 -0
- package/dist/tools/intelligence.js.map +1 -0
- package/dist/tools/provenance.d.ts +51 -0
- package/dist/tools/provenance.d.ts.map +1 -0
- package/dist/tools/provenance.js +691 -0
- package/dist/tools/provenance.js.map +1 -0
- package/dist/tools/reports.d.ts +41 -0
- package/dist/tools/reports.d.ts.map +1 -0
- package/dist/tools/reports.js +1394 -0
- package/dist/tools/reports.js.map +1 -0
- package/dist/tools/search.d.ts +35 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +2528 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/shared.d.ts +52 -0
- package/dist/tools/shared.d.ts.map +1 -0
- package/dist/tools/shared.js +54 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/tools/tags.d.ts +15 -0
- package/dist/tools/tags.d.ts.map +1 -0
- package/dist/tools/tags.js +287 -0
- package/dist/tools/tags.js.map +1 -0
- package/dist/tools/timeline.d.ts +15 -0
- package/dist/tools/timeline.d.ts.map +1 -0
- package/dist/tools/timeline.js +14 -0
- package/dist/tools/timeline.js.map +1 -0
- package/dist/tools/users.d.ts +14 -0
- package/dist/tools/users.d.ts.map +1 -0
- package/dist/tools/users.js +257 -0
- package/dist/tools/users.js.map +1 -0
- package/dist/tools/vlm.d.ts +40 -0
- package/dist/tools/vlm.d.ts.map +1 -0
- package/dist/tools/vlm.js +475 -0
- package/dist/tools/vlm.js.map +1 -0
- package/dist/tools/workflow.d.ts +16 -0
- package/dist/tools/workflow.d.ts.map +1 -0
- package/dist/tools/workflow.js +495 -0
- package/dist/tools/workflow.js.map +1 -0
- package/dist/utils/backoff.d.ts +53 -0
- package/dist/utils/backoff.d.ts.map +1 -0
- package/dist/utils/backoff.js +78 -0
- package/dist/utils/backoff.js.map +1 -0
- package/dist/utils/config-persistence.d.ts +33 -0
- package/dist/utils/config-persistence.d.ts.map +1 -0
- package/dist/utils/config-persistence.js +61 -0
- package/dist/utils/config-persistence.js.map +1 -0
- package/dist/utils/hash.d.ts +65 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +146 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/math.d.ts +21 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.js +39 -0
- package/dist/utils/math.js.map +1 -0
- package/dist/utils/validation.d.ts +697 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +529 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +96 -0
- package/python/.gitkeep +0 -0
- package/python/__init__.py +104 -0
- package/python/clustering_worker.py +440 -0
- package/python/docx_image_extractor.py +524 -0
- package/python/embedding_worker.py +552 -0
- package/python/file_manager_worker.py +564 -0
- package/python/form_fill_worker.py +399 -0
- package/python/gpu_utils.py +582 -0
- package/python/image_extractor.py +317 -0
- package/python/image_optimizer.py +444 -0
- package/python/ocr_worker.py +712 -0
- package/python/pyproject.toml +76 -0
- package/python/requirements.txt +51 -0
- package/python/reranker_worker.py +87 -0
|
@@ -0,0 +1,526 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VectorService - sqlite-vec vector storage and similarity search
|
|
3
|
+
*
|
|
4
|
+
* Handles vector CRUD operations on vec_embeddings virtual table.
|
|
5
|
+
* Search results are self-contained per CP-002 (original text always included).
|
|
6
|
+
*
|
|
7
|
+
* Uses vec_distance_cosine() for all similarity calculations to ensure
|
|
8
|
+
* consistent cosine similarity scoring regardless of underlying index configuration.
|
|
9
|
+
*
|
|
10
|
+
* @module services/storage/vector
|
|
11
|
+
*/
|
|
12
|
+
import { createRequire } from 'module';
|
|
13
|
+
import { computeQualityMultiplier } from '../search/quality.js';
|
|
14
|
+
const require = createRequire(import.meta.url);
|
|
15
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
16
|
+
// ERROR HANDLING
|
|
17
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
18
|
+
/**
|
|
19
|
+
* Error codes for vector operations
|
|
20
|
+
*/
|
|
21
|
+
var VectorErrorCode;
|
|
22
|
+
(function (VectorErrorCode) {
|
|
23
|
+
VectorErrorCode["INVALID_VECTOR_DIMENSIONS"] = "INVALID_VECTOR_DIMENSIONS";
|
|
24
|
+
VectorErrorCode["EMBEDDING_NOT_FOUND"] = "EMBEDDING_NOT_FOUND";
|
|
25
|
+
VectorErrorCode["VEC_EXTENSION_NOT_LOADED"] = "VEC_EXTENSION_NOT_LOADED";
|
|
26
|
+
VectorErrorCode["STORE_FAILED"] = "STORE_FAILED";
|
|
27
|
+
VectorErrorCode["SEARCH_FAILED"] = "SEARCH_FAILED";
|
|
28
|
+
VectorErrorCode["DELETE_FAILED"] = "DELETE_FAILED";
|
|
29
|
+
})(VectorErrorCode || (VectorErrorCode = {}));
|
|
30
|
+
/**
|
|
31
|
+
* Custom error class for vector operations
|
|
32
|
+
* Includes error code and optional details for debugging
|
|
33
|
+
*/
|
|
34
|
+
export class VectorError extends Error {
|
|
35
|
+
code;
|
|
36
|
+
details;
|
|
37
|
+
constructor(message, code, details) {
|
|
38
|
+
super(message);
|
|
39
|
+
this.code = code;
|
|
40
|
+
this.details = details;
|
|
41
|
+
this.name = 'VectorError';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
45
|
+
// VECTOR SERVICE
|
|
46
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
47
|
+
/**
|
|
48
|
+
* VectorService - handles vector storage and similarity search
|
|
49
|
+
*
|
|
50
|
+
* Wraps sqlite-vec operations for 768-dimensional vectors.
|
|
51
|
+
* All search results are self-contained with original text per CP-002.
|
|
52
|
+
*/
|
|
53
|
+
export class VectorService {
|
|
54
|
+
db;
|
|
55
|
+
vecLoaded = false;
|
|
56
|
+
/**
|
|
57
|
+
* Create a new VectorService
|
|
58
|
+
*
|
|
59
|
+
* @param db - Better-sqlite3 database connection with schema already initialized
|
|
60
|
+
* @throws VectorError if sqlite-vec extension cannot be loaded
|
|
61
|
+
*/
|
|
62
|
+
constructor(db) {
|
|
63
|
+
this.db = db;
|
|
64
|
+
this.ensureVecExtension();
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Ensure sqlite-vec extension is loaded
|
|
68
|
+
* FAIL FAST if not available - no workarounds
|
|
69
|
+
*/
|
|
70
|
+
ensureVecExtension() {
|
|
71
|
+
if (this.vecLoaded)
|
|
72
|
+
return;
|
|
73
|
+
try {
|
|
74
|
+
const sqliteVec = require('sqlite-vec');
|
|
75
|
+
sqliteVec.load(this.db);
|
|
76
|
+
this.vecLoaded = true;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
throw new VectorError('sqlite-vec extension failed to load. Install: npm install sqlite-vec', VectorErrorCode.VEC_EXTENSION_NOT_LOADED, { error: String(error) });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
83
|
+
// STORE OPERATIONS
|
|
84
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
85
|
+
/**
|
|
86
|
+
* Store a vector in vec_embeddings
|
|
87
|
+
*
|
|
88
|
+
* PREREQUISITE: Embedding record must already exist in embeddings table
|
|
89
|
+
* (inserted via DatabaseService.insertEmbedding)
|
|
90
|
+
*
|
|
91
|
+
* @param embeddingId - Must match an existing embeddings.id
|
|
92
|
+
* @param vector - 768-dimensional Float32Array
|
|
93
|
+
* @throws VectorError if dimensions != 768 or embedding doesn't exist
|
|
94
|
+
*/
|
|
95
|
+
storeVector(embeddingId, vector) {
|
|
96
|
+
// Validate dimensions - FAIL FAST
|
|
97
|
+
if (vector.length !== 768) {
|
|
98
|
+
throw new VectorError(`Vector must be 768 dimensions, got ${vector.length}`, VectorErrorCode.INVALID_VECTOR_DIMENSIONS, { embeddingId, actualDimensions: vector.length, expectedDimensions: 768 });
|
|
99
|
+
}
|
|
100
|
+
// Verify embedding exists - FAIL FAST, no silent failures
|
|
101
|
+
const exists = this.db.prepare('SELECT 1 FROM embeddings WHERE id = ?').get(embeddingId);
|
|
102
|
+
if (!exists) {
|
|
103
|
+
throw new VectorError(`Embedding ${embeddingId} not found. Insert into embeddings table first.`, VectorErrorCode.EMBEDDING_NOT_FOUND, { embeddingId });
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
const stmt = this.db.prepare(`
|
|
107
|
+
INSERT INTO vec_embeddings (embedding_id, vector)
|
|
108
|
+
VALUES (?, ?)
|
|
109
|
+
`);
|
|
110
|
+
stmt.run(embeddingId, Buffer.from(vector.buffer));
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
throw new VectorError(`Failed to store vector for ${embeddingId}`, VectorErrorCode.STORE_FAILED, { embeddingId, error: String(error) });
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Store multiple vectors in a single transaction
|
|
118
|
+
*
|
|
119
|
+
* @param items - Array of {embeddingId, vector} pairs
|
|
120
|
+
* @returns Count of vectors stored
|
|
121
|
+
* @throws VectorError on any failure (transaction rolls back)
|
|
122
|
+
*/
|
|
123
|
+
batchStoreVectors(items) {
|
|
124
|
+
if (items.length === 0)
|
|
125
|
+
return 0;
|
|
126
|
+
// Validate ALL vectors first - FAIL FAST before any writes
|
|
127
|
+
for (const { embeddingId, vector } of items) {
|
|
128
|
+
if (vector.length !== 768) {
|
|
129
|
+
throw new VectorError(`Vector for ${embeddingId} must be 768 dimensions, got ${vector.length}`, VectorErrorCode.INVALID_VECTOR_DIMENSIONS, { embeddingId, actualDimensions: vector.length });
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const stmt = this.db.prepare(`
|
|
133
|
+
INSERT INTO vec_embeddings (embedding_id, vector)
|
|
134
|
+
VALUES (?, ?)
|
|
135
|
+
`);
|
|
136
|
+
const insertAll = this.db.transaction((batch) => {
|
|
137
|
+
let count = 0;
|
|
138
|
+
for (const { embeddingId, vector } of batch) {
|
|
139
|
+
stmt.run(embeddingId, Buffer.from(vector.buffer));
|
|
140
|
+
count++;
|
|
141
|
+
}
|
|
142
|
+
return count;
|
|
143
|
+
});
|
|
144
|
+
try {
|
|
145
|
+
return insertAll(items);
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
throw new VectorError('Batch vector store failed', VectorErrorCode.STORE_FAILED, {
|
|
149
|
+
count: items.length,
|
|
150
|
+
error: String(error),
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
155
|
+
// SEARCH OPERATIONS
|
|
156
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
157
|
+
/**
|
|
158
|
+
* Search for similar vectors using cosine distance
|
|
159
|
+
*
|
|
160
|
+
* CRITICAL: Results ALWAYS include original_text per CP-002.
|
|
161
|
+
* No follow-up queries needed - results are self-contained.
|
|
162
|
+
*
|
|
163
|
+
* Uses vec_distance_cosine() for consistent cosine similarity.
|
|
164
|
+
*
|
|
165
|
+
* @param queryVector - 768-dim query vector
|
|
166
|
+
* @param options - Search options (limit, threshold, filters)
|
|
167
|
+
* @returns Array of VectorSearchResult with original text and source info
|
|
168
|
+
*/
|
|
169
|
+
searchSimilar(queryVector, options = {}) {
|
|
170
|
+
// Validate query vector - FAIL FAST
|
|
171
|
+
if (queryVector.length !== 768) {
|
|
172
|
+
throw new VectorError(`Query vector must be 768 dimensions, got ${queryVector.length}`, VectorErrorCode.INVALID_VECTOR_DIMENSIONS, { actualDimensions: queryVector.length });
|
|
173
|
+
}
|
|
174
|
+
const limit = Math.min(Math.max(1, options.limit ?? 10), 100);
|
|
175
|
+
const threshold = Math.max(0, Math.min(1, options.threshold ?? 0.0));
|
|
176
|
+
// Cosine distance = 1 - cosine_similarity
|
|
177
|
+
// similarity=1.0 -> distance=0.0 (identical)
|
|
178
|
+
// similarity=0.7 -> distance=0.3
|
|
179
|
+
// similarity=0.0 -> distance=1.0 (perpendicular)
|
|
180
|
+
const maxDistance = 1 - threshold;
|
|
181
|
+
// Convert Float32Array to Buffer for sqlite-vec
|
|
182
|
+
const queryBuffer = Buffer.from(queryVector.buffer);
|
|
183
|
+
if (options.documentFilter?.length) {
|
|
184
|
+
return this.searchWithFilter(queryBuffer, options.documentFilter, maxDistance, limit, options);
|
|
185
|
+
}
|
|
186
|
+
return this.searchAll(queryBuffer, maxDistance, limit, options);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Build chunk filter SQL fragment for vector search.
|
|
190
|
+
* Translates chunk filter conditions from 'c.' alias to 'ch.' alias used in vector queries.
|
|
191
|
+
*/
|
|
192
|
+
buildChunkFilterSQL(options) {
|
|
193
|
+
let sql = '';
|
|
194
|
+
const params = [];
|
|
195
|
+
if (options.chunkFilter?.conditions.length) {
|
|
196
|
+
for (const condition of options.chunkFilter.conditions) {
|
|
197
|
+
// Replace c. with ch. since vector.ts uses 'ch' alias for chunks table
|
|
198
|
+
const translated = condition.replace(/\bc\./g, 'ch.');
|
|
199
|
+
// Wrap each condition to permit VLM/extraction results through.
|
|
200
|
+
// VLM results have e.chunk_id IS NULL so all ch.* columns are NULL,
|
|
201
|
+
// which would cause any chunk filter to exclude them. The post-query
|
|
202
|
+
// pageRangeFilter in mapAndFilterResults handles VLM page filtering.
|
|
203
|
+
sql += ` AND (${translated} OR e.chunk_id IS NULL)`;
|
|
204
|
+
}
|
|
205
|
+
params.push(...options.chunkFilter.params);
|
|
206
|
+
}
|
|
207
|
+
// Page range filter for VLM/extraction results (which use e.page_number, not ch.page_number)
|
|
208
|
+
// is applied post-query in mapAndFilterResults, since VLM and chunk results are mixed
|
|
209
|
+
// and chunk results are already filtered by the chunkFilter SQL conditions above.
|
|
210
|
+
return { sql, params };
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Search with document filter
|
|
214
|
+
*/
|
|
215
|
+
searchWithFilter(queryBuffer, documentFilter, maxDistance, limit, options = {}) {
|
|
216
|
+
const placeholders = documentFilter.map(() => '?').join(', ');
|
|
217
|
+
const chunkFilterSQL = this.buildChunkFilterSQL(options);
|
|
218
|
+
let sql = `
|
|
219
|
+
SELECT
|
|
220
|
+
e.id as embedding_id,
|
|
221
|
+
e.chunk_id,
|
|
222
|
+
e.image_id,
|
|
223
|
+
e.extraction_id,
|
|
224
|
+
e.document_id,
|
|
225
|
+
e.original_text,
|
|
226
|
+
e.original_text_length,
|
|
227
|
+
e.source_file_path,
|
|
228
|
+
e.source_file_name,
|
|
229
|
+
e.source_file_hash,
|
|
230
|
+
e.page_number,
|
|
231
|
+
e.page_range,
|
|
232
|
+
e.character_start,
|
|
233
|
+
e.character_end,
|
|
234
|
+
e.chunk_index,
|
|
235
|
+
e.total_chunks,
|
|
236
|
+
e.model_name,
|
|
237
|
+
e.model_version,
|
|
238
|
+
e.provenance_id,
|
|
239
|
+
e.content_hash,
|
|
240
|
+
ch.heading_context,
|
|
241
|
+
ch.section_path,
|
|
242
|
+
ch.content_types,
|
|
243
|
+
ch.is_atomic,
|
|
244
|
+
ch.page_range AS chunk_page_range,
|
|
245
|
+
ch.heading_level,
|
|
246
|
+
doc.doc_title,
|
|
247
|
+
doc.doc_author,
|
|
248
|
+
doc.doc_subject,
|
|
249
|
+
ch.overlap_previous,
|
|
250
|
+
ch.overlap_next,
|
|
251
|
+
ch.chunking_strategy,
|
|
252
|
+
ch.embedding_status,
|
|
253
|
+
doc.page_count AS doc_page_count,
|
|
254
|
+
(SELECT o.datalab_mode FROM ocr_results o WHERE o.document_id = e.document_id ORDER BY o.processing_completed_at DESC LIMIT 1) AS datalab_mode,
|
|
255
|
+
(SELECT o.parse_quality_score FROM ocr_results o WHERE o.document_id = e.document_id ORDER BY o.processing_completed_at DESC LIMIT 1) AS ocr_quality_score,
|
|
256
|
+
vec_distance_cosine(v.vector, ?) as distance
|
|
257
|
+
FROM vec_embeddings v
|
|
258
|
+
JOIN embeddings e ON e.id = v.embedding_id
|
|
259
|
+
LEFT JOIN chunks ch ON e.chunk_id = ch.id
|
|
260
|
+
LEFT JOIN documents doc ON e.document_id = doc.id
|
|
261
|
+
WHERE e.document_id IN (${placeholders})
|
|
262
|
+
`;
|
|
263
|
+
// Build params array: queryBuffer for vec_distance_cosine, then document IDs
|
|
264
|
+
const params = [queryBuffer];
|
|
265
|
+
for (const docId of documentFilter) {
|
|
266
|
+
params.push(docId);
|
|
267
|
+
}
|
|
268
|
+
// Add chunk filter conditions
|
|
269
|
+
sql += chunkFilterSQL.sql;
|
|
270
|
+
params.push(...chunkFilterSQL.params);
|
|
271
|
+
sql += `
|
|
272
|
+
ORDER BY distance ASC
|
|
273
|
+
LIMIT ?
|
|
274
|
+
`;
|
|
275
|
+
params.push(limit * 3);
|
|
276
|
+
try {
|
|
277
|
+
const stmt = this.db.prepare(sql);
|
|
278
|
+
const rows = stmt.all(...params);
|
|
279
|
+
return this.mapAndFilterResults(rows, maxDistance, limit, options);
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
throw new VectorError('Vector search failed', VectorErrorCode.SEARCH_FAILED, {
|
|
283
|
+
error: String(error),
|
|
284
|
+
hasFilter: true,
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Search all vectors without filter
|
|
290
|
+
*/
|
|
291
|
+
searchAll(queryBuffer, maxDistance, limit, options = {}) {
|
|
292
|
+
try {
|
|
293
|
+
const chunkFilterSQL = this.buildChunkFilterSQL(options);
|
|
294
|
+
let sql = `
|
|
295
|
+
SELECT
|
|
296
|
+
e.id as embedding_id,
|
|
297
|
+
e.chunk_id,
|
|
298
|
+
e.image_id,
|
|
299
|
+
e.extraction_id,
|
|
300
|
+
e.document_id,
|
|
301
|
+
e.original_text,
|
|
302
|
+
e.original_text_length,
|
|
303
|
+
e.source_file_path,
|
|
304
|
+
e.source_file_name,
|
|
305
|
+
e.source_file_hash,
|
|
306
|
+
e.page_number,
|
|
307
|
+
e.page_range,
|
|
308
|
+
e.character_start,
|
|
309
|
+
e.character_end,
|
|
310
|
+
e.chunk_index,
|
|
311
|
+
e.total_chunks,
|
|
312
|
+
e.model_name,
|
|
313
|
+
e.model_version,
|
|
314
|
+
e.provenance_id,
|
|
315
|
+
e.content_hash,
|
|
316
|
+
ch.heading_context,
|
|
317
|
+
ch.section_path,
|
|
318
|
+
ch.content_types,
|
|
319
|
+
ch.is_atomic,
|
|
320
|
+
ch.page_range AS chunk_page_range,
|
|
321
|
+
ch.heading_level,
|
|
322
|
+
doc.doc_title,
|
|
323
|
+
doc.doc_author,
|
|
324
|
+
doc.doc_subject,
|
|
325
|
+
ch.overlap_previous,
|
|
326
|
+
ch.overlap_next,
|
|
327
|
+
ch.chunking_strategy,
|
|
328
|
+
ch.embedding_status,
|
|
329
|
+
doc.page_count AS doc_page_count,
|
|
330
|
+
(SELECT o.datalab_mode FROM ocr_results o WHERE o.document_id = e.document_id ORDER BY o.processing_completed_at DESC LIMIT 1) AS datalab_mode,
|
|
331
|
+
(SELECT o.parse_quality_score FROM ocr_results o WHERE o.document_id = e.document_id ORDER BY o.processing_completed_at DESC LIMIT 1) AS ocr_quality_score,
|
|
332
|
+
vec_distance_cosine(v.vector, ?) as distance
|
|
333
|
+
FROM vec_embeddings v
|
|
334
|
+
JOIN embeddings e ON e.id = v.embedding_id
|
|
335
|
+
LEFT JOIN chunks ch ON e.chunk_id = ch.id
|
|
336
|
+
LEFT JOIN documents doc ON e.document_id = doc.id
|
|
337
|
+
`;
|
|
338
|
+
const params = [queryBuffer];
|
|
339
|
+
// Add chunk filter conditions (need WHERE clause if any)
|
|
340
|
+
if (chunkFilterSQL.sql) {
|
|
341
|
+
sql += ` WHERE 1=1 ${chunkFilterSQL.sql}`;
|
|
342
|
+
params.push(...chunkFilterSQL.params);
|
|
343
|
+
}
|
|
344
|
+
sql += `
|
|
345
|
+
ORDER BY distance ASC
|
|
346
|
+
LIMIT ?
|
|
347
|
+
`;
|
|
348
|
+
params.push(limit * 3);
|
|
349
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
350
|
+
return this.mapAndFilterResults(rows, maxDistance, limit, options);
|
|
351
|
+
}
|
|
352
|
+
catch (error) {
|
|
353
|
+
throw new VectorError('Vector search failed', VectorErrorCode.SEARCH_FAILED, {
|
|
354
|
+
error: String(error),
|
|
355
|
+
hasFilter: false,
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Determine result type from row identity fields.
|
|
361
|
+
*/
|
|
362
|
+
static getResultType(row) {
|
|
363
|
+
if (row.chunk_id !== null)
|
|
364
|
+
return 'chunk';
|
|
365
|
+
if (row.extraction_id !== null)
|
|
366
|
+
return 'extraction';
|
|
367
|
+
return 'vlm';
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Map database rows to VectorSearchResult and filter by threshold.
|
|
371
|
+
* Applies quality-weighted scoring to all results.
|
|
372
|
+
*/
|
|
373
|
+
mapAndFilterResults(rows, maxDistance, limit, options = {}) {
|
|
374
|
+
let results = rows
|
|
375
|
+
.filter((row) => row.distance <= maxDistance)
|
|
376
|
+
.map((row) => ({
|
|
377
|
+
embedding_id: row.embedding_id,
|
|
378
|
+
chunk_id: row.chunk_id,
|
|
379
|
+
image_id: row.image_id,
|
|
380
|
+
extraction_id: row.extraction_id,
|
|
381
|
+
document_id: row.document_id,
|
|
382
|
+
result_type: VectorService.getResultType(row),
|
|
383
|
+
similarity_score: 1 - row.distance, // Convert distance to similarity
|
|
384
|
+
distance: row.distance,
|
|
385
|
+
original_text: row.original_text,
|
|
386
|
+
original_text_length: row.original_text_length,
|
|
387
|
+
source_file_path: row.source_file_path,
|
|
388
|
+
source_file_name: row.source_file_name,
|
|
389
|
+
source_file_hash: row.source_file_hash,
|
|
390
|
+
page_number: row.page_number,
|
|
391
|
+
page_range: row.page_range,
|
|
392
|
+
character_start: row.character_start,
|
|
393
|
+
character_end: row.character_end,
|
|
394
|
+
chunk_index: row.chunk_index,
|
|
395
|
+
total_chunks: row.total_chunks,
|
|
396
|
+
model_name: row.model_name,
|
|
397
|
+
model_version: row.model_version,
|
|
398
|
+
provenance_id: row.provenance_id,
|
|
399
|
+
content_hash: row.content_hash,
|
|
400
|
+
heading_context: row.heading_context ?? null,
|
|
401
|
+
section_path: row.section_path ?? null,
|
|
402
|
+
content_types: row.content_types ?? null,
|
|
403
|
+
is_atomic: !!row.is_atomic,
|
|
404
|
+
chunk_page_range: row.chunk_page_range ?? null,
|
|
405
|
+
heading_level: row.heading_level ?? null,
|
|
406
|
+
ocr_quality_score: row.ocr_quality_score ?? null,
|
|
407
|
+
doc_title: row.doc_title ?? null,
|
|
408
|
+
doc_author: row.doc_author ?? null,
|
|
409
|
+
doc_subject: row.doc_subject ?? null,
|
|
410
|
+
overlap_previous: row.overlap_previous ?? 0,
|
|
411
|
+
overlap_next: row.overlap_next ?? 0,
|
|
412
|
+
chunking_strategy: row.chunking_strategy ?? null,
|
|
413
|
+
embedding_status: row.embedding_status ?? 'pending',
|
|
414
|
+
doc_page_count: row.doc_page_count ?? null,
|
|
415
|
+
datalab_mode: row.datalab_mode ?? null,
|
|
416
|
+
}));
|
|
417
|
+
// Apply pageRangeFilter to VLM/extraction results (chunk results already filtered by SQL)
|
|
418
|
+
if (options.pageRangeFilter) {
|
|
419
|
+
const { min_page, max_page } = options.pageRangeFilter;
|
|
420
|
+
results = results.filter((r) => {
|
|
421
|
+
// Chunk results already filtered by chunkFilter SQL conditions
|
|
422
|
+
if (r.chunk_id !== null)
|
|
423
|
+
return true;
|
|
424
|
+
// VLM/extraction results: filter by page_number
|
|
425
|
+
if (r.page_number === null)
|
|
426
|
+
return false; // No page info = exclude when filtering by page
|
|
427
|
+
if (min_page !== undefined && r.page_number < min_page)
|
|
428
|
+
return false;
|
|
429
|
+
if (max_page !== undefined && r.page_number > max_page)
|
|
430
|
+
return false;
|
|
431
|
+
return true;
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
// Apply quality-weighted scoring BEFORE limit slice so high-quality results
|
|
435
|
+
// beyond the initial limit can be promoted into the final result set
|
|
436
|
+
for (const r of results) {
|
|
437
|
+
r.similarity_score *= computeQualityMultiplier(r.ocr_quality_score);
|
|
438
|
+
}
|
|
439
|
+
// Re-sort by quality-adjusted similarity score
|
|
440
|
+
results.sort((a, b) => b.similarity_score - a.similarity_score);
|
|
441
|
+
// Apply limit after quality reranking
|
|
442
|
+
results = results.slice(0, limit);
|
|
443
|
+
return results;
|
|
444
|
+
}
|
|
445
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
446
|
+
// DELETE OPERATIONS
|
|
447
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
448
|
+
/**
|
|
449
|
+
* Delete a vector from vec_embeddings
|
|
450
|
+
*
|
|
451
|
+
* @param embeddingId - The embedding ID
|
|
452
|
+
* @returns true if deleted, false if not found
|
|
453
|
+
*/
|
|
454
|
+
deleteVector(embeddingId) {
|
|
455
|
+
try {
|
|
456
|
+
const result = this.db
|
|
457
|
+
.prepare('DELETE FROM vec_embeddings WHERE embedding_id = ?')
|
|
458
|
+
.run(embeddingId);
|
|
459
|
+
return result.changes > 0;
|
|
460
|
+
}
|
|
461
|
+
catch (error) {
|
|
462
|
+
throw new VectorError(`Failed to delete vector ${embeddingId}`, VectorErrorCode.DELETE_FAILED, { embeddingId, error: String(error) });
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Delete all vectors for a document
|
|
467
|
+
*
|
|
468
|
+
* @param documentId - The document ID
|
|
469
|
+
* @returns Count of vectors deleted
|
|
470
|
+
*/
|
|
471
|
+
deleteVectorsByDocumentId(documentId) {
|
|
472
|
+
try {
|
|
473
|
+
// Get embedding IDs for this document
|
|
474
|
+
const embeddingIds = this.db
|
|
475
|
+
.prepare('SELECT id FROM embeddings WHERE document_id = ?')
|
|
476
|
+
.all(documentId);
|
|
477
|
+
if (embeddingIds.length === 0)
|
|
478
|
+
return 0;
|
|
479
|
+
const stmt = this.db.prepare('DELETE FROM vec_embeddings WHERE embedding_id = ?');
|
|
480
|
+
const deleteAll = this.db.transaction((ids) => {
|
|
481
|
+
let count = 0;
|
|
482
|
+
for (const id of ids) {
|
|
483
|
+
const result = stmt.run(id);
|
|
484
|
+
count += result.changes;
|
|
485
|
+
}
|
|
486
|
+
return count;
|
|
487
|
+
});
|
|
488
|
+
return deleteAll(embeddingIds.map((e) => e.id));
|
|
489
|
+
}
|
|
490
|
+
catch (error) {
|
|
491
|
+
throw new VectorError(`Failed to delete vectors for document ${documentId}`, VectorErrorCode.DELETE_FAILED, { documentId, error: String(error) });
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
495
|
+
// UTILITY METHODS
|
|
496
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
497
|
+
/**
|
|
498
|
+
* Get count of vectors stored
|
|
499
|
+
*/
|
|
500
|
+
getVectorCount() {
|
|
501
|
+
const result = this.db.prepare('SELECT COUNT(*) as count FROM vec_embeddings').get();
|
|
502
|
+
return result.count;
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Check if vector exists
|
|
506
|
+
*/
|
|
507
|
+
vectorExists(embeddingId) {
|
|
508
|
+
const result = this.db
|
|
509
|
+
.prepare('SELECT 1 FROM vec_embeddings WHERE embedding_id = ?')
|
|
510
|
+
.get(embeddingId);
|
|
511
|
+
return !!result;
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Get raw vector by embedding ID
|
|
515
|
+
* @returns Float32Array or null if not found
|
|
516
|
+
*/
|
|
517
|
+
getVector(embeddingId) {
|
|
518
|
+
const result = this.db
|
|
519
|
+
.prepare('SELECT vector FROM vec_embeddings WHERE embedding_id = ?')
|
|
520
|
+
.get(embeddingId);
|
|
521
|
+
if (!result)
|
|
522
|
+
return null;
|
|
523
|
+
return new Float32Array(result.vector.buffer, result.vector.byteOffset, result.vector.byteLength / 4);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
//# sourceMappingURL=vector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector.js","sourceRoot":"","sources":["../../../src/services/storage/vector.ts"],"names":[],"mappings":"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"}
|