code: def save(self, output_path):
      model_lookup = {}
      model_types = {}
      model_structure = {}
  
      for name, models in self.sub_modules.items():
          model_structure[name] = []
          for model in models:
              model_id = str(id(model)) + "_" + type(model).__name__
              model_lookup[model_id] = model
              model_types[model_id] = type(model).__module__
              model_structure[name].append(model_id)
  
      for model_id, model in model_lookup.items():
          model_path = os.path.join(output_path, str(model_id))
          os.makedirs(model_path, exist_ok=True)
          model.save(model_path)
  
      with open(
          os.path.join(output_path, "config.json"), "w", encoding="utf8"
      ) as fOut:
          json.dump(
              {
                  "types": model_types,
                  "structure": model_structure,
                  "parameters": {
                      "allow_empty_key": self.allow_empty_key
                  },
              },
              fOut,
              indent=2,
          )
  
file_path: sentence-transformers/sentence_transformers/models/Asym.py
imports: from torch import Tensor
  from torch import nn
  import os
  import json
  from ..util import import_from_string
  from collections import OrderedDict
  from typing import List, Dict, Union, Tuple
label_desc: Use image node_id 4 for calling the Asym obj's underlying member method code with example usage: obj.save(output_path) without return types