# Incompatible changes between v1.2 and v1.1

## User-facing APIs

The user-facing APIs are changed between v1.2 and v1.1. The major changes are:

1. v1.2 abstracts `neural_compressor.common.Model` concept to cover those cases whose weight and graph files are stored separately.

2. v1.2 unifies the calling style by setting model, calibration dataloader, evaluation dataloader, and metric through `quantizer` attributes rather than passing as function inputs.

Refer to below examples for details.

```python
# user facing API example in v1.1
quantizer = Quantization('/path/to/user.yaml')
ds = dataset('/path/to/dataset')
dataloader = quantizer.dataloader(ds, batch_size=100)
quantizer.metric('metric', metric)
q_model = quantizer('/path/to/model', q_dataloader = dataloader, eval_dataloader = dataloader)
... # user to write framework specific code to save q_model

```

```python
# user facing API example in v1.2
quantizer = Quantization(conf.yaml)
quantizer.model = common.Model('/path/to/model')
dl = dataset('/path/to/dataset')
quantizer.calib_dataloader = common.DataLoader(dl, batch_size=32)
quantizer.eval_dataloader = common.DataLoader(dl, batch_size=32)
quantizer.metric = common.Metric(custom_metric) 
q_model = quantizer()
q_model.save('/path/to/output/dir') # explicitly call to save q_model

```

## Built-in transform/dataset/metric APIs

v1.2 refines Neural Compressor built-in transform/dataset/metric to unify APIs cross different framework backends.

Refer to [dataset](./dataset.md), [transform](./transform.md), and [metric](./metric.md) to learn how to use them in yaml or code.
