class_docstr: This Blueprint uses somewhat specialized arguments for turn annotations, manages
  their validation, and also has specialized data storage for the result format.
  
  It also has options for the onboarding data answers and the annotation bucket
  definitions.
class_docstr_tok: ["This","Blueprint","uses","somewhat","specialized","arguments","for","turn","annotations",",","manages","their","validation",",","and","also","has","specialized","data","storage","for","the","result","format",".","It","also","has","options","for","the","onboarding","data","answers","and","the","annotation","bucket","definitions","."]
docstr: Ensure that arguments are properly configured to launch this task.
docstr_tok: ["Ensure","that","arguments","are","properly","configured","to","launch","this","task","."]
code: def assert_task_args(
      cls, args: "DictConfig", shared_state: "SharedTaskState"
  ) -> None:
      """
      Ensure that arguments are properly configured to launch this task.
      """
      super().assert_task_args(args, shared_state)
      assert (
          args.blueprint.get("task_description_file", None) is not None
      ), "Must provide a task description file"
      full_path = os.path.expanduser(
          args.blueprint.task_description_file
      )
      assert os.path.exists(
          full_path
      ), f"Target task description path {full_path} doesn't exist"
  
      assert (
          args.blueprint.get("left_pane_text_path", None) is not None
      ), "Must provide a left pane text file"
      full_path = os.path.expanduser(args.blueprint.left_pane_text_path)
      assert os.path.exists(
          full_path
      ), f"Target left pane text path {full_path} doesn't exist"
  
      if args.blueprint.get("chat_data_folder") == "":
          raise ValueError("Must provide a valid chat data folder")
      assert "~" not in args.blueprint.chat_data_folder, (
          f'"~" can\'t currently be parsed in the chat data folder path '
          f"{args.blueprint.chat_data_folder}"
      )
      # Currently Hydra overrides the tilde key at lower levels as described here:
      # https://hydra.cc/docs/next/advanced/override_grammar/basic/#grammar
      # Thus the TILDE key cannot be used in replacement for $HOME variable.
      # Some hacky solution can probably be achieved but won't be good code so for now
      # this assert is written as a placeholder
  
      if args.blueprint.get("annotations_config_path", "") != "":
          full_path = os.path.expanduser(
              args.blueprint.annotations_config_path
          )
          assert os.path.exists(
              full_path
          ), f"Target annotation config path {full_path} doesn't exist"
  
imports: import json
  import os
  import pickle
  import random
  from abc import ABC, abstractmethod
  from dataclasses import dataclass, field
  from threading import Semaphore, Condition
  from typing import Any, Dict, List, Optional, TYPE_CHECKING
  import numpy
  import torch
  import yaml
  from mephisto.operations.registry import register_mephisto_abstraction
  from mephisto.abstractions.blueprint import SharedTaskState
  from mephisto.abstractions.blueprints.parlai_chat.parlai_chat_blueprint import ParlAIChatBlueprint, SharedParlAITaskState, ParlAIChatBlueprintArgs
  from omegaconf import DictConfig, MISSING
  from parlai.crowdsourcing.tasks.model_chat.bot_agent import TurkLikeAgent
  from parlai.crowdsourcing.tasks.model_chat.utils import ImageStack, get_context_generator
  from parlai.tasks.blended_skill_talk.agents import ContextGenerator
label_desc: Use image node_id 1 for calling the BaseModelChatBlueprint obj's underlying member method code with example usage: obj.assert_task_args(cls, args, shared_state) without return types