@@ -31,6 +31,7 @@ class EvaluationMetricTypeEnum(str, Enum):
3131 MODEL_CARD_METRIC_SCHEMA = "Model Card Metric Schema"
3232 CLARIFY_BIAS = "Clarify Bias"
3333 CLARIFY_EXPLAINABILITY = "Clarify Explainability"
34+ MODEL_MONITOR_MODEL_QUALITY = "Model Monitor Model Quality"
3435 REGRESSION = "Model Monitor Model Quality Regression"
3536 BINARY_CLASSIFICATION = "Model Monitor Model Quality Binary Classification"
3637 MULTICLASS_CLASSIFICATION = "Model Monitor Model Quality Multiclass Classification"
@@ -138,6 +139,7 @@ def _parse(self, json_data: dict):
138139 [
139140 {"name" : i ["name" ], "value" : i ["value" ], "type" : "number" }
140141 for i in item ["metrics" ]
142+ if i ["value" ] is not None
141143 ]
142144 )
143145 for group_name , metric_data in group_data .items ():
@@ -368,9 +370,10 @@ def _parse(self, json_data: dict):
368370 result = {"metric_groups" : []}
369371 for group_name , group_data in json_data .items ():
370372 metric_data = []
371- for metric_name , raw_data in group_data .item ():
372- metric_data .extend (self ._parse_basic_metric (metric_name , raw_data ))
373- result ["metric_groups" ].append ({"name" : group_name , "metric_data" : metric_data })
373+ if group_name == "regression_metrics" :
374+ for metric_name , raw_data in group_data .items ():
375+ metric_data .extend (self ._parse_basic_metric (metric_name , raw_data ))
376+ result ["metric_groups" ].append ({"name" : group_name , "metric_data" : metric_data })
374377 return result
375378
376379
@@ -388,7 +391,7 @@ def _validate(self, json_data: dict):
388391 """
389392 if (
390393 "binary_classification_metrics" not in json_data
391- and "multiclass_classification_metrics" in json_data
394+ and "multiclass_classification_metrics" not in json_data
392395 ):
393396 raise ValueError ("Missing *_classification_metrics from the metric data." )
394397
@@ -401,6 +404,11 @@ def _parse(self, json_data: dict):
401404 result = {"metric_groups" : []}
402405 for group_name , group_data in json_data .items ():
403406 metric_data = []
407+ if group_name not in (
408+ "binary_classification_metrics" ,
409+ "multiclass_classification_metrics" ,
410+ ):
411+ continue
404412 for metric_name , raw_data in group_data .items ():
405413 metric_data .extend (self ._parse_confusion_matrix (metric_name , raw_data ))
406414 metric_data .extend (
@@ -506,11 +514,45 @@ def _parse_precision_recall_curve(self, metric_name, raw_data):
506514 return metric_data
507515
508516
517+ class ModelMonitorModelQualityParser (ParserBase ):
518+ """Top level parser for model monitor model quality metric type"""
519+
520+ def _validate (self , json_data : dict ):
521+ """Implement ParserBase._validate.
522+
523+ Args:
524+ json_data (dict): Metric data to be validated.
525+
526+ Raises:
527+ ValueError: missing model monitor model quality metrics.
528+ """
529+ if len (json_data ) == 0 :
530+ raise ValueError ("Missing model monitor model quality metrics from the metric data." )
531+
532+ def _parse (self , json_data : dict ):
533+ """Implement ParserBase._parse.
534+
535+ Args:
536+ json_data (dict): Raw metric data.
537+ """
538+ result = {"metric_groups" : []}
539+ if "regression_metrics" in json_data :
540+ result = RegressionParser ().run (json_data )
541+ elif (
542+ "binary_classification_metrics" in json_data
543+ or "multiclass_classification_metrics" in json_data
544+ ):
545+ result = ClassificationParser ().run (json_data )
546+
547+ return result
548+
549+
509550EVALUATION_METRIC_PARSERS = {
510551 EvaluationMetricTypeEnum .MODEL_CARD_METRIC_SCHEMA : DefaultParser (),
511552 EvaluationMetricTypeEnum .CLARIFY_BIAS : ClarifyBiasParser (),
512553 EvaluationMetricTypeEnum .CLARIFY_EXPLAINABILITY : ClarifyExplainabilityParser (),
513554 EvaluationMetricTypeEnum .REGRESSION : RegressionParser (),
514555 EvaluationMetricTypeEnum .BINARY_CLASSIFICATION : ClassificationParser (),
515556 EvaluationMetricTypeEnum .MULTICLASS_CLASSIFICATION : ClassificationParser (),
557+ EvaluationMetricTypeEnum .MODEL_MONITOR_MODEL_QUALITY : ModelMonitorModelQualityParser (),
516558}
0 commit comments