def METHOD_NAME(model, model_type, feature_names, evaluator_config):
    model_config = evaluator_config.get("model_config", None)
    # by default wrap the "predict" bound method of the pyfunc model
    model_to_be_wrapped = model.predict
    # Special case scenario since we're currently using `rewrite_prompt` that needs access to the unwrapped model iff
    # the latter is a langchain model
    if model_type == "text":
        model_to_be_wrapped = unwrap_python_model_from_pyfunc_if_langchain(model)
    if model_config is None:
        return Model(model=model_to_be_wrapped, model_type=gsk_model_types[model_type], feature_names=feature_names)
    config_set = set(model_config.keys())
    sign = inspect.signature(Model)
    sign_set = set(sign.parameters.keys())
    if config_set.issubset(sign_set):
        if "model_type" not in config_set:
            model_config["model_type"] = gsk_model_types[model_type]
        if "feature_names" not in config_set:
            model_config["feature_names"] = feature_names
        return Model(model=model_to_be_wrapped, **model_config)
    raise ValueError(
        f"The provided parameters {config_set - sign_set} in model_config are not valid. "
        "Make sure to pass only the attributes of giskard.Model "
        "(see https://docs.giskard.ai/en/latest/reference/models)."
    )