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,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Circuit Breaker Pattern for Gemini API
|
|
3
|
+
* Based on gemini-flash-3-dev-guide.md:
|
|
4
|
+
* - threshold: 5 failures
|
|
5
|
+
* - recovery_ms: 60000 (60 seconds)
|
|
6
|
+
*
|
|
7
|
+
* Only server-side errors (HTTP 429, 500, 502, 503, network errors) trip the
|
|
8
|
+
* circuit breaker. Client-side errors (validation, file-not-found,
|
|
9
|
+
* context-length-exceeded, JSON parse) do NOT trip it.
|
|
10
|
+
*/
|
|
11
|
+
declare enum CircuitState {
|
|
12
|
+
CLOSED = "CLOSED",// Normal operation
|
|
13
|
+
OPEN = "OPEN",// Failing, reject requests
|
|
14
|
+
HALF_OPEN = "HALF_OPEN"
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Determine whether an error represents a server-side / transient failure
|
|
18
|
+
* that should trip the circuit breaker.
|
|
19
|
+
*
|
|
20
|
+
* Server errors: HTTP 429 (rate limit), 500, 502, 503, and network errors
|
|
21
|
+
* like ECONNRESET, ETIMEDOUT, ENOTFOUND, socket hang up, fetch failed.
|
|
22
|
+
*
|
|
23
|
+
* Client errors that should NOT trip: ValidationError, file-not-found,
|
|
24
|
+
* context-length-exceeded, JSON parse errors, unsupported format, etc.
|
|
25
|
+
*/
|
|
26
|
+
export declare function isServerError(error: unknown): boolean;
|
|
27
|
+
export interface CircuitBreakerConfig {
|
|
28
|
+
failureThreshold: number;
|
|
29
|
+
recoveryTimeMs: number;
|
|
30
|
+
halfOpenSuccessThreshold: number;
|
|
31
|
+
}
|
|
32
|
+
export interface CircuitBreakerStatus {
|
|
33
|
+
state: CircuitState;
|
|
34
|
+
failureCount: number;
|
|
35
|
+
lastFailureTime: number | null;
|
|
36
|
+
timeToRecovery: number | null;
|
|
37
|
+
}
|
|
38
|
+
export declare class CircuitBreaker {
|
|
39
|
+
private state;
|
|
40
|
+
private failureCount;
|
|
41
|
+
private successCount;
|
|
42
|
+
private lastFailureTime;
|
|
43
|
+
private readonly config;
|
|
44
|
+
/** Tracks consecutive circuit trips for exponential recovery backoff */
|
|
45
|
+
private consecutiveTrips;
|
|
46
|
+
constructor(config?: Partial<CircuitBreakerConfig>);
|
|
47
|
+
/**
|
|
48
|
+
* Get current recovery time with exponential backoff on consecutive trips.
|
|
49
|
+
*
|
|
50
|
+
* Each consecutive trip doubles the recovery time:
|
|
51
|
+
* Trip 1: 60s, Trip 2: 120s, Trip 3: 240s, Trip 4: 480s, Trip 5+: 960s (cap)
|
|
52
|
+
*
|
|
53
|
+
* @returns Recovery time in milliseconds
|
|
54
|
+
*/
|
|
55
|
+
getRecoveryTimeMs(): number;
|
|
56
|
+
/**
|
|
57
|
+
* Execute a function with circuit breaker protection
|
|
58
|
+
*/
|
|
59
|
+
execute<T>(fn: () => Promise<T>): Promise<T>;
|
|
60
|
+
/**
|
|
61
|
+
* Check if the circuit should transition from OPEN to HALF_OPEN
|
|
62
|
+
*/
|
|
63
|
+
private checkRecovery;
|
|
64
|
+
/**
|
|
65
|
+
* Record a successful request
|
|
66
|
+
*/
|
|
67
|
+
private recordSuccess;
|
|
68
|
+
/**
|
|
69
|
+
* Record a failed request
|
|
70
|
+
*/
|
|
71
|
+
private recordFailure;
|
|
72
|
+
/**
|
|
73
|
+
* Get time remaining until recovery attempt.
|
|
74
|
+
* Uses dynamic recovery time based on consecutive trips.
|
|
75
|
+
*/
|
|
76
|
+
private getTimeToRecovery;
|
|
77
|
+
/**
|
|
78
|
+
* Check if the circuit is currently open
|
|
79
|
+
*/
|
|
80
|
+
isOpen(): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Get current circuit breaker status
|
|
83
|
+
*/
|
|
84
|
+
getStatus(): CircuitBreakerStatus;
|
|
85
|
+
/**
|
|
86
|
+
* Get the current state
|
|
87
|
+
*/
|
|
88
|
+
getState(): CircuitState;
|
|
89
|
+
/**
|
|
90
|
+
* Manually reset the circuit breaker
|
|
91
|
+
*/
|
|
92
|
+
reset(): void;
|
|
93
|
+
/**
|
|
94
|
+
* Force the circuit open (for testing or manual intervention)
|
|
95
|
+
*/
|
|
96
|
+
forceOpen(): void;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Error thrown when circuit breaker is open
|
|
100
|
+
*/
|
|
101
|
+
export declare class CircuitBreakerOpenError extends Error {
|
|
102
|
+
readonly timeToRecovery: number;
|
|
103
|
+
constructor(message: string, timeToRecovery: number);
|
|
104
|
+
}
|
|
105
|
+
export {};
|
|
106
|
+
//# sourceMappingURL=circuit-breaker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../../src/services/gemini/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,aAAK,YAAY;IACf,MAAM,WAAW,CAAE,mBAAmB;IACtC,IAAI,SAAS,CAAE,2BAA2B;IAC1C,SAAS,cAAc;CACxB;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAiCrD;AAED,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAQD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,YAAY,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,wEAAwE;IACxE,OAAO,CAAC,gBAAgB,CAAa;gBAEzB,MAAM,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAItD;;;;;;;OAOG;IACH,iBAAiB,IAAI,MAAM;IAO3B;;OAEG;IACG,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAiClD;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAuBrB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,MAAM,IAAI,OAAO;IAKjB;;OAEG;IACH,SAAS,IAAI,oBAAoB;IAUjC;;OAEG;IACH,QAAQ,IAAI,YAAY;IAKxB;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,SAAS,IAAI,IAAI;CAKlB;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;gBAEpB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;CAKpD"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Circuit Breaker Pattern for Gemini API
|
|
3
|
+
* Based on gemini-flash-3-dev-guide.md:
|
|
4
|
+
* - threshold: 5 failures
|
|
5
|
+
* - recovery_ms: 60000 (60 seconds)
|
|
6
|
+
*
|
|
7
|
+
* Only server-side errors (HTTP 429, 500, 502, 503, network errors) trip the
|
|
8
|
+
* circuit breaker. Client-side errors (validation, file-not-found,
|
|
9
|
+
* context-length-exceeded, JSON parse) do NOT trip it.
|
|
10
|
+
*/
|
|
11
|
+
var CircuitState;
|
|
12
|
+
(function (CircuitState) {
|
|
13
|
+
CircuitState["CLOSED"] = "CLOSED";
|
|
14
|
+
CircuitState["OPEN"] = "OPEN";
|
|
15
|
+
CircuitState["HALF_OPEN"] = "HALF_OPEN";
|
|
16
|
+
})(CircuitState || (CircuitState = {}));
|
|
17
|
+
/**
|
|
18
|
+
* Determine whether an error represents a server-side / transient failure
|
|
19
|
+
* that should trip the circuit breaker.
|
|
20
|
+
*
|
|
21
|
+
* Server errors: HTTP 429 (rate limit), 500, 502, 503, and network errors
|
|
22
|
+
* like ECONNRESET, ETIMEDOUT, ENOTFOUND, socket hang up, fetch failed.
|
|
23
|
+
*
|
|
24
|
+
* Client errors that should NOT trip: ValidationError, file-not-found,
|
|
25
|
+
* context-length-exceeded, JSON parse errors, unsupported format, etc.
|
|
26
|
+
*/
|
|
27
|
+
export function isServerError(error) {
|
|
28
|
+
if (!(error instanceof Error)) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
const msg = error.message || '';
|
|
32
|
+
const cause = error?.cause;
|
|
33
|
+
const causeMsg = cause instanceof Error ? cause.message || '' : '';
|
|
34
|
+
const causeCode = cause?.code || '';
|
|
35
|
+
const combined = `${msg} ${causeMsg} ${causeCode}`;
|
|
36
|
+
// HTTP status codes indicating server-side issues
|
|
37
|
+
if (/\b(429|500|502|503)\b/.test(combined)) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
// Rate limit messages
|
|
41
|
+
if (/rate.?limit/i.test(combined)) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
// Network-level errors
|
|
45
|
+
if (/ECONNRESET|ETIMEDOUT|ENOTFOUND|ECONNREFUSED|socket hang up|fetch failed/i.test(combined)) {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
// Server overloaded / unavailable messages from Gemini
|
|
49
|
+
if (/server.?(error|overloaded|unavailable)|service.?unavailable|internal.?server/i.test(combined)) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
// Everything else is a client-side error
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
const DEFAULT_CONFIG = {
|
|
56
|
+
failureThreshold: 5, // From guide
|
|
57
|
+
recoveryTimeMs: 60000, // From guide: 60 seconds
|
|
58
|
+
halfOpenSuccessThreshold: 3, // Successes needed to close
|
|
59
|
+
};
|
|
60
|
+
export class CircuitBreaker {
|
|
61
|
+
state = CircuitState.CLOSED;
|
|
62
|
+
failureCount = 0;
|
|
63
|
+
successCount = 0;
|
|
64
|
+
lastFailureTime = null;
|
|
65
|
+
config;
|
|
66
|
+
/** Tracks consecutive circuit trips for exponential recovery backoff */
|
|
67
|
+
consecutiveTrips = 0;
|
|
68
|
+
constructor(config = {}) {
|
|
69
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get current recovery time with exponential backoff on consecutive trips.
|
|
73
|
+
*
|
|
74
|
+
* Each consecutive trip doubles the recovery time:
|
|
75
|
+
* Trip 1: 60s, Trip 2: 120s, Trip 3: 240s, Trip 4: 480s, Trip 5+: 960s (cap)
|
|
76
|
+
*
|
|
77
|
+
* @returns Recovery time in milliseconds
|
|
78
|
+
*/
|
|
79
|
+
getRecoveryTimeMs() {
|
|
80
|
+
const baseRecovery = this.config.recoveryTimeMs;
|
|
81
|
+
const tripExponent = Math.max(0, this.consecutiveTrips - 1);
|
|
82
|
+
const multiplier = Math.pow(2, Math.min(tripExponent, 4)); // Max 16x = 960s
|
|
83
|
+
return Math.min(baseRecovery * multiplier, 960000); // Cap at 16 minutes
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Execute a function with circuit breaker protection
|
|
87
|
+
*/
|
|
88
|
+
async execute(fn) {
|
|
89
|
+
// Check if circuit should transition from OPEN to HALF_OPEN
|
|
90
|
+
this.checkRecovery();
|
|
91
|
+
// Reject if circuit is open
|
|
92
|
+
if (this.state === CircuitState.OPEN) {
|
|
93
|
+
const timeToRecovery = this.getTimeToRecovery();
|
|
94
|
+
throw new CircuitBreakerOpenError(`Circuit breaker is OPEN. Try again in ${Math.ceil(timeToRecovery / 1000)}s`, timeToRecovery);
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
const result = await fn();
|
|
98
|
+
this.recordSuccess();
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
// Only trip the circuit breaker on server-side / transient errors.
|
|
103
|
+
// Client-side errors (validation, file-not-found, context-length,
|
|
104
|
+
// JSON parse) are not the server's fault and should not affect
|
|
105
|
+
// circuit breaker state.
|
|
106
|
+
if (isServerError(error)) {
|
|
107
|
+
this.recordFailure();
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
console.error(`[CircuitBreaker] Client-side error (not counted): ${error instanceof Error ? error.message : String(error)}`);
|
|
111
|
+
}
|
|
112
|
+
throw error;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Check if the circuit should transition from OPEN to HALF_OPEN
|
|
117
|
+
*/
|
|
118
|
+
checkRecovery() {
|
|
119
|
+
if (this.state === CircuitState.OPEN && this.lastFailureTime !== null) {
|
|
120
|
+
const elapsed = Date.now() - this.lastFailureTime;
|
|
121
|
+
const recoveryTime = this.getRecoveryTimeMs();
|
|
122
|
+
if (elapsed >= recoveryTime) {
|
|
123
|
+
console.error(`[CircuitBreaker] Transitioning from OPEN to HALF_OPEN (recovery: ${recoveryTime}ms, trip #${this.consecutiveTrips})`);
|
|
124
|
+
this.state = CircuitState.HALF_OPEN;
|
|
125
|
+
this.successCount = 0;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Record a successful request
|
|
131
|
+
*/
|
|
132
|
+
recordSuccess() {
|
|
133
|
+
if (this.state === CircuitState.HALF_OPEN) {
|
|
134
|
+
this.successCount++;
|
|
135
|
+
console.error(`[CircuitBreaker] Success in HALF_OPEN (${this.successCount}/${this.config.halfOpenSuccessThreshold})`);
|
|
136
|
+
if (this.successCount >= this.config.halfOpenSuccessThreshold) {
|
|
137
|
+
console.error('[CircuitBreaker] Recovery confirmed, transitioning to CLOSED');
|
|
138
|
+
this.state = CircuitState.CLOSED;
|
|
139
|
+
this.failureCount = 0;
|
|
140
|
+
this.successCount = 0;
|
|
141
|
+
this.lastFailureTime = null;
|
|
142
|
+
this.consecutiveTrips = 0; // Reset consecutive trips on successful recovery
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else if (this.state === CircuitState.CLOSED) {
|
|
146
|
+
// Reset failure count on success
|
|
147
|
+
this.failureCount = 0;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Record a failed request
|
|
152
|
+
*/
|
|
153
|
+
recordFailure() {
|
|
154
|
+
this.failureCount++;
|
|
155
|
+
this.lastFailureTime = Date.now();
|
|
156
|
+
console.error(`[CircuitBreaker] Failure recorded (${this.failureCount}/${this.config.failureThreshold})`);
|
|
157
|
+
if (this.state === CircuitState.HALF_OPEN) {
|
|
158
|
+
// Any failure in HALF_OPEN immediately opens the circuit
|
|
159
|
+
this.consecutiveTrips++;
|
|
160
|
+
console.error(`[CircuitBreaker] Failure in HALF_OPEN, transitioning to OPEN (consecutive trip #${this.consecutiveTrips}, recovery: ${this.getRecoveryTimeMs()}ms)`);
|
|
161
|
+
this.state = CircuitState.OPEN;
|
|
162
|
+
this.successCount = 0;
|
|
163
|
+
}
|
|
164
|
+
else if (this.failureCount >= this.config.failureThreshold) {
|
|
165
|
+
this.consecutiveTrips++;
|
|
166
|
+
console.error(`[CircuitBreaker] Threshold reached (${this.failureCount}), transitioning to OPEN (consecutive trip #${this.consecutiveTrips}, recovery: ${this.getRecoveryTimeMs()}ms)`);
|
|
167
|
+
this.state = CircuitState.OPEN;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get time remaining until recovery attempt.
|
|
172
|
+
* Uses dynamic recovery time based on consecutive trips.
|
|
173
|
+
*/
|
|
174
|
+
getTimeToRecovery() {
|
|
175
|
+
if (this.lastFailureTime === null)
|
|
176
|
+
return 0;
|
|
177
|
+
const elapsed = Date.now() - this.lastFailureTime;
|
|
178
|
+
return Math.max(0, this.getRecoveryTimeMs() - elapsed);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Check if the circuit is currently open
|
|
182
|
+
*/
|
|
183
|
+
isOpen() {
|
|
184
|
+
this.checkRecovery();
|
|
185
|
+
return this.state === CircuitState.OPEN;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get current circuit breaker status
|
|
189
|
+
*/
|
|
190
|
+
getStatus() {
|
|
191
|
+
this.checkRecovery();
|
|
192
|
+
return {
|
|
193
|
+
state: this.state,
|
|
194
|
+
failureCount: this.failureCount,
|
|
195
|
+
lastFailureTime: this.lastFailureTime,
|
|
196
|
+
timeToRecovery: this.state === CircuitState.OPEN ? this.getTimeToRecovery() : null,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get the current state
|
|
201
|
+
*/
|
|
202
|
+
getState() {
|
|
203
|
+
this.checkRecovery();
|
|
204
|
+
return this.state;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Manually reset the circuit breaker
|
|
208
|
+
*/
|
|
209
|
+
reset() {
|
|
210
|
+
this.state = CircuitState.CLOSED;
|
|
211
|
+
this.failureCount = 0;
|
|
212
|
+
this.successCount = 0;
|
|
213
|
+
this.lastFailureTime = null;
|
|
214
|
+
this.consecutiveTrips = 0;
|
|
215
|
+
console.error('[CircuitBreaker] Manually reset to CLOSED');
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Force the circuit open (for testing or manual intervention)
|
|
219
|
+
*/
|
|
220
|
+
forceOpen() {
|
|
221
|
+
this.state = CircuitState.OPEN;
|
|
222
|
+
this.lastFailureTime = Date.now();
|
|
223
|
+
console.error('[CircuitBreaker] Manually forced OPEN');
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Error thrown when circuit breaker is open
|
|
228
|
+
*/
|
|
229
|
+
export class CircuitBreakerOpenError extends Error {
|
|
230
|
+
timeToRecovery;
|
|
231
|
+
constructor(message, timeToRecovery) {
|
|
232
|
+
super(message);
|
|
233
|
+
this.name = 'CircuitBreakerOpenError';
|
|
234
|
+
this.timeToRecovery = timeToRecovery;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=circuit-breaker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../../src/services/gemini/circuit-breaker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gemini API Client
|
|
3
|
+
* Implements the client patterns from gemini-flash-3-dev-guide.md
|
|
4
|
+
*
|
|
5
|
+
* Modes:
|
|
6
|
+
* - fast(): <2s target, temperature 0.0, JSON output
|
|
7
|
+
* - thinking(): 3-8s target, extended reasoning with thinkingLevel
|
|
8
|
+
* - multimodal(): 5-15s target, image/PDF analysis
|
|
9
|
+
*/
|
|
10
|
+
import { type GeminiConfig, type ThinkingLevel, type AllowedMimeType, type MediaResolution } from './config.js';
|
|
11
|
+
import { CircuitBreakerOpenError } from './circuit-breaker.js';
|
|
12
|
+
export { CircuitBreakerOpenError };
|
|
13
|
+
/**
|
|
14
|
+
* Get a shared GeminiClient singleton.
|
|
15
|
+
* Use this instead of `new GeminiClient()` for default config.
|
|
16
|
+
* Rate limiter and circuit breaker state persist across calls.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getSharedClient(): GeminiClient;
|
|
19
|
+
/** Reset all shared state (for testing) */
|
|
20
|
+
export declare function resetSharedClient(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Token usage from a Gemini response
|
|
23
|
+
*/
|
|
24
|
+
export interface TokenUsage {
|
|
25
|
+
inputTokens: number;
|
|
26
|
+
outputTokens: number;
|
|
27
|
+
cachedTokens: number;
|
|
28
|
+
thinkingTokens: number;
|
|
29
|
+
totalTokens: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Response from Gemini API
|
|
33
|
+
*/
|
|
34
|
+
export interface GeminiResponse {
|
|
35
|
+
text: string;
|
|
36
|
+
usage: TokenUsage;
|
|
37
|
+
model: string;
|
|
38
|
+
processingTimeMs: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* File reference for multimodal requests
|
|
42
|
+
*/
|
|
43
|
+
export interface FileRef {
|
|
44
|
+
mimeType: AllowedMimeType;
|
|
45
|
+
data: string;
|
|
46
|
+
sizeBytes: number;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Gemini Client with rate limiting and circuit breaker
|
|
50
|
+
*/
|
|
51
|
+
export declare class GeminiClient {
|
|
52
|
+
private readonly client;
|
|
53
|
+
private readonly config;
|
|
54
|
+
private readonly rateLimiter;
|
|
55
|
+
private readonly circuitBreaker;
|
|
56
|
+
private readonly _contextCache;
|
|
57
|
+
constructor(configOverrides?: Partial<GeminiConfig>);
|
|
58
|
+
/**
|
|
59
|
+
* Fast mode: <2s target, temperature 0.0, JSON output
|
|
60
|
+
* Use for quick analysis tasks
|
|
61
|
+
*
|
|
62
|
+
* @param prompt - Text prompt
|
|
63
|
+
* @param schema - Optional JSON response schema
|
|
64
|
+
* @param options - Optional overrides (e.g. maxOutputTokens for large structured extraction)
|
|
65
|
+
*/
|
|
66
|
+
fast(prompt: string, schema?: object, options?: {
|
|
67
|
+
maxOutputTokens?: number;
|
|
68
|
+
requestTimeout?: number;
|
|
69
|
+
}): Promise<GeminiResponse>;
|
|
70
|
+
/**
|
|
71
|
+
* Thinking mode: 3-8s target, extended reasoning
|
|
72
|
+
* Uses Gemini 3's thinkingLevel (HIGH or MINIMAL)
|
|
73
|
+
*/
|
|
74
|
+
thinking(prompt: string, level?: ThinkingLevel): Promise<GeminiResponse>;
|
|
75
|
+
/**
|
|
76
|
+
* Multimodal mode: analyze image with prompt
|
|
77
|
+
* 5-15s target, supports images and PDFs
|
|
78
|
+
*/
|
|
79
|
+
analyzeImage(prompt: string, file: FileRef, options?: {
|
|
80
|
+
schema?: object;
|
|
81
|
+
mediaResolution?: MediaResolution;
|
|
82
|
+
thinkingConfig?: {
|
|
83
|
+
thinkingLevel: ThinkingLevel;
|
|
84
|
+
};
|
|
85
|
+
}): Promise<GeminiResponse>;
|
|
86
|
+
/**
|
|
87
|
+
* Analyze a PDF document
|
|
88
|
+
*/
|
|
89
|
+
analyzePDF(prompt: string, file: FileRef, schema?: object): Promise<GeminiResponse>;
|
|
90
|
+
/**
|
|
91
|
+
* Core generation method with retry logic
|
|
92
|
+
*/
|
|
93
|
+
private generate;
|
|
94
|
+
/**
|
|
95
|
+
* Execute request with exponential backoff retry
|
|
96
|
+
*/
|
|
97
|
+
private executeWithRetry;
|
|
98
|
+
/**
|
|
99
|
+
* Build generation config from options
|
|
100
|
+
*/
|
|
101
|
+
private buildGenerationConfig;
|
|
102
|
+
/**
|
|
103
|
+
* Estimate tokens for a request
|
|
104
|
+
*/
|
|
105
|
+
private estimateRequestTokens;
|
|
106
|
+
/**
|
|
107
|
+
* Create FileRef from a file path
|
|
108
|
+
*/
|
|
109
|
+
static fileRefFromPath(filePath: string): FileRef;
|
|
110
|
+
/**
|
|
111
|
+
* Create FileRef from a buffer
|
|
112
|
+
*/
|
|
113
|
+
static fileRefFromBuffer(buffer: Buffer, mimeType: AllowedMimeType): FileRef;
|
|
114
|
+
/**
|
|
115
|
+
* Create cached content for document context.
|
|
116
|
+
* Used when processing multiple images from the same document -
|
|
117
|
+
* cache the OCR text context once, then reference it for each image.
|
|
118
|
+
*
|
|
119
|
+
* @param contextText - Document OCR text to cache
|
|
120
|
+
* @param ttlSeconds - Cache TTL in seconds (default: 3600 = 1 hour)
|
|
121
|
+
* @returns Cache identifier for use with generateWithCache()
|
|
122
|
+
*/
|
|
123
|
+
createCachedContent(contextText: string, ttlSeconds?: number): Promise<string>;
|
|
124
|
+
/**
|
|
125
|
+
* Remove all expired entries from the context cache.
|
|
126
|
+
* Called as periodic cleanup when createCachedContent is invoked.
|
|
127
|
+
*/
|
|
128
|
+
private cleanExpiredCacheEntries;
|
|
129
|
+
/**
|
|
130
|
+
* Generate content using cached context + new image.
|
|
131
|
+
* Prepends cached text context to the image analysis prompt.
|
|
132
|
+
*/
|
|
133
|
+
generateWithCache(cacheId: string, prompt: string, file: FileRef, options?: {
|
|
134
|
+
schema?: object;
|
|
135
|
+
mediaResolution?: MediaResolution;
|
|
136
|
+
}): Promise<GeminiResponse>;
|
|
137
|
+
/**
|
|
138
|
+
* Delete a cached context
|
|
139
|
+
*/
|
|
140
|
+
deleteCachedContent(cacheId: string): boolean;
|
|
141
|
+
/**
|
|
142
|
+
* Process multiple image analysis requests efficiently.
|
|
143
|
+
* Handles rate limiting and provides progress tracking.
|
|
144
|
+
* NOT true async batch API (Gemini async batch requires server-side setup) -
|
|
145
|
+
* this is sequential with optimal rate limiting.
|
|
146
|
+
*/
|
|
147
|
+
batchAnalyzeImages(requests: Array<{
|
|
148
|
+
prompt: string;
|
|
149
|
+
file: FileRef;
|
|
150
|
+
options?: {
|
|
151
|
+
schema?: object;
|
|
152
|
+
mediaResolution?: MediaResolution;
|
|
153
|
+
};
|
|
154
|
+
}>, onProgress?: (completed: number, total: number) => void): Promise<Array<{
|
|
155
|
+
index: number;
|
|
156
|
+
result?: GeminiResponse;
|
|
157
|
+
error?: string;
|
|
158
|
+
}>>;
|
|
159
|
+
/**
|
|
160
|
+
* Get client status (rate limiter + circuit breaker)
|
|
161
|
+
*/
|
|
162
|
+
getStatus(): {
|
|
163
|
+
model: string;
|
|
164
|
+
rateLimiter: import("./rate-limiter.js").RateLimiterStatus;
|
|
165
|
+
circuitBreaker: import("./circuit-breaker.js").CircuitBreakerStatus;
|
|
166
|
+
};
|
|
167
|
+
/**
|
|
168
|
+
* Reset rate limiter and circuit breaker (for testing)
|
|
169
|
+
*/
|
|
170
|
+
reset(): void;
|
|
171
|
+
private sleep;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/services/gemini/client.ts"],"names":[],"mappings":"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"}
|