class_docstr: Observer for writing episodes to Reverb.
  
  This observer should be called at every step. It does not support batched
  trajectories. The steps are cached and written at the end of the episode.
  
  At the end of each episode, an item is written to Reverb. Each item is the
  trajectory containing an episode, including a boundary step in the end.
  Therefore, the sequence lengths of the items may vary. If you want a fixed
  sequence length, use `ReverbAddTrajectoryObserver` instead.
  
  Unfinished episodes remain in the cache and do not get written until
  `reset(write_cached_steps=True)` is called.
  
  TODO(b/176261664): Note that this observer only supports batch_size=1 from the
  consumer, if your episodes have variable lengths.
code: def py_client(self) -> types.ReverbClient:
      return self._py_client
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from typing import Sequence, Text, Union
  from absl import logging
  import tensorflow
  from tf_agents.trajectories import trajectory
  from tf_agents.typing import types
  from tf_agents.utils import lazy_loader
label_desc: Use image node_id 4 for calling the ReverbAddEpisodeObserver obj's underlying member method code with example usage: obj.py_client() and returns: self