diff --git a/web/packages/studio/src/components/dataViews/AgentEvaluationsDataView/index.tsx b/web/packages/studio/src/components/dataViews/AgentEvaluationsDataView/index.tsx index 6dda23bec1..c47f5d562a 100644 --- a/web/packages/studio/src/components/dataViews/AgentEvaluationsDataView/index.tsx +++ b/web/packages/studio/src/components/dataViews/AgentEvaluationsDataView/index.tsx @@ -29,7 +29,7 @@ import { BulkDeleteModal } from '@studio/components/BulkDeleteModal'; import { QuickActionsMenuRoot } from '@studio/components/QuickActionsMenu/QuickActionsMenuRoot'; import { STATUS_FILTER_OPTIONS } from '@studio/constants/platformJobs'; import { useWorkspaceFromPath } from '@studio/hooks/useWorkspaceFromPath'; -import { getAgentEvaluationDetailRoute, getFilesetDetailRoute } from '@studio/routes/utils'; +import { getAgentEvaluationDetailRoute, getFilesetRoute } from '@studio/routes/utils'; import { getTextWithCount } from '@studio/util/strings'; import { keepPreviousData, useQueryClient } from '@tanstack/react-query'; import { Trash } from 'lucide-react'; @@ -133,7 +133,7 @@ export const AgentEvaluationsDataView = () => { const configName = evalConfigName(row.original); return configName ? ( e.stopPropagation()} > diff --git a/web/packages/studio/src/components/evaluation/Jobs/DetailsPanel.tsx b/web/packages/studio/src/components/evaluation/Jobs/DetailsPanel.tsx index 37911b8404..07f06747f6 100644 --- a/web/packages/studio/src/components/evaluation/Jobs/DetailsPanel.tsx +++ b/web/packages/studio/src/components/evaluation/Jobs/DetailsPanel.tsx @@ -22,7 +22,7 @@ import type { EvaluateJob } from '@nemo/sdk/generated/evaluator/schema'; import { Banner, Button, Flex, Modal, Panel, Stack, Text } from '@nvidia/foundations-react-core'; import { ButtonLaunchEvaluation } from '@studio/components/evaluation/ButtonLaunchEvaluation'; import { useWorkspaceFromPath } from '@studio/hooks/useWorkspaceFromPath'; -import { getFilesetDetailRoute } from '@studio/routes/utils'; +import { getFilesetRoute } from '@studio/routes/utils'; import { logger } from '@studio/util/logger'; import { useQueryClient } from '@tanstack/react-query'; import { ChartBar, CircleX } from 'lucide-react'; @@ -111,7 +111,7 @@ export const DetailsPanel = ({ evaluationJob, error }: DetailsPanelProps) => { const targetIsAgent = evaluationJob.spec.target?.format !== undefined; const datasetRef = typeof evaluationJob.spec.dataset === 'string' ? evaluationJob.spec.dataset : undefined; - const datasetFileset = datasetRef?.split('#')[0]?.split('/').pop(); + const datasetFileset = datasetRef?.split('#')[0]; return ( <> @@ -208,7 +208,7 @@ export const DetailsPanel = ({ evaluationJob, error }: DetailsPanelProps) => { label="Dataset" value={ {datasetRef} diff --git a/web/packages/studio/src/routes/agents/AgentEvaluationsRoute/AgentEvaluationDetailRoute.tsx b/web/packages/studio/src/routes/agents/AgentEvaluationsRoute/AgentEvaluationDetailRoute.tsx index 0e44a73ae3..6820847bf9 100644 --- a/web/packages/studio/src/routes/agents/AgentEvaluationsRoute/AgentEvaluationDetailRoute.tsx +++ b/web/packages/studio/src/routes/agents/AgentEvaluationsRoute/AgentEvaluationDetailRoute.tsx @@ -44,7 +44,7 @@ import { useBreadcrumbs } from '@studio/providers/breadcrumbs/useBreadcrumbs'; import { getAgentEvaluationsListRoute, getAgentsListRoute, - getFilesetDetailRoute, + getFilesetRoute, } from '@studio/routes/utils'; import { useRequiredPathParams } from '@studio/util/hooks/useRequiredPathParams'; import { useQuery, useQueryClient } from '@tanstack/react-query'; @@ -223,7 +223,7 @@ export const AgentEvaluationDetailRoute: FC = () => { label="Eval Config" value={ {evalConfigName(job)} @@ -246,7 +246,7 @@ export const AgentEvaluationDetailRoute: FC = () => { label="Artifacts" value={ View files diff --git a/web/packages/studio/src/routes/utils.test.ts b/web/packages/studio/src/routes/utils.test.ts index dddd4abf68..f07db186d9 100644 --- a/web/packages/studio/src/routes/utils.test.ts +++ b/web/packages/studio/src/routes/utils.test.ts @@ -9,6 +9,7 @@ import { getEvaluationMetricsRunRoute, getEvaluationSessionDetailRoute, getFilesetDetailsRoute, + getFilesetRoute, getIntakeSessionRoute, getIntakeSessionTraceRoute, getPromptTuningFormRoute, @@ -66,6 +67,22 @@ describe('Evaluation route helpers', () => { }); }); +describe('getFilesetRoute', () => { + const workspace = 'test-workspace'; + + it('routes a bare name to the panel route with a full entity reference', () => { + expect(getFilesetRoute(workspace, 'unchanged-blue')).toBe( + '/workspaces/test-workspace/filesets/test-workspace%2Funchanged-blue' + ); + }); + + it('preserves a namespace already present on the reference', () => { + expect(getFilesetRoute(workspace, 'default/unchanged-blue')).toBe( + '/workspaces/test-workspace/filesets/default%2Funchanged-blue' + ); + }); +}); + describe('getWorkspaceInferenceProvidersRoute', () => { const workspace = 'test-workspace'; diff --git a/web/packages/studio/src/routes/utils.ts b/web/packages/studio/src/routes/utils.ts index 8c0ecd94e7..ec7f8bd4d0 100644 --- a/web/packages/studio/src/routes/utils.ts +++ b/web/packages/studio/src/routes/utils.ts @@ -488,6 +488,20 @@ export const getFilesetDetailRoute = ( return options?.tab ? `${base}?${QUERY_PARAMETERS.tab}=${options.tab}` : base; }; +export const getFilesetRoute = ( + workspace: string, + filesetRef: string, + options?: { tab?: FilesetDetailTab } +) => { + if (FILESET_DETAILS_ENABLED) { + return getFilesetDetailRoute(workspace, filesetRef.split('/').pop() ?? filesetRef, options); + } + return getFilesetDetailsRoute( + workspace, + filesetRef.includes('/') ? filesetRef : `${workspace}/${filesetRef}` + ); +}; + export const getFilesetFileRoute = (workspace: string, fileset: string, filePath: string) => { return generatePath(ROUTES.workspace.filesetFile, { workspace,