class_docstr: Will act like a Turker but actually contains a bot agent.
docstr: Same as model chat's bot_agent.py except the self_observe function is removed, a
  custom observe is instead written in worlds.py.
  
  This is so that the two bots can read each others' messages using observe so
  that the conversation history stays the same.
docstr_tok: ["Same","as","model","chat","'s","bot_agent.py","except","the","self_observe","function","is","removed",",","a","custom","observe","is","instead","written","in","worlds.py",".","This","is","so","that","the","two","bots","can","read","each","others","'","messages","using","observe","so","that","the","conversation","history","stays","the","same","."]
code: def act(self, timeout=None):
      """
      Same as model chat's bot_agent.py except the self_observe function is removed, a
      custom observe is instead written in worlds.py.
  
      This is so that the two bots can read each others' messages using observe so
      that the conversation history stays the same.
      """
  
      _ = timeout  # The model doesn't care about the timeout
  
      if self.semaphore:
          with self.semaphore:
              act_out = self.model_agent.batch_act(
                  [self.model_agent.observation]
              )[0]
      else:
          act_out = self.model_agent.batch_act(
              [self.model_agent.observation]
          )[0]
      act_out = Message(act_out).json_safe_payload()
  
      if "dict_lower" in self.opt and not self.opt["dict_lower"]:
          # model is cased so we don't want to normalize the reply like below
          final_message_text = act_out["text"]
      else:
          final_message_text = normalize_reply(act_out["text"])
  
      act_out["text"] = final_message_text
      assert ("episode_done" not in act_out) or (
          not act_out["episode_done"]
      )
      self.turn_idx += 1
      return {**act_out, "episode_done": False}
  
imports: from parlai.crowdsourcing.tasks.model_chat.bot_agent import TurkLikeAgent
  from parlai.core.message import Message
  from parlai.utils.strings import normalize_reply
label_desc: Use image node_id 2 for calling the PerTurnEvalTurkLikeAgent obj's underlying member method code with example usage: obj.act(timeout) and returns: dict