Exemple #1
0
def _get_latest_versions():
    request_message = _get_request_message(GetLatestVersions())
    latest_versions = _get_model_registry_store().get_latest_versions(
        RegisteredModel.from_proto(request_message.registered_model), request_message.stages)
    response_message = GetLatestVersions.Response()
    response_message.model_versions_detailed.extend([e.to_proto() for e in latest_versions])
    return _wrap_response(response_message)
Exemple #2
0
    def search_registered_models(self,
                                 filter_string=None,
                                 max_results=None,
                                 order_by=None,
                                 page_token=None):
        """
        Search for registered models in backend that satisfy the filter criteria.

        :param filter_string: Filter query string, defaults to searching all registered models.
        :param max_results: Maximum number of registered models desired.
        :param order_by: List of column names with ASC|DESC annotation, to be used for ordering
                         matching search results.
        :param page_token: Token specifying the next page of results. It should be obtained from
                            a ``search_registered_models`` call.
        :return: A PagedList of :py:class:`mlflow.entities.model_registry.RegisteredModel` objects
                that satisfy the search expressions. The pagination token for the next page can be
                obtained via the ``token`` attribute of the object.
        """
        req_body = message_to_json(
            SearchRegisteredModels(filter=filter_string,
                                   max_results=max_results,
                                   order_by=order_by,
                                   page_token=page_token))
        response_proto = self._call_endpoint(SearchRegisteredModels, req_body)
        registered_models = [
            RegisteredModel.from_proto(registered_model)
            for registered_model in response_proto.registered_models
        ]
        return PagedList(registered_models, response_proto.next_page_token)
Exemple #3
0
def _get_registered_model_details():
    request_message = _get_request_message(GetRegisteredModelDetails())
    registered_model_detailed = _get_model_registry_store().get_registered_model_details(
        RegisteredModel.from_proto(request_message.registered_model))
    response_message = GetRegisteredModelDetails.Response(
        registered_model_detailed=registered_model_detailed.to_proto())
    return _wrap_response(response_message)
Exemple #4
0
    def get_registered_model(self, name):
        """
        :param name: Registered model name.

        :return: A single :py:class:`mlflow.entities.model_registry.RegisteredModel` object.
        """
        req_body = message_to_json(GetRegisteredModel(name=name))
        response_proto = self._call_endpoint(GetRegisteredModel, req_body)
        return RegisteredModel.from_proto(response_proto.registered_model)
 def from_proto(cls, proto):
     # input: mlflow.protos.model_registry_pb2.ModelVersionDetailed
     # returns: ModelVersionDetailed entity
     return cls(
         RegisteredModel.from_proto(proto.model_version.registered_model),
         proto.model_version.version, proto.creation_timestamp,
         proto.last_updated_timestamp, proto.description, proto.user_id,
         proto.current_stage, proto.source, proto.run_id,
         ModelVersionStatus.to_string(proto.status), proto.status_message)
Exemple #6
0
    def rename_registered_model(self, name, new_name):
        """
        Rename the registered model.

        :param name: Registered model name.
        :param new_name: New proposed name.
        :return: A single updated :py:class:`mlflow.entities.model_registry.RegisteredModel` object.
        """
        req_body = message_to_json(
            RenameRegisteredModel(name=name, new_name=new_name))
        response_proto = self._call_endpoint(RenameRegisteredModel, req_body)
        return RegisteredModel.from_proto(response_proto.registered_model)
Exemple #7
0
    def update_registered_model(self, name, description):
        """
        Update description of the registered model.

        :param name: Registered model name.
        :param description: New description.
        :return: A single updated :py:class:`mlflow.entities.model_registry.RegisteredModel` object.
        """
        req_body = message_to_json(
            UpdateRegisteredModel(name=name, description=description))
        response_proto = self._call_endpoint(UpdateRegisteredModel, req_body)
        return RegisteredModel.from_proto(response_proto.registered_model)
Exemple #8
0
    def list_registered_models(self):
        """
        List of all registered models.

        :return: List of :py:class:`mlflow.entities.model_registry.RegisteredModel` objects.
        """
        req_body = message_to_json(ListRegisteredModels())
        response_proto = self._call_endpoint(ListRegisteredModels, req_body)
        return [
            RegisteredModel.from_proto(registered_model)
            for registered_model in response_proto.registered_models
        ]
Exemple #9
0
    def create_registered_model(self, name):
        """
        Create a new registered model in backend store.

        :param name: Name of the new model. This is expected to be unique in the backend store.

        :return: A single object of :py:class:`mlflow.entities.model_registry.RegisteredModel`
        created in the backend.
        """
        req_body = message_to_json(CreateRegisteredModel(name=name))
        response_proto = self._call_endpoint(CreateRegisteredModel, req_body)
        return RegisteredModel.from_proto(response_proto.registered_model)
Exemple #10
0
def _update_registered_model():
    request_message = _get_request_message(UpdateRegisteredModel())
    new_name = None
    new_description = None
    if request_message.HasField("name"):
        new_name = request_message.name
    if request_message.HasField("description"):
        new_description = request_message.description
    registered_model = _get_model_registry_store().update_registered_model(
        RegisteredModel.from_proto(request_message.registered_model), new_name,
        new_description)
    response_message = UpdateRegisteredModel.Response(
        registered_model=registered_model.to_proto())
    return _wrap_response(response_message)
Exemple #11
0
    def create_registered_model(self, name, tags=None):
        """
        Create a new registered model in backend store.

        :param name: Name of the new model. This is expected to be unique in the backend store.
        :param tags: A list of :py:class:`mlflow.entities.model_registry.RegisteredModelTag`
                     instances associated with this registered model.
        :return: A single object of :py:class:`mlflow.entities.model_registry.RegisteredModel`
                 created in the backend.
        """
        proto_tags = [tag.to_proto() for tag in tags or []]
        req_body = message_to_json(CreateRegisteredModel(name=name, tags=proto_tags))
        response_proto = self._call_endpoint(CreateRegisteredModel, req_body)
        return RegisteredModel.from_proto(response_proto.registered_model)
    def update_registered_model(self, registered_model, new_name=None, description=None):
        """
        Updates metadata for RegisteredModel entity. Either ``new_name`` or ``description`` should
        be non-None. Backend raises exception if a registered model with given name does not exist.

        :param registered_model: :py:class:`mlflow.entities.model_registry.RegisteredModel` object.

        :param new_name: (Optional) New proposed name for the registered model.
        :param description: (Optional) New description.

        :return: A single updated :py:class:`mlflow.entities.model_registry.RegisteredModel` object.
        """
        req_body = message_to_json(UpdateRegisteredModel(
            registered_model=registered_model.to_proto(), name=new_name, description=description))
        response_proto = self._call_endpoint(UpdateRegisteredModel, req_body)
        return RegisteredModel.from_proto(response_proto.registered_model)
Exemple #13
0
    def list_registered_models(self, max_results, page_token):
        """
        List of all registered models.
        :param max_results: Maximum number of registered models desired.
        :param page_token: Token specifying the next page of results. It should be obtained from
                            a ``list_registered_models`` call.

        :return: PagedList of :py:class:`mlflow.entities.model_registry.RegisteredModel` objects.
        """
        req_body = message_to_json(
            ListRegisteredModels(page_token=page_token,
                                 max_results=max_results))
        response_proto = self._call_endpoint(ListRegisteredModels, req_body)
        return PagedList([
            RegisteredModel.from_proto(registered_model)
            for registered_model in response_proto.registered_models
        ], response_proto.next_page_token)
Exemple #14
0
 def from_proto(cls, proto):
     # input: mlflow.protos.model_registry_pb2.ModelVersion
     # returns: ModelVersion entity
     return cls(RegisteredModel.from_proto(proto.registered_model),
                proto.version)
Exemple #15
0
def _delete_registered_model():
    request_message = _get_request_message(DeleteRegisteredModel())
    _get_model_registry_store().delete_registered_model(
        RegisteredModel.from_proto(request_message.registered_model))
    return _wrap_response(DeleteRegisteredModel.Response())