def METHOD_NAME(self, fl_ctx: FLContext) -> Shareable:
    """Called when workflow determines to generate shareable to send back to contributors
    Args:
        fl_ctx (FLContext): context provided by workflow
    Returns:
        Shareable: the weighted mean of accepted shareables from contributors
    """
    self.log_debug(fl_ctx, "Start aggregation")
    current_round = fl_ctx.get_prop(AppConstants.CURRENT_ROUND)
    site_num = len(self.history)
    self.log_info(fl_ctx, f"aggregating {site_num} update(s) at round {current_round}")
    self.history = []
    self.log_debug(fl_ctx, "End aggregation")
    local_updates = self.local_models
    local_updates_as_dict = self.local_models_as_dict
    self.local_models = []
    self.local_models_as_dict = []
    dxo = DXO(
        data_kind=self.expected_data_kind,
        data={"model_data": local_updates, "model_data_dict": local_updates_as_dict},
    )
    return dxo.to_shareable()