From e77a7e162da3b08c8d8d7459f925716d0f9b56e2 Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Wed, 23 Mar 2022 19:25:39 -0700 Subject: [PATCH 1/3] Add training tasks endpoint to Python client --- README.rst | 13 ++++++++++++ scaleapi/__init__.py | 42 ++++++++++++++++++++++++++++++++++++-- scaleapi/training_tasks.py | 22 ++++++++++++++++++++ 3 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 scaleapi/training_tasks.py diff --git a/README.rst b/README.rst index df67363..c2db2ca 100644 --- a/README.rst +++ b/README.rst @@ -528,6 +528,19 @@ __ https://docs.scale.com/reference client.create_evaluation_task(TaskType.TextCollection, **payload) +Training tasks (For Scale Rapid projects only) +________________________________________________ + +Training tasks are used to onboard taskers onto your project + +Create Training Task +^^^^^^^^^^^^^^^^^^^^^^ + +Create a training task. + +.. code-block:: python + + client.create_training_task(TaskType, ...task parameters...) Error handling ______________ diff --git a/scaleapi/__init__.py b/scaleapi/__init__.py index 58e25f4..4434c03 100644 --- a/scaleapi/__init__.py +++ b/scaleapi/__init__.py @@ -2,6 +2,7 @@ from scaleapi.batches import Batch, BatchStatus from scaleapi.evaluation_tasks import EvaluationTask +from scaleapi.training_tasks import TrainingTask from scaleapi.exceptions import ScaleInvalidRequest from scaleapi.files import File from scaleapi.projects import Project @@ -794,10 +795,12 @@ def create_evaluation_task( task_type: TaskType, **kwargs, ) -> EvaluationTask: - """This method can only be used for Self-Serve projects. + """This method can only be used for Rapid projects. Supported Task Types: [ + DocumentTranscription, + SegmentAnnotation, + VideoPlaybackAnnotation, ImageAnnotation, - Categorization, TextCollection, NamedEntityRecognition ] @@ -827,3 +830,38 @@ def create_evaluation_task( evaluation_task_data = self.api.post_request(endpoint, body=kwargs) return EvaluationTask(evaluation_task_data, self) + + def create_training_task( + self, + task_type: TaskType, + **kwargs, + ) -> EvaluationTask: + """This method can only be used for Rapid projects. + Supported Task Types: [ + DocumentTranscription, + SegmentAnnotation, + VideoPlaybackAnnotation, + ImageAnnotation, + TextCollection, + NamedEntityRecognition + ] + Parameters may differ based on the given task_type. + + Args: + task_type (TaskType): + Task type to be created + e.g.. `TaskType.ImageAnnotation` + **kwargs: + The same set of parameters are expected with + create_task function and an additional expected_response. + Scale's API documentation. + https://docs.scale.com/reference + + Returns: + EvaluationTask: + Returns created training task. + """ + endpoint = f"training_tasks/{task_type.value}" + + training_task_data = self.api.post_request(endpoint, body=kwargs) + return EvaluationTask(training_task_data, self) diff --git a/scaleapi/training_tasks.py b/scaleapi/training_tasks.py new file mode 100644 index 0000000..b1f3895 --- /dev/null +++ b/scaleapi/training_tasks.py @@ -0,0 +1,22 @@ +class TrainingTask: + """TrainingTask class, containing TrainingTask information.""" + + def __init__(self, json, client): + self._json = json + self.id = json["id"] + self.initial_response = getattr(json, "initial_response", None) + self.expected_response = json["expected_response"] + self._client = client + + def __hash__(self): + return hash(self.id) + + def __str__(self): + return f"TrainingTask(id={self.id})" + + def __repr__(self): + return f"TrainingTask({self._json})" + + def as_dict(self): + """Returns all attributes as a dictionary""" + return self._json From cd495fe7aecffcf6d16a5d9bf996c44034cc8549 Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Wed, 23 Mar 2022 19:27:22 -0700 Subject: [PATCH 2/3] fix --- scaleapi/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scaleapi/__init__.py b/scaleapi/__init__.py index 4434c03..e4bbab1 100644 --- a/scaleapi/__init__.py +++ b/scaleapi/__init__.py @@ -835,7 +835,7 @@ def create_training_task( self, task_type: TaskType, **kwargs, - ) -> EvaluationTask: + ) -> TrainingTask: """This method can only be used for Rapid projects. Supported Task Types: [ DocumentTranscription, @@ -858,10 +858,10 @@ def create_training_task( https://docs.scale.com/reference Returns: - EvaluationTask: + TrainingTask: Returns created training task. """ endpoint = f"training_tasks/{task_type.value}" training_task_data = self.api.post_request(endpoint, body=kwargs) - return EvaluationTask(training_task_data, self) + return TrainingTask(training_task_data, self) From 8113a76ebd99f0f7dbe0bf62dec38b39d5b6325f Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Thu, 24 Mar 2022 11:56:26 -0700 Subject: [PATCH 3/3] lint --- scaleapi/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scaleapi/__init__.py b/scaleapi/__init__.py index e4bbab1..2958c47 100644 --- a/scaleapi/__init__.py +++ b/scaleapi/__init__.py @@ -2,10 +2,10 @@ from scaleapi.batches import Batch, BatchStatus from scaleapi.evaluation_tasks import EvaluationTask -from scaleapi.training_tasks import TrainingTask from scaleapi.exceptions import ScaleInvalidRequest from scaleapi.files import File from scaleapi.projects import Project +from scaleapi.training_tasks import TrainingTask from ._version import __version__ # noqa: F401 from .api import Api