Workflow Basics
Encord SDK supports programmatic use of Workflows with the following:WorkflowStage, WorkflowAction, and Task. Typical use would be querying a WorkflowStage to get Tasks matching some criteria, and then executing a WorkflowAction against Tasks (for example: assigning, submitting annotation tasks, or approving review tasks). The type of actions available depends on the stage queried.
Here is a short description of major parts of the Workflows SDK:
WorkflowStage
WorkflowStage
WorkflowStage: Move your tasks through a Workflow Project using theWorkflowStageclass.AnnotationStageReviewStageConsensusAnnotationStageConsensusReviewStageAgentStageFinalStage(Complete and Archive)
WorkflowAction
WorkflowAction
-
WorkflowAction: Applies an action to a task in a workflow stage The following actions are supported:assign: Assigns a user to one or more tasks.submit: Moves a task to the next stage.release: Releases a task from the current user.approve: Approves a review task.reject: Rejects a review task.move: Moves a task directly to any stage. See Move Tasks Freely.proceed: Moves an Agent task along one of the Agent stage’s pathways. See Move Agent tasks along a pathway.
issuesproperty for working with the task’s issues (for example,task.issues.add_file_issue(...)). See Issues & Comments in Projects.
Task
Task
Task: Exposes a simple version of the tasks available in a Project.
TaskStatus
TaskStatus
-
TaskStatus: The following statuses are available: The following statuses are available for ANNOTATE tasks:NEW: Tasks that are unassigned.ASSIGNED: Tasks that are assigned to a user.RELEASED: Tasks that were released from an assigned user.REOPENED: Tasks that were reopened.SKIPPED: Tasks that were skipped by annotators.COMPLETED: Tasks that are in the Complete stage. Used for Annotation sub-tasks in Consensus Annotation tasks.
Consensus Annotation tasks consist of 1 or more Annotation sub-tasks.
NEW: Tasks that are unassigned.ASSIGNED: Tasks that are assigned to a user.RELEASED: Tasks that were released from an assigned user.REOPENED: Tasks that were reopened.SKIPPED: Tasks that were skipped by reviewers.
AnnotationTaskStatus, ReviewTaskStatus, ConsensusReviewTaskStatus, and AgentTaskStatus), as well as LabelReviewStatus, also include:UNKNOWN: Returned when the Encord platform reports a status that your version of the SDK does not recognize. Upgrade theencordSDK to see the actual status.
SKIPPED for Review and Consensus Review tasks, and the UNKNOWN fallback, require encord SDK version 0.1.207 or later.View all stages in a Workflow
The following code provides you with the method to view all stages in a Workflow in a Project. The code is the same for Consensus and Non-Consensus Projects.The SDK only returns stages that hold tasks: Annotate, Review, Consensus Annotate, Consensus Review, Agent, Complete, and Archive. Routers, Export, Metadata router, Parallelisation, and Checkpoint stages are not returned, so you cannot read their settings (for example, an Export stage’s destination) with the SDK.


Non-Consensus Projects
In the SDK, a class is defined for every stage type. This allows you to see what properties and actions each stage offers. The following stages are supported for non-Consensus Projects:AnnotationStageReviewStageAgentStageFinalStage(Complete and Archive)
uuid and a title, and a get_tasks() method that returns the stage’s tasks. You can filter tasks with these optional arguments:
assignee: A user email, or a list of user emails.data_hash: A data unit ID, or a list of data unit IDs.dataset_hash: A dataset ID, or a list of dataset IDs.data_title: Text that the data unit’s title contains.status: A task status, or a list of task statuses (for example,AnnotationTaskStatus.ASSIGNED). Not available for the Complete and Archive stages, which also don’t takeassignee.
Tasks provide programmatic access to the tasks available in the UI.
The following actions are supported for non-Consensus Projects:
assign: Assigns a user to one or more tasks.submit: Moves a task to the next stage.release: Releases a task from the current user.approveandreject: Approve or reject a review task.move: Moves a task directly to any stage.
Display Tasks in a Stage
Display Tasks in a Stage
Assign a User to Tasks in a Stage
Assign a User to Tasks in a Stage
Submit Tasks as Another User in a Stage
Submit Tasks as Another User in a Stage
Submit Tasks as Another User in a Stage
- Annotation Tasks can only be submitted on behalf of users with the following roles: Annotator, Annotator + Reviewer, Team Manager, or Admin.
- Review Tasks can only be submitted on behalf of users with the following roles: Reviewer, Annotator + Reviewer, Team Manager, or Admin.
Retain Current User and Submit Task
Retain Current User and Submit Task
Release Tasks in a Stage
Release Tasks in a Stage
Reopen Label Reviews in a Review Task
Reopen Label Reviews in a Review Task
Reopen Label Reviews in a Review Task
Each label in a review task has its own label review, which can be approved, rejected, or reopened. Useget_label_reviews() to list the label reviews for a task, and reopen() to set an approved or rejected label review back to an open state so that it can be reviewed again.Reopen Label Reviews
Filter tasks by data hash
Filter tasks by data hash
Filter tasks by status
Filter tasks by status
Filter tasks by status
Use thestatus parameter of get_tasks() to return only tasks with one or more specific statuses. Each stage type has its own status enum: AnnotationTaskStatus, ReviewTaskStatus, ConsensusReviewTaskStatus, or AgentTaskStatus.If the Encord platform returns a status that your SDK version does not recognize, the task’s status is UNKNOWN rather than raising an error.Filter tasks by status
Move all tasks in a stage to the next stage
Move all tasks in a stage to the next stage
Move Agent tasks along a pathway
Move Agent tasks along a pathway
Move Agent tasks along a pathway
An Agent stage has one or more pathways, each leading to another stage. Useproceed() to send a task along a pathway, by its name or its UUID. To run agents that do this automatically, see Task Agents.Consensus Projects
Consensus annotation tasks can be listed, but cannot be assigned or moved into the Consensus review stage. In Consensus Projects, tasks are broken into subtasks. One subtask for each Annotator. Subtasks can be assigned or submitted. Consensus Projects support the following stages:AnnotationStageReviewStageConsensusAnnotationStageConsensusReviewStageFinalStage(Complete and Archive)
assign: Assigns a user to one or more tasks.approve: Moves a task to the next stage.release: Releases a task from the current user.reject: Rejects a task.
Work with Labels on Tasks
A task tracks where a data unit is in the Workflow. The data unit’s labels are in its label row. Use the task’sdata_hash to get the label row.
- Save labels before you submit a task.
submit(),approve(), and the other task actions only move the task. They don’t upload labels. Calllabel_row.save()first, or labels you added in your script are not included. - You can edit labels on tasks in the Complete stage. Saving labels does not move the task: it stays in the Complete stage, so you don’t need to reopen it first.
- Saving labels on a task in a Review stage updates the task’s label reviews. New labels get a review, and the reviews of removed labels are removed. If no label reviews remain, the review task closes automatically.
data_hash to identify the data unit in the Project, and backing_item_uuid to identify the storage item, for example to add it to a Collection.
Get the label rows for tasks
Move Tasks
To Next Stage
Submitting a task moves it to the next stage in the Workflow.Submit Task To Next Stage
To Complete
workflow_complete() moves Workflow tasks to the Complete stage.Reopen
Use the workflow_reopen() method to reopen tasks. Reopening a task moves it back to the first annotation stage in your Workflow. No labels are lost.workflow_reopen()raises an error in Projects whose first annotation stage is a Consensus stage, for every task in the Project.workflow_reopen()andworkflow_complete()act on themainlabel branch.- Neither method updates the label row object in your script. To see a task’s new stage, list the label row again with
project.list_label_rows_v2().
Move Tasks Freely
This script shows how to move a data unit directly between workflow stages, bypassing the standard workflow progression. The script shows how to access various Workflow Stage types; you should only use the ones relevant to your project.Moving Tasks
Task Priority
You can read and assign task priorities using the SDK. Priorities in the SDK are represented by numbers ranging from 0 to 1, where 1 corresponds to100 in the Encord platform, the highest priority value.
Setting priorities requires the Admin or Team Manager role on the Project. A bundle sends priorities in requests of up to 1,000 tasks, so you can set priorities for any number of tasks in one bundle.
End-to-End Example moving tasks through Projects
This example uses a basic non-Consensus Project Workflow moving a number of tasks from ANNOTATE to COMPLETE. !End-to-end Example Workflow !End-to-end Example tasks- Project ID: 01bd7084-b04a-4cd1-87f3-73e8e78925c4
- Data units: apples_01.jpg, apples_02.jpg, apples_03.jpg, apples_04.jpg, apples_05.jpg
STEP 1: View all tasks in the Project
STEP 1: View all tasks in the Project
A few tasks have been annotated, but they have not been submitted yet. The following code lists all tasks in the ANNOTATE 1 stage.From the returned results we can see that four of the data units have been assigned (apples_01 to apples_04) while one task has not (apples_05). We do not know the extent that each of the assigned data units has been annotated, but we want the tasks to move through the Workflow.
STEP 2: Submit all tasks for review
STEP 2: Submit all tasks for review
The following code submits ALL tasks to the REVIEW 1 stage. Before the tasks can be submitted they are first assigned to a user in the Project. The user could be any user capable of annotating in the Project (because this is the ANNOTATE stage). For this example, the Admin of the Project (the user with SDK access) is assigned.
Submit all tasks for review
STEP 3: Verify that the tasks are in REVIEW 1
STEP 3: Verify that the tasks are in REVIEW 1
Each time we perform an action, we should verify the action is successful. After submitting the tasks, we can verify that the tasks are now in REVIEW 1.All of the tasks are now in stage REVIEW 1. None of the tasks are assigned to any users.
STEP 4: Reject a task
STEP 4: Reject a task
We know that From what was returned, we can see that only data unit
apples-05.jpg does not have any labels, because it was not assigned to any users before we submitted the task. If we REJECT the task, according to the Workflow in the Project, the task returns to the ANNOTATE 1 stage.The following code filters the task in the REVIEW 1 stage based on the task’s data hash, and then rejects the task.apples_05.jpg was acted upon.To verify that the task is now in ANNOTATE 1, run the following:STEP 5: Approve tasks
STEP 5: Approve tasks
There are still four tasks in REVIEW 1. The following code approves the tasks. This moves the tasks to the COMPLETE stage. You could approve all the tasks at once the REVIEW 1 stage, but instead we will filter by data hash and then approve.
STEP 6: Verify tasks are COMPLETE
STEP 6: Verify tasks are COMPLETE
Use the following code to verify that the tasks And from what the code returns, the tasks are now in the COMPLETE stage.
apples01 to apples_04 are in the COMPLETE stage.
