Skip to content

Commit

Permalink
RHOAIENG-11049 Add tracking for model serving (#3111)
Browse files Browse the repository at this point in the history
* RHOAIENG-11049 Add tracking for model serving

* Update frontend/src/pages/modelServing/screens/projects/kServeModal/ManageKServeModal.tsx

---------

Co-authored-by: Jeff Phillips <[email protected]>
  • Loading branch information
pilhuhn and jeff-phillips-18 authored Sep 3, 2024
1 parent 57ce8a7 commit 191aebc
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import DashboardEmptyTableView from '~/concepts/dashboard/DashboardEmptyTableVie
import { isModelMesh } from '~/pages/modelServing/utils';
import ManageKServeModal from '~/pages/modelServing/screens/projects/kServeModal/ManageKServeModal';
import ResourceTr from '~/components/ResourceTr';
import { fireFormTrackingEvent } from '~/concepts/analyticsTracking/segmentIOUtils';
import { TrackingOutcome } from '~/concepts/analyticsTracking/trackingProperties';
import InferenceServiceTableRow from './InferenceServiceTableRow';
import { getGlobalInferenceServiceColumns, getProjectInferenceServiceColumns } from './data';
import DeleteInferenceServiceModal from './DeleteInferenceServiceModal';
Expand Down Expand Up @@ -91,6 +93,10 @@ const InferenceServiceTable: React.FC<InferenceServiceTableProps> = ({
: undefined
}
onClose={(deleted) => {
fireFormTrackingEvent('Model Deleted', {
outcome: deleted ? TrackingOutcome.submit : TrackingOutcome.cancel,
type: 'multi',
});
if (deleted) {
refresh?.();
}
Expand All @@ -101,6 +107,10 @@ const InferenceServiceTable: React.FC<InferenceServiceTableProps> = ({
isOpen={!!editInferenceService && isModelMesh(editInferenceService)}
editInfo={editInferenceService}
onClose={(edited) => {
fireFormTrackingEvent('Model Updated', {
outcome: edited ? TrackingOutcome.submit : TrackingOutcome.cancel,
type: 'multi',
});
if (edited) {
refresh?.();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import KServeInferenceServiceTableRow from '~/pages/modelServing/screens/project
import { ProjectDetailsContext } from '~/pages/projects/ProjectDetailsContext';
import ManageKServeModal from '~/pages/modelServing/screens/projects/kServeModal/ManageKServeModal';
import DeleteInferenceServiceModal from '~/pages/modelServing/screens/global/DeleteInferenceServiceModal';
import { fireFormTrackingEvent } from '~/concepts/analyticsTracking/segmentIOUtils';
import { TrackingOutcome } from '~/concepts/analyticsTracking/trackingProperties';

const KServeInferenceServiceTable: React.FC = () => {
const [editKserveResources, setEditKServeResources] = React.useState<
Expand Down Expand Up @@ -56,6 +58,10 @@ const KServeInferenceServiceTable: React.FC = () => {
inferenceService={deleteKserveResources?.inferenceService}
servingRuntime={deleteKserveResources?.servingRuntime}
onClose={(deleted) => {
fireFormTrackingEvent('Model Deleted', {
outcome: deleted ? TrackingOutcome.submit : TrackingOutcome.cancel,
type: 'single',
});
if (deleted) {
refreshServingRuntime();
refreshInferenceServices();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import ServingRuntimeTableRow from '~/pages/modelServing/screens/projects/ModelM
import DeleteServingRuntimeModal from '~/pages/modelServing/screens/projects/ServingRuntimeModal/DeleteServingRuntimeModal';
import ManageServingRuntimeModal from '~/pages/modelServing/screens/projects/ServingRuntimeModal/ManageServingRuntimeModal';
import ManageInferenceServiceModal from '~/pages/modelServing/screens/projects/InferenceServiceModal/ManageInferenceServiceModal';
import { fireFormTrackingEvent } from '~/concepts/analyticsTracking/segmentIOUtils';
import { TrackingOutcome } from '~/concepts/analyticsTracking/trackingProperties';

const accessReviewResource: AccessReviewResourceAttributes = {
group: 'rbac.authorization.k8s.io',
Expand Down Expand Up @@ -62,6 +64,9 @@ const ServingRuntimeTable: React.FC = () => {
servingRuntime={deleteServingRuntime}
inferenceServices={inferenceServices}
onClose={(deleted) => {
fireFormTrackingEvent('Model Server Deleted', {
outcome: deleted ? TrackingOutcome.submit : TrackingOutcome.cancel,
});
if (deleted) {
refreshServingRuntime();
}
Expand Down Expand Up @@ -95,6 +100,10 @@ const ServingRuntimeTable: React.FC = () => {
refreshDataConnections();
setExpandedServingRuntimeName(deployServingRuntime.metadata.name);
}
fireFormTrackingEvent('Model Deployed', {
outcome: submit ? TrackingOutcome.submit : TrackingOutcome.cancel,
type: 'multi',
});
}}
projectContext={{
currentProject,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ import { ServingRuntimeEditInfo } from '~/pages/modelServing/screens/types';
import { useAccessReview } from '~/api';
import { AcceleratorProfileSelectFieldState } from '~/pages/notebookController/screens/server/AcceleratorProfileSelectField';
import useGenericObjectState from '~/utilities/useGenericObjectState';
import { fireFormTrackingEvent } from '~/concepts/analyticsTracking/segmentIOUtils';
import {
FormTrackingEventProperties,
TrackingOutcome,
} from '~/concepts/analyticsTracking/trackingProperties';
import ServingRuntimeReplicaSection from './ServingRuntimeReplicaSection';
import ServingRuntimeSizeSection from './ServingRuntimeSizeSection';
import ServingRuntimeTemplateSection from './ServingRuntimeTemplateSection';
Expand All @@ -43,6 +48,8 @@ const accessReviewResource: AccessReviewResourceAttributes = {
verb: 'create',
};

const modelServerAddedName = 'Model Server Added';
const modelServerEditName = 'Model Server Modified';
const ManageServingRuntimeModal: React.FC<ManageServingRuntimeModalProps> = ({
isOpen,
onClose,
Expand Down Expand Up @@ -101,6 +108,12 @@ const ManageServingRuntimeModal: React.FC<ManageServingRuntimeModalProps> = ({
);

const onBeforeClose = (submitted: boolean) => {
if (!submitted) {
fireFormTrackingEvent(editInfo ? modelServerEditName : modelServerAddedName, {
outcome: TrackingOutcome.cancel,
});
}

onClose(submitted);
setError(undefined);
setActionInProgress(false);
Expand All @@ -120,6 +133,12 @@ const ManageServingRuntimeModal: React.FC<ManageServingRuntimeModalProps> = ({
setError(undefined);
setActionInProgress(true);

const props: FormTrackingEventProperties = {
outcome: TrackingOutcome.submit,
type: createData.servingRuntimeTemplateName,
size: createData.modelSize.name,
};

submitServingRuntimeResourcesWithDryRun(
servingRuntimeSelected,
createData,
Expand All @@ -134,8 +153,15 @@ const ManageServingRuntimeModal: React.FC<ManageServingRuntimeModalProps> = ({
undefined,
true,
)
.then(() => onSuccess())
.then(() => {
props.success = true;
fireFormTrackingEvent(editInfo ? modelServerEditName : modelServerAddedName, props);
onSuccess();
})
.catch((e) => {
props.success = false;
props.errorMessage = e;
fireFormTrackingEvent(editInfo ? modelServerEditName : modelServerAddedName, props);
setErrorModal(e);
});
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ import { RegisteredModelDeployInfo } from '~/pages/modelRegistry/screens/Registe
import usePrefillDeployModalFromModelRegistry from '~/pages/modelRegistry/screens/RegisteredModels/usePrefillDeployModalFromModelRegistry';
import { AcceleratorProfileSelectFieldState } from '~/pages/notebookController/screens/server/AcceleratorProfileSelectField';
import useGenericObjectState from '~/utilities/useGenericObjectState';
import { fireFormTrackingEvent } from '~/concepts/analyticsTracking/segmentIOUtils';
import {
FormTrackingEventProperties,
TrackingOutcome,
} from '~/concepts/analyticsTracking/trackingProperties';
import KServeAutoscalerReplicaSection from './KServeAutoscalerReplicaSection';

const accessReviewResource: AccessReviewResourceAttributes = {
Expand Down Expand Up @@ -193,6 +198,9 @@ const ManageKServeModal: React.FC<ManageKServeModalProps> = ({
);

const onBeforeClose = (submitted: boolean) => {
fireFormTrackingEvent(editInfo ? 'Model Updated' : 'Model Deployed', {
outcome: TrackingOutcome.cancel,
});
onClose(submitted);
setError(undefined);
setActionInProgress(false);
Expand All @@ -207,9 +215,10 @@ const ManageKServeModal: React.FC<ManageKServeModalProps> = ({
setActionInProgress(false);
};

const onSuccess = () => {
const onSuccess = (tProps: FormTrackingEventProperties) => {
setActionInProgress(false);
onBeforeClose(true);
fireFormTrackingEvent(editInfo ? 'Model Updated' : 'Model Deployed', tProps);
};

const submit = () => {
Expand Down Expand Up @@ -249,6 +258,15 @@ const ManageKServeModal: React.FC<ManageKServeModalProps> = ({
editInfo?.secrets,
);

const props: FormTrackingEventProperties = {
outcome: TrackingOutcome.submit,
type: 'single',
runtime: servingRuntimeName,
isCustomRuntime: customServingRuntimesEnabled,
servingRuntimeName: createDataServingRuntime.servingRuntimeTemplateName,
servingRuntimeFormat: createDataInferenceService.format.name,
numReplicas: createDataServingRuntime.servingRuntimeTemplateName,
};
Promise.all([
submitServingRuntimeResources({ dryRun: true }),
submitInferenceServiceResource({ dryRun: true }),
Expand All @@ -259,9 +277,16 @@ const ManageKServeModal: React.FC<ManageKServeModalProps> = ({
submitInferenceServiceResource({ dryRun: false }),
]),
)
.then(onSuccess)
.then(() => {
props.success = true;
fireFormTrackingEvent(editInfo ? 'Model Updated' : 'Model Deployed', props);
onSuccess(props);
})
.catch((e) => {
props.success = false;
props.errorMessage = e;
setErrorModal(e);
fireFormTrackingEvent(editInfo ? 'Model Updated' : 'Model Deployed', props);
});
};

Expand Down

0 comments on commit 191aebc

Please sign in to comment.