class_docstr: Caches fingerprints and outputs of nodes during model training.
class_docstr_tok: ["Caches","fingerprints","and","outputs","of","nodes","during","model","training","."]
docstr: Stores the fingerprints and caches the output of the node.
docstr_tok: ["Stores","the","fingerprints","and","caches","the","output","of","the","node","."]
code: def on_after_node(
      self,
      node_name: Text,
      execution_context: ExecutionContext,
      config: Dict[Text, Any],
      output: Any,
      input_hook_data: Dict,
  ) -> None:
      """Stores the fingerprints and caches the output of the node."""
      # We should not re-cache the output of a PrecomputedValueProvider.
      graph_component_class = self._pruned_schema.nodes[node_name].uses
  
      if graph_component_class == PrecomputedValueProvider:
          return None
  
      output_fingerprint = (
          rasa.shared.utils.io.deep_container_fingerprint(output)
      )
      fingerprint_key = input_hook_data["fingerprint_key"]
  
      logger.debug(
          f"Caching '{output.__class__.__name__}' with fingerprint_key: "
          f"'{fingerprint_key}' and output_fingerprint '{output_fingerprint}'."
      )
  
      self._cache.cache_output(
          fingerprint_key=fingerprint_key,
          output=output,
          output_fingerprint=output_fingerprint,
          model_storage=self._model_storage,
      )
  
imports: import logging
  from typing import Any, Dict, Text, Type
  from rasa.engine.caching import TrainingCache
  from rasa.engine.graph import ExecutionContext, GraphNodeHook, GraphSchema, SchemaNode
  from rasa.engine.storage.storage import ModelStorage
  from rasa.engine.training.components import PrecomputedValueProvider
  import rasa.shared.utils.io
  from rasa.engine.training import fingerprinting
label_desc: Use image node_id 3 for calling the TrainingHook obj's underlying member method code with example usage: obj.on_after_node(node_name, execution_context, config, output, input_hook_data) and returns: None