def METHOD_NAME(in_shape, start, end, axes, step, outshape, op_version, value_format):
    input_names = []
    output_names = []
    inputs = []
    outputs = []
    initializers = []
    nodes = []
    attributes_dict = {}
    # input
    input = helper.make_tensor_value_info('input', TensorProto.FLOAT, in_shape)
    input_names.append('input')
    inputs.append(input)
    # output
    output = helper.make_tensor_value_info('output', TensorProto.FLOAT, outshape)
    output_names.append('output')
    outputs.append(output)
    # opset 1
    if op_version == 1:
        if axes is not None:
            attributes_dict['axes'] = axes
        attributes_dict['starts'] = start
        attributes_dict['ends'] = end
    else:
        # opset 10/11/13
        # starts
        start_tensor = helper.make_tensor(
            'starts',
            TensorProto.INT64,
            dims=[len(start)],
            vals=start
        )
        if value_format == 'initializer':
            initializers.append(start_tensor)
        else:
            start_node = helper.make_node(
                'Constant',
                inputs=[],
                outputs=['starts'],
                value=start_tensor
            )
            nodes.append(start_node)
        input_names.append('starts')
        # ends
        end_tensor = helper.make_tensor(
            'ends',
            TensorProto.INT64,
            dims=[len(end)],
            vals=end
        )
        if value_format == 'initializer':
            initializers.append(end_tensor)
        else:
            end_node = helper.make_node(
                'Constant',
                inputs=[],
                outputs=['ends'],
                value=end_tensor
            )
            nodes.append(end_node)
        input_names.append('ends')
        # axes
        if axes is not None:
            axes_tensor = helper.make_tensor(
                'axes',
                TensorProto.INT64,
                dims=[len(end)],
                vals=axes
            )
            if value_format == 'initializer':
                initializers.append(axes_tensor)
            else:
                axes_node = helper.make_node(
                    'Constant',
                    inputs=[],
                    outputs=['axes'],
                    value=axes_tensor
                )
                nodes.append(axes_node)
            input_names.append('axes')
        # steps
        if step is not None:
            step_tensor = helper.make_tensor(
                'steps',
                TensorProto.INT64,
                dims=[len(step)],
                vals=step
            )
            if value_format == 'initializer':
                initializers.append(step_tensor)
            else:
                step_node = helper.make_node(
                    'Constant',
                    inputs=[],
                    outputs=['steps'],
                    value=step_tensor
                )
                nodes.append(step_node)
            input_names.append('steps')
    slice_node = onnx.helper.make_node(
        'Slice',
        inputs=input_names,
        outputs=output_names,
        **attributes_dict
    )
    nodes.append(slice_node)
    graph_def = helper.make_graph(
        nodes,
        'test-model',
        inputs,
        outputs,
        initializer=initializers
    )
    op = onnx.OperatorSetIdProto()
    op.version = op_version
    model_def = helper.make_model(graph_def, producer_name='kendryte', opset_imports=[op])
    return model_def