diff --git a/application/ui/src/features/annotator/tools/tools.component.tsx b/application/ui/src/features/annotator/tools/tools.component.tsx
index 781873fe53..63acc246d8 100644
--- a/application/ui/src/features/annotator/tools/tools.component.tsx
+++ b/application/ui/src/features/annotator/tools/tools.component.tsx
@@ -1,7 +1,7 @@
// Copyright (C) 2025 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
-import { ActionButton } from '@geti/ui';
+import { ActionButton, Tooltip, TooltipTrigger } from '@geti/ui';
import { useHotkeys } from 'react-hotkeys-hook';
import { Fragment } from 'react/jsx-runtime';
@@ -18,16 +18,21 @@ const Tool = ({ tool, activeTool, setActiveTool }: ToolProps) => {
useHotkeys(tool.hotkey, () => setActiveTool(tool.type), [setActiveTool]);
return (
- setActiveTool(tool.type)}
- aria-label={`${tool.type} tool`}
- >
-
-
-
-
+
+ setActiveTool(tool.type)}
+ aria-label={`${tool.type} tool`}
+ >
+
+
+
+
+
+ {tool.label} ({tool.hotkey})
+
+
);
};
diff --git a/application/ui/src/features/dataset/media-preview/primary-toolbar/toggle-annotations-visibility.component.tsx b/application/ui/src/features/dataset/media-preview/primary-toolbar/toggle-annotations-visibility.component.tsx
index 9e6b50140c..f9865b637d 100644
--- a/application/ui/src/features/dataset/media-preview/primary-toolbar/toggle-annotations-visibility.component.tsx
+++ b/application/ui/src/features/dataset/media-preview/primary-toolbar/toggle-annotations-visibility.component.tsx
@@ -14,7 +14,7 @@ export const ToggleAnnotationsVisibility = () => {
useHotkeys(HOTKEYS.toggleAnnotationsVisibility, toggleVisibility, [toggleVisibility]);
return (
-
+
{isVisible ? : }
diff --git a/application/ui/src/features/models/train-model/select-dataset-revision.component.tsx b/application/ui/src/features/models/train-model/select-dataset-revision.component.tsx
index 888925c872..111e6d3700 100644
--- a/application/ui/src/features/models/train-model/select-dataset-revision.component.tsx
+++ b/application/ui/src/features/models/train-model/select-dataset-revision.component.tsx
@@ -1,7 +1,7 @@
// Copyright (C) 2025 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
-import { Item, Picker } from '@geti/ui';
+import { Content, ContextualHelp, Heading, Item, Picker } from '@geti/ui';
import { useTrainModel } from './train-model-provider.component';
@@ -9,14 +9,28 @@ export const SelectDatasetRevision = () => {
const { datasetRevisions, selectedDatasetRevisionId, onSelectDatasetRevisionId } = useTrainModel();
return (
- onSelectDatasetRevisionId(String(key))}
- >
- {(item) => - {item.name}
}
-
+ <>
+ onSelectDatasetRevisionId(String(key))}
+ contextualHelp={
+
+ Selecting a dataset
+
+ {`Choose the version of the dataset to use for training. If you want to train the new model
+ on the exact same data (media and annotations) as another model, please select the
+ corresponding dataset revision. Conversely, if you want to train on the most recent version
+ of the data (what you see in the "Dataset" page), please select "Use
+ current dataset".`}
+
+
+ }
+ >
+ {(item) => - {item.name}
}
+
+ >
);
};
diff --git a/application/ui/src/features/models/train-model/train-model-dialog.component.tsx b/application/ui/src/features/models/train-model/train-model-dialog.component.tsx
index 3bde19fb7a..65fea78021 100644
--- a/application/ui/src/features/models/train-model/train-model-dialog.component.tsx
+++ b/application/ui/src/features/models/train-model/train-model-dialog.component.tsx
@@ -1,12 +1,26 @@
// Copyright (C) 2025 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
-import { Button, ButtonGroup, Content, Dialog, Divider, Flex, Heading, Link, Text, toast } from '@geti/ui';
+import {
+ Button,
+ ButtonGroup,
+ Content,
+ Dialog,
+ Divider,
+ Flex,
+ Footer,
+ Heading,
+ InlineAlert,
+ Link,
+ Text,
+ toast,
+} from '@geti/ui';
import { useProjectIdentifier } from 'hooks/use-project-identifier.hook';
import { useMatch } from 'react-router';
import { paths } from '../../../constants/paths';
import { useTrainModelMutation } from '../hooks/api/use-train-model-mutation';
+import { useIsTrainingButtonDisabled } from '../hooks/use-is-training-button-disabled';
import { TrainModelDialogContent } from './train-model-dialog-content';
import { useTrainModel } from './train-model-provider.component';
@@ -20,8 +34,10 @@ export const TrainModelDialog = ({ onClose }: TrainModelDialogProps) => {
const trainModelMutation = useTrainModelMutation();
const projectId = useProjectIdentifier();
const isModelsPage = useMatch(paths.project.models.pattern);
+ const isTrainingDisabled = useIsTrainingButtonDisabled();
- const isStartButtonDisabled = selectedModelArchitectureId === null || selectedTrainingDevice === null;
+ const isStartButtonDisabled =
+ isTrainingDisabled || selectedModelArchitectureId === null || selectedTrainingDevice === null;
const trainModel = () => {
if (isStartButtonDisabled) return;
@@ -57,21 +73,39 @@ export const TrainModelDialog = ({ onClose }: TrainModelDialogProps) => {
};
return (
-