@vertesia/workflow 0.82.0 → 0.82.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/activities/advanced/createDocumentTypeFromInteractionRun.js +33 -0
- package/lib/cjs/activities/advanced/createDocumentTypeFromInteractionRun.js.map +1 -0
- package/lib/cjs/activities/advanced/createOrUpdateDocumentFromInteractionRun.js +73 -0
- package/lib/cjs/activities/advanced/createOrUpdateDocumentFromInteractionRun.js.map +1 -0
- package/lib/cjs/activities/advanced/updateDocumentFromInteractionRun.js +19 -0
- package/lib/cjs/activities/advanced/updateDocumentFromInteractionRun.js.map +1 -0
- package/lib/cjs/activities/chunkDocument.js +85 -0
- package/lib/cjs/activities/chunkDocument.js.map +1 -0
- package/lib/cjs/activities/createDocumentFromOther.js +64 -0
- package/lib/cjs/activities/createDocumentFromOther.js.map +1 -0
- package/lib/cjs/activities/executeInteraction.js +194 -0
- package/lib/cjs/activities/executeInteraction.js.map +1 -0
- package/lib/cjs/activities/extractDocumentText.js +156 -0
- package/lib/cjs/activities/extractDocumentText.js.map +1 -0
- package/lib/cjs/activities/generateDocumentProperties.js +83 -0
- package/lib/cjs/activities/generateDocumentProperties.js.map +1 -0
- package/lib/cjs/activities/generateEmbeddings.js +228 -0
- package/lib/cjs/activities/generateEmbeddings.js.map +1 -0
- package/lib/cjs/activities/generateOrAssignContentType.js +125 -0
- package/lib/cjs/activities/generateOrAssignContentType.js.map +1 -0
- package/lib/cjs/activities/getObjectFromStore.js +20 -0
- package/lib/cjs/activities/getObjectFromStore.js.map +1 -0
- package/lib/cjs/activities/handleError.js +22 -0
- package/lib/cjs/activities/handleError.js.map +1 -0
- package/lib/cjs/activities/index-dsl.js +47 -0
- package/lib/cjs/activities/index-dsl.js.map +1 -0
- package/lib/cjs/activities/index.js +21 -0
- package/lib/cjs/activities/index.js.map +1 -0
- package/lib/cjs/activities/media/prepareVideo.js +429 -0
- package/lib/cjs/activities/media/prepareVideo.js.map +1 -0
- package/lib/cjs/activities/media/processPdfWithTextract.js +103 -0
- package/lib/cjs/activities/media/processPdfWithTextract.js.map +1 -0
- package/lib/cjs/activities/media/saveGladiaTranscription.js +81 -0
- package/lib/cjs/activities/media/saveGladiaTranscription.js.map +1 -0
- package/lib/cjs/activities/media/transcribeMediaWithGladia.js +82 -0
- package/lib/cjs/activities/media/transcribeMediaWithGladia.js.map +1 -0
- package/lib/cjs/activities/notifyWebhook.js +167 -0
- package/lib/cjs/activities/notifyWebhook.js.map +1 -0
- package/lib/cjs/activities/rateLimiter.js +30 -0
- package/lib/cjs/activities/rateLimiter.js.map +1 -0
- package/lib/cjs/activities/renditions/generateImageRendition.js +66 -0
- package/lib/cjs/activities/renditions/generateImageRendition.js.map +1 -0
- package/lib/cjs/activities/renditions/generateVideoRendition.js +200 -0
- package/lib/cjs/activities/renditions/generateVideoRendition.js.map +1 -0
- package/lib/cjs/activities/setDocumentStatus.js +15 -0
- package/lib/cjs/activities/setDocumentStatus.js.map +1 -0
- package/lib/cjs/conversion/TextractProcessor.js +417 -0
- package/lib/cjs/conversion/TextractProcessor.js.map +1 -0
- package/lib/cjs/conversion/image.js +149 -0
- package/lib/cjs/conversion/image.js.map +1 -0
- package/lib/cjs/conversion/markitdown.js +42 -0
- package/lib/cjs/conversion/markitdown.js.map +1 -0
- package/lib/cjs/conversion/mutool.js +147 -0
- package/lib/cjs/conversion/mutool.js.map +1 -0
- package/lib/cjs/conversion/pandoc.js +39 -0
- package/lib/cjs/conversion/pandoc.js.map +1 -0
- package/lib/cjs/dsl/conditions.js +81 -0
- package/lib/cjs/dsl/conditions.js.map +1 -0
- package/lib/cjs/dsl/dsl-workflow.js +343 -0
- package/lib/cjs/dsl/dsl-workflow.js.map +1 -0
- package/lib/cjs/dsl/dslProxyActivities.js +23 -0
- package/lib/cjs/dsl/dslProxyActivities.js.map +1 -0
- package/lib/cjs/dsl/projections.js +59 -0
- package/lib/cjs/dsl/projections.js.map +1 -0
- package/lib/cjs/dsl/setup/ActivityContext.js +122 -0
- package/lib/cjs/dsl/setup/ActivityContext.js.map +1 -0
- package/lib/cjs/dsl/setup/fetch/DataProvider.js +51 -0
- package/lib/cjs/dsl/setup/fetch/DataProvider.js.map +1 -0
- package/lib/cjs/dsl/setup/fetch/index.js +16 -0
- package/lib/cjs/dsl/setup/fetch/index.js.map +1 -0
- package/lib/cjs/dsl/setup/fetch/providers.js +67 -0
- package/lib/cjs/dsl/setup/fetch/providers.js.map +1 -0
- package/lib/cjs/dsl/test/test-child-workflow.js +10 -0
- package/lib/cjs/dsl/test/test-child-workflow.js.map +1 -0
- package/lib/cjs/dsl/validation.js +122 -0
- package/lib/cjs/dsl/validation.js.map +1 -0
- package/lib/cjs/dsl/vars.js +341 -0
- package/lib/cjs/dsl/vars.js.map +1 -0
- package/lib/cjs/dsl/walk.js +100 -0
- package/lib/cjs/dsl/walk.js.map +1 -0
- package/lib/cjs/dsl.js +20 -0
- package/lib/cjs/dsl.js.map +1 -0
- package/lib/cjs/errors.js +70 -0
- package/lib/cjs/errors.js.map +1 -0
- package/lib/cjs/index.js +55 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/iterative-generation/activities/extractToc.js +47 -0
- package/lib/cjs/iterative-generation/activities/extractToc.js.map +1 -0
- package/lib/cjs/iterative-generation/activities/finalizeOutput.js +72 -0
- package/lib/cjs/iterative-generation/activities/finalizeOutput.js.map +1 -0
- package/lib/cjs/iterative-generation/activities/generatePart.js +78 -0
- package/lib/cjs/iterative-generation/activities/generatePart.js.map +1 -0
- package/lib/cjs/iterative-generation/activities/generateToc.js +86 -0
- package/lib/cjs/iterative-generation/activities/generateToc.js.map +1 -0
- package/lib/cjs/iterative-generation/activities/index.js +12 -0
- package/lib/cjs/iterative-generation/activities/index.js.map +1 -0
- package/lib/cjs/iterative-generation/iterativeGenerationWorkflow.js +56 -0
- package/lib/cjs/iterative-generation/iterativeGenerationWorkflow.js.map +1 -0
- package/lib/cjs/iterative-generation/types.js +5 -0
- package/lib/cjs/iterative-generation/types.js.map +1 -0
- package/lib/cjs/iterative-generation/utils.js +121 -0
- package/lib/cjs/iterative-generation/utils.js.map +1 -0
- package/lib/cjs/package.json +3 -0
- package/lib/cjs/result-types.js +10 -0
- package/lib/cjs/result-types.js.map +1 -0
- package/lib/cjs/system/notifyWebhookWorkflow.js +53 -0
- package/lib/cjs/system/notifyWebhookWorkflow.js.map +1 -0
- package/lib/cjs/system/recalculateEmbeddingsWorkflow.js +33 -0
- package/lib/cjs/system/recalculateEmbeddingsWorkflow.js.map +1 -0
- package/lib/cjs/utils/auth.js +15 -0
- package/lib/cjs/utils/auth.js.map +1 -0
- package/lib/cjs/utils/blobs.js +64 -0
- package/lib/cjs/utils/blobs.js.map +1 -0
- package/lib/cjs/utils/chunks.js +14 -0
- package/lib/cjs/utils/chunks.js.map +1 -0
- package/lib/cjs/utils/client.js +31 -0
- package/lib/cjs/utils/client.js.map +1 -0
- package/lib/cjs/utils/expand-vars.js +33 -0
- package/lib/cjs/utils/expand-vars.js.map +1 -0
- package/lib/cjs/utils/memory.js +65 -0
- package/lib/cjs/utils/memory.js.map +1 -0
- package/lib/cjs/utils/renditions.js +88 -0
- package/lib/cjs/utils/renditions.js.map +1 -0
- package/lib/cjs/utils/storage.js +54 -0
- package/lib/cjs/utils/storage.js.map +1 -0
- package/lib/cjs/utils/tokens.js +38 -0
- package/lib/cjs/utils/tokens.js.map +1 -0
- package/lib/cjs/vars.js +20 -0
- package/lib/cjs/vars.js.map +1 -0
- package/lib/cjs/workflows.js +15 -0
- package/lib/cjs/workflows.js.map +1 -0
- package/lib/esm/activities/advanced/createDocumentTypeFromInteractionRun.js +30 -0
- package/lib/esm/activities/advanced/createDocumentTypeFromInteractionRun.js.map +1 -0
- package/lib/esm/activities/advanced/createOrUpdateDocumentFromInteractionRun.js +70 -0
- package/lib/esm/activities/advanced/createOrUpdateDocumentFromInteractionRun.js.map +1 -0
- package/lib/esm/activities/advanced/updateDocumentFromInteractionRun.js +16 -0
- package/lib/esm/activities/advanced/updateDocumentFromInteractionRun.js.map +1 -0
- package/lib/esm/activities/chunkDocument.js +82 -0
- package/lib/esm/activities/chunkDocument.js.map +1 -0
- package/lib/esm/activities/createDocumentFromOther.js +58 -0
- package/lib/esm/activities/createDocumentFromOther.js.map +1 -0
- package/lib/esm/activities/executeInteraction.js +190 -0
- package/lib/esm/activities/executeInteraction.js.map +1 -0
- package/lib/esm/activities/extractDocumentText.js +153 -0
- package/lib/esm/activities/extractDocumentText.js.map +1 -0
- package/lib/esm/activities/generateDocumentProperties.js +80 -0
- package/lib/esm/activities/generateDocumentProperties.js.map +1 -0
- package/lib/esm/activities/generateEmbeddings.js +225 -0
- package/lib/esm/activities/generateEmbeddings.js.map +1 -0
- package/lib/esm/activities/generateOrAssignContentType.js +122 -0
- package/lib/esm/activities/generateOrAssignContentType.js.map +1 -0
- package/lib/esm/activities/getObjectFromStore.js +17 -0
- package/lib/esm/activities/getObjectFromStore.js.map +1 -0
- package/lib/esm/activities/handleError.js +19 -0
- package/lib/esm/activities/handleError.js.map +1 -0
- package/lib/esm/activities/index-dsl.js +23 -0
- package/lib/esm/activities/index-dsl.js.map +1 -0
- package/lib/esm/activities/index.js +5 -0
- package/lib/esm/activities/index.js.map +1 -0
- package/lib/esm/activities/media/prepareVideo.js +390 -0
- package/lib/esm/activities/media/prepareVideo.js.map +1 -0
- package/lib/esm/activities/media/processPdfWithTextract.js +99 -0
- package/lib/esm/activities/media/processPdfWithTextract.js.map +1 -0
- package/lib/esm/activities/media/saveGladiaTranscription.js +78 -0
- package/lib/esm/activities/media/saveGladiaTranscription.js.map +1 -0
- package/lib/esm/activities/media/transcribeMediaWithGladia.js +79 -0
- package/lib/esm/activities/media/transcribeMediaWithGladia.js.map +1 -0
- package/lib/esm/activities/notifyWebhook.js +164 -0
- package/lib/esm/activities/notifyWebhook.js.map +1 -0
- package/lib/esm/activities/rateLimiter.js +27 -0
- package/lib/esm/activities/rateLimiter.js.map +1 -0
- package/lib/esm/activities/renditions/generateImageRendition.js +63 -0
- package/lib/esm/activities/renditions/generateImageRendition.js.map +1 -0
- package/lib/esm/activities/renditions/generateVideoRendition.js +194 -0
- package/lib/esm/activities/renditions/generateVideoRendition.js.map +1 -0
- package/lib/esm/activities/setDocumentStatus.js +12 -0
- package/lib/esm/activities/setDocumentStatus.js.map +1 -0
- package/lib/esm/conversion/TextractProcessor.js +410 -0
- package/lib/esm/conversion/TextractProcessor.js.map +1 -0
- package/lib/esm/conversion/image.js +143 -0
- package/lib/esm/conversion/image.js.map +1 -0
- package/lib/esm/conversion/markitdown.js +36 -0
- package/lib/esm/conversion/markitdown.js.map +1 -0
- package/lib/esm/conversion/mutool.js +139 -0
- package/lib/esm/conversion/mutool.js.map +1 -0
- package/lib/esm/conversion/pandoc.js +36 -0
- package/lib/esm/conversion/pandoc.js.map +1 -0
- package/lib/esm/dsl/conditions.js +75 -0
- package/lib/esm/dsl/conditions.js.map +1 -0
- package/lib/esm/dsl/dsl-workflow.js +336 -0
- package/lib/esm/dsl/dsl-workflow.js.map +1 -0
- package/lib/esm/dsl/dslProxyActivities.js +20 -0
- package/lib/esm/dsl/dslProxyActivities.js.map +1 -0
- package/lib/esm/dsl/projections.js +55 -0
- package/lib/esm/dsl/projections.js.map +1 -0
- package/lib/esm/dsl/setup/ActivityContext.js +117 -0
- package/lib/esm/dsl/setup/ActivityContext.js.map +1 -0
- package/lib/esm/dsl/setup/fetch/DataProvider.js +47 -0
- package/lib/esm/dsl/setup/fetch/DataProvider.js.map +1 -0
- package/lib/esm/dsl/setup/fetch/index.js +12 -0
- package/lib/esm/dsl/setup/fetch/index.js.map +1 -0
- package/lib/esm/dsl/setup/fetch/providers.js +61 -0
- package/lib/esm/dsl/setup/fetch/providers.js.map +1 -0
- package/lib/esm/dsl/test/test-child-workflow.js +5 -0
- package/lib/esm/dsl/test/test-child-workflow.js.map +1 -0
- package/lib/esm/dsl/validation.js +118 -0
- package/lib/esm/dsl/validation.js.map +1 -0
- package/lib/esm/dsl/vars.js +335 -0
- package/lib/esm/dsl/vars.js.map +1 -0
- package/lib/esm/dsl/walk.js +96 -0
- package/lib/esm/dsl/walk.js.map +1 -0
- package/lib/esm/dsl.js +4 -0
- package/lib/esm/dsl.js.map +1 -0
- package/lib/esm/errors.js +61 -0
- package/lib/esm/errors.js.map +1 -0
- package/lib/esm/index.js +37 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/iterative-generation/activities/extractToc.js +44 -0
- package/lib/esm/iterative-generation/activities/extractToc.js.map +1 -0
- package/lib/esm/iterative-generation/activities/finalizeOutput.js +69 -0
- package/lib/esm/iterative-generation/activities/finalizeOutput.js.map +1 -0
- package/lib/esm/iterative-generation/activities/generatePart.js +75 -0
- package/lib/esm/iterative-generation/activities/generatePart.js.map +1 -0
- package/lib/esm/iterative-generation/activities/generateToc.js +83 -0
- package/lib/esm/iterative-generation/activities/generateToc.js.map +1 -0
- package/lib/esm/iterative-generation/activities/index.js +5 -0
- package/lib/esm/iterative-generation/activities/index.js.map +1 -0
- package/lib/esm/iterative-generation/iterativeGenerationWorkflow.js +53 -0
- package/lib/esm/iterative-generation/iterativeGenerationWorkflow.js.map +1 -0
- package/lib/esm/iterative-generation/types.js +2 -0
- package/lib/esm/iterative-generation/types.js.map +1 -0
- package/lib/esm/iterative-generation/utils.js +112 -0
- package/lib/esm/iterative-generation/utils.js.map +1 -0
- package/lib/esm/result-types.js +7 -0
- package/lib/esm/result-types.js.map +1 -0
- package/lib/esm/system/notifyWebhookWorkflow.js +50 -0
- package/lib/esm/system/notifyWebhookWorkflow.js.map +1 -0
- package/lib/esm/system/recalculateEmbeddingsWorkflow.js +30 -0
- package/lib/esm/system/recalculateEmbeddingsWorkflow.js.map +1 -0
- package/lib/esm/utils/auth.js +8 -0
- package/lib/esm/utils/auth.js.map +1 -0
- package/lib/esm/utils/blobs.js +54 -0
- package/lib/esm/utils/blobs.js.map +1 -0
- package/lib/esm/utils/chunks.js +9 -0
- package/lib/esm/utils/chunks.js.map +1 -0
- package/lib/esm/utils/client.js +27 -0
- package/lib/esm/utils/client.js.map +1 -0
- package/lib/esm/utils/expand-vars.js +30 -0
- package/lib/esm/utils/expand-vars.js.map +1 -0
- package/lib/esm/utils/memory.js +55 -0
- package/lib/esm/utils/memory.js.map +1 -0
- package/lib/esm/utils/renditions.js +80 -0
- package/lib/esm/utils/renditions.js.map +1 -0
- package/lib/esm/utils/storage.js +45 -0
- package/lib/esm/utils/storage.js.map +1 -0
- package/lib/esm/utils/tokens.js +34 -0
- package/lib/esm/utils/tokens.js.map +1 -0
- package/lib/esm/vars.js +4 -0
- package/lib/esm/vars.js.map +1 -0
- package/lib/esm/workflows.js +8 -0
- package/lib/esm/workflows.js.map +1 -0
- package/lib/types/activities/advanced/createDocumentTypeFromInteractionRun.d.ts +17 -0
- package/lib/types/activities/advanced/createDocumentTypeFromInteractionRun.d.ts.map +1 -0
- package/lib/types/activities/advanced/createOrUpdateDocumentFromInteractionRun.d.ts +39 -0
- package/lib/types/activities/advanced/createOrUpdateDocumentFromInteractionRun.d.ts.map +1 -0
- package/lib/types/activities/advanced/updateDocumentFromInteractionRun.d.ts +19 -0
- package/lib/types/activities/advanced/updateDocumentFromInteractionRun.d.ts.map +1 -0
- package/lib/types/activities/chunkDocument.d.ts +33 -0
- package/lib/types/activities/chunkDocument.d.ts.map +1 -0
- package/lib/types/activities/createDocumentFromOther.d.ts +21 -0
- package/lib/types/activities/createDocumentFromOther.d.ts.map +1 -0
- package/lib/types/activities/executeInteraction.d.ts +61 -0
- package/lib/types/activities/executeInteraction.d.ts.map +1 -0
- package/lib/types/activities/extractDocumentText.d.ts +10 -0
- package/lib/types/activities/extractDocumentText.d.ts.map +1 -0
- package/lib/types/activities/generateDocumentProperties.d.ts +32 -0
- package/lib/types/activities/generateDocumentProperties.d.ts.map +1 -0
- package/lib/types/activities/generateEmbeddings.d.ts +53 -0
- package/lib/types/activities/generateEmbeddings.d.ts.map +1 -0
- package/lib/types/activities/generateOrAssignContentType.d.ts +44 -0
- package/lib/types/activities/generateOrAssignContentType.d.ts.map +1 -0
- package/lib/types/activities/getObjectFromStore.d.ts +14 -0
- package/lib/types/activities/getObjectFromStore.d.ts.map +1 -0
- package/lib/types/activities/handleError.d.ts +6 -0
- package/lib/types/activities/handleError.d.ts.map +1 -0
- package/lib/types/activities/index-dsl.d.ts +23 -0
- package/lib/types/activities/index-dsl.d.ts.map +1 -0
- package/lib/types/activities/index.d.ts +5 -0
- package/lib/types/activities/index.d.ts.map +1 -0
- package/lib/types/activities/media/prepareVideo.d.ts +30 -0
- package/lib/types/activities/media/prepareVideo.d.ts.map +1 -0
- package/lib/types/activities/media/processPdfWithTextract.d.ts +26 -0
- package/lib/types/activities/media/processPdfWithTextract.d.ts.map +1 -0
- package/lib/types/activities/media/saveGladiaTranscription.d.ts +14 -0
- package/lib/types/activities/media/saveGladiaTranscription.d.ts.map +1 -0
- package/lib/types/activities/media/transcribeMediaWithGladia.d.ts +19 -0
- package/lib/types/activities/media/transcribeMediaWithGladia.d.ts.map +1 -0
- package/lib/types/activities/notifyWebhook.d.ts +27 -0
- package/lib/types/activities/notifyWebhook.d.ts.map +1 -0
- package/lib/types/activities/rateLimiter.d.ts +11 -0
- package/lib/types/activities/rateLimiter.d.ts.map +1 -0
- package/lib/types/activities/renditions/generateImageRendition.d.ts +14 -0
- package/lib/types/activities/renditions/generateImageRendition.d.ts.map +1 -0
- package/lib/types/activities/renditions/generateVideoRendition.d.ts +15 -0
- package/lib/types/activities/renditions/generateVideoRendition.d.ts.map +1 -0
- package/lib/types/activities/setDocumentStatus.d.ts +15 -0
- package/lib/types/activities/setDocumentStatus.d.ts.map +1 -0
- package/lib/types/conversion/TextractProcessor.d.ts +45 -0
- package/lib/types/conversion/TextractProcessor.d.ts.map +1 -0
- package/lib/types/conversion/image.d.ts +13 -0
- package/lib/types/conversion/image.d.ts.map +1 -0
- package/lib/types/conversion/markitdown.d.ts +2 -0
- package/lib/types/conversion/markitdown.d.ts.map +1 -0
- package/lib/types/conversion/mutool.d.ts +19 -0
- package/lib/types/conversion/mutool.d.ts.map +1 -0
- package/lib/types/conversion/pandoc.d.ts +2 -0
- package/lib/types/conversion/pandoc.d.ts.map +1 -0
- package/lib/types/dsl/conditions.d.ts +2 -0
- package/lib/types/dsl/conditions.d.ts.map +1 -0
- package/lib/types/dsl/dsl-workflow.d.ts +5 -0
- package/lib/types/dsl/dsl-workflow.d.ts.map +1 -0
- package/lib/types/dsl/dslProxyActivities.d.ts +10 -0
- package/lib/types/dsl/dslProxyActivities.d.ts.map +1 -0
- package/lib/types/dsl/projections.d.ts +4 -0
- package/lib/types/dsl/projections.d.ts.map +1 -0
- package/lib/types/dsl/setup/ActivityContext.d.ts +17 -0
- package/lib/types/dsl/setup/ActivityContext.d.ts.map +1 -0
- package/lib/types/dsl/setup/fetch/DataProvider.d.ts +9 -0
- package/lib/types/dsl/setup/fetch/DataProvider.d.ts.map +1 -0
- package/lib/types/dsl/setup/fetch/index.d.ts +6 -0
- package/lib/types/dsl/setup/fetch/index.d.ts.map +1 -0
- package/lib/types/dsl/setup/fetch/providers.d.ts +25 -0
- package/lib/types/dsl/setup/fetch/providers.d.ts.map +1 -0
- package/lib/types/dsl/test/test-child-workflow.d.ts +4 -0
- package/lib/types/dsl/test/test-child-workflow.d.ts.map +1 -0
- package/lib/types/dsl/validation.d.ts +4 -0
- package/lib/types/dsl/validation.d.ts.map +1 -0
- package/lib/types/dsl/vars.d.ts +48 -0
- package/lib/types/dsl/vars.d.ts.map +1 -0
- package/lib/types/dsl/walk.d.ts +18 -0
- package/lib/types/dsl/walk.d.ts.map +1 -0
- package/lib/types/dsl.d.ts +4 -0
- package/lib/types/dsl.d.ts.map +1 -0
- package/lib/types/errors.d.ts +33 -0
- package/lib/types/errors.d.ts.map +1 -0
- package/lib/types/index.d.ts +36 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/iterative-generation/activities/extractToc.d.ts +10 -0
- package/lib/types/iterative-generation/activities/extractToc.d.ts.map +1 -0
- package/lib/types/iterative-generation/activities/finalizeOutput.d.ts +3 -0
- package/lib/types/iterative-generation/activities/finalizeOutput.d.ts.map +1 -0
- package/lib/types/iterative-generation/activities/generatePart.d.ts +3 -0
- package/lib/types/iterative-generation/activities/generatePart.d.ts.map +1 -0
- package/lib/types/iterative-generation/activities/generateToc.d.ts +4 -0
- package/lib/types/iterative-generation/activities/generateToc.d.ts.map +1 -0
- package/lib/types/iterative-generation/activities/index.d.ts +5 -0
- package/lib/types/iterative-generation/activities/index.d.ts.map +1 -0
- package/lib/types/iterative-generation/iterativeGenerationWorkflow.d.ts +3 -0
- package/lib/types/iterative-generation/iterativeGenerationWorkflow.d.ts.map +1 -0
- package/lib/types/iterative-generation/types.d.ts +79 -0
- package/lib/types/iterative-generation/types.d.ts.map +1 -0
- package/lib/types/iterative-generation/utils.d.ts +26 -0
- package/lib/types/iterative-generation/utils.d.ts.map +1 -0
- package/lib/types/result-types.d.ts +22 -0
- package/lib/types/result-types.d.ts.map +1 -0
- package/lib/types/system/notifyWebhookWorkflow.d.ts +8 -0
- package/lib/types/system/notifyWebhookWorkflow.d.ts.map +1 -0
- package/lib/types/system/recalculateEmbeddingsWorkflow.d.ts +25 -0
- package/lib/types/system/recalculateEmbeddingsWorkflow.d.ts.map +1 -0
- package/lib/types/utils/auth.d.ts +4 -0
- package/lib/types/utils/auth.d.ts.map +1 -0
- package/lib/types/utils/blobs.d.ts +7 -0
- package/lib/types/utils/blobs.d.ts.map +1 -0
- package/lib/types/utils/chunks.d.ts +9 -0
- package/lib/types/utils/chunks.d.ts.map +1 -0
- package/lib/types/utils/client.d.ts +8 -0
- package/lib/types/utils/client.d.ts.map +1 -0
- package/lib/types/utils/expand-vars.d.ts +8 -0
- package/lib/types/utils/expand-vars.d.ts.map +1 -0
- package/lib/types/utils/memory.d.ts +8 -0
- package/lib/types/utils/memory.d.ts.map +1 -0
- package/lib/types/utils/renditions.d.ts +23 -0
- package/lib/types/utils/renditions.d.ts.map +1 -0
- package/lib/types/utils/storage.d.ts +16 -0
- package/lib/types/utils/storage.d.ts.map +1 -0
- package/lib/types/utils/tokens.d.ts +11 -0
- package/lib/types/utils/tokens.d.ts.map +1 -0
- package/lib/types/vars.d.ts +3 -0
- package/lib/types/vars.d.ts.map +1 -0
- package/lib/types/workflows.d.ts +8 -0
- package/lib/types/workflows.d.ts.map +1 -0
- package/lib/workflows-bundle.js +16226 -0
- package/package.json +6 -6
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Use textract to convert a pdf into a data structure of the following format:
|
|
4
|
+
* <document>
|
|
5
|
+
* <page number="n">
|
|
6
|
+
* <text/>
|
|
7
|
+
* <table/>
|
|
8
|
+
* <text/>
|
|
9
|
+
* <figure/>
|
|
10
|
+
* ...
|
|
11
|
+
* </page>
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.convertPdfToStructuredText = convertPdfToStructuredText;
|
|
15
|
+
exports.getS3AWSCredentials = getS3AWSCredentials;
|
|
16
|
+
const credential_providers_1 = require("@aws-sdk/credential-providers");
|
|
17
|
+
const common_1 = require("@vertesia/common");
|
|
18
|
+
const activity_1 = require("@temporalio/activity");
|
|
19
|
+
const TextractProcessor_js_1 = require("../../conversion/TextractProcessor.js");
|
|
20
|
+
const ActivityContext_js_1 = require("../../dsl/setup/ActivityContext.js");
|
|
21
|
+
const errors_js_1 = require("../../errors.js");
|
|
22
|
+
const result_types_js_1 = require("../../result-types.js");
|
|
23
|
+
const blobs_js_1 = require("../../utils/blobs.js");
|
|
24
|
+
const tokens_js_1 = require("../../utils/tokens.js");
|
|
25
|
+
async function convertPdfToStructuredText(payload) {
|
|
26
|
+
const { params, client, objectId } = await (0, ActivityContext_js_1.setupActivity)(payload);
|
|
27
|
+
const object = await client.objects.retrieve(objectId, "+text");
|
|
28
|
+
if (object.text && !params.force) {
|
|
29
|
+
return { hasText: true, objectId, status: result_types_js_1.TextExtractionStatus.skipped, message: "text already present and force not enabled" };
|
|
30
|
+
}
|
|
31
|
+
if (!object.content?.source) {
|
|
32
|
+
throw new errors_js_1.DocumentNotFoundError(`No source found for object ${objectId}`);
|
|
33
|
+
}
|
|
34
|
+
const pdfUrl = await client.store.objects.getContentSource(objectId).then(res => res.source);
|
|
35
|
+
if (!pdfUrl) {
|
|
36
|
+
throw new errors_js_1.DocumentNotFoundError(`Error fetching source ${object.content.source}`);
|
|
37
|
+
}
|
|
38
|
+
const project = await client.getProject();
|
|
39
|
+
const awsConfig = (await client.projects.integrations.retrieve(project.id, common_1.SupportedIntegrations.aws));
|
|
40
|
+
const credentials = await getS3AWSCredentials(awsConfig, payload.auth_token, project.id);
|
|
41
|
+
const processor = new TextractProcessor_js_1.TextractProcessor({
|
|
42
|
+
fileKey: objectId,
|
|
43
|
+
region: "us-west-2",
|
|
44
|
+
bucket: "cp-textract-tests",
|
|
45
|
+
credentials,
|
|
46
|
+
log: activity_1.log,
|
|
47
|
+
detectImages: true,
|
|
48
|
+
includeConfidenceInTables: true,
|
|
49
|
+
});
|
|
50
|
+
try {
|
|
51
|
+
if (!object.content.source.startsWith("s3://")) {
|
|
52
|
+
const buf = await (0, blobs_js_1.fetchBlobAsBuffer)(client, object.content.source);
|
|
53
|
+
await processor.upload(buf);
|
|
54
|
+
}
|
|
55
|
+
const jobId = await processor.startAnalysis(objectId);
|
|
56
|
+
let jobStatus = await processor.checkJobStatus(jobId);
|
|
57
|
+
while (jobStatus === "IN_PROGRESS") {
|
|
58
|
+
await new Promise(resolve => setTimeout(resolve, 5000));
|
|
59
|
+
jobStatus = await processor.checkJobStatus(jobId);
|
|
60
|
+
}
|
|
61
|
+
if (jobStatus === "SUCCEEDED") {
|
|
62
|
+
activity_1.log.info(`Job ${jobId} succeeded, saving results`, { jobId });
|
|
63
|
+
const fText = await processor.processResults(jobId);
|
|
64
|
+
const tokensData = (0, tokens_js_1.countTokens)(fText);
|
|
65
|
+
const etag = object.content.etag ?? (0, blobs_js_1.md5)(fText);
|
|
66
|
+
const updateData = {
|
|
67
|
+
text: fText,
|
|
68
|
+
text_etag: etag,
|
|
69
|
+
tokens: {
|
|
70
|
+
...tokensData,
|
|
71
|
+
etag: etag,
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
await client.objects.update(objectId, updateData);
|
|
75
|
+
console.log("Full text updated");
|
|
76
|
+
return { hasText: true, objectId, status: result_types_js_1.TextExtractionStatus.success, message: "Text extracted successfully" };
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
throw new Error(`Job failed with status: ${jobStatus}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
console.error("Error processing document:", error);
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async function getS3AWSCredentials(awsConfig, composableAuthToken, projectId) {
|
|
88
|
+
// fetch s3 role ARN
|
|
89
|
+
if (!awsConfig || !awsConfig.enabled) {
|
|
90
|
+
throw new errors_js_1.DocumentNotFoundError("AWS integration is not enabled for this project");
|
|
91
|
+
}
|
|
92
|
+
if (!awsConfig.s3_role_arn) {
|
|
93
|
+
throw new errors_js_1.DocumentNotFoundError("S3 Role ARN is not defined in AWS project integration");
|
|
94
|
+
}
|
|
95
|
+
activity_1.log.info("Getting AWS credentials for Textract", { projectId, composableAuthToken, roleArn: awsConfig.s3_role_arn });
|
|
96
|
+
const credentials = (0, credential_providers_1.fromWebToken)({
|
|
97
|
+
webIdentityToken: composableAuthToken,
|
|
98
|
+
roleArn: awsConfig.s3_role_arn,
|
|
99
|
+
roleSessionName: `cp-project-textract-${projectId}`,
|
|
100
|
+
});
|
|
101
|
+
return credentials;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=processPdfWithTextract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processPdfWithTextract.js","sourceRoot":"","sources":["../../../../src/activities/media/processPdfWithTextract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.saveGladiaTranscription = saveGladiaTranscription;
|
|
4
|
+
const activity_1 = require("@temporalio/activity");
|
|
5
|
+
const api_fetch_client_1 = require("@vertesia/api-fetch-client");
|
|
6
|
+
const common_1 = require("@vertesia/common");
|
|
7
|
+
const ActivityContext_js_1 = require("../../dsl/setup/ActivityContext.js");
|
|
8
|
+
const result_types_js_1 = require("../../result-types.js");
|
|
9
|
+
const GLADIA_URL = "https://api.gladia.io/v2";
|
|
10
|
+
/**
|
|
11
|
+
* Fetches transcription results from Gladia and saves them to the content object.
|
|
12
|
+
* This activity is called after transcribeMedia completes via webhook callback.
|
|
13
|
+
*/
|
|
14
|
+
async function saveGladiaTranscription(payload) {
|
|
15
|
+
const { params, client, objectId } = await (0, ActivityContext_js_1.setupActivity)(payload);
|
|
16
|
+
const gladiaConfig = await client.projects.integrations.retrieve(payload.project_id, common_1.SupportedIntegrations.gladia);
|
|
17
|
+
if (!gladiaConfig || !gladiaConfig.enabled) {
|
|
18
|
+
return {
|
|
19
|
+
hasText: false,
|
|
20
|
+
objectId,
|
|
21
|
+
status: result_types_js_1.TextExtractionStatus.error,
|
|
22
|
+
error: "Gladia integration not enabled",
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const gladiaClient = new api_fetch_client_1.FetchClient(gladiaConfig.url ?? GLADIA_URL);
|
|
26
|
+
gladiaClient.withHeaders({ "x-gladia-key": gladiaConfig.api_key });
|
|
27
|
+
activity_1.log.info(`Fetching transcription result from Gladia`, { objectId, transcriptionId: params.gladiaTranscriptionId });
|
|
28
|
+
const transcriptionResult = await gladiaClient.get(`/transcription/${params.gladiaTranscriptionId}`);
|
|
29
|
+
if (transcriptionResult.status === 'error') {
|
|
30
|
+
activity_1.log.error(`Gladia transcription failed`, { objectId, error: transcriptionResult });
|
|
31
|
+
return {
|
|
32
|
+
hasText: false,
|
|
33
|
+
objectId,
|
|
34
|
+
status: result_types_js_1.TextExtractionStatus.error,
|
|
35
|
+
error: "Gladia transcription failed",
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
if (transcriptionResult.status !== 'done') {
|
|
39
|
+
activity_1.log.warn(`Gladia transcription not ready`, { objectId, status: transcriptionResult.status });
|
|
40
|
+
return {
|
|
41
|
+
hasText: false,
|
|
42
|
+
objectId,
|
|
43
|
+
status: result_types_js_1.TextExtractionStatus.error,
|
|
44
|
+
error: `Gladia transcription not ready: ${transcriptionResult.status}`,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const object = await client.objects.retrieve(objectId, "+text");
|
|
48
|
+
const segments = processUtterances(transcriptionResult.result.transcription.utterances);
|
|
49
|
+
const fullText = transcriptionResult.result.transcription.full_transcript;
|
|
50
|
+
await client.objects.update(objectId, {
|
|
51
|
+
text: fullText,
|
|
52
|
+
text_etag: object.content?.etag,
|
|
53
|
+
transcript: {
|
|
54
|
+
segments,
|
|
55
|
+
etag: object.content?.etag
|
|
56
|
+
},
|
|
57
|
+
metadata: {
|
|
58
|
+
...object.metadata,
|
|
59
|
+
duration: transcriptionResult.result.metadata.audio_duration,
|
|
60
|
+
languages: transcriptionResult.result.transcription.languages
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
activity_1.log.info(`Saved transcription for object`, { objectId, textLength: fullText?.length, segmentCount: segments.length });
|
|
64
|
+
return {
|
|
65
|
+
hasText: (fullText?.length ?? 0) > 0,
|
|
66
|
+
objectId,
|
|
67
|
+
status: result_types_js_1.TextExtractionStatus.success,
|
|
68
|
+
message: `Transcription saved with ${segments.length} segments`
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function processUtterances(utterances) {
|
|
72
|
+
return utterances.map(u => ({
|
|
73
|
+
start: u.start,
|
|
74
|
+
end: u.end,
|
|
75
|
+
text: u.text,
|
|
76
|
+
speaker: u.speaker,
|
|
77
|
+
confidence: u.confidence,
|
|
78
|
+
language: u.language
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=saveGladiaTranscription.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"saveGladiaTranscription.js","sourceRoot":"","sources":["../../../../src/activities/media/saveGladiaTranscription.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.transcribeMedia = transcribeMedia;
|
|
4
|
+
const activity_1 = require("@temporalio/activity");
|
|
5
|
+
const api_fetch_client_1 = require("@vertesia/api-fetch-client");
|
|
6
|
+
const common_1 = require("@vertesia/common");
|
|
7
|
+
const ActivityContext_js_1 = require("../../dsl/setup/ActivityContext.js");
|
|
8
|
+
const errors_js_1 = require("../../errors.js");
|
|
9
|
+
const index_js_1 = require("../../index.js");
|
|
10
|
+
const GLADIA_URL = "https://api.gladia.io/v2";
|
|
11
|
+
async function transcribeMedia(payload) {
|
|
12
|
+
const { params, client, objectId } = await (0, ActivityContext_js_1.setupActivity)(payload);
|
|
13
|
+
const gladiaConfig = await client.projects.integrations.retrieve(payload.project_id, common_1.SupportedIntegrations.gladia);
|
|
14
|
+
if (!gladiaConfig || !gladiaConfig.enabled) {
|
|
15
|
+
return {
|
|
16
|
+
hasText: false,
|
|
17
|
+
objectId,
|
|
18
|
+
status: index_js_1.TextExtractionStatus.error,
|
|
19
|
+
error: "Gladia integration not enabled",
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const object = await client.objects.retrieve(objectId, "+text");
|
|
23
|
+
const gladiaClient = new api_fetch_client_1.FetchClient(gladiaConfig.url ?? GLADIA_URL);
|
|
24
|
+
gladiaClient.withHeaders({ "x-gladia-key": gladiaConfig.api_key });
|
|
25
|
+
if (object.text && !params.force) {
|
|
26
|
+
return { hasText: true, objectId, status: index_js_1.TextExtractionStatus.skipped, message: "text already present and force not enabled" };
|
|
27
|
+
}
|
|
28
|
+
if (!object.content?.source) {
|
|
29
|
+
throw new errors_js_1.DocumentNotFoundError(`No source found for object ${objectId}`);
|
|
30
|
+
}
|
|
31
|
+
// Check for audio rendition in video metadata (preferred for videos)
|
|
32
|
+
let mediaSource = object.content.source;
|
|
33
|
+
if (object.metadata?.type === common_1.ContentNature.Video) {
|
|
34
|
+
const videoMetadata = object.metadata;
|
|
35
|
+
const audioRendition = videoMetadata.renditions?.find(r => r.name === common_1.AUDIO_RENDITION_NAME);
|
|
36
|
+
if (audioRendition?.content?.source) {
|
|
37
|
+
mediaSource = audioRendition.content.source;
|
|
38
|
+
activity_1.log.info(`Found audio rendition for video object ${objectId}`, { mediaSource });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Get download URL for the media source
|
|
42
|
+
const { url: mediaUrl } = await client.files.getDownloadUrl(mediaSource);
|
|
43
|
+
if (!mediaUrl) {
|
|
44
|
+
throw new errors_js_1.DocumentNotFoundError(`Error fetching media URL for ${mediaSource}`);
|
|
45
|
+
}
|
|
46
|
+
activity_1.log.info(`Using media URL for transcription`, { objectId, mediaUrl: mediaSource });
|
|
47
|
+
const taskToken = Buffer.from((0, activity_1.activityInfo)().taskToken).toString('base64url');
|
|
48
|
+
const callbackUrl = generateCallbackUrlForGladia(client.store.baseUrl, taskToken, objectId);
|
|
49
|
+
activity_1.log.info(`Transcribing media ${mediaUrl} with Gladia`, { objectId, callbackUrl });
|
|
50
|
+
try {
|
|
51
|
+
const res = await gladiaClient.post("/transcription", {
|
|
52
|
+
payload: {
|
|
53
|
+
audio_url: mediaUrl,
|
|
54
|
+
callback_url: callbackUrl,
|
|
55
|
+
diarization_enhanced: true,
|
|
56
|
+
enable_code_switching: true,
|
|
57
|
+
subtitles: true,
|
|
58
|
+
subtitles_config: {
|
|
59
|
+
formats: ["vtt"],
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
activity_1.log.info(`Transcription request sent to Gladia`, { objectId, res });
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (error instanceof api_fetch_client_1.RequestError && error.status === 422) {
|
|
67
|
+
return {
|
|
68
|
+
hasText: false,
|
|
69
|
+
objectId,
|
|
70
|
+
status: index_js_1.TextExtractionStatus.error,
|
|
71
|
+
error: `Gladia transcription error: ${error.message}`,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
activity_1.log.error(`Error sending transcription request to Gladia for object ${objectId}`, { error });
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
throw new activity_1.CompleteAsyncError();
|
|
78
|
+
}
|
|
79
|
+
function generateCallbackUrlForGladia(baseUrl, taskToken, objectId) {
|
|
80
|
+
return `${baseUrl}/webhooks/gladia/${objectId}?task_token=${taskToken}`;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=transcribeMediaWithGladia.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcribeMediaWithGladia.js","sourceRoot":"","sources":["../../../../src/activities/media/transcribeMediaWithGladia.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.notifyWebhook = notifyWebhook;
|
|
4
|
+
const activity_1 = require("@temporalio/activity");
|
|
5
|
+
const client_1 = require("@vertesia/client");
|
|
6
|
+
const common_1 = require("@vertesia/common");
|
|
7
|
+
const ActivityContext_js_1 = require("../dsl/setup/ActivityContext.js");
|
|
8
|
+
const errors_js_1 = require("../errors.js");
|
|
9
|
+
const client_js_1 = require("../utils/client.js");
|
|
10
|
+
async function notifyWebhook(payload) {
|
|
11
|
+
const { params } = await (0, ActivityContext_js_1.setupActivity)(payload);
|
|
12
|
+
const { webhook, method, headers: defaultHeaders } = params;
|
|
13
|
+
// resolve the url and the api version of the webhook
|
|
14
|
+
let target_url, version;
|
|
15
|
+
if (typeof webhook === 'string') {
|
|
16
|
+
target_url = webhook;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
target_url = webhook.url;
|
|
20
|
+
version = webhook.version;
|
|
21
|
+
}
|
|
22
|
+
if (!target_url)
|
|
23
|
+
throw new errors_js_1.WorkflowParamNotFoundError('target_url');
|
|
24
|
+
const hasBody = method === 'POST'; //body is sent only for POST, always includes workflow info
|
|
25
|
+
const headers = {
|
|
26
|
+
...defaultHeaders,
|
|
27
|
+
};
|
|
28
|
+
if (hasBody) {
|
|
29
|
+
headers['Content-Type'] = 'application/json';
|
|
30
|
+
}
|
|
31
|
+
const body = hasBody ? await createRequestBody(payload, params, version) : undefined;
|
|
32
|
+
activity_1.log.info(`Notifying webhook at ${target_url}`);
|
|
33
|
+
const res = await fetch(target_url, {
|
|
34
|
+
method,
|
|
35
|
+
body,
|
|
36
|
+
headers,
|
|
37
|
+
}).catch(err => {
|
|
38
|
+
activity_1.log.error(`An error occurred while notifying webhook at ${target_url}`, { err });
|
|
39
|
+
throw err;
|
|
40
|
+
});
|
|
41
|
+
if (!res.ok) {
|
|
42
|
+
activity_1.log.warn(`Webhook endpoint ${target_url} returned an error - ${res.status} ${res.statusText}`, { fetchResponse: res });
|
|
43
|
+
// Try to get response payload for error message
|
|
44
|
+
let errorMessage = `Webhook Notification to ${target_url} failed with status: ${res.status} ${res.statusText}`;
|
|
45
|
+
try {
|
|
46
|
+
const responseText = await res.text();
|
|
47
|
+
if (responseText) {
|
|
48
|
+
errorMessage += ` - Response: ${responseText}`;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (readError) {
|
|
52
|
+
// If we can't read the response, just use the basic error message
|
|
53
|
+
activity_1.log.debug('Could not read response body for error', { readError });
|
|
54
|
+
}
|
|
55
|
+
throw new Error(errorMessage);
|
|
56
|
+
}
|
|
57
|
+
return { status: res.status, message: res.statusText, url: res.url };
|
|
58
|
+
}
|
|
59
|
+
// --------------------------------------
|
|
60
|
+
// Data provider for webhooks
|
|
61
|
+
// this allows to customize the payload sent to the webhook depending on the
|
|
62
|
+
// type of workflow and the api version of the webhook
|
|
63
|
+
// --------------------------------------
|
|
64
|
+
function getWorkflowName(workflowType) {
|
|
65
|
+
// remove trailing Workflow or _Workflow case insensitive from the workflow type
|
|
66
|
+
return workflowType.replace(/_?workflow$/i, '');
|
|
67
|
+
}
|
|
68
|
+
async function createRequestBody(payload, params, api_version) {
|
|
69
|
+
if (api_version === undefined || Number(api_version) < common_1.ApiVersions.COMPLETION_RESULT_V1) {
|
|
70
|
+
return createOldRequestBody(payload, params);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
return createLatestRequestBody(payload, params, api_version);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async function createLatestRequestBody(payload, params, api_version) {
|
|
77
|
+
const data = await createEventData(payload, params, api_version);
|
|
78
|
+
return JSON.stringify({
|
|
79
|
+
workflow_id: params.workflow_id,
|
|
80
|
+
workflow_name: getWorkflowName(params.workflow_type),
|
|
81
|
+
workflow_run_id: params.workflow_run_id,
|
|
82
|
+
event_name: params.event_name,
|
|
83
|
+
detail: data,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
async function createEventData(payload, params, api_version) {
|
|
87
|
+
const data = params.detail;
|
|
88
|
+
if (data && data.run_id && params.event_name === "workflow_completed" && params.workflow_type === 'ExecuteInteractionWorkflow') {
|
|
89
|
+
const client = getVersionedVertesiaClient(payload, api_version); //ensure client is initialized
|
|
90
|
+
// we replace the result property with the full execution run object
|
|
91
|
+
return await client.runs.retrieve(data.run_id);
|
|
92
|
+
}
|
|
93
|
+
return data;
|
|
94
|
+
}
|
|
95
|
+
function getVersionedVertesiaClient(payload, version) {
|
|
96
|
+
// set the api version header
|
|
97
|
+
return new client_1.VertesiaClient((0, client_js_1.getVertesiaClientOptions)(payload)).withApiVersion(version ? String(version) : null);
|
|
98
|
+
}
|
|
99
|
+
// ----------------- Compatibility code -----------------
|
|
100
|
+
/* Before 2025-10-08 the notifyWebhook POST body was in the format:
|
|
101
|
+
|
|
102
|
+
{
|
|
103
|
+
"workflowId": "generation:ExecuteInteractionWorkflow:WhatColor:ox8wu6t4",
|
|
104
|
+
"runId": "0199c2c6-818f-77eb-b931-c1ba8b9e5184",
|
|
105
|
+
"status": "completed",
|
|
106
|
+
"result": {
|
|
107
|
+
"run_id": "68e616274b0e9bb510462378",
|
|
108
|
+
"status": "completed",
|
|
109
|
+
"result": {"Color": "white"}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
After Versions.COMPLETION_RESULT_V1 (20250925) when the completion result interface changed we improved the
|
|
114
|
+
payload to the current format:
|
|
115
|
+
|
|
116
|
+
{
|
|
117
|
+
"workflow_id": "generation:ExecuteInteractionWorkflow:WhatColor:bdedqjqj6",
|
|
118
|
+
"workflow_name": "ExecuteInteraction",
|
|
119
|
+
"workflow_run_id": "0199c2d4-6b1d-7cf2-a1e5-4cac6778091e",
|
|
120
|
+
"event_name": "workflow_completed",
|
|
121
|
+
"detail": ExecutionRun
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
where ExecutionRun contains a result property with the new completion result format.
|
|
125
|
+
|
|
126
|
+
"result": [
|
|
127
|
+
{
|
|
128
|
+
"type": "json",
|
|
129
|
+
"value": {
|
|
130
|
+
"Color": "white"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
],
|
|
134
|
+
|
|
135
|
+
*/
|
|
136
|
+
//@ts-ignore
|
|
137
|
+
async function createOldRequestBody(payload, params) {
|
|
138
|
+
let data = params.detail;
|
|
139
|
+
if (data && data.run_id && params.event_name === "workflow_completed" && params.workflow_type === 'ExecuteInteractionWorkflow') {
|
|
140
|
+
const client = getVersionedVertesiaClient(payload, null); //ensure client is using no specific version
|
|
141
|
+
// Important Note: we cannot use client.runs.retrieve since it will transform the run result to the new format because of InteractionOutput
|
|
142
|
+
const run = await client.runs.get(data.run_id);
|
|
143
|
+
// since we use an unversioned client the run will be in old format so we don't need to tranform the result
|
|
144
|
+
const result = run.result;
|
|
145
|
+
data = {
|
|
146
|
+
workflowId: params.workflow_id,
|
|
147
|
+
runId: params.workflow_run_id,
|
|
148
|
+
status: params.event_name === 'workflow_completed' ? 'completed' : params.event_name,
|
|
149
|
+
result: {
|
|
150
|
+
run_id: run.id,
|
|
151
|
+
status: run.status,
|
|
152
|
+
result: result || null
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
// Always include workflow metadata in old format, even when detail is undefined
|
|
158
|
+
data = {
|
|
159
|
+
workflowId: params.workflow_id,
|
|
160
|
+
runId: params.workflow_run_id,
|
|
161
|
+
status: params.event_name === 'workflow_completed' ? 'completed' : params.event_name,
|
|
162
|
+
result: data || null
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
return JSON.stringify(data);
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=notifyWebhook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifyWebhook.js","sourceRoot":"","sources":["../../../src/activities/notifyWebhook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.checkRateLimit = checkRateLimit;
|
|
4
|
+
const activity_1 = require("@temporalio/activity");
|
|
5
|
+
const ActivityContext_js_1 = require("../dsl/setup/ActivityContext.js");
|
|
6
|
+
async function checkRateLimit(payload) {
|
|
7
|
+
const { client, params } = await (0, ActivityContext_js_1.setupActivity)(payload);
|
|
8
|
+
const { environmentId, modelId } = params;
|
|
9
|
+
const result = {
|
|
10
|
+
delayMs: 0,
|
|
11
|
+
};
|
|
12
|
+
try {
|
|
13
|
+
// Call the studio-server endpoint to get rate limit delay using the Vertesia client
|
|
14
|
+
const info = (0, activity_1.activityInfo)();
|
|
15
|
+
const requestPayload = {
|
|
16
|
+
interaction: params.interactionIdOrEndpoint,
|
|
17
|
+
workflow_run_id: info.workflowExecution.runId,
|
|
18
|
+
environment_id: environmentId,
|
|
19
|
+
model_id: modelId,
|
|
20
|
+
};
|
|
21
|
+
const response = await client.interactions.requestSlot(requestPayload);
|
|
22
|
+
result.delayMs = response.delay_ms;
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
activity_1.log.warn('Failed to call rate limit API:', { error });
|
|
26
|
+
throw error;
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=rateLimiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../../src/activities/rateLimiter.ts"],"names":[],"mappings":";;AAcA,wCA0BC;AAvCD,mDAAyD;AACzD,wEAAgE;AAYzD,KAAK,UAAU,cAAc,CAAC,OAAqD;IACxF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,kCAAa,EAAkB,OAAO,CAAC,CAAC;IACzE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAE1C,MAAM,MAAM,GAAoB;QAC9B,OAAO,EAAE,CAAC;KACX,CAAA;IAED,IAAI,CAAC;QACH,oFAAoF;QACpF,MAAM,IAAI,GAAG,IAAA,uBAAY,GAAE,CAAC;QAC5B,MAAM,cAAc,GAA4B;YAC9C,WAAW,EAAE,MAAM,CAAC,uBAAuB;YAC3C,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK;YAC7C,cAAc,EAAE,aAAa;YAC7B,QAAQ,EAAE,OAAO;SAClB,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QACvE,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,cAAG,CAAC,IAAI,CAAC,gCAAgC,EAAE,EAAC,KAAK,EAAC,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateImageRendition = generateImageRendition;
|
|
4
|
+
const activity_1 = require("@temporalio/activity");
|
|
5
|
+
const ActivityContext_js_1 = require("../../dsl/setup/ActivityContext.js");
|
|
6
|
+
const errors_js_1 = require("../../errors.js");
|
|
7
|
+
const blobs_js_1 = require("../../utils/blobs.js");
|
|
8
|
+
const renditions_js_1 = require("../../utils/renditions.js");
|
|
9
|
+
async function generateImageRendition(payload) {
|
|
10
|
+
const { client, objectId, params: originParams, } = await (0, ActivityContext_js_1.setupActivity)(payload);
|
|
11
|
+
// Fix: Use maxHeightWidth if max_hw is not provided
|
|
12
|
+
const params = {
|
|
13
|
+
...originParams,
|
|
14
|
+
max_hw: originParams.max_hw || originParams.maxHeightWidth || 1596, // Default to 1596 if both are missing
|
|
15
|
+
format: originParams.format || originParams.format_output || "png", // Default to png if format is missing
|
|
16
|
+
};
|
|
17
|
+
activity_1.log.info(`Generating image rendition for ${objectId}`, {
|
|
18
|
+
originParams,
|
|
19
|
+
params,
|
|
20
|
+
});
|
|
21
|
+
const inputObject = await client.objects.retrieve(objectId).catch((err) => {
|
|
22
|
+
activity_1.log.error(`Failed to retrieve document ${objectId}`, { err });
|
|
23
|
+
if (err.message.includes("not found")) {
|
|
24
|
+
throw new errors_js_1.DocumentNotFoundError(`Document ${objectId} not found`, [objectId]);
|
|
25
|
+
}
|
|
26
|
+
throw err;
|
|
27
|
+
});
|
|
28
|
+
if (!inputObject) {
|
|
29
|
+
activity_1.log.error(`Document ${objectId} not found`);
|
|
30
|
+
throw new errors_js_1.DocumentNotFoundError(`Document ${objectId} not found`, [objectId]);
|
|
31
|
+
}
|
|
32
|
+
if (!params.format) {
|
|
33
|
+
activity_1.log.error(`Format not found`);
|
|
34
|
+
throw new errors_js_1.WorkflowParamNotFoundError(`format`);
|
|
35
|
+
}
|
|
36
|
+
if (!inputObject.content?.source) {
|
|
37
|
+
activity_1.log.error(`Document ${objectId} has no source`);
|
|
38
|
+
throw new errors_js_1.DocumentNotFoundError(`Document ${objectId} has no source`, [objectId]);
|
|
39
|
+
}
|
|
40
|
+
if (!inputObject.content.type ||
|
|
41
|
+
!inputObject.content.type?.startsWith("image/")) {
|
|
42
|
+
activity_1.log.error(`Document ${objectId} is not an image or a video: ${inputObject.content.type}`);
|
|
43
|
+
throw new errors_js_1.DocumentNotFoundError(`Document ${objectId} is not an image or a video: ${inputObject.content.type}`, [objectId]);
|
|
44
|
+
}
|
|
45
|
+
//array of rendition files to upload
|
|
46
|
+
let renditionPages = [];
|
|
47
|
+
const imageFile = await (0, blobs_js_1.saveBlobToTempFile)(client, inputObject.content.source);
|
|
48
|
+
activity_1.log.info(`Image ${objectId} copied to ${imageFile}`);
|
|
49
|
+
renditionPages.push(imageFile);
|
|
50
|
+
//IF no etag, log and use use object id as etag
|
|
51
|
+
if (!inputObject.content.etag) {
|
|
52
|
+
activity_1.log.warn(`Document ${objectId} has no etag, using object id as etag`);
|
|
53
|
+
}
|
|
54
|
+
const contentEtag = inputObject.content.etag ?? inputObject.id;
|
|
55
|
+
const uploaded = await (0, renditions_js_1.uploadRenditionPages)(client, contentEtag, [imageFile], params);
|
|
56
|
+
if (!uploaded || !uploaded.length || !uploaded[0]) {
|
|
57
|
+
activity_1.log.error(`Failed to upload rendition for ${objectId}`, { uploaded });
|
|
58
|
+
throw new Error(`Failed to upload rendition for ${objectId} - upload object is empty`);
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
uploads: uploaded.map((u) => u),
|
|
62
|
+
format: params.format,
|
|
63
|
+
status: "success",
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=generateImageRendition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateImageRendition.js","sourceRoot":"","sources":["../../../../src/activities/renditions/generateImageRendition.ts"],"names":[],"mappings":"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"}
|