Skip to content

Commit 1acc921

Browse files
committed
Simplify default composite evaluation management
Now the system is allowing to have a default composite evaluation of any type. We're changing that here to always have one composite evaluation of type `average`. This way with this we simplify the UI and we don't need all the alerts and toast system to notify when this composite evaluation goes out of sync when a evaluation is removed from an issue for example. WIP WIP WIP
1 parent 444ed2d commit 1acc921

File tree

32 files changed

+10243
-663
lines changed

32 files changed

+10243
-663
lines changed

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

Lines changed: 2 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
} from '$/components/Providers/WebsocketsProvider/useSockets'
1111
import { RealtimeToggle } from '$/components/RealtimeToggle'
1212
import { useEvaluationResultsV2 } from '$/stores/evaluationResultsV2'
13-
import { useEvaluationsV2, useEvaluationV2Stats } from '$/stores/evaluationsV2'
13+
import { useEvaluationV2Stats } from '$/stores/evaluationsV2'
1414
import {
1515
EvaluationMetric,
1616
EvaluationType,
@@ -21,12 +21,10 @@ import {
2121
evaluationResultsV2SearchToQueryParams,
2222
} from '@latitude-data/core/helpers'
2323
import { EvaluationResultV2WithDetails } from '@latitude-data/core/schema/types'
24-
import { Alert } from '@latitude-data/web-ui/atoms/Alert'
25-
import { Button } from '@latitude-data/web-ui/atoms/Button'
2624
import { Icon } from '@latitude-data/web-ui/atoms/Icons'
2725
import { Text } from '@latitude-data/web-ui/atoms/Text'
2826
import { TableWithHeader } from '@latitude-data/web-ui/molecules/ListingHeader'
29-
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
27+
import { useCallback, useEffect, useRef, useState } from 'react'
3028
import { useDebounce, useDebouncedCallback } from 'use-debounce'
3129
import { EvaluationTitle } from '../../_components/EvaluationTitle'
3230
import { EvaluationActions } from './EvaluationActions'
@@ -194,65 +192,8 @@ export function EvaluationPage<
194192
})
195193

196194
const openSettingsRef = useRef<() => void>(undefined)
197-
const { data: evaluations, isLoading: isLoadingEvaluations } =
198-
useEvaluationsV2({ project, commit, document })
199-
const isTargetSynced = useMemo(() => {
200-
if (isLoadingEvaluations) return true
201-
if (evaluation.type !== EvaluationType.Composite) return true
202-
if (
203-
!(evaluation as EvaluationV2<EvaluationType.Composite>).configuration
204-
.defaultTarget
205-
) {
206-
return true
207-
}
208-
209-
const linkedUuids = evaluations
210-
.filter((e) => e.uuid !== evaluation.uuid && !e.deletedAt && e.issueId)
211-
.map((e) => e.uuid)
212-
213-
const linkedSet = new Set(linkedUuids)
214-
const currentSet = new Set(
215-
(
216-
evaluation as EvaluationV2<EvaluationType.Composite>
217-
).configuration.evaluationUuids,
218-
)
219-
220-
if (linkedSet.size !== currentSet.size) return false
221-
222-
for (const uuid of linkedSet) {
223-
if (!currentSet.has(uuid)) return false
224-
}
225-
226-
return true
227-
}, [isLoadingEvaluations, evaluation, evaluations])
228-
229195
return (
230196
<div className='flex flex-grow min-h-0 flex-col w-full gap-4 p-6'>
231-
{evaluation.type === EvaluationType.Composite && !isTargetSynced && (
232-
<Alert
233-
spacing='xsmall'
234-
variant='warning'
235-
direction='column'
236-
description='This composite score is unsynced from evaluations that are tracking and monitoring active issues'
237-
cta={
238-
<Button
239-
variant='link'
240-
size='none'
241-
textColor='warningMutedForeground'
242-
iconProps={{
243-
name: 'arrowRight',
244-
color: 'warningMutedForeground',
245-
size: 'normal',
246-
placement: 'right',
247-
strokeWidth: 2.5,
248-
}}
249-
onClick={() => openSettingsRef.current?.()}
250-
>
251-
Sync score
252-
</Button>
253-
}
254-
/>
255-
)}
256197
<TableWithHeader
257198
verticalAligment='bottom'
258199
title={<EvaluationTitle evaluation={evaluation} />}

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

Lines changed: 10 additions & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import { useNavigate } from '$/hooks/useNavigate'
99
import { ROUTES } from '$/services/routes'
1010
import { useEvaluationsV2 } from '$/stores/evaluationsV2'
1111
import { EvaluationType, EvaluationV2 } from '@latitude-data/core/constants'
12-
import { Alert } from '@latitude-data/web-ui/atoms/Alert'
1312
import { Badge } from '@latitude-data/web-ui/atoms/Badge'
1413
import { Button } from '@latitude-data/web-ui/atoms/Button'
1514
import {
@@ -33,7 +32,6 @@ import {
3332
BlankSlateStep,
3433
BlankSlateWithSteps,
3534
} from '@latitude-data/web-ui/molecules/BlankSlateWithSteps'
36-
import Link from 'next/link'
3735
import { useCallback, useMemo, useState } from 'react'
3836
import { EvaluationsGenerator } from './EvaluationsGenerator'
3937

@@ -93,38 +91,6 @@ export function EvaluationsTable({
9391
.enableControls,
9492
) as EvaluationV2<EvaluationType.Human> | undefined
9593
}, [evaluations])
96-
const optimizationsEvaluation = useMemo(() => {
97-
return evaluations.find(
98-
(e) =>
99-
e.type === EvaluationType.Composite &&
100-
!!(e as EvaluationV2<EvaluationType.Composite>).configuration
101-
.defaultTarget,
102-
) as EvaluationV2<EvaluationType.Composite> | undefined
103-
}, [evaluations])
104-
105-
const isTargetSynced = useMemo(() => {
106-
if (!optimizationsEvaluation) return true
107-
108-
const linkedUuids = evaluations
109-
.filter(
110-
(e) =>
111-
e.uuid !== optimizationsEvaluation.uuid && !e.deletedAt && e.issueId,
112-
)
113-
.map((e) => e.uuid)
114-
115-
const linkedSet = new Set(linkedUuids)
116-
const currentSet = new Set(
117-
optimizationsEvaluation.configuration.evaluationUuids,
118-
)
119-
120-
if (linkedSet.size !== currentSet.size) return false
121-
122-
for (const uuid of linkedSet) {
123-
if (!currentSet.has(uuid)) return false
124-
}
125-
126-
return true
127-
}, [evaluations, optimizationsEvaluation])
12894

12995
const [openDeleteModal, setOpenDeleteModal] = useState(false)
13096
const onDelete = useCallback(
@@ -184,45 +150,6 @@ export function EvaluationsTable({
184150
],
185151
)
186152

187-
const onUnuseOptimizations = useCallback(
188-
async (evaluation: EvaluationV2<EvaluationType.Composite>) => {
189-
if (evaluation.uuid !== optimizationsEvaluation?.uuid) return
190-
if (isUpdatingEvaluation) return
191-
return await updateEvaluation({
192-
documentUuid: document.documentUuid,
193-
evaluationUuid: evaluation.uuid,
194-
settings: {
195-
configuration: { ...evaluation.configuration, defaultTarget: false },
196-
},
197-
})
198-
},
199-
[document, isUpdatingEvaluation, updateEvaluation, optimizationsEvaluation],
200-
)
201-
202-
const onUseOptimizations = useCallback(
203-
async (evaluation: EvaluationV2<EvaluationType.Composite>) => {
204-
if (evaluation.uuid === optimizationsEvaluation?.uuid) return
205-
if (isUpdatingEvaluation) return
206-
if (optimizationsEvaluation) {
207-
await onUnuseOptimizations(optimizationsEvaluation)
208-
}
209-
return await updateEvaluation({
210-
documentUuid: document.documentUuid,
211-
evaluationUuid: evaluation.uuid,
212-
settings: {
213-
configuration: { ...evaluation.configuration, defaultTarget: true },
214-
},
215-
})
216-
},
217-
[
218-
document,
219-
isUpdatingEvaluation,
220-
updateEvaluation,
221-
optimizationsEvaluation,
222-
onUnuseOptimizations,
223-
],
224-
)
225-
226153
const onToggleLiveEvaluation = useCallback(
227154
async (evaluation: EvaluationV2) => {
228155
if (isUpdatingEvaluation) return
@@ -267,47 +194,6 @@ export function EvaluationsTable({
267194
/>
268195
<Text.H5M>{EVALUATION_SPECIFICATIONS[type].name}</Text.H5M>
269196
</span>
270-
{type === EvaluationType.Composite &&
271-
optimizationsEvaluation &&
272-
!isTargetSynced && (
273-
<Alert
274-
spacing='xsmall'
275-
variant='warning'
276-
direction='column'
277-
description={`${optimizationsEvaluation.name} score is unsynced from evaluations that are tracking and monitoring active issues`}
278-
cta={
279-
<Link
280-
href={
281-
ROUTES.projects
282-
.detail({ id: project.id })
283-
.commits.detail({ uuid: commit.uuid })
284-
.documents.detail({
285-
uuid: document.documentUuid,
286-
})
287-
.evaluations.detail({
288-
uuid: optimizationsEvaluation.uuid,
289-
}).root + '?action=editSettings'
290-
}
291-
className='leading-none'
292-
>
293-
<Button
294-
variant='link'
295-
size='none'
296-
textColor='warningMutedForeground'
297-
iconProps={{
298-
name: 'arrowRight',
299-
color: 'warningMutedForeground',
300-
size: 'normal',
301-
placement: 'right',
302-
strokeWidth: 2.5,
303-
}}
304-
>
305-
Sync score
306-
</Button>
307-
</Link>
308-
}
309-
/>
310-
)}
311197
<Table className='table-fixed'>
312198
<TableHeader className='isolate sticky top-0 z-10'>
313199
<TableRow>
@@ -371,33 +257,32 @@ export function EvaluationsTable({
371257
This evaluation is used for annotations
372258
</Tooltip>
373259
)}
374-
{evaluation.uuid ===
375-
optimizationsEvaluation?.uuid && (
260+
{!!evaluation.evaluateLiveLogs && (
376261
<Tooltip
377262
asChild
378263
trigger={
379-
<Badge variant='accent'>
380-
Optimizations
381-
</Badge>
264+
<Badge variant='accent'>Live</Badge>
382265
}
383-
maxWidth='none'
384266
align='center'
385267
side='top'
386268
>
387-
This evaluation is the default for
388-
optimizations and distillations
269+
This evaluation is running on live logs
389270
</Tooltip>
390271
)}
391-
{!!evaluation.evaluateLiveLogs && (
272+
{evaluation.uuid ===
273+
document.mainEvaluationUuid && (
392274
<Tooltip
393275
asChild
394276
trigger={
395-
<Badge variant='accent'>Live</Badge>
277+
<Badge variant='accent'>
278+
Optimizations
279+
</Badge>
396280
}
397281
align='center'
398282
side='top'
399283
>
400-
This evaluation is running on live logs
284+
This evaluation is the default for
285+
optimizations and distillations
401286
</Tooltip>
402287
)}
403288
</div>
@@ -449,33 +334,6 @@ export function EvaluationsTable({
449334
},
450335
] as MenuOption[])
451336
: []),
452-
...(evaluation.type ===
453-
EvaluationType.Composite
454-
? ([
455-
evaluation.uuid ===
456-
optimizationsEvaluation?.uuid
457-
? {
458-
label: 'Unuse for optimizations',
459-
onElementClick: (e) =>
460-
e.stopPropagation(),
461-
onClick: () =>
462-
onUnuseOptimizations(
463-
evaluation as EvaluationV2<EvaluationType.Composite>,
464-
),
465-
disabled: isUpdatingEvaluation,
466-
}
467-
: {
468-
label: 'Use for optimizations',
469-
onElementClick: (e) =>
470-
e.stopPropagation(),
471-
onClick: () =>
472-
onUseOptimizations(
473-
evaluation as EvaluationV2<EvaluationType.Composite>,
474-
),
475-
disabled: isUpdatingEvaluation,
476-
},
477-
] as MenuOption[])
478-
: []),
479337
...(specification.supportsLiveEvaluation
480338
? ([
481339
{

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

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { getEvaluationMetricSpecification } from '$/components/evaluations'
22
import { useEvaluationsV2 } from '$/stores/evaluationsV2'
3-
import { EvaluationType, EvaluationV2 } from '@latitude-data/core/constants'
43
import { Commit } from '@latitude-data/core/schema/models/types/Commit'
54
import { DocumentVersion } from '@latitude-data/core/schema/models/types/DocumentVersion'
65
import { Project } from '@latitude-data/core/schema/models/types/Project'
@@ -33,13 +32,10 @@ export function EvaluationSelector({
3332
})
3433

3534
const defaultEvaluation = useMemo(() => {
36-
return evaluations.find(
37-
(e) =>
38-
e.type === EvaluationType.Composite &&
39-
!!(e as EvaluationV2<EvaluationType.Composite>).configuration
40-
.defaultTarget,
41-
) as EvaluationV2<EvaluationType.Composite> | undefined
42-
}, [evaluations])
35+
if (!document.mainEvaluationUuid) return undefined
36+
37+
return evaluations.find((e) => e.uuid === document.mainEvaluationUuid)
38+
}, [evaluations, document.mainEvaluationUuid])
4339

4440
useEffect(() => {
4541
if (value) return

0 commit comments

Comments
 (0)