diff --git a/skyvern-frontend/src/api/types.ts b/skyvern-frontend/src/api/types.ts index 011200eb..20ea1f98 100644 --- a/skyvern-frontend/src/api/types.ts +++ b/skyvern-frontend/src/api/types.ts @@ -252,4 +252,6 @@ export type ObserverCruise = { url: string | null; created_at: string; modified_at: string; + output: Record | null; + summary: string | null; }; diff --git a/skyvern-frontend/src/routes/workflows/workflowRun/WorkflowRunOutput.tsx b/skyvern-frontend/src/routes/workflows/workflowRun/WorkflowRunOutput.tsx index dcbc5a5c..c38bff16 100644 --- a/skyvern-frontend/src/routes/workflows/workflowRun/WorkflowRunOutput.tsx +++ b/skyvern-frontend/src/routes/workflows/workflowRun/WorkflowRunOutput.tsx @@ -13,6 +13,29 @@ import { Status } from "@/api/types"; import { AutoResizingTextarea } from "@/components/AutoResizingTextarea/AutoResizingTextarea"; import { isTaskVariantBlock } from "../types/workflowTypes"; +function getAggregatedExtractedInformation(outputs: Record) { + const extractedInformation: Record = {}; + Object.entries(outputs).forEach(([id, output]) => { + if ( + typeof output === "object" && + output !== null && + "extracted_information" in output + ) { + extractedInformation[id] = output.extracted_information; + } + }); + return extractedInformation; +} + +function formatExtractedInformation(outputs: Record) { + const aggregateExtractedInformation = + getAggregatedExtractedInformation(outputs); + return { + extracted_information: aggregateExtractedInformation, + ...outputs, + }; +} + function WorkflowRunOutput() { const { data: workflowRunTimeline, isLoading: workflowRunTimelineIsLoading } = useWorkflowRunTimelineQuery(); @@ -50,7 +73,11 @@ function WorkflowRunOutput() { activeBlock.status === Status.Completed; const outputs = workflowRun?.outputs; + const formattedOutputs = outputs + ? formatExtractedInformation(outputs) + : outputs; const fileUrls = workflowRun?.downloaded_file_urls ?? []; + const observerOutput = workflowRun?.observer_cruise?.output; return (
@@ -107,15 +134,27 @@ function WorkflowRunOutput() {
) : null} + {observerOutput ? ( +
+
+

Observer Output

+ +
+
+ ) : null}

Workflow Run Outputs

{ if (isTaskVariantBlockItem(current)) { @@ -96,7 +98,7 @@ function WorkflowRunTimeline({
)} - {workflowRunTimeline.length === 0 && ( + {workflowRunIsFinalized && workflowRunTimeline.length === 0 && (
Workflow timeline is empty
)} {workflowRunTimeline?.map((timelineItem) => {