def METHOD_NAME(model_dir: str, slotIndex: int) -> ModelSlots:
    slotDir = os.path.join(model_dir, str(slotIndex))
    jsonFile = os.path.join(slotDir, "params.json")
    if not os.path.exists(jsonFile):
        return ModelSlot()
    jsonDict = json.load(open(os.path.join(slotDir, "params.json")))
    slotInfoKey = list(ModelSlot.__annotations__.keys())
    slotInfo = ModelSlot(**{k: v for k, v in jsonDict.items() if k in slotInfoKey})
    if slotInfo.voiceChangerType == "RVC":
        slotInfoKey.extend(list(RVCModelSlot.__annotations__.keys()))
        return RVCModelSlot(**{k: v for k, v in jsonDict.items() if k in slotInfoKey})
    elif slotInfo.voiceChangerType == "MMVCv13":
        slotInfoKey.extend(list(MMVCv13ModelSlot.__annotations__.keys()))
        return MMVCv13ModelSlot(**{k: v for k, v in jsonDict.items() if k in slotInfoKey})
    elif slotInfo.voiceChangerType == "MMVCv15":
        slotInfoKey.extend(list(MMVCv15ModelSlot.__annotations__.keys()))
        return MMVCv15ModelSlot(**{k: v for k, v in jsonDict.items() if k in slotInfoKey})
    elif slotInfo.voiceChangerType == "so-vits-svc-40":
        slotInfoKey.extend(list(SoVitsSvc40ModelSlot.__annotations__.keys()))
        return SoVitsSvc40ModelSlot(**{k: v for k, v in jsonDict.items() if k in slotInfoKey})
    elif slotInfo.voiceChangerType == "DDSP-SVC":
        slotInfoKey.extend(list(DDSPSVCModelSlot.__annotations__.keys()))
        return DDSPSVCModelSlot(**{k: v for k, v in jsonDict.items() if k in slotInfoKey})
    elif slotInfo.voiceChangerType == "Diffusion-SVC":
        slotInfoKey.extend(list(DiffusionSVCModelSlot.__annotations__.keys()))
        return DiffusionSVCModelSlot(**{k: v for k, v in jsonDict.items() if k in slotInfoKey})
    elif slotInfo.voiceChangerType == "Beatrice":
        slotInfoKey.extend(list(BeatriceModelSlot.__annotations__.keys()))
        return BeatriceModelSlot(**{k: v for k, v in jsonDict.items() if k in slotInfoKey})
    else:
        return ModelSlot()