class_docstr: Utility class for conversation metadata.
  
  Metadata should be saved at ``<datapath>.metadata``.
class_docstr_tok: ["Utility","class","for","conversation","metadata",".","Metadata","should","be","saved","at","``","<","datapath",">",".metadata","``","."]
code: def _load(self, datapath):
      self.metadata_path = self._get_path(datapath)
      if not PathManager.exists(self.metadata_path):
          raise RuntimeError(
              f"Metadata at path {self.metadata_path} not found. "
              "Double check your path."
          )
  
      with PathManager.open(self.metadata_path, "rb") as f:
          metadata = json.load(f)
  
      self.datetime = metadata["date"]
      self.opt = metadata["opt"]
      self.self_chat = metadata["self_chat"]
      self.speakers = metadata["speakers"]
      self.version_num = metadata["version"]
      self.extra_data = {}
      for k, v in metadata.items():
          if k not in [
              "date",
              "opt",
              "speakers",
              "self_chat",
              "version",
          ]:
              self.extra_data[k] = v
  
imports: import datetime
  import json
  import os
  import itertools
  from parlai.utils.io import PathManager
  from parlai.core.metrics import dict_report
  from parlai.utils.misc import AttrDict
  import parlai.utils.logging
label_desc: Use image node_id 2 for calling the Metadata obj's underlying member method code with example usage: obj._load(datapath) without return types