Skip to content

Commit

Permalink
disable View Training Data if original job no longer exists
Browse files Browse the repository at this point in the history
  • Loading branch information
alvarezmelissa87 committed Nov 10, 2023
1 parent 85d4522 commit a407ee2
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 2 deletions.
1 change: 1 addition & 0 deletions x-pack/plugins/ml/common/types/trained_models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ export type TrainedModelConfigResponse = estypes.MlTrainedModelConfig & {
* Associated pipelines. Extends response from the ES endpoint.
*/
pipelines?: Record<string, PipelineDefinition> | null;
origin_job_exists?: boolean;

metadata?: {
analytics_config: DataFrameAnalyticsConfig;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ export function useModelActions({
icon: 'visTable',
type: 'icon',
available: (item) => !!item.metadata?.analytics_config?.id,
enabled: (item) => item.origin_job_exists === true,
onClick: async (item) => {
if (item.metadata?.analytics_config === undefined) return;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ export type ModelItem = TrainedModelConfigResponse & {
type?: string[];
stats?: Stats & { deployment_stats: TrainedModelDeploymentStatsResponse[] };
pipelines?: ModelPipelines['pipelines'] | null;
origin_job_exists?: boolean;
deployment_ids: string[];
putModelConfig?: object;
state: ModelState;
Expand Down Expand Up @@ -214,6 +215,7 @@ export const ModelsList: FC<Props> = ({
const response = await trainedModelsApiService.getTrainedModels(undefined, {
with_pipelines: true,
with_indices: true,
with_origin_job_check: true,
});

const newItems: ModelItem[] = [];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export interface InferenceQueryParams {
// Custom kibana endpoint query params
with_pipelines?: boolean;
with_indices?: boolean;
with_origin_job_check?: boolean;
include?: 'total_feature_importance' | 'feature_importance_baseline' | string;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ export const getInferenceQuerySchema = schema.object({
size: schema.maybe(schema.string()),
with_pipelines: schema.maybe(schema.string()),
with_indices: schema.maybe(schema.oneOf([schema.string(), schema.boolean()])),
with_origin_job_check: schema.maybe(schema.oneOf([schema.string(), schema.boolean()])),
include: schema.maybe(schema.string()),
});

Expand Down
21 changes: 19 additions & 2 deletions x-pack/plugins/ml/server/routes/trained_models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ export function trainedModelsRoutes(
const {
with_pipelines: withPipelines,
with_indices: withIndicesRaw,
with_origin_job_check: withOriginJobCheck,
...getTrainedModelsRequestParams
} = request.query;

Expand Down Expand Up @@ -191,10 +192,26 @@ export function trainedModelsRoutes(
mlLog.debug(e);
}

const body = filterForEnabledFeatureModels(result, getEnabledFeatures());
try {
if (withOriginJobCheck) {
for (const model of result) {
if (typeof model.metadata?.analytics_config?.id === 'string') {
const jobExistsResult = await mlClient.getDataFrameAnalytics({
id: model.metadata?.analytics_config?.id,
size: 1,
});
model.origin_job_exists = jobExistsResult.count === 1;
}
}
}
} catch (e) {
// Swallow error to prevent blocking trained models result
}

const filteredModels = filterForEnabledFeatureModels(result, getEnabledFeatures());

return response.ok({
body,
body: filteredModels,
});
} catch (e) {
return response.customError(wrapError(e));
Expand Down

0 comments on commit a407ee2

Please sign in to comment.