[WIP] A potential fix for `AutoConfig` and `AutoModel`
Author: ydshieh
Pull request: yes

# What does this PR do?

⚠️ This is just to demonstrate the issue and a (maybe super wrong) way to fix it: 

- Maybe the usage of such models is very low - not worth the time
  - I can't find `DecisionTransformerGPT2Model` on the Hub.
  - `nllb` is not a real issue, as it contains only tokniezer, which `AutoTokenizer` works well. 

- Should we instead creating new configuration classes and associate them to some `model_type` shown below?
  - The current fix is kind hacky, and it also prevents obtaining the complete list in the different `XXX_MODEL_MAPPINGS`. 

## Issue

Some keys in `MODEL_MAPPING_NAMES` are not in `CONFIG_MAPPING_NAMES`. Here are 2 examples

- `decision_transformer_gpt2` (associate to model class `DecisionTransformerGPT2Model`)
- `nllb` (associate to model class `M2M100Model`)

When we have a configuration with these `model_type`:
  - saving the configuration won't save the specified `model_type`
  - so loading will load the  **wrong** (in some sense) `model_type` in the configuration, and therefore using the wrong model class to load the model checkpoint (in some case).

The following code snippet shows the problems

### Code snippet

#### This shows the model type `decision_transformer_gpt2` is not saved
```python
import os
import json
import tempfile
from transformers import DecisionTransformerConfig, AutoConfig

config = DecisionTransformerConfig()
# originally being `decision_transformer`
print(config.model_type)

config.model_type = "decision_transformer_gpt2"
# become `decision_transformer_gpt2`
print(config.model_type)

with tempfile.TemporaryDirectory() as tmpdir:
    config.save_pretrained(tmpdir)
    # check what is saved
    with open(os.path.join(tmpdir, "config.json")) as fp:
        config_dict = json.load(fp)
        # this should be `"decision_transformer_gpt2"`, but we get `decision_transformer`
        print(config_dict["model_type"])
    auto_config = AutoConfig.from_pretrained(tmpdir)
    # this should be `"decision_transformer_gpt2"`, but we get `decision_transformer`
    print(auto_config.model_type)
    assert auto_config.model_type == "decision_transformer_gpt2"
```

#### This shows `AutoModel` loads the model checkpoint with the wrong model class 
```
import tempfile
from transformers import DecisionTransformerConfig, AutoModel, DecisionTransformerGPT2Model

config = DecisionTransformerConfig()
# originally being `decision_transformer`
print(config.model_type)

config.model_type = "decision_transformer_gpt2"
# become `decision_transformer_gpt2`
print(config.model_type)

# create a model with type `DecisionTransformerGPT2Model`
model = DecisionTransformerGPT2Model(config)

with tempfile.TemporaryDirectory() as tmpdir:
    model.save_pretrained(tmpdir)
    auto_model = AutoModel.from_pretrained(tmpdir)
    # this should be `"decision_transformer_gpt2"`, but we get `decision_transformer`
    print(auto_model.config.model_type)
    # this should be `"DecisionTransformerGPT2Model"`, but we get `DecisionTransformerModel`
    print(auto_model.__class__.__name__)
    assert auto_model.__class__.__name__ == "DecisionTransformerGPT2Model"
```

Enhance `AutoConfig`

Comments:
_The documentation is not available anymore as the PR was closed or merged._

Close as this is not an issue.