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,