class_docstr: Agent to use in a live chat with human.
  
  The assumption is that there is only 1 human; all other characters are handled by
  model. We still use the regular observe and act cycles of any other ParlAI agent,
  But after each observe, model decides whose turn is next and if it is the human
  character's turn it responds with silence. Otherwise it uses its utterance
  generation model and generates a text response.
code: def add_cmdline_args(
      cls, parser: ParlaiParser, partial_opt: Optional[Opt] = None
  ) -> ParlaiParser:
      agent = parser.add_argument_group(
          "Multiparty agent for model chat (human evals)."
      )
      agent.add_argument(
          "--decision-agent",
          type=str,
          help="Agent for deciding the next speaker.",
      )
      agent.add_argument(
          "--decision-model-file",
          type=str,
          help="Model file for deciding the next speaker (will be ignored if used with --decision-agent).",
      )
      agent.add_argument(
          "--speech-agent",
          type=str,
          help="Agent for generating the response text.",
      )
      agent.add_argument(
          "--speech-model-file",
          type=str,
          help="Model file for generating the response text (will be ignored if used with --speech-agent).",
      )
      agent.add_argument(
          "--utterance-delimiter",
          type=str,
          default="\n",
          help="A string used to separate each utterance in the context. Defaults to newline. For example, 'A: Hello\nB: Hi there'.",
      )
      agent.add_argument(
          "--include-speaker-in-context",
          type="bool",
          default=True,
          help="Whether to include speaker labels in the context. "
          "For example, message = { text: 'Rachel: Hi' } instead of message = { text: 'Hi' }",
      )
      agent.add_argument(
          "--add-speaker-to-context-end",
          type="bool",
          default=True,
          help="Append the current speaker to the end of each context.",
      )
      agent.add_argument(
          "--speaker-token-delimiter",
          type=str,
          default=DEFAULT_SPEAKER_TOKEN_DELIM,
          help="The token to use to separate the speaker label from the actual utterance in `obs['text']`.",
      )
      agent.add_argument(
          "--add-personas-to-context",
          type=bool,
          default=True,
          help="If true, will add the flattened personas to the contet end.",
      )
      agent.add_argument(
          "--add-location-to-context",
          type=bool,
          default=True,
          help="If true, will add the flattened location to the contet end.",
      )
      agent.add_argument(
          "--context-format",
          type=str,
          default="multilight",
          choices=("bb3", "multilight", "light"),
          help="The token to use to separate the speaker label from the actual utterance in `obs['text']`.",
      )
      return parser
  
imports: from typing import Optional, Dict
  import random
  from parlai.core.agents import Agent
  from parlai.core.opt import Opt
  from parlai.core.params import ParlaiParser
  from parlai.core.agents import create_agent_from_model_file
  from parlai.core.loader import load_agent_module
  from parlai.utils.logging import logging
label_desc: Use image node_id 3 for calling the MultipartyModelChatAgent obj's underlying member method code with example usage: obj.add_cmdline_args(cls, parser, partial_opt) and returns: parser