diff --git a/web/packages/common/src/components/DataView/internal/StatusResult.tsx b/web/packages/common/src/components/DataView/internal/StatusResult.tsx index 63ffcd0f70..00bad84d2c 100644 --- a/web/packages/common/src/components/DataView/internal/StatusResult.tsx +++ b/web/packages/common/src/components/DataView/internal/StatusResult.tsx @@ -25,7 +25,7 @@ export interface StatusResultProps extends Partial { hasFiltersApplied: boolean; hasSearchApplied: boolean; } - ) => JSX.Element; + ) => JSX.Element | null; } export function StatusResult({ diff --git a/web/packages/studio/src/components/dataViews/ExperimentGroupDataView/Empty.tsx b/web/packages/studio/src/components/dataViews/ExperimentGroupDataView/Empty.tsx new file mode 100644 index 0000000000..af41a789f8 --- /dev/null +++ b/web/packages/studio/src/components/dataViews/ExperimentGroupDataView/Empty.tsx @@ -0,0 +1,78 @@ +// SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +import { TableEmptyState } from '@nemo/common/src/components/TableEmptyState'; +import { + Button, + CodeSnippet, + TabsContent, + TabsList, + TabsRoot, + TabsTrigger, + Text, +} from '@nvidia/foundations-react-core'; +import { LINK_DOCS_EXPERIMENTS_CLI } from '@studio/constants/links'; +import { Bot, ChevronRight, File, FlaskConical, Terminal } from 'lucide-react'; + +interface EmptyProps { + experimentGroupName: string; +} + +export const Empty = ({ experimentGroupName }: EmptyProps) => { + const escapedGroupName = experimentGroupName.replace(/'/g, "'\\''"); + const cliCommand = + `nemo exp run \\\n` + + ` --group '${escapedGroupName}' \\\n` + + ` --dataset "" \\\n` + + ` --evaluators correctness,helpfulness,groundedness,tool-error`; + + return ( + } + header="No Experiments" + emptyMessage="Run an experiment to see results for this group." + actions={ +
+ + + + + Coding agent + + + + CLI command + + + + +
+ } + /> + ); +}; diff --git a/web/packages/studio/src/components/dataViews/ExperimentGroupDataView/index.tsx b/web/packages/studio/src/components/dataViews/ExperimentGroupDataView/index.tsx index 631913416d..02d54b1d58 100644 --- a/web/packages/studio/src/components/dataViews/ExperimentGroupDataView/index.tsx +++ b/web/packages/studio/src/components/dataViews/ExperimentGroupDataView/index.tsx @@ -9,7 +9,6 @@ import { import { StudioDataView } from '@nemo/common/src/components/DataView/StudioDataView'; import { ErrorMessage } from '@nemo/common/src/components/ErrorMessage'; import { RelativeTime } from '@nemo/common/src/components/RelativeTime'; -import { TableEmptyState } from '@nemo/common/src/components/TableEmptyState'; import { useStudioDataViewState } from '@nemo/common/src/hooks/useStudioDataViewState'; import { getSortParamWithWhitelist } from '@nemo/common/src/utils/query'; import { useGetExperimentGroup, useListExperiments } from '@nemo/sdk/generated/platform/api'; @@ -19,6 +18,7 @@ import type { ListExperimentsSort, } from '@nemo/sdk/generated/platform/schema'; import { Text, Tooltip } from '@nvidia/foundations-react-core'; +import { Empty } from '@studio/components/dataViews/ExperimentGroupDataView/Empty'; import { useWorkspaceFromPath } from '@studio/hooks/useWorkspaceFromPath'; import { getExperimentDetailRoute } from '@studio/routes/utils'; import { tooltipClassName } from '@studio/styles/common'; @@ -258,12 +258,10 @@ export const ExperimentGroupDataView: FC = ({ requestStatus: isGroupLoading || (isLoading && !experimentsData) ? 'loading' : undefined, }, DataViewTableContent: { - renderEmptyState: () => ( - - ), + renderEmptyState: ({ hasFiltersApplied, hasSearchApplied }) => + hasFiltersApplied || hasSearchApplied ? null : ( + + ), }, }} /> diff --git a/web/packages/studio/src/components/dataViews/ExperimentSessionsDataView/Empty.tsx b/web/packages/studio/src/components/dataViews/ExperimentSessionsDataView/Empty.tsx index 3086538ad0..596486cb62 100644 --- a/web/packages/studio/src/components/dataViews/ExperimentSessionsDataView/Empty.tsx +++ b/web/packages/studio/src/components/dataViews/ExperimentSessionsDataView/Empty.tsx @@ -32,7 +32,7 @@ export const Empty = ({ experimentGroupName, datasetName }: EmptyProps) => { header="No test cases" emptyMessage="Run an experiment to see test case results." actions={ -
+