diff --git a/studio/frontend/src/features/recipe-studio/components/executions/execution-columns-tab.tsx b/studio/frontend/src/features/recipe-studio/components/executions/execution-columns-tab.tsx new file mode 100644 index 0000000000..525dfefba0 --- /dev/null +++ b/studio/frontend/src/features/recipe-studio/components/executions/execution-columns-tab.tsx @@ -0,0 +1,54 @@ +import type { ReactElement } from "react"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; +import type { AnalysisColumnStat } from "./executions-view-helpers"; + +type ExecutionColumnsTabProps = { + analysisColumns: AnalysisColumnStat[]; +}; + +export function ExecutionColumnsTab({ + analysisColumns, +}: ExecutionColumnsTabProps): ReactElement { + return ( +
Column statistics
+ {analysisColumns.length === 0 ? ( +No column statistics yet.
+ ) : ( +Dataset sample
+No rows returned.
+ ) : tableColumns.length === 0 ? ( ++ All columns hidden. Use Columns to show at least one. +
+ ) : ( +Run summary
++ Records:{" "} + + {formatMetricValue(recordsMetric)} / {formatMetricValue(totalMetric)} + +
++ Duration: {runDuration} +
++ Columns analyzed:{" "} + {formatMetricValue(columnCount)} +
++ Final stage:{" "} + {execution.stage ?? "--"} +
+Insights
++ LLM columns:{" "} + {formatMetricValue(llmColumnCount)} +
++ Null rate: {nullRate?.toFixed(1) ?? "--"}% +
++ Dropped columns:{" "} + {formatMetricValue(sideEffects.length)} +
+ {sideEffects.length > 0 && ( ++ Low uniqueness flags:{" "} + + {formatMetricValue(lowUniquenessColumns.length)} + +
+ {lowUniquenessColumns.length > 0 && ( +Model usage
+No model usage yet.
+ ) : ( +Total input
++ {formatMetricValue(totalInputTokens)} +
+Total output
++ {formatMetricValue(totalOutputTokens)} +
+Terminal output
+{terminalLines.length} lines
++ {isExecutionInProgress(execution.status) + ? "Waiting for logs..." + : "No logs captured."} +
+ ) : ( + terminalLines.map((line, index) => ( ++ {line} +
+ )) + )} +Raw execution
+
+ {JSON.stringify(rawExecution, null, 2)}
+
+ - Done: {selectedExecution.progress?.done ?? "--"} -
-- Total: {selectedExecution.progress?.total ?? "--"} -
-- Rate: {selectedExecution.progress?.rate ?? "--"} rec/s -
-- ETA: {selectedExecution.progress?.eta_sec ?? "--"} s -
+Done: {selectedExecution.progress?.done ?? "--"}
+Total: {selectedExecution.progress?.total ?? "--"}
+Rate: {selectedExecution.progress?.rate ?? "--"} rec/s
+ETA: {selectedExecution.progress?.eta_sec ?? "--"} s
)}
Run summary
-- Records:{" "} - - {formatMetricValue(recordsMetric)} / {formatMetricValue(totalMetric)} - -
-- Duration: {runDuration} -
-- Columns analyzed:{" "} - - {formatMetricValue(columnCount)} - -
-- Final stage:{" "} - - {selectedExecution.stage ?? "--"} - -
-Insights
-- LLM columns:{" "} - - {formatMetricValue(llmColumnCount)} - -
-- Null rate:{" "} - {formatPercent(nullRate)} -
-- Dropped columns:{" "} - - {formatMetricValue(sideEffects.length)} - -
- {sideEffects.length > 0 && ( -- Low uniqueness flags:{" "} - - {formatMetricValue(lowUniquenessColumns.length)} - -
- {lowUniquenessColumns.length > 0 && ( -Model usage
-No model usage yet.
- ) : ( -Total input
-- {formatMetricValue(totalInputTokens)} -
-Total output
-- {formatMetricValue(totalOutputTokens)} -
-Terminal output
-- {terminalLines.length} lines -
-- {isExecutionInProgress(selectedExecution.status) - ? "Waiting for logs..." - : "No logs captured."} -
- ) : ( - terminalLines.map((line, index) => ( -- {line} -
- )) - )} -Column statistics
- {analysisColumns.length === 0 ? ( -- No column statistics yet. -
- ) : ( -Dataset sample
-No rows returned.
- ) : tableColumns.length === 0 ? ( -- All columns hidden. Use Columns to show at least one. -
- ) : ( -Raw execution
-
- {JSON.stringify(rawExecution, null, 2)}
-
-