Skip to content

Commit 405d6ae

Browse files
fix pr comments
Signed-off-by: Sean Teramae <steramae@nvidia.com>
1 parent 1d2deab commit 405d6ae

8 files changed

Lines changed: 71 additions & 38 deletions

File tree

web/packages/studio/src/routes/DataDesignerJobDetailsRoute/DataDesignerConfigPanel.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
type BuilderConfigSummary,
1212
} from '@studio/routes/DataDesignerJobDetailsRoute/builderConfig';
1313
import { useDataDesignerArtifactsFileset } from '@studio/routes/DataDesignerJobDetailsRoute/useDataDesignerArtifactsFileset';
14-
import { FC, useMemo } from 'react';
14+
import { useMemo, type FC } from 'react';
1515

1616
export interface DataDesignerConfigPanelProps {
1717
open: boolean;
@@ -56,9 +56,9 @@ const ConfigSummary: FC<{ summary: BuilderConfigSummary }> = ({ summary }) => (
5656
<Divider />
5757
<Stack gap="density-md">
5858
<Text kind="label/semibold/md">Models</Text>
59-
{summary.models.map((model) => (
59+
{summary.models.map((model, index) => (
6060
<KVPair
61-
key={model.alias}
61+
key={`${model.alias}-${index}`}
6262
label={model.alias}
6363
value={model.provider ? `${model.model} (${model.provider})` : model.model}
6464
/>
@@ -72,9 +72,9 @@ const ConfigSummary: FC<{ summary: BuilderConfigSummary }> = ({ summary }) => (
7272
<Divider />
7373
<Stack gap="density-md">
7474
<Text kind="label/semibold/md">Columns</Text>
75-
{summary.columns.map((column) => (
75+
{summary.columns.map((column, index) => (
7676
<KVPair
77-
key={column.name}
77+
key={`${column.name}-${index}`}
7878
label={column.name}
7979
value={column.modelAlias ? `${column.type} · ${column.modelAlias}` : column.type}
8080
/>

web/packages/studio/src/routes/DataDesignerJobDetailsRoute/DatasetProfilerSection.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {
1818
} from '@studio/routes/DataDesignerJobDetailsRoute/datasetProfilerTypes';
1919
import { useDataDesignerJobAnalysis } from '@studio/routes/DataDesignerJobDetailsRoute/useDataDesignerJobAnalysis';
2020
import { useDataDesignerJobFromRoute } from '@studio/routes/DataDesignerJobDetailsRoute/useDataDesignerJobFromRoute';
21-
import { FC } from 'react';
21+
import type { FC } from 'react';
2222

2323
const ColumnGrid: FC<{ children: React.ReactNode }> = ({ children }) => (
2424
<Grid cols={{ xs: 1, sm: 2, xl: 3 }} gap="density-lg">
@@ -54,7 +54,7 @@ export const DatasetProfilerSection: FC = () => {
5454
);
5555
}
5656

57-
if (isLoading && !hasAnalysis) {
57+
if (isLoading && !analysis) {
5858
return (
5959
<ColumnGrid>
6060
{Array.from({ length: 6 }, (_, i) => (

web/packages/studio/src/routes/DataDesignerJobDetailsRoute/JobOutputFilesetSection.tsx

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { useDataDesignerArtifactsFileset } from '@studio/routes/DataDesignerJobD
1717
import { getFilesetDetailsRoute } from '@studio/routes/utils';
1818
import { getHumanReadableFileSize } from '@studio/util/files';
1919
import { useQueryClient } from '@tanstack/react-query';
20-
import { ComponentProps, FC, useCallback, useEffect, useMemo, useState } from 'react';
20+
import { useCallback, useEffect, useMemo, useState, type ComponentProps, type FC } from 'react';
2121
import { Link, useNavigate } from 'react-router-dom';
2222

2323
type FileRow = FilesetFileOutput & { id: string };
@@ -45,6 +45,8 @@ export const JobOutputFilesetSection: FC = () => {
4545
listFilesParams,
4646
files,
4747
isResultsLoading,
48+
isResultsError,
49+
resultsError,
4850
isFilesLoading,
4951
isFilesError: isListFilesError,
5052
filesError: listFilesError,
@@ -150,6 +152,20 @@ export const JobOutputFilesetSection: FC = () => {
150152
);
151153
}
152154

155+
if (isResultsError) {
156+
return (
157+
<Card>
158+
<Stack gap="4">
159+
<Banner kind="inline" status="error" title="Could not load job results">
160+
{resultsError instanceof Error
161+
? resultsError.message
162+
: 'The job results list could not be loaded.'}
163+
</Banner>
164+
</Stack>
165+
</Card>
166+
);
167+
}
168+
153169
if (!artifactsResult) {
154170
return (
155171
<Card>

web/packages/studio/src/routes/DataDesignerJobDetailsRoute/builderConfig.ts

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,32 +15,32 @@
1515
export const BUILDER_CONFIG_FILENAME = 'builder_config.json';
1616

1717
export interface BuilderConfigColumnSummary {
18-
name: string;
19-
type: string;
20-
modelAlias?: string;
18+
readonly name: string;
19+
readonly type: string;
20+
readonly modelAlias?: string;
2121
}
2222

2323
export interface BuilderConfigModelSummary {
24-
alias: string;
25-
model: string;
26-
provider?: string;
24+
readonly alias: string;
25+
readonly model: string;
26+
readonly provider?: string;
2727
}
2828

2929
export interface BuilderConfigSeedSummary {
30-
type: string;
31-
samplingStrategy?: string;
30+
readonly type: string;
31+
readonly samplingStrategy?: string;
3232
}
3333

3434
export interface BuilderConfigSummary {
35-
columnCount: number;
36-
columns: BuilderConfigColumnSummary[];
37-
columnTypeBreakdown: Array<{ type: string; count: number }>;
38-
models: BuilderConfigModelSummary[];
39-
seed?: BuilderConfigSeedSummary;
40-
constraintCount: number;
41-
profilerCount: number;
42-
processorNames: string[];
43-
libraryVersion?: string;
35+
readonly columnCount: number;
36+
readonly columns: BuilderConfigColumnSummary[];
37+
readonly columnTypeBreakdown: Array<{ type: string; count: number }>;
38+
readonly models: BuilderConfigModelSummary[];
39+
readonly seed?: BuilderConfigSeedSummary;
40+
readonly constraintCount: number;
41+
readonly profilerCount: number;
42+
readonly processorNames: string[];
43+
readonly libraryVersion?: string;
4444
}
4545

4646
const asRecord = (value: unknown): Record<string, unknown> | undefined =>

web/packages/studio/src/routes/DataDesignerJobDetailsRoute/datasetProfilerTypes.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,13 @@ export interface DatasetProfilerResults {
133133

134134
const LLM_COLUMN_TYPES = new Set(['llm-text', 'llm-code', 'llm-structured', 'llm-judge']);
135135

136-
export const isLLMColumnStatistics = (stats: ColumnStatistics): stats is LLMTextColumnStatistics =>
136+
export type LLMColumnStatistics =
137+
| LLMTextColumnStatistics
138+
| LLMCodeColumnStatistics
139+
| LLMStructuredColumnStatistics
140+
| LLMJudgedColumnStatistics;
141+
142+
export const isLLMColumnStatistics = (stats: ColumnStatistics): stats is LLMColumnStatistics =>
137143
LLM_COLUMN_TYPES.has(stats.column_type);
138144

139145
export const isValidationColumnStatistics = (
@@ -149,7 +155,8 @@ export const getPercentComplete = (results: DatasetProfilerResults): number => {
149155
if (results.target_num_records <= 0) {
150156
return 0;
151157
}
152-
return (100 * results.num_records) / results.target_num_records;
158+
const percent = (100 * results.num_records) / results.target_num_records;
159+
return Math.max(0, Math.min(100, percent));
153160
};
154161

155162
/** `num_unique / num_records` as a percentage, or undefined when unavailable. */

web/packages/studio/src/routes/DataDesignerJobDetailsRoute/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { JobOutputFilesetSection } from '@studio/routes/DataDesignerJobDetailsRo
2222
import { useDataDesignerJobFromRoute } from '@studio/routes/DataDesignerJobDetailsRoute/useDataDesignerJobFromRoute';
2323
import { getDataDesignerJobListRoute } from '@studio/routes/utils';
2424
import { ArrowLeft, FileJson } from 'lucide-react';
25-
import { FC, useState } from 'react';
25+
import { useState, type FC } from 'react';
2626
import { Link } from 'react-router-dom';
2727

2828
export const DataDesignerJobDetailsRoute: FC = () => {

web/packages/studio/src/routes/DataDesignerJobDetailsRoute/useDataDesignerArtifactsFileset.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,14 @@ export const useDataDesignerArtifactsFileset = () => {
2323

2424
const isTerminal = job?.status != null && PlatformJobTerminalStatuses.includes(job.status);
2525

26-
const { data: resultsResponse, isLoading: isResultsLoading } =
27-
useDataDesignerListCreateJobResults(workspace, jobName, {
28-
query: { refetchInterval: isTerminal ? false : 3000 },
29-
});
26+
const {
27+
data: resultsResponse,
28+
isLoading: isResultsLoading,
29+
isError: isResultsError,
30+
error: resultsError,
31+
} = useDataDesignerListCreateJobResults(workspace, jobName, {
32+
query: { refetchInterval: isTerminal ? false : 3000 },
33+
});
3034

3135
const artifactsResult = useMemo(() => {
3236
const data = resultsResponse?.data;
@@ -83,6 +87,8 @@ export const useDataDesignerArtifactsFileset = () => {
8387
listFilesParams,
8488
files,
8589
isResultsLoading,
90+
isResultsError,
91+
resultsError,
8692
isFilesLoading,
8793
isFilesError,
8894
filesError,

web/packages/studio/src/routes/DataDesignerJobDetailsRoute/useDataDesignerJobAnalysis.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,14 @@ export const useDataDesignerJobAnalysis = (
3030
jobName: string,
3131
{ enabled = true }: UseDataDesignerJobAnalysisOptions = {}
3232
) => {
33-
const { data: resultsResponse, isLoading: isResultsLoading } =
34-
useDataDesignerListCreateJobResults(workspace, jobName, {
35-
query: { enabled: enabled && Boolean(workspace && jobName) },
36-
});
33+
const {
34+
data: resultsResponse,
35+
isLoading: isResultsLoading,
36+
isError: isResultsError,
37+
error: resultsError,
38+
} = useDataDesignerListCreateJobResults(workspace, jobName, {
39+
query: { enabled: enabled && Boolean(workspace && jobName) },
40+
});
3741

3842
const hasAnalysis = Boolean(
3943
resultsResponse?.data?.some((result) => result.name === ANALYSIS_RESULT_NAME)
@@ -62,7 +66,7 @@ export const useDataDesignerJobAnalysis = (
6266
analysis: analysisQuery.data,
6367
hasAnalysis,
6468
isLoading: isResultsLoading || (hasAnalysis && analysisQuery.isLoading),
65-
isError: analysisQuery.isError,
66-
error: analysisQuery.error,
69+
isError: isResultsError || analysisQuery.isError,
70+
error: resultsError ?? analysisQuery.error,
6771
};
6872
};

0 commit comments

Comments
 (0)