code: def get_model_name_map(unique_models: Set[Type['main.BaseModel']]) -> Dict[Type['main.BaseModel'], str]:
      
      name_model_map = {}
      conflicting_names: Set[str] = set()
      for model in unique_models:
          model_name = model.__name__
          if model_name in conflicting_names:
              model_name = get_long_model_name(model)
              name_model_map[model_name] = model
          elif model_name in name_model_map:
              conflicting_names.add(model_name)
              conflicting_model = name_model_map.pop(model_name)
              name_model_map[get_long_model_name(conflicting_model)] = conflicting_model
              name_model_map[get_long_model_name(model)] = model
          else:
              name_model_map[model_name] = model
      return {v: k for k, v in name_model_map.items()}
docs: Process a set of models and generate unique names for them to be used as keys in the JSON Schema
      definitions. By default the names are the same as the class name. But if two models in different Python
      modules have the same name (e.g. "users.Model" and "items.Model"), the generated names will be
      based on the Python module path for those conflicting models to prevent name collisions.
  
      :param unique_models: a Python set of models
      :return: dict mapping models to names