diff --git a/web/app/components/evaluation/__tests__/index.spec.tsx b/web/app/components/evaluation/__tests__/index.spec.tsx index c0e85f6e79..5146e49535 100644 --- a/web/app/components/evaluation/__tests__/index.spec.tsx +++ b/web/app/components/evaluation/__tests__/index.spec.tsx @@ -130,7 +130,7 @@ describe('Evaluation', () => { ]) store.addCondition(resourceType, resourceId) - const condition = useEvaluationStore.getState().resources['apps:app-2'].conditions.conditions[0] + const condition = useEvaluationStore.getState().resources['apps:app-2'].judgmentConfig.conditions[0] conditionId = condition.id store.updateConditionOperator(resourceType, resourceId, conditionId, '=') }) diff --git a/web/app/components/evaluation/__tests__/store.spec.ts b/web/app/components/evaluation/__tests__/store.spec.ts index a8dd8c188a..8f6e557d5a 100644 --- a/web/app/components/evaluation/__tests__/store.spec.ts +++ b/web/app/components/evaluation/__tests__/store.spec.ts @@ -107,7 +107,7 @@ describe('evaluation store', () => { { node_id: 'node-2', title: 'Retriever Node', type: 'retriever' }, ]) expect(state.metrics.filter(item => item.optionId === metricId)).toHaveLength(1) - expect(state.conditions.conditions).toHaveLength(0) + expect(state.judgmentConfig.conditions).toHaveLength(0) }) it('should build numeric conditions from selected metrics', () => { @@ -124,9 +124,9 @@ describe('evaluation store', () => { store.addCondition(resourceType, resourceId) const state = useEvaluationStore.getState().resources['apps:app-conditions'] - const condition = state.conditions.conditions[0] + const condition = state.judgmentConfig.conditions[0] - expect(state.conditions.logicalOperator).toBe('or') + expect(state.judgmentConfig.logicalOperator).toBe('or') expect(condition.variableSelector).toEqual(['node-answer', 'answer-correctness']) expect(condition.comparisonOperator).toBe('=') expect(getAllowedOperators(state.metrics, condition.variableSelector)).toEqual(['=', '≠', '>', '<', '≥', '≤', 'is null', 'is not null']) @@ -153,13 +153,13 @@ describe('evaluation store', () => { }]) store.addCondition(resourceType, resourceId) - const condition = useEvaluationStore.getState().resources['apps:app-3'].conditions.conditions[0] + const condition = useEvaluationStore.getState().resources['apps:app-3'].judgmentConfig.conditions[0] store.updateConditionMetric(resourceType, resourceId, condition.id, [config.workflowOptions[0].id, 'reason']) store.updateConditionValue(resourceType, resourceId, condition.id, 'needs follow-up') store.updateConditionOperator(resourceType, resourceId, condition.id, 'empty') - const updatedCondition = useEvaluationStore.getState().resources['apps:app-3'].conditions.conditions[0] + const updatedCondition = useEvaluationStore.getState().resources['apps:app-3'].judgmentConfig.conditions[0] expect(requiresConditionValue('empty')).toBe(false) expect(updatedCondition.value).toBeNull() @@ -232,8 +232,8 @@ describe('evaluation store', () => { expect(hydratedState.metrics[1].customConfig?.mappings[0].inputVariableId).toBe('query') expect(hydratedState.metrics[1].customConfig?.mappings[0].outputVariableId).toBe('answer') expect(hydratedState.metrics[1].customConfig?.outputs).toEqual([{ id: 'reason', valueType: 'string' }]) - expect(hydratedState.conditions.logicalOperator).toBe('or') - expect(hydratedState.conditions.conditions[0]).toMatchObject({ + expect(hydratedState.judgmentConfig.logicalOperator).toBe('or') + expect(hydratedState.judgmentConfig.conditions[0]).toMatchObject({ variableSelector: ['node-1', 'faithfulness'], comparisonOperator: '≥', value: '0.9', diff --git a/web/app/components/evaluation/components/conditions-section/condition-group.tsx b/web/app/components/evaluation/components/conditions-section/condition-group.tsx index c71aee5025..2825488893 100644 --- a/web/app/components/evaluation/components/conditions-section/condition-group.tsx +++ b/web/app/components/evaluation/components/conditions-section/condition-group.tsx @@ -231,7 +231,7 @@ const ConditionGroup = ({ type="button" className={cn( 'rounded-md px-3 py-1.5 system-xs-medium-uppercase', - resource.conditions.logicalOperator === operator + resource.judgmentConfig.logicalOperator === operator ? 'bg-components-card-bg text-text-primary shadow-xs' : 'text-text-tertiary', )} @@ -245,7 +245,7 @@ const ConditionGroup = ({
- {resource.conditions.conditions.map((condition) => { + {resource.judgmentConfig.conditions.map((condition) => { const metric = metricOptions.find(option => isSelectorEqual(option.variableSelector, condition.variableSelector)) const allowedOperators = getAllowedOperators(resource.metrics, condition.variableSelector) const showValue = !!metric && requiresConditionValue(condition.comparisonOperator) diff --git a/web/app/components/evaluation/components/conditions-section/index.tsx b/web/app/components/evaluation/components/conditions-section/index.tsx index 383d0aad8b..d00830c1c8 100644 --- a/web/app/components/evaluation/components/conditions-section/index.tsx +++ b/web/app/components/evaluation/components/conditions-section/index.tsx @@ -26,12 +26,12 @@ const ConditionsSection = ({ tooltip={t('conditions.description')} />
- {resource.conditions.conditions.length === 0 && ( + {resource.judgmentConfig.conditions.length === 0 && (
{t('conditions.emptyDescription')}
)} - {resource.conditions.conditions.length > 0 && ( + {resource.judgmentConfig.conditions.length > 0 && ( { - if (config.judgment_config) - return config.judgment_config - - if ( - config.judgement_conditions - && !Array.isArray(config.judgement_conditions) - && 'conditions' in config.judgement_conditions - ) { - return config.judgement_conditions as EvaluationJudgmentConfig - } - - return null -} - const normalizeConditionItem = ( value: EvaluationJudgmentCondition, metrics: EvaluationMetric[], @@ -234,7 +219,7 @@ const normalizeJudgmentConfig = ( config: EvaluationConfig, metrics: EvaluationMetric[], ): JudgmentConfig => { - const rawJudgmentConfig = getRawJudgmentConfig(config) + const rawJudgmentConfig: EvaluationJudgmentConfig | null | undefined = config.judgment_config if (!rawJudgmentConfig) return createEmptyJudgmentConfig() @@ -393,7 +378,7 @@ export const buildInitialState = (_resourceType: EvaluationResourceType): Evalua return { judgeModelId: null, metrics: [], - conditions: createEmptyJudgmentConfig(), + judgmentConfig: createEmptyJudgmentConfig(), activeBatchTab: 'input-fields', uploadedFileName: null, batchRecords: [], @@ -414,7 +399,7 @@ export const buildStateFromEvaluationConfig = ( ? encodeModelSelection(config.evaluation_model_provider, config.evaluation_model) : null, metrics, - conditions: normalizeJudgmentConfig(config, metrics), + judgmentConfig: normalizeJudgmentConfig(config, metrics), } } diff --git a/web/app/components/evaluation/store.ts b/web/app/components/evaluation/store.ts index 263060191a..454c8ee569 100644 --- a/web/app/components/evaluation/store.ts +++ b/web/app/components/evaluation/store.ts @@ -133,7 +133,7 @@ export const useEvaluationStore = create((set, get) => ({ return { ...currentResource, metrics, - conditions: syncJudgmentConfigWithMetrics(currentResource.conditions, metrics), + judgmentConfig: syncJudgmentConfigWithMetrics(currentResource.judgmentConfig, metrics), } }), } @@ -160,7 +160,7 @@ export const useEvaluationStore = create((set, get) => ({ return { ...resource, metrics, - conditions: syncJudgmentConfigWithMetrics(resource.conditions, metrics), + judgmentConfig: syncJudgmentConfigWithMetrics(resource.judgmentConfig, metrics), } }), })) @@ -173,7 +173,7 @@ export const useEvaluationStore = create((set, get) => ({ return { ...resource, metrics, - conditions: syncJudgmentConfigWithMetrics(resource.conditions, metrics), + judgmentConfig: syncJudgmentConfigWithMetrics(resource.judgmentConfig, metrics), } }), })) @@ -201,7 +201,7 @@ export const useEvaluationStore = create((set, get) => ({ return { ...resource, metrics, - conditions: syncJudgmentConfigWithMetrics(resource.conditions, metrics), + judgmentConfig: syncJudgmentConfigWithMetrics(resource.judgmentConfig, metrics), } }), })) @@ -238,7 +238,7 @@ export const useEvaluationStore = create((set, get) => ({ return { ...resource, metrics, - conditions: syncJudgmentConfigWithMetrics(resource.conditions, metrics), + judgmentConfig: syncJudgmentConfigWithMetrics(resource.judgmentConfig, metrics), } }), })) @@ -263,8 +263,8 @@ export const useEvaluationStore = create((set, get) => ({ set(state => ({ resources: updateResourceState(state.resources, resourceType, resourceId, resource => ({ ...resource, - conditions: { - ...resource.conditions, + judgmentConfig: { + ...resource.judgmentConfig, logicalOperator, }, })), @@ -274,9 +274,9 @@ export const useEvaluationStore = create((set, get) => ({ set(state => ({ resources: updateResourceState(state.resources, resourceType, resourceId, resource => ({ ...resource, - conditions: { - ...resource.conditions, - conditions: [...resource.conditions.conditions, buildConditionItem(resource.metrics)], + judgmentConfig: { + ...resource.judgmentConfig, + conditions: [...resource.judgmentConfig.conditions, buildConditionItem(resource.metrics)], }, })), })) @@ -285,9 +285,9 @@ export const useEvaluationStore = create((set, get) => ({ set(state => ({ resources: updateResourceState(state.resources, resourceType, resourceId, resource => ({ ...resource, - conditions: { - ...resource.conditions, - conditions: resource.conditions.conditions.filter(condition => condition.id !== conditionId), + judgmentConfig: { + ...resource.judgmentConfig, + conditions: resource.judgmentConfig.conditions.filter(condition => condition.id !== conditionId), }, })), })) @@ -303,9 +303,9 @@ export const useEvaluationStore = create((set, get) => ({ return { ...resource, - conditions: { - ...resource.conditions, - conditions: resource.conditions.conditions.map(condition => condition.id === conditionId + judgmentConfig: { + ...resource.judgmentConfig, + conditions: resource.judgmentConfig.conditions.map(condition => condition.id === conditionId ? { ...condition, variableSelector, @@ -323,9 +323,9 @@ export const useEvaluationStore = create((set, get) => ({ return { resources: updateResourceState(state.resources, resourceType, resourceId, currentResource => ({ ...currentResource, - conditions: { - ...currentResource.conditions, - conditions: currentResource.conditions.conditions.map((condition) => { + judgmentConfig: { + ...currentResource.judgmentConfig, + conditions: currentResource.judgmentConfig.conditions.map((condition) => { if (condition.id !== conditionId) return condition @@ -350,9 +350,9 @@ export const useEvaluationStore = create((set, get) => ({ set(state => ({ resources: updateResourceState(state.resources, resourceType, resourceId, resource => ({ ...resource, - conditions: { - ...resource.conditions, - conditions: resource.conditions.conditions.map(condition => condition.id === conditionId ? { ...condition, value } : condition), + judgmentConfig: { + ...resource.judgmentConfig, + conditions: resource.judgmentConfig.conditions.map(condition => condition.id === conditionId ? { ...condition, value } : condition), }, })), })) diff --git a/web/app/components/evaluation/types.ts b/web/app/components/evaluation/types.ts index 3412c5016e..acfcfdd11b 100644 --- a/web/app/components/evaluation/types.ts +++ b/web/app/components/evaluation/types.ts @@ -130,7 +130,7 @@ export type BatchTestRecord = { export type EvaluationResourceState = { judgeModelId: string | null metrics: EvaluationMetric[] - conditions: JudgmentConfig + judgmentConfig: JudgmentConfig activeBatchTab: BatchTestTab uploadedFileName: string | null batchRecords: BatchTestRecord[] diff --git a/web/types/evaluation.ts b/web/types/evaluation.ts index 301a812488..30070cfb57 100644 --- a/web/types/evaluation.ts +++ b/web/types/evaluation.ts @@ -13,36 +13,12 @@ export type EvaluationJudgmentConfig = { conditions?: EvaluationJudgmentCondition[] } -export type EvaluationConditionValue = string | number | boolean | null - -export type EvaluationJudgementConditionItem = { - id?: string - fieldId?: string - field_id?: string - operator?: string - value?: EvaluationConditionValue -} - -export type EvaluationJudgementConditionGroup = { - id?: string - logicalOperator?: 'and' | 'or' - logical_operator?: 'and' | 'or' - items?: EvaluationJudgementConditionItem[] -} - -export type EvaluationJudgementConditions - = | EvaluationJudgementConditionGroup[] - | { - groups?: EvaluationJudgementConditionGroup[] - } - export type EvaluationConfig = { evaluation_model: string | null evaluation_model_provider: string | null default_metrics?: EvaluationDefaultMetric[] | null customized_metrics?: EvaluationCustomizedMetric | null judgment_config?: EvaluationJudgmentConfig | null - judgement_conditions?: EvaluationJudgementConditions | null } export type NodeInfo = {