code: def on_epoch_end(self, epoch: int, logs: Any = None) -> None:
      if (epoch + 1) % self.step == 0:
          report = self.kash_model.evaluate(
              self.x_data,  # type: ignore
              self.y_data,
              truncating=self.truncating,
              batch_size=self.batch_size,
          )
  
          self.logs.append(
              {
                  "precision": report["precision"],
                  "recall": report["recall"],
                  "f1-score": report["f1-score"],
              }
          )
  
          tf.summary.scalar(
              "eval f1-score", data=report["f1-score"], step=epoch
          )
          tf.summary.scalar(
              "eval recall", data=report["recall"], step=epoch
          )
          tf.summary.scalar(
              "eval precision", data=report["precision"], step=epoch
          )
          print(
              f"\nepoch: {epoch} precision: {report['precision']:.6f},"
              f" recall: {report['recall']:.6f}, f1-score: {report['f1-score']:.6f}"
          )
  
file_path: Kashgari/kashgari/callbacks/eval_callBack.py
imports: from typing import List, Any, Dict
  import tensorflow
  from tensorflow import keras
  from kashgari.tasks.abs_task_model import ABCTaskModel
label_desc: Use image node_id 2 for calling the EvalCallBack obj's underlying member method code with example usage: obj.on_epoch_end(epoch, logs) without return types