code: def save_server_model(self, model_path):
      if not os.path.exists(f"{model_path}/model.meta"):
          os.makedirs(f"{model_path}", exist_ok=True)
          with open(f"{model_path}/model.meta", "wb") as meta_file:
              SafePickle.dump(
                  {
                      "loss": self.loss_fn,
                      "optimizer": (
                          self.optimizer_cls,
                          self.optimizer_args,
                      ),
                  },
                  meta_file,
              )
      if self.secret_key is not None and self.salt is not None:
          logging.error("Not implemented...")
      else:
          logging.warn(
              "Secret key or salt is missed, saving unencrypted model..."
          )
          self.model.save(f"{model_path}/model.h5")
  
file_path: BigDL/python/ppml/src/bigdl/ppml/fl/nn/tensorflow/aggregator.py
imports: import os
  from bigdl.ppml.utils.safepickle import SafePickle
  import logging
  import threading
  from bigdl.dllib.utils.log4Error import invalidInputError, invalidOperationError
  from bigdl.ppml.fl.nn.utils import ndarray_map_to_tensor_map
  from threading import Condition
  import numpy
  import tensorflow
label_desc: Use image node_id 8 for calling the Aggregator obj's underlying member method code with example usage: obj.save_server_model(model_path) without return types