class_docstr: This onboarding world displays a sample conversation with checkboxes of the same
  annotations as in the real HIT, but it is not a live conversation (all utterances
  are displayed at once).
  
  constants.py has the task data with correct answers in json form
  (opt['onboard_task_data']). User gets to try again onboard_failures_max_allowed
  times and is soft banned if they fail more than that.
class_docstr_tok: ["This","onboarding","world","displays","a","sample","conversation","with","checkboxes","of","the","same","annotations","as","in","the","real","HIT",",","but","it","is","not","a","live","conversation","(","all","utterances","are","displayed","at","once",")",".","constants.py","has","the","task","data","with","correct","answers","in","json","form","(","opt","[","'onboard_task_data","'","]",")",".","User","gets","to","try","again","onboard_failures_max_allowed","times","and","is","soft","banned","if","they","fail","more","than","that","."]
code: def _handle_act(self, act):
      if "task_data" not in act:
          print(
              f"{self.__class__.__name__}: {self.worker_id} had no data submitted"
          )
          return ONBOARD_FAIL
  
      self.annotations = act["task_data"].get("annotations")
      print("Onboarding annotation results: ", self.annotations)
  
      if act["task_data"]["success"]:
          print(
              f"Worker {self.worker_id} successfully passed the onboarding task."
          )
  
          # This will end the onboarding and send them directly to the HIT
          self.episodeDone = True
          return ONBOARD_SUCCESS
      else:
          print(f"Worker {self.worker_id} failed onboarding.")
          # Grant the failed qualification, then sleep as we want worker to return
          self.agent.mephisto_agent.get_worker().grant_qualification(
              self.onboarding_qualification, 0
          )
          return ONBOARD_FAIL
  
imports: import time
  import os
  import json
  from abc import ABC, abstractmethod
  from typing import Any, Dict, List, Optional, Tuple
  import numpy
  from parlai.core.agents import create_agent_from_shared
  from parlai.core.message import Message
  from parlai.core.worlds import validate
  from parlai.crowdsourcing.utils.acceptability import AcceptabilityChecker
  from parlai.crowdsourcing.utils.worlds import CrowdOnboardWorld, CrowdTaskWorld
  from parlai.crowdsourcing.tasks.model_chat.bot_agent import TurkLikeAgent
  from parlai.crowdsourcing.tasks.model_chat.constants import ONBOARD_FAIL, ONBOARD_SUCCESS
  from parlai.crowdsourcing.tasks.model_chat.utils import Compatibility
  from parlai.crowdsourcing.utils.mturk import get_mturk_id_from_mephisto_wrapper
  from typing import TYPE_CHECKING
label_desc: Use image node_id 3 for calling the ModelChatOnboardWorld obj's underlying member method code with example usage: obj._handle_act(act) and returns: ONBOARD_FAIL, ONBOARD_SUCCESS, ONBOARD_FAIL