Skip to content

Commit 07efd0a

Browse files
author
Louis Pouillot
committed
Add two methods to facilitate navigation from saved model's objects to analysis' objects:
- for getting the mltask from a saved model - for getting the trained model from a saved model version
1 parent 9e7a7d1 commit 07efd0a

File tree

3 files changed

+44
-1
lines changed

3 files changed

+44
-1
lines changed

dataikuapi/dss/ml.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from dataikuapi.dss.utils import extract_info_from_full_model_id
12
from ..utils import DataikuException
23
from ..utils import DataikuUTF8CSVReader
34
from ..utils import DataikuStreamedHttpUTF8CSVReader
@@ -524,6 +525,23 @@ def save_user_meta(self):
524525
"PUT", "/projects/%s/savedmodels/%s/versions/%s/user-meta" % (self.saved_model.project_key,
525526
self.saved_model.sm_id, self.saved_model_version), body = um)
526527

528+
def get_origin_analysis_trained_model(self):
529+
"""
530+
Fetch details about the model in an analysis, this model has been exported from
531+
532+
:rtype: DSSTrainedModelDetails
533+
"""
534+
if self.saved_model is None:
535+
return self
536+
else:
537+
if "smOrigin" not in self.get_raw():
538+
raise DataikuException("Unknow ")
539+
fmi = self.get_raw()["smOrigin"]["fullModelId"]
540+
_, analysis_id, mltask_id = extract_info_from_full_model_id(fmi)
541+
542+
origin_ml_task = DSSMLTask(self.saved_model.client, self.saved_model.project_key, analysis_id, mltask_id)
543+
return origin_ml_task.get_trained_model_details(fmi)
544+
527545
class DSSTreeNode(object):
528546
def __init__(self, tree, i):
529547
self.tree = tree

dataikuapi/dss/savedmodel.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from dataikuapi.dss.ml import DSSMLTask
2+
from dataikuapi.dss.utils import extract_info_from_full_model_id
13
from .ml import DSSTrainedPredictionModelDetails, DSSTrainedClusteringModelDetails
24
from .metrics import ComputedMetrics
35
from .ml import DSSTrainedClusteringModelDetails
@@ -15,6 +17,9 @@ def __init__(self, client, project_key, sm_id):
1517
self.project_key = project_key
1618
self.sm_id = sm_id
1719

20+
def get_definition(self):
21+
return self.client._perform_json(
22+
"GET", "/projects/%s/savedmodels/%s" % (self.project_key, self.sm_id))
1823

1924
########################################################
2025
# Versions
@@ -86,6 +91,18 @@ def delete_versions(self, versions, remove_intermediate=True):
8691
self.client._perform_empty(
8792
"POST", "/projects/%s/savedmodels/%s/actions/delete-versions" % (self.project_key, self.sm_id),
8893
body=body)
94+
95+
def get_origin_ml_task(self):
96+
"""
97+
Fetch the last ML task that has been exported to this saved model
98+
99+
:rtype: DSSMLTask
100+
"""
101+
definition = self.get_definition()
102+
fmi = definition["lastExportedFrom"]
103+
_, analysis_id, ml_task_id = extract_info_from_full_model_id(fmi)
104+
return DSSMLTask(self.client, self.project_key, analysis_id, ml_task_id)
105+
89106
########################################################
90107
# Metrics
91108
########################################################

dataikuapi/dss/utils.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import re
2+
3+
14
class DSSDatasetSelectionBuilder(object):
25
"""Builder for a "dataset selection". In DSS, a dataset selection is used to select a part of a dataset for processing.
36
@@ -257,4 +260,9 @@ def custom_fields(self):
257260

258261
@custom_fields.setter
259262
def custom_fields(self, custom_fields):
260-
self._tod["customFields"] = custom_fields
263+
self._tod["customFields"] = custom_fields
264+
265+
266+
def extract_info_from_full_model_id(full_model_id):
267+
match = re.search(u'([\w]+)-([\w]+)-([\w]+)-s\w+-pp\w+-m\w+', full_model_id)
268+
return match.group(1), match.group(2), match.group(3)

0 commit comments

Comments
 (0)