docstr: Run the initial turn for both the human and the bot.
  
  Optionally show the bot its persona. If we are in Meena-like conversation mode
  show "Hi!" to the human and the bot and let the bot respond accordingly.
  
  Check parley() function for more information on the main logic.
docstr_tok: ["Run","the","initial","turn","for","both","the","human","and","the","bot",".","Optionally","show","the","bot","its","persona",".","If","we","are","in","Meena-like","conversation","mode","show","``","Hi","!","''","to","the","human","and","the","bot","and","let","the","bot","respond","accordingly",".","Check","parley","(",")","function","for","more","information","on","the","main","logic","."]
code: def _run_initial_turn(self) -> None:
      """
      Run the initial turn for both the human and the bot.
  
      Optionally show the bot its persona. If we are in Meena-like conversation mode
      show "Hi!" to the human and the bot and let the bot respond accordingly.
  
      Check parley() function for more information on the main logic.
      """
      control_msg = {"episode_done": False}
  
      if self.opt["include_persona"]:
          # The Bot agent
          # We add the personas and 1/3 of the time WoW topic as the
          # first utterance in the history.
          # Previously for BST task, we also had a big first utterance
          # that gave instructions. Removing that for this task.
          persona_strings = [s.strip() for s in self.personas[1]]
          persona_utterance = self._get_persona_utterance(
              persona_strings=persona_strings,
              context_dataset=self.context_info["context_dataset"],
              additional_context=self.context_info[
                  "additional_context"
              ],
              is_bot=True,
          )
          message = control_msg.copy()
          message["text"] = persona_utterance
          # The bot seeing its persona does not count as a "turn"
          self.bots[0].observe(validate(message), increment_turn=False)
          self.bots[1].observe(validate(message), increment_turn=False)
  
      if self.opt["conversation_start_mode"] == "hi":
          logging.info('[Displaying "Hi!" only as per Meena task.]')
          if self.personas is not None:
              human_persona_strings = [
                  s.strip() for s in self.personas[0]
              ]
          else:
              human_persona_strings = ["", ""]
          human_first_msg = {
              "episode_done": False,
              "id": self.agent.id,
              "text": "Hi!",
              "fake_start": True,
              "agent_idx": 0,
              "task_data": {
                  "human_persona_string_1": human_persona_strings[0],
                  "human_persona_string_2": human_persona_strings[1],
                  "prompt_instruction": self.opt["task_question"],
              },
          }
          for k, v in control_msg.items():
              human_first_msg[k] = v
  
          # The first message is always "Hi", so we have both bots observe the message
  
          self.dialog.append(human_first_msg)
          self.agent.observe(validate(human_first_msg))
          self.bots[0].observe(validate(human_first_msg))
          self.bots[1].observe(validate(human_first_msg))
  
          bot_1_response = self.bots[0].act()
          bot_1_response = Compatibility.maybe_fix_act(bot_1_response)
  
          bot_2_response = self.bots[1].act()
          bot_2_response = Compatibility.maybe_fix_act(bot_2_response)
  
          if random.random() > 0.5:
              task_data = {
                  "top_bot_data": {
                      "top_bot_id": self.bots[0].worker_id,
                      "top_bot_response": bot_1_response,
                  },
                  "bottom_bot_data": {
                      "bottom_bot_id": self.bots[1].worker_id,
                      "bottom_bot_response": bot_2_response,
                  },
                  "task_turn_idx": self.task_turn_idx,
              }
          else:
              task_data = {
                  "top_bot_data": {
                      "top_bot_id": self.bots[1].worker_id,
                      "top_bot_response": bot_2_response,
                  },
                  "bottom_bot_data": {
                      "bottom_bot_id": self.bots[0].worker_id,
                      "bottom_bot_response": bot_1_response,
                  },
                  "task_turn_idx": self.task_turn_idx,
              }
  
          # Need an initial human's observe to observe the two choices from the bot
          self.agent.observe({"text": "", "task_data": task_data})
  
      else:
          raise ValueError(
              f"Conversation start mode {self.opt['conversation_start_mode']} "
              f"not recognized!"
          )
  
imports: import random
  import parlai.utils.logging
  from typing import Any, Dict, Optional
  from parlai.core.agents import create_agent_from_shared
  from parlai.core.message import Message
  from parlai.core.worlds import validate
  from parlai.crowdsourcing.tasks.model_chat.constants import ONBOARD_SUCCESS
  from parlai.crowdsourcing.tasks.model_chat.utils import Compatibility
  from parlai.crowdsourcing.tasks.model_chat.worlds import BaseModelChatWorld, ModelChatWorld, ModelChatOnboardWorld
  from parlai.crowdsourcing.utils.acceptability import AcceptabilityChecker
  from parlai.crowdsourcing.utils.mturk import get_mturk_id_from_mephisto_wrapper
  from parlai.crowdsourcing.tasks.pairwise_per_turn_eval.bot_agent import PerTurnEvalTurkLikeAgent
label_desc: Use image node_id 5 for calling the PerTurnEvalWorld obj's underlying member method code with example usage: obj._run_initial_turn() without return types