Skip to content

Commit fbc80c2

Browse files
authored
Enhance/912 reorder evaluations v2 types (#967)
* Reorder Evaluations 2.0 types * wip
1 parent 5286479 commit fbc80c2

File tree

33 files changed

+636
-429
lines changed

33 files changed

+636
-429
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import {
2+
EvaluationType,
3+
HumanEvaluationMetric,
4+
HumanEvaluationSpecification,
5+
} from '@latitude-data/constants'
6+
import { EvaluationMetricFrontendSpecification } from '../index'
7+
8+
// prettier-ignore
9+
const METRICS: {
10+
[M in HumanEvaluationMetric]: EvaluationMetricFrontendSpecification<EvaluationType.Human, M>
11+
} = {
12+
[HumanEvaluationMetric.Binary]: undefined as any, // TODO: Implement
13+
[HumanEvaluationMetric.Rating]: undefined as any, // TODO: Implement
14+
[HumanEvaluationMetric.Comparison]: undefined as any, // TODO: Implement
15+
}
16+
17+
const specification = HumanEvaluationSpecification
18+
export default {
19+
...specification,
20+
ConfigurationForm: undefined as any, // TODO: Implement
21+
metrics: METRICS,
22+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import {
2+
EvaluationConfiguration,
3+
EvaluationMetric,
4+
EvaluationMetricSpecification,
5+
EvaluationSpecification,
6+
EvaluationType,
7+
} from '@latitude-data/constants'
8+
import { IconName } from '@latitude-data/web-ui'
9+
import React from 'react'
10+
import HumanEvaluationSpecification from './human'
11+
import LlmEvaluationSpecification from './llm'
12+
import RuleEvaluationSpecification from './rule'
13+
14+
export type EvaluationMetricFrontendSpecification<
15+
T extends EvaluationType = EvaluationType,
16+
M extends EvaluationMetric<T> = EvaluationMetric<T>,
17+
> = EvaluationMetricSpecification<T, M> & {
18+
icon: IconName
19+
ConfigurationForm: (props: {
20+
configuration: EvaluationConfiguration<T, M>
21+
onChange: (configuration: EvaluationConfiguration<T, M>) => void
22+
}) => React.ReactNode
23+
}
24+
25+
export type EvaluationFrontendSpecification<
26+
T extends EvaluationType = EvaluationType,
27+
> = Omit<EvaluationSpecification<T>, 'metrics'> & {
28+
ConfigurationForm: <
29+
M extends EvaluationMetric<T> = EvaluationMetric<T>,
30+
>(props: {
31+
metric: M
32+
configuration: EvaluationConfiguration<T, M>
33+
onChange: (configuration: EvaluationConfiguration<T>) => void
34+
}) => React.ReactNode
35+
metrics: {
36+
[M in EvaluationMetric<T>]: EvaluationMetricFrontendSpecification<T, M>
37+
}
38+
}
39+
40+
export const EVALUATION_SPECIFICATIONS: {
41+
[T in EvaluationType]: EvaluationFrontendSpecification<T>
42+
} = {
43+
[EvaluationType.Rule]: RuleEvaluationSpecification,
44+
[EvaluationType.Llm]: LlmEvaluationSpecification,
45+
[EvaluationType.Human]: HumanEvaluationSpecification,
46+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import {
2+
EvaluationType,
3+
LlmEvaluationMetric,
4+
LlmEvaluationSpecification,
5+
} from '@latitude-data/constants'
6+
import { EvaluationMetricFrontendSpecification } from '../index'
7+
8+
// prettier-ignore
9+
const METRICS: {
10+
[M in LlmEvaluationMetric]: EvaluationMetricFrontendSpecification<EvaluationType.Llm, M>
11+
} = {
12+
[LlmEvaluationMetric.Binary]: undefined as any, // TODO: Implement
13+
[LlmEvaluationMetric.Rating]: undefined as any, // TODO: Implement
14+
[LlmEvaluationMetric.Comparison]: undefined as any, // TODO: Implement
15+
}
16+
17+
const specification = LlmEvaluationSpecification
18+
export default {
19+
...specification,
20+
ConfigurationForm: undefined as any, // TODO: Implement
21+
metrics: METRICS,
22+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import {
2+
RuleEvaluationExactMatchConfiguration,
3+
RuleEvaluationExactMatchSpecification,
4+
} from '@latitude-data/constants'
5+
import { IconName } from '@latitude-data/web-ui'
6+
7+
const specification = RuleEvaluationExactMatchSpecification
8+
export default {
9+
...specification,
10+
icon: 'equal' as IconName,
11+
ConfigurationForm: ConfigurationForm,
12+
}
13+
14+
function ConfigurationForm({
15+
configuration,
16+
onChange,
17+
}: {
18+
configuration: RuleEvaluationExactMatchConfiguration
19+
onChange: (configuration: RuleEvaluationExactMatchConfiguration) => void
20+
}) {
21+
configuration // TODO: Implement
22+
onChange // TODO: Implement
23+
return <div>Exact Match</div>
24+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import {
2+
RuleEvaluationRegularExpressionConfiguration,
3+
RuleEvaluationRegularExpressionSpecification,
4+
} from '@latitude-data/constants'
5+
import { IconName } from '@latitude-data/web-ui'
6+
7+
const specification = RuleEvaluationRegularExpressionSpecification
8+
export default {
9+
...specification,
10+
icon: 'regex' as IconName,
11+
ConfigurationForm: ConfigurationForm,
12+
}
13+
14+
function ConfigurationForm({
15+
configuration,
16+
onChange,
17+
}: {
18+
configuration: RuleEvaluationRegularExpressionConfiguration
19+
onChange: (
20+
configuration: RuleEvaluationRegularExpressionConfiguration,
21+
) => void
22+
}) {
23+
configuration // TODO: Implement
24+
onChange // TODO: Implement
25+
return <div>Regular Expression</div>
26+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import {
2+
EvaluationType,
3+
RuleEvaluationConfiguration,
4+
RuleEvaluationMetric,
5+
RuleEvaluationSpecification,
6+
} from '@latitude-data/constants'
7+
import { EvaluationMetricFrontendSpecification } from '../index'
8+
import RuleEvaluationExactMatchSpecification from './ExactMatch'
9+
import RuleEvaluationRegularExpressionSpecification from './RegularExpression'
10+
11+
// prettier-ignore
12+
const METRICS: {
13+
[M in RuleEvaluationMetric]: EvaluationMetricFrontendSpecification<EvaluationType.Rule, M>
14+
} = {
15+
[RuleEvaluationMetric.ExactMatch]: RuleEvaluationExactMatchSpecification,
16+
[RuleEvaluationMetric.RegularExpression]: RuleEvaluationRegularExpressionSpecification,
17+
[RuleEvaluationMetric.LengthCount]: undefined as any, // TODO: Implement
18+
[RuleEvaluationMetric.LexicalOverlap]: undefined as any, // TODO: Implement
19+
[RuleEvaluationMetric.SemanticSimilarity]: undefined as any, // TODO: Implement
20+
}
21+
22+
const specification = RuleEvaluationSpecification
23+
export default {
24+
...specification,
25+
ConfigurationForm: ConfigurationForm,
26+
metrics: METRICS,
27+
}
28+
29+
function ConfigurationForm<M extends RuleEvaluationMetric>({
30+
metric,
31+
configuration,
32+
onChange,
33+
}: {
34+
metric: M
35+
configuration: RuleEvaluationConfiguration<M>
36+
onChange: (configuration: RuleEvaluationConfiguration<M>) => void
37+
}) {
38+
const metricSpecification = METRICS[metric]
39+
if (!metricSpecification) return null
40+
41+
// TODO: Implement (probably dont pass the metric and make a selector component)
42+
return (
43+
<div>
44+
<h1>Rule Evaluation</h1>
45+
<metricSpecification.ConfigurationForm
46+
configuration={configuration}
47+
onChange={onChange}
48+
/>
49+
</div>
50+
)
51+
}

apps/web/src/lib/evaluations.ts

Lines changed: 0 additions & 83 deletions
This file was deleted.

apps/web/src/stores/evaluationsV2.ts

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,8 @@ import { ROUTES } from '$/services/routes'
1111
import {
1212
Commit,
1313
DocumentVersion,
14-
EvaluationConfiguration,
15-
EvaluationMetric,
1614
EvaluationOptions,
1715
EvaluationSettings,
18-
EvaluationType,
1916
EvaluationV2,
2017
Project,
2118
} from '@latitude-data/core/browser'
@@ -77,15 +74,11 @@ export default function useEvaluationsV2(
7774
},
7875
})
7976
const createEvaluation = useCallback(
80-
async <
81-
T extends EvaluationType,
82-
M extends EvaluationMetric<T>,
83-
C extends EvaluationConfiguration<M> = EvaluationConfiguration<M>,
84-
>({
77+
async ({
8578
settings,
8679
options,
8780
}: {
88-
settings: EvaluationSettings<T, M, C>
81+
settings: EvaluationSettings
8982
options?: Partial<EvaluationOptions>
9083
}) => {
9184
const [result, error] = await executeCreateEvaluationV2({
@@ -123,17 +116,13 @@ export default function useEvaluationsV2(
123116
},
124117
})
125118
const updateEvaluation = useCallback(
126-
async <
127-
T extends EvaluationType,
128-
M extends EvaluationMetric<T>,
129-
C extends EvaluationConfiguration<M> = EvaluationConfiguration<M>,
130-
>({
119+
async ({
131120
evaluationUuid,
132121
settings,
133122
options,
134123
}: {
135124
evaluationUuid: string
136-
settings?: Partial<Omit<EvaluationSettings<T, M, C>, 'type' | 'metric'>>
125+
settings?: Partial<Omit<EvaluationSettings, 'type' | 'metric'>>
137126
options?: Partial<EvaluationOptions>
138127
}) => {
139128
const [result, error] = await executeUpdateEvaluationV2({

0 commit comments

Comments
 (0)