Skip to content

Commit ae5e512

Browse files
authored
Merge pull request #214 from dataiku/feature/sc-76666-enforce-limits-for-experiments-runs-listing
Complete MLflow REST API implementation
2 parents 2513631 + dad73da commit ae5e512

File tree

2 files changed

+115
-9
lines changed

2 files changed

+115
-9
lines changed

dataikuapi/dss/mlflow.py

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,123 @@ def __init__(self, client, project_key):
1111
self.project_key = project_key
1212

1313
def list_models(self, run_id):
14+
"""
15+
Returns the list of models of given run
16+
17+
:param run_id: run_id for which to return a list of models
18+
:type run_id: str
19+
"""
1420
response = self.client._perform_http(
1521
"GET", "/api/2.0/mlflow/extension/models/{}".format(run_id),
1622
headers={"x-dku-mlflow-project-key": self.project_key}
1723
)
1824
return response.json()
25+
26+
def list_experiments(self, view_type="ACTIVE_ONLY", max_results=1000):
27+
"""
28+
Returns the list of experiments in the DSS project for which MLflow integration
29+
is setup
30+
31+
:param view_type: ACTIVE_ONLY, DELETED_ONLY or ALL
32+
:type view_type: str
33+
:param max_results: max results count
34+
:type max_results: int
35+
:rtype: dict
36+
"""
37+
response = self.client._perform_http(
38+
"GET", "/api/2.0/mlflow/experiments/list?view_type={view_type}&max_results={max_results}".format(view_type=view_type, max_results=max_results),
39+
headers={"x-dku-mlflow-project-key": self.project_key}
40+
)
41+
return response.json()
42+
43+
def rename_experiment(self, experiment_id, new_name):
44+
"""
45+
Renames an experiment
46+
47+
:param experiment_id: experiment id
48+
:type experiment_id: str
49+
:param new_name: new name
50+
:type new_name: str
51+
"""
52+
response = self.client._perform_http(
53+
"POST", "/api/2.0/mlflow/experiments/update",
54+
headers={"x-dku-mlflow-project-key": self.project_key},
55+
body={"experiment_id": experiment_id, "new_name": new_name}
56+
)
57+
return response.json()
58+
59+
def restore_experiment(self, experiment_id):
60+
"""
61+
Restores a deleted experiment
62+
63+
:param experiment_id: experiment id
64+
:type experiment_id: str
65+
"""
66+
response = self.client._perform_http(
67+
"POST", "/api/2.0/mlflow/experiments/restore",
68+
headers={"x-dku-mlflow-project-key": self.project_key},
69+
body={"experiment_id": experiment_id}
70+
)
71+
return response.json()
72+
73+
def restore_run(self, run_id):
74+
"""
75+
Restores a deleted run
76+
77+
:param run_id: run id
78+
:type run_id: str
79+
"""
80+
response = self.client._perform_http(
81+
"POST", "/api/2.0/mlflow/runs/restore",
82+
headers={"x-dku-mlflow-project-key": self.project_key},
83+
body={"run_id": run_id}
84+
)
85+
return response.json()
86+
87+
def garbage_collect(self):
88+
"""
89+
Permanently deletes the experiments and runs marked as "Deleted"
90+
"""
91+
self.client._perform_http(
92+
"GET", "/api/2.0/mlflow/extension/garbage-collect",
93+
headers={"x-dku-mlflow-project-key": self.project_key}
94+
)
95+
96+
def create_experiment_tracking_dataset(self, dataset_name, experiment_ids=[], view_type="ACTIVE_ONLY", filter_expr="", order_by=[], format="LONG"):
97+
"""
98+
99+
Creates a virtual dataset exposing experiment tracking data.
100+
101+
:param dataset_name: name of the dataset
102+
:type dataset_name: str
103+
:param experiment_ids: list of ids of experiments to filter on. No filtering if empty
104+
:type experiment_ids: list(str)
105+
:param view_type: one of ACTIVE_ONLY, DELETED_ONLY and ALL. Default is ACTIVE_ONLY
106+
:type view_type: str
107+
:param filter_expr: MLflow search expression
108+
:type filter_expr: str
109+
:param order_by: list of order by clauses. Default is ordered by start_time, then runId
110+
:type order_by: list(str)
111+
:param format: LONG or JSON. Default is LONG
112+
:type format: str
113+
"""
114+
self.client._perform_http(
115+
"POST", "/api/2.0/mlflow/extension/create-project-experiments-dataset",
116+
headers={"x-dku-mlflow-project-key": self.project_key},
117+
body={
118+
"datasetName": dataset_name,
119+
"experimentIds": experiment_ids,
120+
"viewType": view_type,
121+
"filter": filter_expr,
122+
"orderBy": order_by,
123+
"format": format
124+
}
125+
)
126+
127+
def clean_experiment_tracking_db(self):
128+
"""
129+
Cleans the experiments, runs, params, metrics, tags, etc. for this project
130+
131+
This call requires an API key with admin rights
132+
"""
133+
self.client._perform_raw("DELETE", "/api/2.0/mlflow/extension/clean-db/%s" % self.project_key)

dataikuapi/dss/project.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1626,15 +1626,6 @@ def get_mlflow_extension(self):
16261626
"""
16271627
return DSSMLflowExtension(client=self.client, project_key=self.project_key)
16281628

1629-
def clean_experiment_tracking_db(self):
1630-
"""
1631-
Cleans the experiments, runs, params, metrics, tags, etc. for this project
1632-
1633-
This call requires an API key with admin rights
1634-
"""
1635-
self.client._perform_raw("DELETE", "/api/2.0/mlflow/clean-db/%s" % self.project_key)
1636-
1637-
16381629
class TablesImportDefinition(object):
16391630
"""
16401631
Temporary structure holding the list of tables to import

0 commit comments

Comments
 (0)