def METHOD_NAME(fl_model: FLModel, params_converter: Optional[ParamsConverter] = None) -> Shareable:
    """From FLModel to NVFlare side shareable.
    This is a temporary solution to converts FLModel to the shareable of existing style,
    so that we can reuse the existing components we have.
    In the future, we should be using the to_dxo, from_dxo directly.
    And all the components should be changed to accept the standard DXO.
    """
    if fl_model.params is None and fl_model.metrics is None:
        raise ValueError("FLModel without params and metrics is NOT supported.")
    elif fl_model.params is not None:
        if fl_model.params_type is None:
            raise ValueError(f"Invalid ParamsType: ({fl_model.params_type}).")
        data_kind = params_type_to_data_kind.get(fl_model.params_type)
        if data_kind is None:
            raise ValueError(f"Invalid ParamsType: ({fl_model.params_type}).")
        if params_converter is not None:
            fl_model.params = params_converter.convert(fl_model.params)
        if fl_model.metrics is None:
            dxo = DXO(data_kind, data=fl_model.params, meta={})
        else:
            # if both params and metrics are presented, will be treated as initial evaluation on the global model
            dxo = DXO(data_kind, data=fl_model.params, meta={MetaKey.INITIAL_METRICS: fl_model.metrics})
    else:
        dxo = DXO(DataKind.METRICS, data=fl_model.metrics, meta={})
    meta = fl_model.meta if fl_model.meta is not None else {}
    dxo.meta.update(meta)
    shareable = dxo.METHOD_NAME()
    if fl_model.current_round is not None:
        shareable.set_header(AppConstants.CURRENT_ROUND, fl_model.current_round)
    if fl_model.total_rounds is not None:
        shareable.set_header(AppConstants.NUM_ROUNDS, fl_model.total_rounds)
    if MetaKey.VALIDATE_TYPE in meta:
        shareable.set_header(AppConstants.VALIDATE_TYPE, meta[MetaKey.VALIDATE_TYPE])
    return shareable