code: def report(self):
      r = super().report()
      bsz = max(self.metrics["bsz"], 1)
      for k in ["know_loss", "know_acc", "know_chance"]:
          # round and average across all items since last report
          r[k] = round_sigfigs(self.metrics[k] / bsz, 4)
      return r
  
imports: from typing import Optional
  from parlai.core.params import ParlaiParser
  from parlai.core.opt import Opt
  from itertools import chain
  from functools import lru_cache
  import torch
  import numpy
  from parlai.utils.torch import padded_tensor
  from parlai.utils.misc import round_sigfigs
  from parlai.agents.transformer.transformer import TransformerGeneratorAgent
  from .modules import EndToEndModel
  from parlai.tasks.wizard_of_wikipedia.agents import TOKEN_KNOWLEDGE
label_desc: Use image node_id 4 for calling the EndToEndAgent obj's underlying member method code with example usage: obj.report() and returns: r