Skip to content

Commit 6d016f1

Browse files
committed
Minor refactors; Move interface to the correct file
1 parent 0284060 commit 6d016f1

File tree

9 files changed

+59
-53
lines changed

9 files changed

+59
-53
lines changed

web_ui/packages/core/src/requests/query-keys.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ const getSelectedMediaItemQueryKeys = () => {
123123
datasetIdentifier: DatasetIdentifier,
124124
mediaIdentifier: MediaIdentifier | undefined,
125125
taskId?: string
126-
) => ['explanations', datasetIdentifier, mediaIdentifier, taskId],
126+
) => [...commonKey(mediaIdentifier), 'explanations', datasetIdentifier, mediaIdentifier, taskId],
127127

128128
SELECTED: (mediaIdentifier: MediaIdentifier | undefined, taskId?: string) => [
129129
...commonKey(mediaIdentifier),

web_ui/src/core/annotations/services/inference-service.interface.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,16 @@ import { ProjectIdentifier } from '../../projects/core.interface';
77
import { DatasetIdentifier } from '../../projects/dataset.interface';
88
import { Annotation, TaskChainInput } from '../annotation.interface';
99
import { Explanation } from '../prediction.interface';
10-
import { InferenceServerStatusResult, PredictionCache, PredictionMode } from './prediction-service.interface';
10+
import { PredictionCache, PredictionMode } from './prediction-service.interface';
1111
import { VideoPaginationOptions } from './video-pagination-options.interface';
1212

1313
export type InferenceResult = ReadonlyArray<Annotation>;
1414
export type ExplanationResult = Explanation[];
1515

16+
export interface InferenceServerStatusResult {
17+
isInferenceServerReady: boolean;
18+
}
19+
1620
export interface InferenceService {
1721
getTestPredictions: (
1822
projectIdentifier: ProjectIdentifier,

web_ui/src/core/annotations/services/inference-service/api-inference-service.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,13 @@ import {
3030
PipelineServerStatusDTO,
3131
} from '../../dtos/prediction.interface';
3232
import { Rect } from '../../shapes.interface';
33-
import { ExplanationResult, InferenceResult, InferenceService } from '../inference-service.interface';
34-
import { InferenceServerStatusResult, PredictionCache, PredictionMode } from '../prediction-service.interface';
33+
import {
34+
ExplanationResult,
35+
InferenceResult,
36+
InferenceServerStatusResult,
37+
InferenceService,
38+
} from '../inference-service.interface';
39+
import { PredictionCache, PredictionMode } from '../prediction-service.interface';
3540
import {
3641
buildPredictionParams,
3742
getExplanations as convertExplanations,

web_ui/src/core/annotations/services/prediction-service.interface.ts

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,11 @@
22
// LIMITED EDGE SOFTWARE DISTRIBUTION LICENSE
33

44
import { Annotation } from '../annotation.interface';
5-
import { Explanation } from '../prediction.interface';
65

76
export interface PredictionResult {
87
annotations: ReadonlyArray<Annotation>;
98
}
109

11-
export interface ExplanationResult {
12-
maps: ReadonlyArray<Explanation>;
13-
}
14-
15-
export interface InferenceServerStatusResult {
16-
isInferenceServerReady: boolean;
17-
}
18-
1910
export enum PredictionMode {
2011
AUTO = 'auto',
2112
ONLINE = 'online',

web_ui/src/pages/annotator/providers/selected-media-item-provider/default-selected-media-item-provider.component.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ import QUERY_KEYS from '@geti/core/src/requests/query-keys';
77
import { useQuery, UseQueryResult } from '@tanstack/react-query';
88
import { noop } from 'lodash-es';
99

10-
import { ExplanationResult } from '../../../../core/annotations/services/inference-service.interface';
11-
import { PredictionResult } from '../../../../core/annotations/services/prediction-service.interface';
10+
import {
11+
ExplanationResult,
12+
PredictionResult,
13+
} from '../../../../core/annotations/services/prediction-service.interface';
1214
import { SelectedMediaItemContext, SelectedMediaItemProps } from './selected-media-item-provider.component';
1315
import { SelectedMediaItem } from './selected-media-item.interface';
1416

web_ui/src/pages/annotator/providers/selected-media-item-provider/selected-media-item-provider.component.tsx

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -175,11 +175,17 @@ export const SelectedMediaItemProvider = ({ children }: SelectedMediaItemProvide
175175
const explanationsQuery = useExplanationsQuery({
176176
datasetIdentifier,
177177
mediaItem,
178+
taskId: selectedTask?.id,
178179
});
179180

180181
const selectedMediaItemQueryKey = [
181182
...QUERY_KEYS.SELECTED_MEDIA_ITEM.SELECTED(pendingMediaItem?.identifier, selectedTask?.id),
182-
[imageQuery.fetchStatus, annotationsQuery.fetchStatus, predictionsQuery.fetchStatus],
183+
[
184+
imageQuery.fetchStatus,
185+
annotationsQuery.fetchStatus,
186+
predictionsQuery.fetchStatus,
187+
explanationsQuery.fetchStatus,
188+
],
183189
];
184190

185191
const isSelectedMediaItemQueryEnabled = mediaItem !== undefined;
@@ -191,31 +197,32 @@ export const SelectedMediaItemProvider = ({ children }: SelectedMediaItemProvide
191197
throw new Error("Can't fetch undefined media item");
192198
}
193199

194-
const [image, annotations, predictions] = await new Promise<[ImageData, Annotation[], PredictionResult]>(
195-
(resolve, reject) => {
196-
if (imageQuery.isError) {
197-
reject({
198-
message: 'Failed loading media item. Please try refreshing or selecting a different item.',
199-
});
200-
}
200+
const [image, annotations, predictions, explanations] = await new Promise<
201+
[ImageData, Annotation[], PredictionResult, ExplanationResult]
202+
>((resolve, reject) => {
203+
if (imageQuery.isError) {
204+
reject({
205+
message: 'Failed loading media item. Please try refreshing or selecting a different item.',
206+
});
207+
}
201208

202-
if (imageQuery.data && annotationsQuery.data) {
203-
if (!predictionsQuery.data && predictionsQuery.isFetching) {
204-
// If we do not yet have predictions and the user has not yet made any annotations
205-
// for the selected task, then we will wait for predictions
206-
if (isNotAnnotatedForTask(annotationsQuery.data, selectedTask)) {
207-
return;
208-
}
209+
if (imageQuery.data && annotationsQuery.data) {
210+
if (!predictionsQuery.data && predictionsQuery.isFetching) {
211+
// If we do not yet have predictions and the user has not yet made any annotations
212+
// for the selected task, then we will wait for predictions
213+
if (isNotAnnotatedForTask(annotationsQuery.data, selectedTask)) {
214+
return;
209215
}
216+
}
210217

211-
const predictionsData = predictionsQuery.data ?? { annotations: [] };
218+
const predictionsData = predictionsQuery.data ?? { annotations: [] };
219+
const explanationsData = explanationsQuery.data ?? [];
212220

213-
resolve([imageQuery.data, annotationsQuery.data, predictionsData]);
214-
}
221+
resolve([imageQuery.data, annotationsQuery.data, predictionsData, explanationsData]);
215222
}
216-
);
223+
});
217224

218-
const newlySelectedMediaItem = { ...mediaItem, image, annotations, predictions };
225+
const newlySelectedMediaItem = { ...mediaItem, image, annotations, predictions, explanations };
219226

220227
if (isSingleDomainProject(isClassificationDomain)) {
221228
return {

web_ui/src/pages/annotator/providers/selected-media-item-provider/use-explanation-query.hook.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { useApplicationServices } from '@geti/core/src/services/application-serv
66
import { QueryKey, useQuery, UseQueryResult } from '@tanstack/react-query';
77
import { AxiosError } from 'axios';
88

9-
import { Explanation } from '../../../../core/annotations/prediction.interface';
9+
import { ExplanationResult } from '../../../../core/annotations/services/inference-service.interface';
1010
import { MediaItem } from '../../../../core/media/media.interface';
1111
import { DatasetIdentifier } from '../../../../core/projects/dataset.interface';
1212

@@ -22,7 +22,7 @@ export const useExplanationsQuery = ({
2222
mediaItem,
2323
enabled = true,
2424
taskId,
25-
}: UseGetExplanations): UseQueryResult<Explanation[], AxiosError> => {
25+
}: UseGetExplanations): UseQueryResult<ExplanationResult, AxiosError> => {
2626
const { inferenceService } = useApplicationServices();
2727

2828
const queryKey: QueryKey = QUERY_KEYS.SELECTED_MEDIA_ITEM.EXPLANATIONS(
@@ -31,12 +31,12 @@ export const useExplanationsQuery = ({
3131
taskId
3232
);
3333

34-
return useQuery<Explanation[], AxiosError>({
34+
return useQuery({
3535
queryKey,
3636
queryFn: async ({ signal }) => {
3737
if (!mediaItem) throw new Error("Can't fetch undefined media item");
3838

39-
return inferenceService.getExplanations(datasetIdentifier, mediaItem, taskId, undefined, signal);
39+
return await inferenceService.getExplanations(datasetIdentifier, mediaItem, taskId, undefined, signal);
4040
},
4141
enabled: enabled && !!mediaItem,
4242
staleTime: 5 * 60_000,

web_ui/src/pages/project-details/components/project-model/training-dataset/training-dataset-details-preview/training-dataset-details-preview.component.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ export const TrainingDatasetDetailsPreview = ({
103103
mediaItem: selectedPreviewItem,
104104
datasetIdentifier,
105105
taskId,
106+
enabled: isPredictionsEnabled,
106107
});
107108

108109
const predictions = useVisibleAnnotations(predictionsQuery.data?.annotations ?? []);

web_ui/src/pages/project-details/components/project-test/test-details-preview/use-test-results-query.hook.ts

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -72,20 +72,16 @@ export const useTestResultsQuery = (
7272

7373
const predictionsQuery = useQuery<PredictionResult, AxiosError>({
7474
queryKey: QUERY_KEYS.TEST_PREDICTIONS(projectIdentifier, testId, String(testResult?.predictionId)),
75-
queryFn: () =>
76-
Promise.allSettled([
77-
inferenceService.getTestPredictions(
78-
datasetIdentifier,
79-
labels,
80-
testId,
81-
String(testResult?.predictionId)
82-
),
83-
inferenceService.getExplanations(datasetIdentifier, mediaItem),
84-
]).then(([predictions, explanations]) => {
85-
// @ts-expect-error PromiseSettledResult type is not exported
86-
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled
87-
return { annotations: predictions.value ?? [], maps: explanations.value ?? [] };
88-
}),
75+
queryFn: async () => {
76+
const predictions = await inferenceService.getTestPredictions(
77+
datasetIdentifier,
78+
labels,
79+
testId,
80+
String(testResult?.predictionId)
81+
);
82+
83+
return { annotations: predictions };
84+
},
8985
enabled: isNonEmptyString(testResult?.predictionId),
9086
});
9187

0 commit comments

Comments
 (0)