def METHOD_NAME(self, shareable: Shareable, fl_ctx: FLContext) -> ModelLearnable:
    """Convert Shareable to ModelLearnable.
    Supporting TYPE == TYPE_XGB_MODEL
    Args:
        shareable (Shareable): Shareable that contains a DXO object
        fl_ctx (FLContext): FL context
    Returns:
        A ModelLearnable object
    Raises:
        TypeError: if shareable is not of type shareable
        ValueError: if data_kind is not `DataKind.XGB_MODEL`
    """
    if not isinstance(shareable, Shareable):
        raise TypeError("shareable must be Shareable, but got {}.".format(type(shareable)))
    base_model = fl_ctx.get_prop(AppConstants.GLOBAL_MODEL)
    if not base_model:
        self.system_panic(reason="No global base model!", fl_ctx=fl_ctx)
        return base_model
    dxo = from_shareable(shareable)
    if dxo.data_kind == DataKind.XGB_MODEL:
        model_update = dxo.data
        if not model_update:
            self.log_info(fl_ctx, "No model update found. Model will not be updated.")
        else:
            model_data_dict = model_update.get("model_data_dict")
            if model_data_dict:
                # model update is from aggregator in bagging mode, update global model
                model = base_model[ModelLearnableKey.WEIGHTS]
                for update in model_data_dict:
                    model = update_model(model, update)
                # remove model update dict from shareable that will be sent
                dxo.data = {"model_data": model_update["model_data"]}
            else:
                # model update is serialized full model currently in cyclic mode
                model = model_update.get("model_data")
            base_model[ModelLearnableKey.WEIGHTS] = model
        self.shareable = dxo.to_shareable()
    else:
        raise ValueError("data_kind should be either DataKind.XGB_MODEL, but got {}".format(dxo.data_kind))
    return base_model