|
| 1 | +import re |
| 2 | + |
1 | 3 | from ..utils import DataikuException |
2 | 4 | from ..utils import DataikuUTF8CSVReader |
3 | 5 | from ..utils import DataikuStreamedHttpUTF8CSVReader |
@@ -524,6 +526,22 @@ def save_user_meta(self): |
524 | 526 | "PUT", "/projects/%s/savedmodels/%s/versions/%s/user-meta" % (self.saved_model.project_key, |
525 | 527 | self.saved_model.sm_id, self.saved_model_version), body = um) |
526 | 528 |
|
| 529 | + def get_origin_analysis_trained_model(self): |
| 530 | + """ |
| 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 an origin analysis trained model. |
| 533 | +
|
| 534 | + :rtype: DSSTrainedModelDetails | None |
| 535 | + """ |
| 536 | + if self.saved_model is None: |
| 537 | + return self |
| 538 | + else: |
| 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) |
| 544 | + |
527 | 545 | class DSSTreeNode(object): |
528 | 546 | def __init__(self, tree, i): |
529 | 547 | self.tree = tree |
@@ -1425,6 +1443,17 @@ def get_scatter_plots(self): |
1425 | 1443 |
|
1426 | 1444 |
|
1427 | 1445 | class DSSMLTask(object): |
| 1446 | + |
| 1447 | + @staticmethod |
| 1448 | + def from_full_model_id(client, fmi, project_key=None): |
| 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)) |
| 1456 | + |
1428 | 1457 | """A handle to interact with a MLTask for prediction or clustering in a DSS visual analysis""" |
1429 | 1458 | def __init__(self, client, project_key, analysis_id, mltask_id): |
1430 | 1459 | self.client = client |
|
0 commit comments