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,
}))
}