class_docstr: Helper container which encapsulates TOD metrics and does some basic prepocessing to
  handlers to calculate said metrics.
  
  This class should generally not need to be changed; add new metrics handlers to
  `WORLD_METRIC_HANDLERS` (or otherwise override `self.handlers` of this class) to
  change metrics actively being used.
class_docstr_tok: ["Helper","container","which","encapsulates","TOD","metrics","and","does","some","basic","prepocessing","to","handlers","to","calculate","said","metrics",".","This","class","should","generally","not","need","to","be","changed",";","add","new","metrics","handlers","to","`","WORLD_METRIC_HANDLERS","`","(","or","otherwise","override","`","self.handlers","`","of","this","class",")","to","change","metrics","actively","being","used","."]
code: def handle_message(self, message: Message, agent_type: TodAgentType):
      if "text" not in message:
          return
      if agent_type == TodAgentType.GOAL_GROUNDING_AGENT and len(
          message["text"]
      ) > len(STANDARD_GOAL):
          # Only count a conversation as started if there is a goal.
          self.convo_started = True
      for handler in self.handlers:
          metrics = self._handle_message_impl(
              message, agent_type, handler
          )
          if metrics is not None:
              for name, metric in metrics.items():
                  if metric is not None:
                      self.add(name, metric)
  
file_path: ParlAI/parlai/core/tod/world_metrics.py
imports: from parlai.core.message import Message
  from parlai.core.metrics import Metrics
  from parlai.core.tod.tod_core import TodAgentType, TOD_AGENT_TYPE_TO_PREFIX, SerializationHelpers, STANDARD_GOAL
  from typing import Any, Dict
  import parlai.core.tod.world_metrics_handlers
label_desc: Use image node_id 2 for calling the TodMetrics obj's underlying member method code with example usage: obj.handle_message(message, agent_type) without return types