class_docstr: A negotiation teacher that loads the CaSiNo data from
  https://github.com/kushalchawla/CaSiNo.
  
  Each dialogue is converted into two datapoints, one from the perspective of each
  participant.
docstr: Return an action object.
  
  From the perspective of a specific agent's id, all utterances authored by the
  other agent are coming from the teacher as the text of the action object, and
  all utterances authored by this agent appear as the labels.
docstr_tok: ["Return","an","action","object",".","From","the","perspective","of","a","specific","agent","'s","id",",","all","utterances","authored","by","the","other","agent","are","coming","from","the","teacher","as","the","text","of","the","action","object",",","and","all","utterances","authored","by","this","agent","appear","as","the","labels","."]
code: def _continue_dialogue(self):
      """
      Return an action object.
  
      From the perspective of a specific agent's id, all utterances authored by the
      other agent are coming from the teacher as the text of the action object, and
      all utterances authored by this agent appear as the labels.
      """
      action = {}
      # Fill in teacher's message (THEM)
      self.dialogue_idx += 1
      if self.dialogue_idx < len(self.dialogue):
          # this is a usual dialogue teacher-agent pair; return the teacher's utterance as action text.
          utterance = self.dialogue[self.dialogue_idx]
          assert utterance["id"] != self.perspective
          utterance_text = get_utterance_text(
              utterance
          )  # will take care of special submit-deal utterance and dummy utterances
          action["text"] = utterance_text
  
          if action["text"] == "Reject-Deal":
              # merge with the next dialogue_idx since that is from the same participant while this code assumes alternative utterances.
              self.dialogue_idx += 1  # we know that this will be valid
              utterance = self.dialogue[self.dialogue_idx]
              assert utterance["id"] != self.perspective
              utterance_text = get_utterance_text(
                  utterance
              )  # will take care of special submit-deal utterance and dummy utterances
              action["text"] = action["text"] + " " + utterance_text
      else:
          # the primary dialogue is over; now is the time to return the output of this dialogue
          action[
              "text"
          ] = f"Your points scored: {self.output['your_points_scored']}, How satisfied is your partner: {self.output['how_satisfied_is_your_partner']}, How much does your partner like you: {self.output['how_much_does_your_partner_like_you']}"
  
      # Fill in learner's response (YOU)
      self.dialogue_idx += 1
      self.expected_response = None
      if self.dialogue_idx < len(self.dialogue):
          # usual dialogue going on; return the agent's utterance as the labels
          utterance = self.dialogue[self.dialogue_idx]
          assert (
              utterance["id"] == self.perspective
          ), f"id: {utterance['id']}, perspect: {self.perspective}"
          utterance_text1 = get_utterance_text(
              utterance
          )  # will take care of special submit-deal utterance and dummy utterances
  
          utterance_text2 = ""
          if utterance_text1 == "Reject-Deal":
              # merge with the next dialogue_idx since that is from the same participant while this code assumes alternative utterances.
              self.dialogue_idx += 1  # we know that this will be valid
              utterance = self.dialogue[self.dialogue_idx]
              assert utterance["id"] == self.perspective
              utterance_text2 = get_utterance_text(
                  utterance
              )  # will take care of special submit-deal utterance and dummy utterances
  
          self.expected_response = (
              [utterance_text1 + " " + utterance_text2]
              if (utterance_text1 + " " + utterance_text2).strip()
              else None
          )
      else:
          # no label required when the primary dialogue is complete
          pass
  
      if self.expected_response:
          # since labels is automatically renamed to eval_labels for valid/test, doing just this takes care of everything. Ensures that labels can atleast be accessed regardless of the datatype.
          action["labels"] = self.expected_response
  
      if self.dialogue_idx >= len(self.dialogue):
          self.dialogue_idx = None
          action["episode_done"] = True
      else:
          action["episode_done"] = False
  
      return action
  
imports: from parlai.core.teachers import Teacher
  from .build import build
  from parlai.utils.io import PathManager
  import json
  import os
  import random
  import copy
label_desc: Use image node_id 10 for calling the CasinoTeacher obj's underlying member method code with example usage: obj._continue_dialogue() and returns: action