code: def custom_evaluation(
      self,
      teacher_action: Message,
      labels: Optional[Tuple[str]],
      model_response: Message,
  ):
      if (
          "text" in model_response
          and model_response["text"] is not None
      ):
          self.metrics.add(
              "exact_match",
              ExactMatchMetric.compute(
                  guess=model_response["text"],
                  answers=json.loads(teacher_action["answers"]),
              ),
          )
  
          self.metrics.add(
              "in_metric",
              InMetric.compute(
                  guess=model_response["text"],
                  answers=json.loads(teacher_action["answers"]),
              ),
          )
  
imports: import copy
  import os
  import json
  import jsonlines
  from typing import List, Optional, Tuple
  from parlai.core.teachers import ChunkTeacher, DialogTeacher
  from .build import build, DATASET_NAME_LOCAL, build_sample
  from .build_open import build
  from .utils.text_utils import simplify_nq_example
  from parlai.core.opt import Opt
  from parlai.core.message import Message
  from parlai.core.metrics import ExactMatchMetric, normalize_answer, AverageMetric
  from parlai.core.params import ParlaiParser
  from parlai.utils.data import DatatypeHelper
  from parlai.utils.io import PathManager
  import parlai.utils.logging
label_desc: Use image node_id 4 for calling the NaturalQuestionsOpenTeacher obj's underlying member method code with example usage: obj.custom_evaluation(teacher_action, labels, model_response) without return types