def METHOD_NAME(predictions, ground_truth, params):
    """
    Generates a dictionary of metrics calculated on the overall predictions and ground truths.
    Args:
        predictions (torch.Tensor): The output of the model.
        ground_truth (torch.Tensor): The ground truth labels.
        params (dict): The parameter dictionary containing training and data information.
    Returns:
        dict: A dictionary of metrics.
    """
    predictions = predictions.type(torch.float)
    ground_truth = ground_truth.type(torch.float) * params["scaling_factor"]
    assert (
        params["problem_type"] == "regression"
    ), "Only regression is supported for these stats"
    output_metrics = {}
    reduction_types_keys = {
        "mean": "mean",
        "sum": "sum",
        "none": "none",
    }
    # metrics that need the "reduction" parameter
    for reduction_type, reduction_type_key in reduction_types_keys.items():
        calculators = {
            "cosinesimilarity": tm.CosineSimilarity(reduction=reduction_type_key),
        }
        for metric_name, calculator in calculators.items():
            output_metrics[
                f"{metric_name}_{reduction_type}"
            ] = get_output_from_calculator(predictions, ground_truth, calculator)
    # metrics that do not have any "reduction" parameter
    calculators = {
        "mse": tm.MeanSquaredError(),
        "mae": tm.MeanAbsoluteError(),
        "pearson": tm.PearsonCorrCoef(),
        "spearman": tm.SpearmanCorrCoef(),
    }
    for metric_name, calculator in calculators.items():
        output_metrics[metric_name] = get_output_from_calculator(
            predictions, ground_truth, calculator
        )
    return output_metrics