class_docstr: Callback used to stream events to a server.
  
  Requires the `requests` library.
  Events are sent to `root + '/publish/epoch/end/'` by default. Calls are
  HTTP POST, with a `data` argument which is a
  JSON-encoded dictionary of event data.
  If send_as_json is set to True, the content type of the request will be
  application/json. Otherwise the serialized JSON will be sent within a form.
code: def on_epoch_end(self, epoch, logs=None):
      if requests is None:
          raise ImportError(
              "RemoteMonitor requires the `requests` library."
          )
      logs = logs or {}
      send = {}
      send["epoch"] = epoch
      for k, v in logs.items():
          # np.ndarray and np.generic are not scalar types
          # therefore we must unwrap their scalar values and
          # pass to the json-serializable dict 'send'
          if isinstance(v, (np.ndarray, np.generic)):
              send[k] = v.item()
          else:
              send[k] = v
      try:
          if self.send_as_json:
              requests.post(
                  self.root + self.path, json=send, headers=self.headers
              )
          else:
              requests.post(
                  self.root + self.path,
                  {self.field: json.dumps(send)},
                  headers=self.headers,
              )
      except requests.exceptions.RequestException:
          logging.warning(
              "Warning: could not reach RemoteMonitor "
              "root server at " + str(self.root)
          )
  
file_path: elegy/elegy/callbacks/remote_monitor.py
imports: import json
  import logging
  import typing
  import numpy
  from .callback import Callback
label_desc: Use image node_id 2 for calling the RemoteMonitor obj's underlying member method code with example usage: obj.on_epoch_end(epoch, logs) without return types