pai/api/experiment.py (96 lines of code) (raw):
# Copyright 2023 Alibaba, Inc. or its affiliates.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from typing import List
from ..libs.alibabacloud_aiworkspace20210204.models import (
CreateExperimentRequest,
CreateExperimentResponseBody,
Experiment,
LabelInfo,
ListExperimentRequest,
ListExperimentResponseBody,
SetExperimentLabelsRequest,
UpdateExperimentRequest,
)
from .base import PaginatedResult, ServiceName, WorkspaceScopedResourceAPI
class ExperimentAPI(WorkspaceScopedResourceAPI):
BACKEND_SERVICE_NAME = ServiceName.PAI_WORKSPACE
_get_method = "get_experiment_with_options"
_create_method = "create_experiment_with_options"
_list_method = "list_experiment_with_options"
_update_method = "update_experiment_with_options"
_delete_method = "delete_experiment_with_options"
_set_labels_method = "set_experiment_labels_with_options"
_delete_label_method = "delete_experiment_label_with_options"
def get(self, experiment_id: str):
resp: Experiment = self._do_request(
method_=self._get_method, experiment_id=experiment_id
)
return resp.to_map()
def create(
self,
name,
artifact_uri,
workspace_id,
**kwargs,
):
request = CreateExperimentRequest(
name=name,
artifact_uri=artifact_uri,
workspace_id=workspace_id,
**kwargs,
)
resp: CreateExperimentResponseBody = self._do_request(
method_=self._create_method, request=request
)
return resp.experiment_id
def list(
self,
name: str = None,
page_size: int = 50,
page_number: int = 1,
order: str = "DESC",
**kwargs,
) -> PaginatedResult:
workspace_id = kwargs.pop("workspace_id", None)
request = ListExperimentRequest(
name=name,
page_size=page_size,
page_number=page_number,
order=order,
workspace_id=workspace_id,
**kwargs,
)
resp: ListExperimentResponseBody = self._do_request(
method_=self._list_method, request=request
)
return self.make_paginated_result(resp)
def update(
self,
experiment_id: str,
name: str,
**kwargs,
):
request = UpdateExperimentRequest(
name=name,
**kwargs,
)
self._do_request(
method_=self._update_method, experiment_id=experiment_id, request=request
)
return
def delete(self, experiment_id: str):
self._do_request(method_=self._delete_method, experiment_id=experiment_id)
return
def set_experiment_labels(self, experiment_id: str, labels: List[LabelInfo]):
request = SetExperimentLabelsRequest(
labels=labels,
)
self._do_request(
method_=self._set_labels_method,
experiment_id=experiment_id,
request=request,
)
return
def delete_experiment_label(self, experiment_id: str, key: str):
self._do_request(
method_=self._delete_label_method, experiment_id=experiment_id, key=key
)
return