From 4fc40dd091badbd3f3431074699037e21d021d15 Mon Sep 17 00:00:00 2001 From: rikunosuke Date: Wed, 8 Apr 2026 13:00:45 +0900 Subject: [PATCH 1/2] add update_robotics_task and operator param to create_robotics_task - Add update_robotics_task method with support for status, priority, tags, operator, annotations, and metadatas - Add operator parameter to create_robotics_task - Fix type annotations for Python 3.8 compatibility (list[str] -> List[str]) - Add README example for update_robotics_task Co-Authored-By: Claude Opus 4.6 (1M context) --- README.md | 29 +++++++++++++++++++ fastlabel/__init__.py | 67 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 94 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c3e7994..4625b2c 100644 --- a/README.md +++ b/README.md @@ -2294,6 +2294,35 @@ tasks = client.get_robotics_tasks( ) ``` +#### Update Tasks + +Update a single robotics task. + +```python +task_id = client.update_robotics_task( + task_id="YOUR_TASK_ID", + status="approved", + priority=10, # (optional) none: 0, low: 10, medium: 20, high: 30 + assignee="USER_SLUG", + tags=["tag1", "tag2"], + operator="OPERATOR_NAME", # (optional) name of operator + annotations=[ + { + "type": "sub_task", + "value": "grab", + "start": 13, + "end": 18, + } + ], + metadatas=[ # (optional) metadata key-value pairs + { + "key": "metadata_key", + "value": "metadata_value" + } + ] +) +``` + #### Response Example of a single robotics task object diff --git a/fastlabel/__init__.py b/fastlabel/__init__.py index 400bb53..0155359 100644 --- a/fastlabel/__init__.py +++ b/fastlabel/__init__.py @@ -2080,7 +2080,8 @@ def create_robotics_task( status: Optional[str] = None, external_status: Optional[str] = None, priority: Optional[Priority] = None, - tags: Optional[list[str]] = None, + tags: Optional[List[str]] = None, + operator: Optional[str] = None, metadatas: Optional[list] = None, **kwargs, ) -> str: @@ -2098,6 +2099,7 @@ def create_robotics_task( medium = 20, high = 30, tags is a list of tag to be set in advance (Optional). + operator is a name of operator (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). @@ -2117,7 +2119,9 @@ def create_robotics_task( if priority is not None: payload["priority"] = priority if tags: - payload["tags"] = tags or [] + payload["tags"] = tags + if operator is not None: + payload["operator"] = operator if metadatas: payload["metadatas"] = metadatas @@ -2189,6 +2193,65 @@ def get_robotics_tasks( return self.api.get_request(endpoint, params=params) + def update_robotics_task( + self, + task_id: str, + status: Optional[str] = None, + external_status: Optional[str] = None, + priority: Optional[Priority] = None, + tags: Optional[List[str]] = None, + operator: Optional[str] = None, + annotations: Optional[List[dict]] = None, + metadatas: Optional[list] = None, + **kwargs, + ) -> str: + """ + Update a single robotics 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). + operator is a name of operator (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/robotics/" + 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 operator is not None: + payload["operator"] = operator + if annotations: + 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 import_lerobot( self, project: str, From ca32f4ac488828ed50cb243f9e0cf5edf8eba7b6 Mon Sep 17 00:00:00 2001 From: rikunosuke Date: Wed, 8 Apr 2026 13:55:07 +0900 Subject: [PATCH 2/2] add example code --- examples/update_robotics_task.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 examples/update_robotics_task.py diff --git a/examples/update_robotics_task.py b/examples/update_robotics_task.py new file mode 100644 index 0000000..4553729 --- /dev/null +++ b/examples/update_robotics_task.py @@ -0,0 +1,29 @@ +from pprint import pprint + +import fastlabel + +client = fastlabel.Client() + +task_id = client.update_robotics_task( + task_id="YOUR_TASK_ID", + status="approved", + priority=10, # none: 0, low: 10, medium: 20, high: 30 + assignee="USER_SLUG", + tags=["tag1", "tag2"], + operator="OPERATOR_NAME", + annotations=[ + { + "type": "sub_task", + "value": "grab", + "start": 13, + "end": 18, + } + ], + metadatas=[ + { + "key": "metadata_key", + "value": "metadata_value", + } + ], +) +pprint(task_id)