def _determine_target(convert_to, minimum_deployment_target) -> str:
    """
    Infer the precise backend target, which could be one of ``milinternal``, ``neuralnetwork`` or ``mlprogram``
    """
    if minimum_deployment_target is None and convert_to is None:
        logger.warning(
            "When both 'convert_to' and 'minimum_deployment_target' not specified, "
            "'convert_to' is set to \"mlprogram\" and 'minimum_deployment_target' is set to "
            "ct.target.iOS15 (which is same as ct.target.macOS12). "
            "Note: the model will not run on systems older than iOS15/macOS12/watchOS8/tvOS15. "
            "In order to make your model run on older system, please set the 'minimum_deployment_target' to iOS14/iOS13. "
            "Details please see the link: https://apple.github.io/coremltools/docs-guides/source/target-conversion-formats.html"
        )
    if minimum_deployment_target is not None:
        if convert_to == "mlprogram" and minimum_deployment_target < AvailableTarget.iOS15:
            raise ValueError(
                f"When 'convert_to' is {convert_to}, the minimum deployment target "
                f"must be at least iOS15/macOS12/watchOS8/tvOS15"
            )

        if convert_to == "neuralnetwork" and minimum_deployment_target >= AvailableTarget.iOS15:
            raise ValueError(
                f"If minimum deployment target is iOS15/macOS12/watchOS8/tvOS15 or "
                f"higher, then 'convert_to' cannot be {convert_to}. It must be "
                f"'mlprogram'"
            )

    if convert_to is not None:
        return convert_to
    else:
        if minimum_deployment_target is None:
            return "mlprogram"
        elif minimum_deployment_target <= AvailableTarget.iOS14:
            return "neuralnetwork"
        else:
            return "mlprogram"

    Infer the precise backend target, which could be one of ``milinternal``, ``neuralnetwork`` or ``mlprogram``
    
coremltools/converters/_converters_entry.py