def update_lrs(schedulers: dict, epoch: int, total_epochs: int) -> dict:
    """
    Updates the learning rates in a phased approach.
    The decay is split into phases based on the number of modules in the model.
    In each phase, a later stage of the model starts to decay.
    The phase length is based on the number of modules and total number of epochs.

    Args:
        schedulers: The schedulers for the model.
        epoch: The current epoch.
        total_epochs: The total number of epochs.
    
    Returns:
        A dictionary containing the new learning rates.
    """
    # Make sure the keys are in the same order as the phases
    keys = [key for key in ['calib', 'sc', 'mc'] if key in schedulers]
    epochs_per_phase = max(1, total_epochs // len(keys))

    # Update schedulers based on the current phase
    for i, key in enumerate(keys):
        if epoch >= i * epochs_per_phase:
            schedulers[key].step()

    # Return the latest learning rates
    return {key: schedulers[key].get_last_lr()[0] for key in keys}