Skip to content

Commit 529362b

Browse files
authored
handle training errors better (#452)
1 parent 730f18e commit 529362b

File tree

3 files changed

+17
-19
lines changed

3 files changed

+17
-19
lines changed

pgml-dashboard/app/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ class Meta:
150150

151151
@property
152152
def key_metric(self):
153-
return self.metrics[self.project.key_metric_name]
153+
return self.metrics[self.project.key_metric_name] or float("nan")
154154

155155
def live(self):
156156
last_deployment = Deployment.objects.filter(project=self.project).last()

pgml-dashboard/app/views/models.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,21 @@ def get_context_data(self, **kwargs):
3434
if object is None:
3535
return HttpResponseNotFound("Model not found")
3636

37-
3837
context["title"] = object.project.name + " - " + object.algorithm
39-
if object.runtime == "rust":
38+
try: # v1 models have dict columns
4039
context["features"] = {
4140
feature: object.snapshot.analysis.get(f"{feature}_p50")
42-
for feature in map(lambda column: column["name"], filter(lambda column: not column["label"], object.snapshot.columns))
41+
for feature in object.snapshot.columns.keys() - object.snapshot.y_column_name
4342
}
44-
else:
43+
except AttributeError: # v2 models have list columns
4544
context["features"] = {
4645
feature: object.snapshot.analysis.get(f"{feature}_p50")
47-
for feature in object.snapshot.columns.keys() - object.snapshot.y_column_name
46+
for feature in map(
47+
lambda column: column["name"], filter(lambda column: not column["label"], object.snapshot.columns)
48+
)
4849
}
4950

50-
if object.search:
51+
if object.search and "search_results" in object.metrics:
5152
context["search_results"] = {}
5253
for key, value in object.metrics["search_results"].items():
5354
context["search_results"][key] = SafeString(json.dumps(value))

pgml-dashboard/app/views/snapshots.py

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,7 @@ def get(request, id):
6060
samples = []
6161

6262
columns = OrderedDict()
63-
try:
64-
# v1.0 format
63+
try: # v1 snapshots have dict columns
6564
column_names = sorted(list(snapshot.columns.keys()))
6665
for target in snapshot.y_column_name:
6766
column_names.remove(target)
@@ -86,8 +85,7 @@ def get(request, id):
8685
"dip": snapshot.analysis[column_name + "_dip"],
8786
"samples": SafeString(json.dumps(sample)),
8887
}
89-
except:
90-
# v2.0 format
88+
except AttributeError: # v2 models have list columns
9189
for column in snapshot.columns:
9290
column_name = column["name"]
9391
if "[]" not in column_name:
@@ -98,17 +96,16 @@ def get(request, id):
9896
columns[column_name] = {
9997
"name": column_name,
10098
"type": column["pg_type"],
101-
"q1": snapshot.analysis[column_name + "_p25"],
102-
"median": snapshot.analysis[column_name + "_p50"],
103-
"q3": snapshot.analysis[column_name + "_p75"],
104-
"mean": snapshot.analysis[column_name + "_mean"],
105-
"stddev": snapshot.analysis[column_name + "_stddev"],
106-
"min": snapshot.analysis[column_name + "_min"],
107-
"max": snapshot.analysis[column_name + "_max"],
99+
"q1": snapshot.analysis.get(column_name + "_p25"),
100+
"median": snapshot.analysis.get(column_name + "_p50"),
101+
"q3": snapshot.analysis.get(column_name + "_p75"),
102+
"mean": snapshot.analysis.get(column_name + "_mean"),
103+
"stddev": snapshot.analysis.get(column_name + "_stddev"),
104+
"min": snapshot.analysis.get(column_name + "_min"),
105+
"max": snapshot.analysis.get(column_name + "_max"),
108106
"samples": SafeString(json.dumps(sample)),
109107
}
110108

111-
112109
# TODO reconsider spaces in column_names, fix during snapshot?
113110
fixed_columns = OrderedDict()
114111
for column_name, values in columns.items():

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

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:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy