Skip to content

Commit d4ab970

Browse files
committed
Improve composite evaluation creation form validation
1 parent 511d2a2 commit d4ab970

File tree

3 files changed

+55
-23
lines changed
  • apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]
  • packages/core/src/services/evaluationsV2/composite

3 files changed

+55
-23
lines changed

apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/documents/[documentUuid]/(withTabs)/evaluations/_components/EvaluationsActions.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,7 @@ function CombineEvaluations({
340340
Combine evaluations
341341
</TableWithHeader.Button>
342342
<ConfirmModal
343+
dismissible
343344
size='medium'
344345
open={openCreateModal}
345346
title='Create a new composite score'

apps/web/src/app/(private)/projects/[projectId]/versions/[commitUuid]/issues/_components/IssueSpansTable/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export function IssueSpansTable({
3838
<TableHeader className='sticky top-0 z-10'>
3939
<TableRow>
4040
<TableHead>Time</TableHead>
41-
<TableHead>Commit</TableHead>
41+
<TableHead>Version</TableHead>
4242
<TableHead>Duration</TableHead>
4343
<TableHead />
4444
</TableRow>

packages/core/src/services/evaluationsV2/composite/index.ts

Lines changed: 53 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
CompositeEvaluationMetric,
55
CompositeEvaluationResultError,
66
CompositeEvaluationResultMetadata,
7+
EvaluationConfiguration,
78
EvaluationResultValue,
89
EvaluationType,
910
EvaluationV2,
@@ -40,28 +41,15 @@ export const CompositeEvaluationSpecification = {
4041
metrics: METRICS,
4142
}
4243

43-
async function validate<M extends CompositeEvaluationMetric>(
44-
{
45-
metric,
46-
uuid,
47-
configuration,
48-
evaluations,
49-
...rest
50-
}: EvaluationMetricValidateArgs<EvaluationType.Composite, M> & {
51-
metric: M
52-
},
53-
db = database,
54-
) {
55-
const metricSpecification = METRICS[metric]
56-
if (!metricSpecification) {
57-
return Result.error(new BadRequestError('Invalid metric'))
58-
}
59-
60-
const parsing = metricSpecification.configuration.safeParse(configuration)
61-
if (parsing.error) {
62-
return Result.error(parsing.error)
63-
}
64-
44+
async function validateSubEvaluations<M extends CompositeEvaluationMetric>({
45+
uuid,
46+
configuration,
47+
evaluations,
48+
}: {
49+
uuid?: string
50+
configuration: EvaluationConfiguration<EvaluationType.Composite, M>
51+
evaluations: EvaluationV2[]
52+
}) {
6553
if (configuration.evaluationUuids?.length === 0) {
6654
return Result.error(new BadRequestError('Sub-evaluations are required'))
6755
}
@@ -115,6 +103,49 @@ async function validate<M extends CompositeEvaluationMetric>(
115103
}
116104
}
117105

106+
return Result.ok(configuration)
107+
}
108+
109+
async function validate<M extends CompositeEvaluationMetric>(
110+
{
111+
metric,
112+
uuid,
113+
configuration,
114+
evaluations,
115+
...rest
116+
}: EvaluationMetricValidateArgs<EvaluationType.Composite, M> & {
117+
metric: M
118+
},
119+
db = database,
120+
) {
121+
const metricSpecification = METRICS[metric]
122+
if (!metricSpecification) {
123+
return Result.error(new BadRequestError('Invalid metric'))
124+
}
125+
126+
const parsing = metricSpecification.configuration.safeParse(configuration)
127+
if (parsing.error) {
128+
return Result.error(parsing.error)
129+
}
130+
131+
const validating = await validateSubEvaluations({ uuid, configuration, evaluations }) // prettier-ignore
132+
if (validating.error) {
133+
if (validating.error instanceof BadRequestError) {
134+
return Result.error(
135+
new z.ZodError([
136+
{
137+
code: 'custom',
138+
path: ['evaluationUuids'],
139+
message: validating.error.message,
140+
},
141+
]),
142+
)
143+
}
144+
145+
return Result.error(validating.error)
146+
}
147+
configuration = validating.value
148+
118149
if (
119150
configuration.minThreshold !== undefined &&
120151
(configuration.minThreshold < 0 || configuration.minThreshold > 100)

0 commit comments

Comments
 (0)