Skip to content

Commit 0574574

Browse files
committed
handle model deploy when no metrics to compare
1 parent 651f204 commit 0574574

File tree

1 file changed

+37
-22
lines changed

1 file changed

+37
-22
lines changed

pgml-extension/src/api.rs

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -264,37 +264,52 @@ fn train_joint(
264264
);
265265

266266
let mut deploy = true;
267+
267268
match automatic_deploy {
268269
// Deploy only if metrics are better than previous model.
269270
Some(true) | None => {
270271
if let Ok(Some(deployed_metrics)) = deployed_metrics {
271-
let deployed_metrics = deployed_metrics.0.as_object().unwrap();
272-
let deployed_metric = deployed_metrics
273-
.get(&project.task.default_target_metric())
274-
.unwrap()
275-
.as_f64()
276-
.unwrap();
277-
info!(
278-
"Comparing to deployed model {}: {:?}",
279-
project.task.default_target_metric(),
280-
deployed_metric
281-
);
282-
if project.task.value_is_better(
283-
deployed_metric,
284-
new_metrics
285-
.get(&project.task.default_target_metric())
286-
.unwrap()
287-
.as_f64()
288-
.unwrap(),
289-
) {
272+
if let Some(deployed_metrics_obj) = deployed_metrics.0.as_object() {
273+
let default_target_metric = project.task.default_target_metric();
274+
let deployed_metric = deployed_metrics_obj
275+
.get(&default_target_metric)
276+
.and_then(|v| v.as_f64());
277+
info!(
278+
"Comparing to deployed model {}: {:?}",
279+
default_target_metric, deployed_metric
280+
);
281+
if let (Some(deployed_metric_value), Some(new_metric_value)) = (
282+
deployed_metric,
283+
new_metrics.get(&default_target_metric).and_then(|v| v.as_f64()),
284+
) {
285+
if project.task.value_is_better(deployed_metric_value, new_metric_value) {
286+
warning!(
287+
"New model's {} is not better than old model: {} is not better than {}",
288+
&project.task.default_target_metric(),
289+
new_metric_value,
290+
deployed_metric_value
291+
);
292+
deploy = false;
293+
}
294+
} else {
295+
warning!("Failed to retrieve or parse deployed/new metrics for {}. Ensure train/test split results in both positive and negative label records.",
296+
&project.task.default_target_metric());
297+
deploy = false;
298+
}
299+
} else {
300+
warning!("Failed to parse deployed model metrics. Ensure train/test split results in both positive and negative label records.");
290301
deploy = false;
291302
}
303+
} else {
304+
warning!("Failed to obtain currently deployed model metrics. Check if the deployed model metrics are available and correctly formatted.");
305+
deploy = false;
292306
}
293307
}
294-
295-
Some(false) => deploy = false,
308+
Some(false) => {
309+
warning!("Automatic deployment disabled via configuration.");
310+
deploy = false;
311+
}
296312
};
297-
298313
if deploy {
299314
project.deploy(model.id, Strategy::new_score);
300315
} else {

0 commit comments

Comments
 (0)