From 0d6e26c500ce5c8924099ee81d24a7377afff3a7 Mon Sep 17 00:00:00 2001 From: soymd Date: Tue, 10 Mar 2026 16:02:33 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=E3=83=9E=E3=83=AB=E3=83=81=E3=83=A2?= =?UTF-8?q?=E3=83=BC=E3=83=80=E3=83=AB=20(=E5=8B=95=E7=94=BB-=E9=9F=B3?= =?UTF-8?q?=E5=A3=B0)=20=E3=82=BF=E3=82=B9=E3=82=AF=E3=81=AE=20SDK=20?= =?UTF-8?q?=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89=E8=BF=BD=E5=8A=A0=20(#1090?= =?UTF-8?q?0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - get_multi_modal_video_audio_tasks() - find_multi_modal_video_audio_task() - create_multi_modal_video_audio_task() - update_multi_modal_video_audio_task() --- fastlabel/__init__.py | 183 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) diff --git a/fastlabel/__init__.py b/fastlabel/__init__.py index 1394fb7..aa73932 100644 --- a/fastlabel/__init__.py +++ b/fastlabel/__init__.py @@ -226,6 +226,13 @@ def find_audio_classification_task(self, task_id: str) -> dict: endpoint = "tasks/audio/classification/" + task_id return self.api.get_request(endpoint) + def find_multi_modal_video_audio_task(self, task_id: str) -> dict: + """ + Find a single multi modal video audio task. + """ + endpoint = "tasks/multi-modal-video-audio/" + task_id + return self.api.get_request(endpoint) + def find_audio_task_by_name(self, project: str, task_name: str) -> dict: """ Find a single audio task by name. @@ -773,6 +780,51 @@ def get_audio_classification_tasks( params["limit"] = limit return self.api.get_request(endpoint, params=params) + def get_multi_modal_video_audio_tasks( + self, + project: str, + status: str = None, + external_status: str = None, + tags: list = [], + task_name: str = None, + offset: int = None, + limit: int = 10, + ) -> list: + """ + Returns a list of multi modal video audio tasks. + Returns up to 10 at a time, to get more, set offset as the starting position + to fetch. + + project is slug of your project (Required). + status can be 'registered', 'completed', 'skipped', 'reviewed', 'sent_back', + 'approved', 'declined' (Optional). + external_status can be 'registered', 'completed', 'skipped', 'reviewed', + 'sent_back', 'approved', 'declined', 'customer_declined' (Optional). + tags is a list of tag (Optional). + task_name is a task name (Optional). + offset is the starting position number to fetch (Optional). + limit is the max number to fetch (Optional). + """ + if limit > 10: + raise FastLabelInvalidException( + "Limit must be less than or equal to 10.", 422 + ) + endpoint = "tasks/multi-modal-video-audio" + params = {"project": project} + if status: + params["status"] = status + if external_status: + params["externalStatus"] = external_status + if tags: + params["tags"] = tags + if task_name: + params["taskName"] = task_name + if offset: + params["offset"] = offset + if limit: + params["limit"] = limit + return self.api.get_request(endpoint, params=params) + def get_pcd_tasks( self, project: str, @@ -1800,6 +1852,80 @@ def create_audio_classification_task( return self.api.post_request(endpoint, payload=payload) + def create_multi_modal_video_audio_task( + self, + project: str, + name: str, + file_path: str, + status: str = None, + external_status: str = None, + priority: Priority = None, + annotations: list = [], + tags: list = [], + metadatas: list = [], + **kwargs, + ) -> str: + """ + Create a single multi modal video audio task. + + project is slug of your project (Required). + name is an unique identifier of task in your project (Required). + file_path is a path to data. Supported extensions are mp4 (Required). + status can be 'registered', 'completed', 'skipped', 'reviewed', 'sent_back', + 'approved', 'declined' (Optional). + external_status can be 'registered', 'completed', 'skipped', 'reviewed', + 'sent_back', 'approved', 'declined', 'customer_declined' (Optional). + priority is the priority of the task (default: none) (Optional). + Set one of the numbers corresponding to: + none = 0, + low = 10, + medium = 20, + high = 30, + annotations is a list of annotation to be set in advance (Optional). + tags is a list of tag to be set in advance (Optional). + metadatas is a list of metadata key-value pairs to be set in advance (Optional). + e.g.) [{"key": "metadata_key", "value": "some_value"}] + assignee is slug of assigned user (Optional). + reviewer is slug of review user (Optional). + approver is slug of approve user (Optional). + external_assignee is slug of external assigned user (Optional). + external_reviewer is slug of external review user (Optional). + external_approver is slug of external approve user (Optional). + """ + endpoint = "tasks/multi-modal-video-audio" + if not utils.is_video_supported_ext(file_path): + raise FastLabelInvalidException("Supported extensions are mp4.", 422) + if not utils.is_video_supported_size(file_path): + raise FastLabelInvalidException( + "Supported video size is under 250 MB.", 422 + ) + if not utils.is_video_supported_codec(file_path): + raise FastLabelInvalidException( + "Supported video encoding for registration through the SDK is only AVC/H.264", + 422, + ) + + file = utils.base64_encode(file_path) + payload = {"project": project, "name": name, "file": file} + if status: + payload["status"] = status + if external_status: + payload["externalStatus"] = external_status + if priority is not None: + payload["priority"] = priority + if annotations: + for annotation in annotations: + annotation["content"] = name + payload["annotations"] = delete_extra_annotations_parameter(annotations) + if tags: + payload["tags"] = tags + if metadatas: + payload["metadatas"] = metadatas + + self.__fill_assign_users(payload, **kwargs) + + return self.api.post_request(endpoint, payload=payload) + def create_dicom_task( self, project: str, @@ -2811,6 +2937,63 @@ def update_audio_classification_task( return self.api.put_request(endpoint, payload=payload) + def update_multi_modal_video_audio_task( + self, + task_id: str, + status: str = None, + external_status: str = None, + priority: Priority = None, + tags: list = [], + annotations: List[dict] = [], + metadatas: list = [], + **kwargs, + ) -> str: + """ + Update a single multi modal video audio task. + + task_id is an id of the task (Required). + status can be 'registered', 'completed', 'skipped', 'reviewed', 'sent_back', + 'approved', 'declined' (Optional). + external_status can be 'registered', 'completed', 'skipped', 'reviewed', + 'sent_back', 'approved', 'declined', 'customer_declined' (Optional). + priority is the priority of the task (default: none) (Optional). + Set one of the numbers corresponding to: + none = 0, + low = 10, + medium = 20, + high = 30, + tags is a list of tag to be set (Optional). + annotations is a list of annotation to be set (Optional). + metadatas is a list of metadata key-value pairs to be set (Optional). + e.g.) [{"key": "metadata_key", "value": "some_value"}] + assignee is slug of assigned user (Optional). + reviewer is slug of review user (Optional). + approver is slug of approve user (Optional). + external_assignee is slug of external assigned user (Optional). + external_reviewer is slug of external review user (Optional). + external_approver is slug of external approve user (Optional). + """ + endpoint = "tasks/multi-modal-video-audio/" + task_id + payload = {} + if status: + payload["status"] = status + if external_status: + payload["externalStatus"] = external_status + if priority is not None: + payload["priority"] = priority + if tags: + payload["tags"] = tags + if annotations: + for annotation in annotations: + annotation["content"] = "" + payload["annotations"] = delete_extra_annotations_parameter(annotations) + if metadatas: + payload["metadatas"] = metadatas + + self.__fill_assign_users(payload, **kwargs) + + return self.api.put_request(endpoint, payload=payload) + def update_pcd_task( self, task_id: str, From 41e50d1271cd0de1fcaa10abd15f74d543fd7d9b Mon Sep 17 00:00:00 2001 From: soymd Date: Wed, 11 Mar 2026 10:24:06 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=E3=83=9E=E3=83=AB=E3=83=81=E3=83=A2?= =?UTF-8?q?=E3=83=BC=E3=83=80=E3=83=AB=EF=BC=88=E5=8B=95=E7=94=BB-?= =?UTF-8?q?=E9=9F=B3=E5=A3=B0=EF=BC=89=E3=81=AEcreate/update=E3=83=A1?= =?UTF-8?q?=E3=82=BD=E3=83=83=E3=83=89=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit create/updateは未実装のためgetのみ残す。 - create_multi_modal_video_audio_task を削除 - update_multi_modal_video_audio_task を削除 --- fastlabel/__init__.py | 131 ------------------------------------------ 1 file changed, 131 deletions(-) diff --git a/fastlabel/__init__.py b/fastlabel/__init__.py index aa73932..1d702ed 100644 --- a/fastlabel/__init__.py +++ b/fastlabel/__init__.py @@ -1852,80 +1852,6 @@ def create_audio_classification_task( return self.api.post_request(endpoint, payload=payload) - def create_multi_modal_video_audio_task( - self, - project: str, - name: str, - file_path: str, - status: str = None, - external_status: str = None, - priority: Priority = None, - annotations: list = [], - tags: list = [], - metadatas: list = [], - **kwargs, - ) -> str: - """ - Create a single multi modal video audio task. - - project is slug of your project (Required). - name is an unique identifier of task in your project (Required). - file_path is a path to data. Supported extensions are mp4 (Required). - status can be 'registered', 'completed', 'skipped', 'reviewed', 'sent_back', - 'approved', 'declined' (Optional). - external_status can be 'registered', 'completed', 'skipped', 'reviewed', - 'sent_back', 'approved', 'declined', 'customer_declined' (Optional). - priority is the priority of the task (default: none) (Optional). - Set one of the numbers corresponding to: - none = 0, - low = 10, - medium = 20, - high = 30, - annotations is a list of annotation to be set in advance (Optional). - tags is a list of tag to be set in advance (Optional). - metadatas is a list of metadata key-value pairs to be set in advance (Optional). - e.g.) [{"key": "metadata_key", "value": "some_value"}] - assignee is slug of assigned user (Optional). - reviewer is slug of review user (Optional). - approver is slug of approve user (Optional). - external_assignee is slug of external assigned user (Optional). - external_reviewer is slug of external review user (Optional). - external_approver is slug of external approve user (Optional). - """ - endpoint = "tasks/multi-modal-video-audio" - if not utils.is_video_supported_ext(file_path): - raise FastLabelInvalidException("Supported extensions are mp4.", 422) - if not utils.is_video_supported_size(file_path): - raise FastLabelInvalidException( - "Supported video size is under 250 MB.", 422 - ) - if not utils.is_video_supported_codec(file_path): - raise FastLabelInvalidException( - "Supported video encoding for registration through the SDK is only AVC/H.264", - 422, - ) - - file = utils.base64_encode(file_path) - payload = {"project": project, "name": name, "file": file} - if status: - payload["status"] = status - if external_status: - payload["externalStatus"] = external_status - if priority is not None: - payload["priority"] = priority - if annotations: - for annotation in annotations: - annotation["content"] = name - payload["annotations"] = delete_extra_annotations_parameter(annotations) - if tags: - payload["tags"] = tags - if metadatas: - payload["metadatas"] = metadatas - - self.__fill_assign_users(payload, **kwargs) - - return self.api.post_request(endpoint, payload=payload) - def create_dicom_task( self, project: str, @@ -2937,63 +2863,6 @@ def update_audio_classification_task( return self.api.put_request(endpoint, payload=payload) - def update_multi_modal_video_audio_task( - self, - task_id: str, - status: str = None, - external_status: str = None, - priority: Priority = None, - tags: list = [], - annotations: List[dict] = [], - metadatas: list = [], - **kwargs, - ) -> str: - """ - Update a single multi modal video audio task. - - task_id is an id of the task (Required). - status can be 'registered', 'completed', 'skipped', 'reviewed', 'sent_back', - 'approved', 'declined' (Optional). - external_status can be 'registered', 'completed', 'skipped', 'reviewed', - 'sent_back', 'approved', 'declined', 'customer_declined' (Optional). - priority is the priority of the task (default: none) (Optional). - Set one of the numbers corresponding to: - none = 0, - low = 10, - medium = 20, - high = 30, - tags is a list of tag to be set (Optional). - annotations is a list of annotation to be set (Optional). - metadatas is a list of metadata key-value pairs to be set (Optional). - e.g.) [{"key": "metadata_key", "value": "some_value"}] - assignee is slug of assigned user (Optional). - reviewer is slug of review user (Optional). - approver is slug of approve user (Optional). - external_assignee is slug of external assigned user (Optional). - external_reviewer is slug of external review user (Optional). - external_approver is slug of external approve user (Optional). - """ - endpoint = "tasks/multi-modal-video-audio/" + task_id - payload = {} - if status: - payload["status"] = status - if external_status: - payload["externalStatus"] = external_status - if priority is not None: - payload["priority"] = priority - if tags: - payload["tags"] = tags - if annotations: - for annotation in annotations: - annotation["content"] = "" - payload["annotations"] = delete_extra_annotations_parameter(annotations) - if metadatas: - payload["metadatas"] = metadatas - - self.__fill_assign_users(payload, **kwargs) - - return self.api.put_request(endpoint, payload=payload) - def update_pcd_task( self, task_id: str, From 0142d4f708c2c02f002d1d9384f055ac902f4d99 Mon Sep 17 00:00:00 2001 From: soymd Date: Fri, 13 Mar 2026 11:38:24 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=E3=83=9E=E3=83=AB=E3=83=81=E3=83=A2?= =?UTF-8?q?=E3=83=BC=E3=83=80=E3=83=AB=EF=BC=88=E5=8B=95=E7=94=BB-?= =?UTF-8?q?=E9=9F=B3=E5=A3=B0=EF=BC=89=E3=81=AEREADME=E3=81=A8=E3=82=B5?= =?UTF-8?q?=E3=83=B3=E3=83=97=E3=83=AB=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - READMEにget/findメソッドの使用例を追記 - get_multi_modal_video_audio_tasks()のサンプルコードを追加 - find_multi_modal_video_audio_task()のサンプルコードを追加 --- README.md | 22 +++++++++++++++++++ examples/find_multi_modal_video_audio_task.py | 8 +++++++ examples/get_multi_modal_video_audio_tasks.py | 8 +++++++ 3 files changed, 38 insertions(+) create mode 100644 examples/find_multi_modal_video_audio_task.py create mode 100644 examples/get_multi_modal_video_audio_tasks.py diff --git a/README.md b/README.md index 99721c7..7e33841 100644 --- a/README.md +++ b/README.md @@ -1642,6 +1642,28 @@ task_id = client.update_audio_classification_task( ) ``` +### Multi Modal Video Audio + +Supported following project types: + +- Multi Modal Video Audio - Segmentation + +#### Find Task + +Find a single task. + +```python +task = client.find_multi_modal_video_audio_task(task_id="YOUR_TASK_ID") +``` + +#### Get Tasks + +Get tasks. (Up to 10 tasks) + +```python +tasks = client.get_multi_modal_video_audio_tasks(project="YOUR_PROJECT_SLUG") +``` + ### PCD Supported following project types: diff --git a/examples/find_multi_modal_video_audio_task.py b/examples/find_multi_modal_video_audio_task.py new file mode 100644 index 0000000..66e6cbb --- /dev/null +++ b/examples/find_multi_modal_video_audio_task.py @@ -0,0 +1,8 @@ +from pprint import pprint + +import fastlabel + +client = fastlabel.Client() + +task = client.find_multi_modal_video_audio_task(task_id="YOUR_TASK_ID") +pprint(task) \ No newline at end of file diff --git a/examples/get_multi_modal_video_audio_tasks.py b/examples/get_multi_modal_video_audio_tasks.py new file mode 100644 index 0000000..29d0b36 --- /dev/null +++ b/examples/get_multi_modal_video_audio_tasks.py @@ -0,0 +1,8 @@ +from pprint import pprint + +import fastlabel + +client = fastlabel.Client() + +tasks = client.get_multi_modal_video_audio_tasks(project="YOUR_PROJECT_SLUG") +pprint(tasks) From f5dae1da887d0410f2c4f58a8b763e86895eba56 Mon Sep 17 00:00:00 2001 From: soymd Date: Fri, 13 Mar 2026 11:40:24 +0900 Subject: [PATCH 4/4] =?UTF-8?q?find=5Fmulti=5Fmodal=5Fvideo=5Faudio=5Ftask?= =?UTF-8?q?.py=E3=81=AEblack=E3=83=95=E3=82=A9=E3=83=BC=E3=83=9E=E3=83=83?= =?UTF-8?q?=E3=83=88=E9=81=95=E5=8F=8D=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/find_multi_modal_video_audio_task.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/find_multi_modal_video_audio_task.py b/examples/find_multi_modal_video_audio_task.py index 66e6cbb..8ed7fba 100644 --- a/examples/find_multi_modal_video_audio_task.py +++ b/examples/find_multi_modal_video_audio_task.py @@ -5,4 +5,4 @@ client = fastlabel.Client() task = client.find_multi_modal_video_audio_task(task_id="YOUR_TASK_ID") -pprint(task) \ No newline at end of file +pprint(task)