diff --git a/pgml-dashboard/app/models.py b/pgml-dashboard/app/models.py index 594ebfcf2..680986051 100644 --- a/pgml-dashboard/app/models.py +++ b/pgml-dashboard/app/models.py @@ -150,7 +150,7 @@ class Meta: @property def key_metric(self): - return self.metrics[self.project.key_metric_name] + return self.metrics[self.project.key_metric_name] or float("nan") def live(self): last_deployment = Deployment.objects.filter(project=self.project).last() diff --git a/pgml-dashboard/app/views/models.py b/pgml-dashboard/app/views/models.py index 5f55fbcfe..18b8e73eb 100644 --- a/pgml-dashboard/app/views/models.py +++ b/pgml-dashboard/app/views/models.py @@ -34,20 +34,21 @@ def get_context_data(self, **kwargs): if object is None: return HttpResponseNotFound("Model not found") - context["title"] = object.project.name + " - " + object.algorithm - if object.runtime == "rust": + try: # v1 models have dict columns context["features"] = { feature: object.snapshot.analysis.get(f"{feature}_p50") - for feature in map(lambda column: column["name"], filter(lambda column: not column["label"], object.snapshot.columns)) + for feature in object.snapshot.columns.keys() - object.snapshot.y_column_name } - else: + except AttributeError: # v2 models have list columns context["features"] = { feature: object.snapshot.analysis.get(f"{feature}_p50") - for feature in object.snapshot.columns.keys() - object.snapshot.y_column_name + for feature in map( + lambda column: column["name"], filter(lambda column: not column["label"], object.snapshot.columns) + ) } - if object.search: + if object.search and "search_results" in object.metrics: context["search_results"] = {} for key, value in object.metrics["search_results"].items(): context["search_results"][key] = SafeString(json.dumps(value)) diff --git a/pgml-dashboard/app/views/snapshots.py b/pgml-dashboard/app/views/snapshots.py index 5d9c0cf75..fbeab4845 100644 --- a/pgml-dashboard/app/views/snapshots.py +++ b/pgml-dashboard/app/views/snapshots.py @@ -60,8 +60,7 @@ def get(request, id): samples = [] columns = OrderedDict() - try: - # v1.0 format + try: # v1 snapshots have dict columns column_names = sorted(list(snapshot.columns.keys())) for target in snapshot.y_column_name: column_names.remove(target) @@ -86,8 +85,7 @@ def get(request, id): "dip": snapshot.analysis[column_name + "_dip"], "samples": SafeString(json.dumps(sample)), } - except: - # v2.0 format + except AttributeError: # v2 models have list columns for column in snapshot.columns: column_name = column["name"] if "[]" not in column_name: @@ -98,17 +96,16 @@ def get(request, id): columns[column_name] = { "name": column_name, "type": column["pg_type"], - "q1": snapshot.analysis[column_name + "_p25"], - "median": snapshot.analysis[column_name + "_p50"], - "q3": snapshot.analysis[column_name + "_p75"], - "mean": snapshot.analysis[column_name + "_mean"], - "stddev": snapshot.analysis[column_name + "_stddev"], - "min": snapshot.analysis[column_name + "_min"], - "max": snapshot.analysis[column_name + "_max"], + "q1": snapshot.analysis.get(column_name + "_p25"), + "median": snapshot.analysis.get(column_name + "_p50"), + "q3": snapshot.analysis.get(column_name + "_p75"), + "mean": snapshot.analysis.get(column_name + "_mean"), + "stddev": snapshot.analysis.get(column_name + "_stddev"), + "min": snapshot.analysis.get(column_name + "_min"), + "max": snapshot.analysis.get(column_name + "_max"), "samples": SafeString(json.dumps(sample)), } - # TODO reconsider spaces in column_names, fix during snapshot? fixed_columns = OrderedDict() for column_name, values in columns.items():
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: