Skip to content

Commit 6d39adb

Browse files
author
Louis Pouillot
committed
Getting origin ml task/trained model: improve error handling
1 parent 3bc05ab commit 6d39adb

File tree

2 files changed

+22
-18
lines changed

2 files changed

+22
-18
lines changed

dataikuapi/dss/ml.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -528,19 +528,19 @@ def save_user_meta(self):
528528

529529
def get_origin_analysis_trained_model(self):
530530
"""
531-
Fetch details about the model in an analysis, this model has been exported from
531+
Fetch details about the model in an analysis, this model has been exported from. Returns None if the
532+
deployed trained model does not have a origin analysis trained model.
532533
533-
:rtype: DSSTrainedModelDetails
534+
:rtype: DSSTrainedModelDetails | None
534535
"""
535536
if self.saved_model is None:
536537
return self
537538
else:
538-
if "smOrigin" not in self.get_raw():
539-
raise DataikuException("Unknow ")
540-
fmi = self.get_raw()["smOrigin"]["fullModelId"]
541-
origin_ml_task = DSSMLTask.from_full_model_id(self.saved_model.client, fmi,
542-
project_key=self.saved_model.project_key)
543-
return origin_ml_task.get_trained_model_details(fmi)
539+
fmi = self.get_raw().get("smOrigin", {}).get("fullModelId")
540+
if fmi is not None:
541+
origin_ml_task = DSSMLTask.from_full_model_id(self.saved_model.client, fmi,
542+
project_key=self.saved_model.project_key)
543+
return origin_ml_task.get_trained_model_details(fmi)
544544

545545
class DSSTreeNode(object):
546546
def __init__(self, tree, i):
@@ -1446,10 +1446,13 @@ class DSSMLTask(object):
14461446

14471447
@staticmethod
14481448
def from_full_model_id(client, fmi, project_key=None):
1449-
match = re.match(u'A-([\w]+)-([\w]+)-([\w]+)-s\w+-pp\w+-m\w+', fmi)
1450-
if project_key is None:
1451-
project_key = match.group(1)
1452-
return DSSMLTask(client, project_key, match.group(2), match.group(3))
1449+
match = re.match("^A-(\w+)-(\w+)-(\w+)-(s[0-9]+)-(pp[0-9]+(-part-(\w+)|-base)?)-(m[0-9]+)$", fmi)
1450+
if match is None:
1451+
return DataikuException("Invalid model id: {}".format(fmi))
1452+
else:
1453+
if project_key is None:
1454+
project_key = match.group(1)
1455+
return DSSMLTask(client, project_key, match.group(2), match.group(3))
14531456

14541457
"""A handle to interact with a MLTask for prediction or clustering in a DSS visual analysis"""
14551458
def __init__(self, client, project_key, analysis_id, mltask_id):

dataikuapi/dss/savedmodel.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,15 +93,16 @@ def delete_versions(self, versions, remove_intermediate=True):
9393

9494
def get_origin_ml_task(self):
9595
"""
96-
Fetch the last ML task that has been exported to this saved model
96+
Fetch the last ML task that has been exported to this saved model. Returns None if the saved model
97+
does not have an origin ml task.
9798
98-
:rtype: DSSMLTask
99+
:rtype: DSSMLTask | None
99100
"""
100-
definition = self.get_definition()
101-
fmi = definition["lastExportedFrom"]
101+
fmi = self.get_definition().get("lastExportedFrom")
102+
if fmi is not None:
103+
origin_ml_task = DSSMLTask.from_full_model_id(self.client, fmi, project_key=self.project_key)
104+
return origin_ml_task.get_trained_model_details(fmi)
102105

103-
origin_ml_task = DSSMLTask.from_full_model_id(self.client, fmi, project_key=self.project_key)
104-
return origin_ml_task.get_trained_model_details(fmi)
105106

106107
########################################################
107108
# Metrics

0 commit comments

Comments
 (0)