From d92722e7ab06cb6779138b372e6a4cc264e4a5f6 Mon Sep 17 00:00:00 2001 From: JzoNg Date: Wed, 29 Apr 2026 20:16:42 +0800 Subject: [PATCH] fix(web): default metrics for dataset --- .../components/evaluation/__tests__/index.spec.tsx | 7 ++++--- .../pipeline/pipeline-metrics-section.tsx | 8 ++++---- web/contract/console/evaluation.ts | 7 ------- web/contract/router.ts | 2 -- web/service/use-evaluation.ts | 14 +++++++++++--- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/web/app/components/evaluation/__tests__/index.spec.tsx b/web/app/components/evaluation/__tests__/index.spec.tsx index 3d1ae351d3..a3b0d2fcac 100644 --- a/web/app/components/evaluation/__tests__/index.spec.tsx +++ b/web/app/components/evaluation/__tests__/index.spec.tsx @@ -6,7 +6,7 @@ import ConditionsSection from '../components/conditions-section' import { useEvaluationStore } from '../store' const mockUpload = vi.hoisted(() => vi.fn()) -const mockUseAvailableEvaluationMetrics = vi.hoisted(() => vi.fn()) +const mockUseDatasetEvaluationMetrics = vi.hoisted(() => vi.fn()) const mockUseDefaultEvaluationMetrics = vi.hoisted(() => vi.fn()) const mockUseEvaluationConfig = vi.hoisted(() => vi.fn()) const mockUseSaveEvaluationConfigMutation = vi.hoisted(() => vi.fn()) @@ -51,7 +51,7 @@ vi.mock('@/service/base', () => ({ vi.mock('@/service/use-evaluation', () => ({ useEvaluationConfig: (...args: unknown[]) => mockUseEvaluationConfig(...args), - useAvailableEvaluationMetrics: (...args: unknown[]) => mockUseAvailableEvaluationMetrics(...args), + useDatasetEvaluationMetrics: (...args: unknown[]) => mockUseDatasetEvaluationMetrics(...args), useDefaultEvaluationMetrics: (...args: unknown[]) => mockUseDefaultEvaluationMetrics(...args), useSaveEvaluationConfigMutation: (...args: unknown[]) => mockUseSaveEvaluationConfigMutation(...args), useStartEvaluationRunMutation: (...args: unknown[]) => mockUseStartEvaluationRunMutation(...args), @@ -119,7 +119,7 @@ describe('Evaluation', () => { data: null, }) - mockUseAvailableEvaluationMetrics.mockReturnValue({ + mockUseDatasetEvaluationMetrics.mockReturnValue({ data: { metrics: ['answer-correctness', 'faithfulness', 'context-precision', 'context-recall', 'context-relevance'], }, @@ -582,6 +582,7 @@ describe('Evaluation', () => { it('should render the pipeline-specific layout without auto-selecting a judge model', () => { renderWithQueryClient() + expect(mockUseDatasetEvaluationMetrics).toHaveBeenCalledWith('dataset-1') expect(screen.getByTestId('evaluation-model-selector')).toHaveTextContent('empty') expect(screen.getByText('evaluation.history.columns.time')).toBeInTheDocument() expect(screen.getByText('Context Precision')).toBeInTheDocument() diff --git a/web/app/components/evaluation/components/pipeline/pipeline-metrics-section.tsx b/web/app/components/evaluation/components/pipeline/pipeline-metrics-section.tsx index 553083f867..568b66b5a6 100644 --- a/web/app/components/evaluation/components/pipeline/pipeline-metrics-section.tsx +++ b/web/app/components/evaluation/components/pipeline/pipeline-metrics-section.tsx @@ -7,7 +7,7 @@ import { useEffect, useMemo } from 'react' import { useTranslation } from 'react-i18next' import { BlockEnum } from '@/app/components/workflow/types' import { useDatasetDetailContextWithSelector } from '@/context/dataset-detail' -import { useAvailableEvaluationMetrics } from '@/service/use-evaluation' +import { useDatasetEvaluationMetrics } from '@/service/use-evaluation' import { usePublishedPipelineInfo } from '@/service/use-pipeline' import { useEvaluationResource, useEvaluationStore } from '../../store' import { buildMetricOption } from '../metric-selector/utils' @@ -49,7 +49,7 @@ const PipelineMetricsSection = ({ const addBuiltinMetric = useEvaluationStore(state => state.addBuiltinMetric) const removeMetric = useEvaluationStore(state => state.removeMetric) const updateMetricThreshold = useEvaluationStore(state => state.updateMetricThreshold) - const { data: availableMetricsData } = useAvailableEvaluationMetrics() + const { data: datasetMetricsData } = useDatasetEvaluationMetrics(resourceId) const { data: publishedPipeline } = usePublishedPipelineInfo(pipelineId || '') const resource = useEvaluationResource(resourceType, resourceId) const knowledgeIndexNodeInfoList = useMemo( @@ -63,12 +63,12 @@ const PipelineMetricsSection = ({ ), [resource.metrics]) const availableBuiltinMetrics = useMemo(() => { const metricIds = new Set([ - ...(availableMetricsData?.metrics ?? []), + ...(datasetMetricsData?.metrics ?? []), ...builtinMetricMap.keys(), ]) return Array.from(metricIds).map(metricId => buildMetricOption(metricId)) - }, [availableMetricsData?.metrics, builtinMetricMap]) + }, [datasetMetricsData?.metrics, builtinMetricMap]) useEffect(() => { if (!knowledgeIndexNodeInfoList.length) diff --git a/web/contract/console/evaluation.ts b/web/contract/console/evaluation.ts index 47580da438..ac961732f8 100644 --- a/web/contract/console/evaluation.ts +++ b/web/contract/console/evaluation.ts @@ -284,13 +284,6 @@ export const evaluationNodeInfoContract = base }>()) .output(type()) -export const availableEvaluationMetricsContract = base - .route({ - path: '/evaluation/available-metrics', - method: 'GET', - }) - .output(type()) - export const availableEvaluationWorkflowsContract = base .route({ path: '/workspaces/current/available-evaluation-workflows', diff --git a/web/contract/router.ts b/web/contract/router.ts index dc00a5cbbb..b02071ab28 100644 --- a/web/contract/router.ts +++ b/web/contract/router.ts @@ -3,7 +3,6 @@ import { accountAvatarContract } from './console/account' import { appDeleteContract, appWorkflowTypeConvertContract, workflowOnlineUsersContract } from './console/apps' import { bindPartnerStackContract, invoicesContract } from './console/billing' import { - availableEvaluationMetricsContract, availableEvaluationWorkflowsContract, cancelDatasetEvaluationRunContract, cancelEvaluationRunContract, @@ -148,7 +147,6 @@ export const consoleRouterContract = { metrics: evaluationMetricsContract, defaultMetrics: evaluationDefaultMetricsContract, nodeInfo: evaluationNodeInfoContract, - availableMetrics: availableEvaluationMetricsContract, availableWorkflows: availableEvaluationWorkflowsContract, associatedTargets: evaluationWorkflowAssociatedTargetsContract, file: evaluationFileContract, diff --git a/web/service/use-evaluation.ts b/web/service/use-evaluation.ts index cb3f46bf5b..84750417c3 100644 --- a/web/service/use-evaluation.ts +++ b/web/service/use-evaluation.ts @@ -54,9 +54,17 @@ export const useEvaluationConfig = ( return useQuery(getEvaluationConfigQueryOptions(resourceType, resourceId)) } -export const useAvailableEvaluationMetrics = (enabled = true) => { - return useQuery(consoleQuery.evaluation.availableMetrics.queryOptions({ - enabled, +export const useDatasetEvaluationMetrics = (datasetId: string, enabled = true) => { + return useQuery(consoleQuery.datasetEvaluation.metrics.queryOptions({ + input: datasetId + ? { + params: { + datasetId, + }, + } + : skipToken, + enabled: !!datasetId && enabled, + refetchOnWindowFocus: false, })) }