@@ -117,15 +117,17 @@ def get_origin_ml_task(self):
117117 if fmi is not None :
118118 return DSSMLTask .from_full_model_id (self .client , fmi , project_key = self .project_key )
119119
120- def import_mlflow_version_from_path (self , version_id , path ):
120+ def import_mlflow_version_from_path (self , version_id , path , code_env_name = "INHERIT" ):
121121 """
122122 Create a new version for this saved model from a path containing a MLFlow model.
123123
124124 Requires the saved model to have been created using :meth:`dataikuapi.dss.project.DSSProject.create_mlflow_pyfunc_model`.
125125
126126 :param str version_id: Identifier of the version to create
127127 :param str path: An absolute path on the local filesystem. Must be a folder, and must contain a MLFlow model
128-
128+ :param str code_env_name: Name of the code env to use for this model version. The code env must contain at least
129+ mlflow and the package(s) corresponding to the used MLFlow-compatible frameworks.
130+ If value is "INHERIT", the default active code env of the project will be used
129131 :return a :class:MLFlowVersionHandler in order to interact with the new MLFlow model version
130132 """
131133 # TODO: Add a check that it's indeed a MLFlow model folder
@@ -135,7 +137,7 @@ def import_mlflow_version_from_path(self, version_id, path):
135137 shutil .make_archive ("tmpmodel" , "zip" , path ) #[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])
136138
137139 with open ("tmpmodel.zip" , "rb" ) as fp :
138- self .client ._perform_empty ("POST" , "/projects/%s/savedmodels/%s/versions/%s" % (self .project_key , self .sm_id , version_id ),
140+ self .client ._perform_empty ("POST" , "/projects/%s/savedmodels/%s/versions/%s?codeEnvName=%s " % (self .project_key , self .sm_id , version_id , code_env_name ),
139141 files = {"file" :("tmpmodel.zip" , fp )})
140142
141143 return self .get_mlflow_version_handler (version_id )
@@ -232,13 +234,33 @@ def delete(self):
232234 """
233235 return self .client ._perform_empty ("DELETE" , "/projects/%s/savedmodels/%s" % (self .project_key , self .sm_id ))
234236
237+ class MLFlowVersionSettings :
238+ """Handle for the settings of an imported MLFlow model version"""
239+
240+ def __init__ (self , version_handler , data ):
241+ self .version_handler = version_handler
242+ self .data = data
243+
244+ @property
245+ def raw (self ):
246+ return self .data
247+
248+ def save (self ):
249+ self .version_handler .saved_model .client ._perform_empty ("PUT" ,
250+ "/projects/%s/savedmodels/%s/versions/%s/external-ml/metadata" % (self .version_handler .saved_model .project_key , self .version_handler .saved_model .sm_id , self .version_handler .version_id ),
251+ body = self .data )
252+
235253class MLFlowVersionHandler :
236254 """Handler to interact with an imported MLFlow model version"""
237255 def __init__ (self , saved_model , version_id ):
238256 """Do not call this, use :meth:`DSSSavedModel.get_mlflow_version_handler`"""
239257 self .saved_model = saved_model
240258 self .version_id = version_id
241259
260+ def get_settings (self ):
261+ metadata = self .saved_model .client ._perform_json ("GET" , "/projects/%s/savedmodels/%s/versions/%s/external-ml/metadata" % (self .saved_model .project_key , self .saved_model .sm_id , self .version_id ))
262+ return MLFlowVersionSettings (self , metadata )
263+
242264 def set_core_metadata (self ,
243265 target_column_name , class_labels = None ,
244266 get_features_from_dataset = None , features_list = None ,
0 commit comments