def get_empty_kv_cache(batch_size: int, kv_info: dict, has_gqa: bool):
        """Return an empty cache for past keys and values.

        :param batch_size: The batch size.
        :param kv_info: A dictionary containing information about the keys and values.
        :param has_gqa: A boolean indicating whether the model has GQA.
        :return: A dictionary with empty tensors for past keys and values.
            If the model has GQA, the past keys and values will have a length of 0, else they will have a length of 1.
        """
        return {
            k: torch.zeros(
                (batch_size, kv_info["num_kv_heads"], 0 if has_gqa else 1, kv_info["head_size"]), dtype=torch.float32
            )
            for k in kv_info["past_names"]
        }
Return an empty cache for past keys and values.

        :param batch_size: The batch size.
        :param kv_info: A dictionary containing information about the keys and values.
        :param has_gqa: A boolean indicating whether the model has GQA.
        :return: A dictionary with empty tensors for past keys and values.
            If the model has GQA, the past keys and values will have a length of 0, else they will have a length of 1.
        
olive/data/component/dataloader.py