@vertesia/workflow 0.79.0 → 0.79.1
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 +3 -4
- package/lib/cjs/activities/advanced/createDocumentTypeFromInteractionRun.js.map +1 -1
- package/lib/cjs/activities/advanced/createOrUpdateDocumentFromInteractionRun.js +10 -4
- package/lib/cjs/activities/advanced/createOrUpdateDocumentFromInteractionRun.js.map +1 -1
- package/lib/cjs/activities/advanced/updateDocumentFromInteractionRun.js +3 -4
- package/lib/cjs/activities/advanced/updateDocumentFromInteractionRun.js.map +1 -1
- package/lib/cjs/activities/chunkDocument.js +1 -2
- package/lib/cjs/activities/chunkDocument.js.map +1 -1
- package/lib/cjs/activities/executeInteraction.js +5 -4
- package/lib/cjs/activities/executeInteraction.js.map +1 -1
- package/lib/cjs/activities/generateDocumentProperties.js +2 -3
- package/lib/cjs/activities/generateDocumentProperties.js.map +1 -1
- package/lib/cjs/activities/generateOrAssignContentType.js +2 -3
- package/lib/cjs/activities/generateOrAssignContentType.js.map +1 -1
- package/lib/cjs/activities/index-dsl.js +3 -1
- package/lib/cjs/activities/index-dsl.js.map +1 -1
- package/lib/cjs/activities/media/prepareVideo.js +429 -0
- package/lib/cjs/activities/media/prepareVideo.js.map +1 -0
- package/lib/cjs/activities/media/transcribeMediaWithGladia.js +48 -15
- package/lib/cjs/activities/media/transcribeMediaWithGladia.js.map +1 -1
- package/lib/cjs/activities/notifyWebhook.js +2 -1
- package/lib/cjs/activities/notifyWebhook.js.map +1 -1
- package/lib/cjs/dsl/dsl-workflow.js +6 -1
- package/lib/cjs/dsl/dsl-workflow.js.map +1 -1
- package/lib/cjs/dsl/setup/ActivityContext.js +7 -4
- package/lib/cjs/dsl/setup/ActivityContext.js.map +1 -1
- package/lib/cjs/errors.js +14 -1
- package/lib/cjs/errors.js.map +1 -1
- package/lib/cjs/index.js +1 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/iterative-generation/activities/extractToc.js +2 -2
- package/lib/cjs/iterative-generation/activities/extractToc.js.map +1 -1
- package/lib/cjs/iterative-generation/activities/finalizeOutput.js +7 -4
- package/lib/cjs/iterative-generation/activities/finalizeOutput.js.map +1 -1
- package/lib/cjs/iterative-generation/activities/generatePart.js +18 -14
- package/lib/cjs/iterative-generation/activities/generatePart.js.map +1 -1
- package/lib/cjs/iterative-generation/activities/generateToc.js +46 -56
- package/lib/cjs/iterative-generation/activities/generateToc.js.map +1 -1
- package/lib/cjs/iterative-generation/utils.js.map +1 -1
- package/lib/cjs/utils/blobs.js +4 -1
- package/lib/cjs/utils/blobs.js.map +1 -1
- package/lib/cjs/utils/client.js +3 -1
- package/lib/cjs/utils/client.js.map +1 -1
- package/lib/esm/activities/advanced/createDocumentTypeFromInteractionRun.js +3 -4
- package/lib/esm/activities/advanced/createDocumentTypeFromInteractionRun.js.map +1 -1
- package/lib/esm/activities/advanced/createOrUpdateDocumentFromInteractionRun.js +10 -4
- package/lib/esm/activities/advanced/createOrUpdateDocumentFromInteractionRun.js.map +1 -1
- package/lib/esm/activities/advanced/updateDocumentFromInteractionRun.js +3 -4
- package/lib/esm/activities/advanced/updateDocumentFromInteractionRun.js.map +1 -1
- package/lib/esm/activities/chunkDocument.js +1 -2
- package/lib/esm/activities/chunkDocument.js.map +1 -1
- package/lib/esm/activities/executeInteraction.js +5 -4
- package/lib/esm/activities/executeInteraction.js.map +1 -1
- package/lib/esm/activities/generateDocumentProperties.js +2 -3
- package/lib/esm/activities/generateDocumentProperties.js.map +1 -1
- package/lib/esm/activities/generateOrAssignContentType.js +2 -3
- package/lib/esm/activities/generateOrAssignContentType.js.map +1 -1
- package/lib/esm/activities/index-dsl.js +1 -0
- package/lib/esm/activities/index-dsl.js.map +1 -1
- package/lib/esm/activities/media/prepareVideo.js +390 -0
- package/lib/esm/activities/media/prepareVideo.js.map +1 -0
- package/lib/esm/activities/media/transcribeMediaWithGladia.js +50 -17
- package/lib/esm/activities/media/transcribeMediaWithGladia.js.map +1 -1
- package/lib/esm/activities/notifyWebhook.js +2 -1
- package/lib/esm/activities/notifyWebhook.js.map +1 -1
- package/lib/esm/dsl/dsl-workflow.js +6 -1
- package/lib/esm/dsl/dsl-workflow.js.map +1 -1
- package/lib/esm/dsl/setup/ActivityContext.js +10 -7
- package/lib/esm/dsl/setup/ActivityContext.js.map +1 -1
- package/lib/esm/errors.js +12 -0
- package/lib/esm/errors.js.map +1 -1
- package/lib/esm/index.js +1 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/iterative-generation/activities/extractToc.js +3 -3
- package/lib/esm/iterative-generation/activities/extractToc.js.map +1 -1
- package/lib/esm/iterative-generation/activities/finalizeOutput.js +9 -6
- package/lib/esm/iterative-generation/activities/finalizeOutput.js.map +1 -1
- package/lib/esm/iterative-generation/activities/generatePart.js +19 -15
- package/lib/esm/iterative-generation/activities/generatePart.js.map +1 -1
- package/lib/esm/iterative-generation/activities/generateToc.js +46 -56
- package/lib/esm/iterative-generation/activities/generateToc.js.map +1 -1
- package/lib/esm/iterative-generation/utils.js.map +1 -1
- package/lib/esm/utils/blobs.js +4 -1
- package/lib/esm/utils/blobs.js.map +1 -1
- package/lib/esm/utils/client.js +4 -2
- package/lib/esm/utils/client.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types/activities/advanced/createDocumentTypeFromInteractionRun.d.ts.map +1 -1
- package/lib/types/activities/advanced/createOrUpdateDocumentFromInteractionRun.d.ts.map +1 -1
- package/lib/types/activities/advanced/updateDocumentFromInteractionRun.d.ts.map +1 -1
- package/lib/types/activities/chunkDocument.d.ts.map +1 -1
- package/lib/types/activities/executeInteraction.d.ts +1 -1
- package/lib/types/activities/executeInteraction.d.ts.map +1 -1
- package/lib/types/activities/generateDocumentProperties.d.ts.map +1 -1
- package/lib/types/activities/generateOrAssignContentType.d.ts.map +1 -1
- package/lib/types/activities/index-dsl.d.ts +1 -0
- package/lib/types/activities/index-dsl.d.ts.map +1 -1
- 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/transcribeMediaWithGladia.d.ts.map +1 -1
- package/lib/types/dsl/dsl-workflow.d.ts.map +1 -1
- package/lib/types/dsl/setup/ActivityContext.d.ts.map +1 -1
- package/lib/types/errors.d.ts +6 -0
- package/lib/types/errors.d.ts.map +1 -1
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/iterative-generation/activities/extractToc.d.ts.map +1 -1
- package/lib/types/iterative-generation/activities/finalizeOutput.d.ts.map +1 -1
- package/lib/types/iterative-generation/activities/generatePart.d.ts.map +1 -1
- package/lib/types/iterative-generation/activities/generateToc.d.ts.map +1 -1
- package/lib/types/iterative-generation/utils.d.ts +3 -4
- package/lib/types/iterative-generation/utils.d.ts.map +1 -1
- package/lib/types/utils/blobs.d.ts.map +1 -1
- package/lib/types/utils/client.d.ts +2 -6
- package/lib/types/utils/client.d.ts.map +1 -1
- package/lib/workflows-bundle.js +9494 -6518
- package/package.json +127 -127
- package/src/activities/advanced/createDocumentTypeFromInteractionRun.ts +4 -6
- package/src/activities/advanced/createOrUpdateDocumentFromInteractionRun.ts +10 -4
- package/src/activities/advanced/updateDocumentFromInteractionRun.ts +3 -5
- package/src/activities/chunkDocument.ts +1 -2
- package/src/activities/executeInteraction.ts +13 -11
- package/src/activities/generateDocumentProperties.ts +2 -3
- package/src/activities/generateOrAssignContentType.ts +2 -3
- package/src/activities/index-dsl.ts +1 -0
- package/src/activities/media/prepareVideo.ts +622 -0
- package/src/activities/media/transcribeMediaWithGladia.ts +52 -21
- package/src/activities/notifyWebhook.ts +2 -1
- package/src/dsl/dsl-workflow.ts +7 -1
- package/src/errors.ts +15 -0
- package/src/index.ts +1 -0
- package/src/iterative-generation/activities/generatePart.ts +1 -2
- package/src/iterative-generation/activities/generateToc.ts +1 -2
- package/src/iterative-generation/utils.ts +4 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { DSLActivityExecutionPayload, DSLActivitySpec, GladiaConfiguration, SupportedIntegrations } from "@vertesia/common";
|
|
1
|
+
import { DSLActivityExecutionPayload, DSLActivitySpec, GladiaConfiguration, SupportedIntegrations, AUDIO_RENDITION_NAME, VideoMetadata, ContentNature } from "@vertesia/common";
|
|
2
2
|
import { activityInfo, CompleteAsyncError, log } from "@temporalio/activity";
|
|
3
|
-
import { FetchClient } from "@vertesia/api-fetch-client";
|
|
3
|
+
import { FetchClient, RequestError } from "@vertesia/api-fetch-client";
|
|
4
4
|
import { setupActivity } from "../../dsl/setup/ActivityContext.js";
|
|
5
5
|
import { DocumentNotFoundError } from "../../errors.js";
|
|
6
6
|
import { TextExtractionResult, TextExtractionStatus } from "../../index.js";
|
|
@@ -27,7 +27,12 @@ export async function transcribeMedia(payload: DSLActivityExecutionPayload<Trans
|
|
|
27
27
|
|
|
28
28
|
const gladiaConfig = await client.projects.integrations.retrieve(payload.project_id, SupportedIntegrations.gladia) as GladiaConfiguration | undefined;
|
|
29
29
|
if (!gladiaConfig || !gladiaConfig.enabled) {
|
|
30
|
-
|
|
30
|
+
return {
|
|
31
|
+
hasText: false,
|
|
32
|
+
objectId,
|
|
33
|
+
status: TextExtractionStatus.error,
|
|
34
|
+
error: "Gladia integration not enabled",
|
|
35
|
+
}
|
|
31
36
|
}
|
|
32
37
|
|
|
33
38
|
const object = await client.objects.retrieve(objectId, "+text");
|
|
@@ -42,37 +47,63 @@ export async function transcribeMedia(payload: DSLActivityExecutionPayload<Trans
|
|
|
42
47
|
throw new DocumentNotFoundError(`No source found for object ${objectId}`);
|
|
43
48
|
}
|
|
44
49
|
|
|
45
|
-
|
|
50
|
+
// Check for audio rendition in video metadata (preferred for videos)
|
|
51
|
+
let mediaSource: string = object.content.source;
|
|
52
|
+
if (object.metadata?.type === ContentNature.Video) {
|
|
53
|
+
const videoMetadata = object.metadata as VideoMetadata;
|
|
54
|
+
const audioRendition = videoMetadata.renditions?.find(r => r.name === AUDIO_RENDITION_NAME);
|
|
55
|
+
if (audioRendition?.content?.source) {
|
|
56
|
+
mediaSource = audioRendition.content.source;
|
|
57
|
+
log.info(`Found audio rendition for video object ${objectId}`, { mediaSource });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Get download URL for the media source
|
|
62
|
+
const { url: mediaUrl } = await client.files.getDownloadUrl(mediaSource);
|
|
46
63
|
|
|
47
64
|
if (!mediaUrl) {
|
|
48
|
-
throw new DocumentNotFoundError(`Error fetching
|
|
65
|
+
throw new DocumentNotFoundError(`Error fetching media URL for ${mediaSource}`);
|
|
49
66
|
}
|
|
50
67
|
|
|
68
|
+
log.info(`Using media URL for transcription`, { objectId, mediaUrl: mediaSource });
|
|
69
|
+
|
|
51
70
|
const taskToken = Buffer.from(activityInfo().taskToken).toString('base64url');
|
|
52
71
|
const callbackUrl = generateCallbackUrlForGladia(client.store.baseUrl, payload.auth_token, taskToken, objectId);
|
|
53
72
|
|
|
54
73
|
log.info(`Transcribing media ${mediaUrl} with Gladia`, { objectId, callbackUrl });
|
|
55
74
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
75
|
+
try {
|
|
76
|
+
const res = await gladiaClient.post("/transcription", {
|
|
77
|
+
payload: {
|
|
78
|
+
audio_url: mediaUrl,
|
|
79
|
+
callback_url: callbackUrl,
|
|
80
|
+
diarization_enhanced: true,
|
|
81
|
+
enable_code_switching: true,
|
|
82
|
+
subtitles: true,
|
|
83
|
+
subtitles_config: {
|
|
84
|
+
formats: ["vtt"],
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}) as GladiaTranscriptRequestResponse;
|
|
88
|
+
|
|
89
|
+
log.info(`Transcription request sent to Gladia`, { objectId, res });
|
|
90
|
+
throw new CompleteAsyncError();
|
|
91
|
+
|
|
92
|
+
} catch (error: any) {
|
|
93
|
+
if (error instanceof RequestError && error.status === 422) {
|
|
94
|
+
return {
|
|
95
|
+
hasText: false,
|
|
96
|
+
objectId,
|
|
97
|
+
status: TextExtractionStatus.error,
|
|
98
|
+
error: `Gladia transcription error: ${error.message}`,
|
|
65
99
|
}
|
|
100
|
+
} else {
|
|
101
|
+
log.error(`Error sending transcription request to Gladia for object ${objectId}`, { error });
|
|
102
|
+
throw error;
|
|
66
103
|
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
log.info(`Transcription request sent to Gladia`, { objectId, res });
|
|
70
|
-
|
|
71
|
-
throw new CompleteAsyncError();
|
|
72
|
-
|
|
104
|
+
}
|
|
73
105
|
}
|
|
74
106
|
|
|
75
|
-
|
|
76
107
|
function generateCallbackUrlForGladia(baseUrl: string, authToken: string, taskToken: string, objectId: string) {
|
|
77
108
|
return `${baseUrl}/api/v1/webhooks/gladia/${objectId}?access_token=${authToken}&task_token=${taskToken}`;
|
|
78
109
|
}
|
|
@@ -180,7 +180,8 @@ async function createOldRequestBody(payload: WorkflowExecutionBaseParams, params
|
|
|
180
180
|
let data = params.detail;
|
|
181
181
|
if (data && data.run_id && params.event_name === "workflow_completed" && params.workflow_type === 'ExecuteInteractionWorkflow') {
|
|
182
182
|
const client = getVersionedVertesiaClient(payload, null); //ensure client is using no specific version
|
|
183
|
-
|
|
183
|
+
// Important Note: we cannot use client.runs.retrieve since it will transform the run result to the new format because of InteractionOutput
|
|
184
|
+
const run = await client.runs.get(data.run_id);
|
|
184
185
|
// since we use an unversioned client the run will be in old format so we don't need to tranform the result
|
|
185
186
|
const result = run.result;
|
|
186
187
|
data = {
|
package/src/dsl/dsl-workflow.ts
CHANGED
|
@@ -225,7 +225,13 @@ async function executeChildWorkflow(step: DSLChildWorkflowStep, payload: DSLWork
|
|
|
225
225
|
}
|
|
226
226
|
|
|
227
227
|
function buildRateLimitParams(activity: DSLActivitySpec, executionPayload: DSLActivityExecutionPayload<any>): RateLimitParams {
|
|
228
|
-
|
|
228
|
+
// resolve payload params
|
|
229
|
+
const vars = new Vars({
|
|
230
|
+
...executionPayload.params, // imported params (doesn't contain expressions)
|
|
231
|
+
...executionPayload.activity.params, // activity params (may contain expressions)
|
|
232
|
+
});
|
|
233
|
+
const params = vars.resolve();
|
|
234
|
+
|
|
229
235
|
let interactionId: string;
|
|
230
236
|
|
|
231
237
|
switch (activity.name) {
|
package/src/errors.ts
CHANGED
|
@@ -64,9 +64,24 @@ export class ResourceExhaustedError extends ApplicationFailure {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
export class InvalidContentTypeError extends ApplicationFailure {
|
|
68
|
+
constructor(
|
|
69
|
+
public objectId: string,
|
|
70
|
+
public expectedType: string,
|
|
71
|
+
public actualType: string,
|
|
72
|
+
) {
|
|
73
|
+
super(
|
|
74
|
+
`Document ${objectId} has invalid content type. Expected ${expectedType}, got ${actualType}`,
|
|
75
|
+
"InvalidContentTypeError",
|
|
76
|
+
true, // non-retryable
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
67
81
|
export const WF_NON_RETRYABLE_ERRORS = [
|
|
68
82
|
"DocumentNotFoundError",
|
|
69
83
|
"ActivityParamInvalidError",
|
|
70
84
|
"ActivityParamNotFoundError",
|
|
71
85
|
"WorkflowParamNotFoundError",
|
|
86
|
+
"InvalidContentTypeError",
|
|
72
87
|
];
|
package/src/index.ts
CHANGED
|
@@ -25,6 +25,7 @@ export * from "./activities/notifyWebhook.js";
|
|
|
25
25
|
export * from "./activities/rateLimiter.js";
|
|
26
26
|
export * from "./activities/setDocumentStatus.js";
|
|
27
27
|
export * from "./iterative-generation/activities/index.js";
|
|
28
|
+
export * from "./activities/media/prepareVideo.js";
|
|
28
29
|
|
|
29
30
|
export * from "./dsl/setup/ActivityContext.js";
|
|
30
31
|
export * from "./errors.js";
|
|
@@ -5,7 +5,6 @@ import { getVertesiaClient } from "../../utils/client.js";
|
|
|
5
5
|
import { buildAndPublishMemoryPack, loadMemoryPack } from "../../utils/memory.js";
|
|
6
6
|
import { IterativeGenerationPayload, OutputMemoryMeta, Section, TocPart, TocSection } from "../types.js";
|
|
7
7
|
import { executeWithVars, expectMemoryIsConsistent } from "../utils.js";
|
|
8
|
-
import { completionResultToString } from "@llumiverse/common";
|
|
9
8
|
|
|
10
9
|
export async function it_gen_generatePart(payload: WorkflowExecutionPayload, path: number[]) {
|
|
11
10
|
const vars = payload.vars as IterativeGenerationPayload;
|
|
@@ -57,7 +56,7 @@ export async function it_gen_generatePart(payload: WorkflowExecutionPayload, pat
|
|
|
57
56
|
}
|
|
58
57
|
});
|
|
59
58
|
|
|
60
|
-
const result = r.result.
|
|
59
|
+
const result = r.result.text();
|
|
61
60
|
content[content.length - 1].content += result;
|
|
62
61
|
meta.lastProcessedPart = path;
|
|
63
62
|
await buildAndPublishMemoryPack(client, `${memory}/output`, async ({ copyText }) => {
|
|
@@ -3,7 +3,6 @@ import { getVertesiaClient } from "../../utils/client.js";
|
|
|
3
3
|
import { buildAndPublishMemoryPack } from "../../utils/memory.js";
|
|
4
4
|
import { IterativeGenerationPayload, OutputMemoryMeta, Toc, TocIndex } from "../types.js";
|
|
5
5
|
import { executeWithVars, tocIndex } from "../utils.js";
|
|
6
|
-
import { parseCompletionResultsToJson } from "@llumiverse/common";
|
|
7
6
|
|
|
8
7
|
const defaultTocSchema = {
|
|
9
8
|
"type": "object",
|
|
@@ -86,7 +85,7 @@ export async function it_gen_generateToc(payload: WorkflowExecutionPayload): Pro
|
|
|
86
85
|
const run = await executeWithVars(client, vars.interaction, vars, undefined, schema);
|
|
87
86
|
|
|
88
87
|
//Parse the CompletionResult[] to get a Toc object
|
|
89
|
-
const jsonResults =
|
|
88
|
+
const jsonResults = run.result.object();
|
|
90
89
|
|
|
91
90
|
const toc: Toc = {
|
|
92
91
|
sections: jsonResults.sections
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ExecutionRun } from "@vertesia/common";
|
|
1
|
+
import { ModelOptions, TextFallbackOptions } from "@llumiverse/common";
|
|
3
2
|
import { ApplicationFailure } from "@temporalio/workflow";
|
|
3
|
+
import { VertesiaClient } from "@vertesia/client";
|
|
4
4
|
import { OutputMemoryMeta, PartIndex, Toc, TocIndex, TocSection } from "./types.js";
|
|
5
|
-
import { ModelOptions, TextFallbackOptions } from "@llumiverse/common";
|
|
6
5
|
|
|
7
6
|
//TODO: For whole file, support for options beyond max_tokens and temperature and multiple modalities.
|
|
8
7
|
export interface ExecuteOptions {
|
|
@@ -15,7 +14,7 @@ export interface ExecuteOptions {
|
|
|
15
14
|
result_schema?: Record<string, any>;
|
|
16
15
|
}
|
|
17
16
|
|
|
18
|
-
export async function execute(client: VertesiaClient, options: ExecuteOptions)
|
|
17
|
+
export async function execute(client: VertesiaClient, options: ExecuteOptions) {
|
|
19
18
|
return client.interactions.executeByName(options.interaction, {
|
|
20
19
|
data: {
|
|
21
20
|
...options.memory_mapping,
|
|
@@ -30,7 +29,7 @@ export async function execute(client: VertesiaClient, options: ExecuteOptions):
|
|
|
30
29
|
});
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
export function executeWithVars(client: VertesiaClient, interaction: string, vars: Record<string, any>, mapping?: Record<string, any>, result_schema?: Record<string, any>)
|
|
32
|
+
export function executeWithVars(client: VertesiaClient, interaction: string, vars: Record<string, any>, mapping?: Record<string, any>, result_schema?: Record<string, any>) {
|
|
34
33
|
if (mapping) {
|
|
35
34
|
mapping = { ...vars.input_mapping, ...mapping };
|
|
36
35
|
} else {
|