configuration_auto.py 41.3 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# coding=utf-8
# Copyright 2018 The HuggingFace Inc. team.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
Sylvain Gugger's avatar
Sylvain Gugger committed
15
""" Auto Config class."""
16
import importlib
17
import re
18
import warnings
19
from collections import OrderedDict
20
from typing import List, Union
21

Sylvain Gugger's avatar
Sylvain Gugger committed
22
from ...configuration_utils import PretrainedConfig
23
from ...dynamic_module_utils import get_class_from_dynamic_module
24
from ...utils import CONFIG_NAME, logging
Aymeric Augustin's avatar
Aymeric Augustin committed
25

26

27
28
logger = logging.get_logger(__name__)

29
30
31
CONFIG_MAPPING_NAMES = OrderedDict(
    [
        # Add configs here
32
        ("albert", "AlbertConfig"),
33
        ("align", "AlignConfig"),
Jongjyh's avatar
Jongjyh committed
34
        ("altclip", "AltCLIPConfig"),
35
        ("audio-spectrogram-transformer", "ASTConfig"),
36
        ("bart", "BartConfig"),
37
        ("beit", "BeitConfig"),
38
39
40
41
        ("bert", "BertConfig"),
        ("bert-generation", "BertGenerationConfig"),
        ("big_bird", "BigBirdConfig"),
        ("bigbird_pegasus", "BigBirdPegasusConfig"),
Kamal Raj Kanakarajan's avatar
Kamal Raj Kanakarajan committed
42
        ("biogpt", "BioGptConfig"),
NielsRogge's avatar
NielsRogge committed
43
        ("bit", "BitConfig"),
44
45
        ("blenderbot", "BlenderbotConfig"),
        ("blenderbot-small", "BlenderbotSmallConfig"),
Younes Belkada's avatar
Younes Belkada committed
46
        ("blip", "BlipConfig"),
NielsRogge's avatar
NielsRogge committed
47
        ("blip-2", "Blip2Config"),
Younes Belkada's avatar
Younes Belkada committed
48
        ("bloom", "BloomConfig"),
49
        ("bridgetower", "BridgeTowerConfig"),
50
        ("camembert", "CamembertConfig"),
51
        ("canine", "CanineConfig"),
52
        ("chinese_clip", "ChineseCLIPConfig"),
53
        ("clap", "ClapConfig"),
54
        ("clip", "CLIPConfig"),
NielsRogge's avatar
NielsRogge committed
55
        ("clipseg", "CLIPSegConfig"),
rooa's avatar
rooa committed
56
        ("codegen", "CodeGenConfig"),
57
        ("conditional_detr", "ConditionalDetrConfig"),
58
59
        ("convbert", "ConvBertConfig"),
        ("convnext", "ConvNextConfig"),
Alara Dirik's avatar
Alara Dirik committed
60
        ("convnextv2", "ConvNextV2Config"),
61
        ("cpmant", "CpmAntConfig"),
62
        ("ctrl", "CTRLConfig"),
NielsRogge's avatar
NielsRogge committed
63
        ("cvt", "CvtConfig"),
64
65
66
67
68
69
        ("data2vec-audio", "Data2VecAudioConfig"),
        ("data2vec-text", "Data2VecTextConfig"),
        ("data2vec-vision", "Data2VecVisionConfig"),
        ("deberta", "DebertaConfig"),
        ("deberta-v2", "DebertaV2Config"),
        ("decision_transformer", "DecisionTransformerConfig"),
NielsRogge's avatar
NielsRogge committed
70
        ("deformable_detr", "DeformableDetrConfig"),
71
        ("deit", "DeiTConfig"),
NielsRogge's avatar
NielsRogge committed
72
        ("deta", "DetaConfig"),
73
        ("detr", "DetrConfig"),
74
        ("dinat", "DinatConfig"),
75
        ("distilbert", "DistilBertConfig"),
NielsRogge's avatar
NielsRogge committed
76
        ("donut-swin", "DonutSwinConfig"),
77
78
        ("dpr", "DPRConfig"),
        ("dpt", "DPTConfig"),
79
        ("efficientformer", "EfficientFormerConfig"),
Alara Dirik's avatar
Alara Dirik committed
80
        ("efficientnet", "EfficientNetConfig"),
81
82
        ("electra", "ElectraConfig"),
        ("encoder-decoder", "EncoderDecoderConfig"),
83
        ("ernie", "ErnieConfig"),
84
        ("ernie_m", "ErnieMConfig"),
85
        ("esm", "EsmConfig"),
86
87
88
        ("flaubert", "FlaubertConfig"),
        ("flava", "FlavaConfig"),
        ("fnet", "FNetConfig"),
NielsRogge's avatar
NielsRogge committed
89
        ("focalnet", "FocalNetConfig"),
90
91
        ("fsmt", "FSMTConfig"),
        ("funnel", "FunnelConfig"),
92
        ("git", "GitConfig"),
93
        ("glpn", "GLPNConfig"),
94
        ("gpt-sw3", "GPT2Config"),
95
        ("gpt2", "GPT2Config"),
96
        ("gpt_bigcode", "GPTBigCodeConfig"),
97
        ("gpt_neo", "GPTNeoConfig"),
98
        ("gpt_neox", "GPTNeoXConfig"),
99
        ("gpt_neox_japanese", "GPTNeoXJapaneseConfig"),
100
        ("gptj", "GPTJConfig"),
101
        ("gptsan-japanese", "GPTSanJapaneseConfig"),
102
        ("graphormer", "GraphormerConfig"),
103
        ("groupvit", "GroupViTConfig"),
104
        ("hubert", "HubertConfig"),
105
        ("ibert", "IBertConfig"),
106
        ("imagegpt", "ImageGPTConfig"),
107
        ("informer", "InformerConfig"),
108
        ("jukebox", "JukeboxConfig"),
109
110
        ("layoutlm", "LayoutLMConfig"),
        ("layoutlmv2", "LayoutLMv2Config"),
NielsRogge's avatar
NielsRogge committed
111
        ("layoutlmv3", "LayoutLMv3Config"),
112
        ("led", "LEDConfig"),
113
        ("levit", "LevitConfig"),
NielsRogge's avatar
NielsRogge committed
114
        ("lilt", "LiltConfig"),
Jason Phang's avatar
Jason Phang committed
115
        ("llama", "LlamaConfig"),
116
        ("longformer", "LongformerConfig"),
Daniel Stancl's avatar
Daniel Stancl committed
117
        ("longt5", "LongT5Config"),
118
119
120
        ("luke", "LukeConfig"),
        ("lxmert", "LxmertConfig"),
        ("m2m_100", "M2M100Config"),
121
        ("marian", "MarianConfig"),
NielsRogge's avatar
NielsRogge committed
122
        ("markuplm", "MarkupLMConfig"),
Alara Dirik's avatar
Alara Dirik committed
123
        ("mask2former", "Mask2FormerConfig"),
124
        ("maskformer", "MaskFormerConfig"),
125
        ("maskformer-swin", "MaskFormerSwinConfig"),
126
        ("mbart", "MBartConfig"),
Chan Woo Kim's avatar
Chan Woo Kim committed
127
        ("mctct", "MCTCTConfig"),
128
        ("mega", "MegaConfig"),
129
        ("megatron-bert", "MegatronBertConfig"),
wangpeng's avatar
wangpeng committed
130
        ("mgp-str", "MgpstrConfig"),
131
        ("mobilebert", "MobileBertConfig"),
132
        ("mobilenet_v1", "MobileNetV1Config"),
133
        ("mobilenet_v2", "MobileNetV2Config"),
134
        ("mobilevit", "MobileViTConfig"),
135
        ("mpnet", "MPNetConfig"),
136
        ("mt5", "MT5Config"),
StevenTang1998's avatar
StevenTang1998 committed
137
        ("mvp", "MvpConfig"),
138
        ("nat", "NatConfig"),
139
        ("nezha", "NezhaConfig"),
140
        ("nllb-moe", "NllbMoeConfig"),
141
        ("nystromformer", "NystromformerConfig"),
Jitesh Jain's avatar
Jitesh Jain committed
142
        ("oneformer", "OneFormerConfig"),
143
        ("open-llama", "OpenLlamaConfig"),
144
        ("openai-gpt", "OpenAIGPTConfig"),
Younes Belkada's avatar
Younes Belkada committed
145
        ("opt", "OPTConfig"),
146
        ("owlvit", "OwlViTConfig"),
147
        ("pegasus", "PegasusConfig"),
Jason Phang's avatar
Jason Phang committed
148
        ("pegasus_x", "PegasusXConfig"),
149
        ("perceiver", "PerceiverConfig"),
Younes Belkada's avatar
Younes Belkada committed
150
        ("pix2struct", "Pix2StructConfig"),
151
152
153
154
155
156
        ("plbart", "PLBartConfig"),
        ("poolformer", "PoolFormerConfig"),
        ("prophetnet", "ProphetNetConfig"),
        ("qdqbert", "QDQBertConfig"),
        ("rag", "RagConfig"),
        ("realm", "RealmConfig"),
157
        ("reformer", "ReformerConfig"),
158
159
160
161
        ("regnet", "RegNetConfig"),
        ("rembert", "RemBertConfig"),
        ("resnet", "ResNetConfig"),
        ("retribert", "RetriBertConfig"),
162
        ("roberta", "RobertaConfig"),
163
        ("roberta-prelayernorm", "RobertaPreLayerNormConfig"),
Weiwe Shi's avatar
Weiwe Shi committed
164
        ("roc_bert", "RoCBertConfig"),
165
        ("roformer", "RoFormerConfig"),
166
        ("sam", "SamConfig"),
167
168
169
        ("segformer", "SegformerConfig"),
        ("sew", "SEWConfig"),
        ("sew-d", "SEWDConfig"),
170
        ("speech-encoder-decoder", "SpeechEncoderDecoderConfig"),
171
172
        ("speech_to_text", "Speech2TextConfig"),
        ("speech_to_text_2", "Speech2Text2Config"),
173
        ("speecht5", "SpeechT5Config"),
Ori Ram's avatar
Ori Ram committed
174
        ("splinter", "SplinterConfig"),
175
176
        ("squeezebert", "SqueezeBertConfig"),
        ("swin", "SwinConfig"),
NielsRogge's avatar
NielsRogge committed
177
        ("swin2sr", "Swin2SRConfig"),
178
        ("swinv2", "Swinv2Config"),
179
        ("switch_transformers", "SwitchTransformersConfig"),
180
        ("t5", "T5Config"),
181
        ("table-transformer", "TableTransformerConfig"),
182
        ("tapas", "TapasConfig"),
183
        ("time_series_transformer", "TimeSeriesTransformerConfig"),
184
        ("timesformer", "TimesformerConfig"),
Carl's avatar
Carl committed
185
        ("trajectory_transformer", "TrajectoryTransformerConfig"),
186
187
        ("transfo-xl", "TransfoXLConfig"),
        ("trocr", "TrOCRConfig"),
Zineng Tang's avatar
Zineng Tang committed
188
        ("tvlt", "TvltConfig"),
189
        ("unispeech", "UniSpeechConfig"),
190
        ("unispeech-sat", "UniSpeechSatConfig"),
NielsRogge's avatar
NielsRogge committed
191
        ("upernet", "UperNetConfig"),
192
        ("van", "VanConfig"),
NielsRogge's avatar
NielsRogge committed
193
        ("videomae", "VideoMAEConfig"),
194
195
196
197
198
        ("vilt", "ViltConfig"),
        ("vision-encoder-decoder", "VisionEncoderDecoderConfig"),
        ("vision-text-dual-encoder", "VisionTextDualEncoderConfig"),
        ("visual_bert", "VisualBertConfig"),
        ("vit", "ViTConfig"),
NielsRogge's avatar
NielsRogge committed
199
        ("vit_hybrid", "ViTHybridConfig"),
200
        ("vit_mae", "ViTMAEConfig"),
201
        ("vit_msn", "ViTMSNConfig"),
202
        ("wav2vec2", "Wav2Vec2Config"),
203
        ("wav2vec2-conformer", "Wav2Vec2ConformerConfig"),
Patrick von Platen's avatar
Patrick von Platen committed
204
        ("wavlm", "WavLMConfig"),
205
        ("whisper", "WhisperConfig"),
NielsRogge's avatar
NielsRogge committed
206
        ("xclip", "XCLIPConfig"),
207
208
209
210
211
212
        ("xglm", "XGLMConfig"),
        ("xlm", "XLMConfig"),
        ("xlm-prophetnet", "XLMProphetNetConfig"),
        ("xlm-roberta", "XLMRobertaConfig"),
        ("xlm-roberta-xl", "XLMRobertaXLConfig"),
        ("xlnet", "XLNetConfig"),
Jannis Vamvas's avatar
Jannis Vamvas committed
213
        ("xmod", "XmodConfig"),
214
215
        ("yolos", "YolosConfig"),
        ("yoso", "YosoConfig"),
216
217
    ]
)
218

219
CONFIG_ARCHIVE_MAP_MAPPING_NAMES = OrderedDict(
220
    [
NielsRogge's avatar
NielsRogge committed
221
        # Add archive maps here)
222
        ("albert", "ALBERT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
223
        ("align", "ALIGN_PRETRAINED_CONFIG_ARCHIVE_MAP"),
Jongjyh's avatar
Jongjyh committed
224
        ("altclip", "ALTCLIP_PRETRAINED_CONFIG_ARCHIVE_MAP"),
225
        ("audio-spectrogram-transformer", "AUDIO_SPECTROGRAM_TRANSFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
226
        ("bart", "BART_PRETRAINED_CONFIG_ARCHIVE_MAP"),
227
        ("beit", "BEIT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
228
229
230
        ("bert", "BERT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("big_bird", "BIG_BIRD_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("bigbird_pegasus", "BIGBIRD_PEGASUS_PRETRAINED_CONFIG_ARCHIVE_MAP"),
Kamal Raj Kanakarajan's avatar
Kamal Raj Kanakarajan committed
231
        ("biogpt", "BIOGPT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
NielsRogge's avatar
NielsRogge committed
232
        ("bit", "BIT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
233
234
        ("blenderbot", "BLENDERBOT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("blenderbot-small", "BLENDERBOT_SMALL_PRETRAINED_CONFIG_ARCHIVE_MAP"),
Younes Belkada's avatar
Younes Belkada committed
235
        ("blip", "BLIP_PRETRAINED_CONFIG_ARCHIVE_MAP"),
NielsRogge's avatar
NielsRogge committed
236
        ("blip-2", "BLIP_2_PRETRAINED_CONFIG_ARCHIVE_MAP"),
Younes Belkada's avatar
Younes Belkada committed
237
        ("bloom", "BLOOM_PRETRAINED_CONFIG_ARCHIVE_MAP"),
238
        ("bridgetower", "BRIDGETOWER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
239
        ("camembert", "CAMEMBERT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
240
        ("canine", "CANINE_PRETRAINED_CONFIG_ARCHIVE_MAP"),
241
        ("chinese_clip", "CHINESE_CLIP_PRETRAINED_CONFIG_ARCHIVE_MAP"),
242
        ("clap", "CLAP_PRETRAINED_MODEL_ARCHIVE_LIST"),
243
        ("clip", "CLIP_PRETRAINED_CONFIG_ARCHIVE_MAP"),
NielsRogge's avatar
NielsRogge committed
244
        ("clipseg", "CLIPSEG_PRETRAINED_CONFIG_ARCHIVE_MAP"),
rooa's avatar
rooa committed
245
        ("codegen", "CODEGEN_PRETRAINED_CONFIG_ARCHIVE_MAP"),
246
        ("conditional_detr", "CONDITIONAL_DETR_PRETRAINED_CONFIG_ARCHIVE_MAP"),
247
        ("convbert", "CONVBERT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
248
        ("convnext", "CONVNEXT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
Alara Dirik's avatar
Alara Dirik committed
249
        ("convnextv2", "CONVNEXTV2_PRETRAINED_CONFIG_ARCHIVE_MAP"),
250
        ("cpmant", "CPMANT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
251
        ("ctrl", "CTRL_PRETRAINED_CONFIG_ARCHIVE_MAP"),
NielsRogge's avatar
NielsRogge committed
252
        ("cvt", "CVT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
253
        ("data2vec-audio", "DATA2VEC_AUDIO_PRETRAINED_CONFIG_ARCHIVE_MAP"),
254
255
256
257
        ("data2vec-text", "DATA2VEC_TEXT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("data2vec-vision", "DATA2VEC_VISION_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("deberta", "DEBERTA_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("deberta-v2", "DEBERTA_V2_PRETRAINED_CONFIG_ARCHIVE_MAP"),
NielsRogge's avatar
NielsRogge committed
258
        ("deformable_detr", "DEFORMABLE_DETR_PRETRAINED_CONFIG_ARCHIVE_MAP"),
259
        ("deit", "DEIT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
NielsRogge's avatar
NielsRogge committed
260
        ("deta", "DETA_PRETRAINED_CONFIG_ARCHIVE_MAP"),
261
        ("detr", "DETR_PRETRAINED_CONFIG_ARCHIVE_MAP"),
262
        ("dinat", "DINAT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
263
        ("distilbert", "DISTILBERT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
NielsRogge's avatar
NielsRogge committed
264
        ("donut-swin", "DONUT_SWIN_PRETRAINED_CONFIG_ARCHIVE_MAP"),
265
266
        ("dpr", "DPR_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("dpt", "DPT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
267
        ("efficientformer", "EFFICIENTFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
Alara Dirik's avatar
Alara Dirik committed
268
        ("efficientnet", "EFFICIENTNET_PRETRAINED_CONFIG_ARCHIVE_MAP"),
269
        ("electra", "ELECTRA_PRETRAINED_CONFIG_ARCHIVE_MAP"),
270
        ("ernie", "ERNIE_PRETRAINED_CONFIG_ARCHIVE_MAP"),
271
        ("ernie_m", "ERNIE_M_PRETRAINED_CONFIG_ARCHIVE_MAP"),
272
        ("esm", "ESM_PRETRAINED_CONFIG_ARCHIVE_MAP"),
273
        ("flaubert", "FLAUBERT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
274
275
        ("flava", "FLAVA_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("fnet", "FNET_PRETRAINED_CONFIG_ARCHIVE_MAP"),
NielsRogge's avatar
NielsRogge committed
276
        ("focalnet", "FOCALNET_PRETRAINED_CONFIG_ARCHIVE_MAP"),
277
278
        ("fsmt", "FSMT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("funnel", "FUNNEL_PRETRAINED_CONFIG_ARCHIVE_MAP"),
279
        ("git", "GIT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
280
281
        ("glpn", "GLPN_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("gpt2", "GPT2_PRETRAINED_CONFIG_ARCHIVE_MAP"),
282
        ("gpt_bigcode", "GPT_BIGCODE_PRETRAINED_CONFIG_ARCHIVE_MAP"),
283
        ("gpt_neo", "GPT_NEO_PRETRAINED_CONFIG_ARCHIVE_MAP"),
284
        ("gpt_neox", "GPT_NEOX_PRETRAINED_CONFIG_ARCHIVE_MAP"),
285
        ("gpt_neox_japanese", "GPT_NEOX_JAPANESE_PRETRAINED_CONFIG_ARCHIVE_MAP"),
286
        ("gptj", "GPTJ_PRETRAINED_CONFIG_ARCHIVE_MAP"),
287
        ("gptsan-japanese", "GPTSAN_JAPANESE_PRETRAINED_CONFIG_ARCHIVE_MAP"),
288
        ("graphormer", "GRAPHORMER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
289
        ("groupvit", "GROUPVIT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
290
291
292
        ("hubert", "HUBERT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("ibert", "IBERT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("imagegpt", "IMAGEGPT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
293
        ("informer", "INFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
294
        ("jukebox", "JUKEBOX_PRETRAINED_CONFIG_ARCHIVE_MAP"),
295
        ("layoutlm", "LAYOUTLM_PRETRAINED_CONFIG_ARCHIVE_MAP"),
296
        ("layoutlmv2", "LAYOUTLMV2_PRETRAINED_CONFIG_ARCHIVE_MAP"),
NielsRogge's avatar
NielsRogge committed
297
        ("layoutlmv3", "LAYOUTLMV3_PRETRAINED_CONFIG_ARCHIVE_MAP"),
298
        ("led", "LED_PRETRAINED_CONFIG_ARCHIVE_MAP"),
299
        ("levit", "LEVIT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
NielsRogge's avatar
NielsRogge committed
300
        ("lilt", "LILT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
Jason Phang's avatar
Jason Phang committed
301
        ("llama", "LLAMA_PRETRAINED_CONFIG_ARCHIVE_MAP"),
302
        ("longformer", "LONGFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
Daniel Stancl's avatar
Daniel Stancl committed
303
        ("longt5", "LONGT5_PRETRAINED_CONFIG_ARCHIVE_MAP"),
304
305
306
        ("luke", "LUKE_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("lxmert", "LXMERT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("m2m_100", "M2M_100_PRETRAINED_CONFIG_ARCHIVE_MAP"),
NielsRogge's avatar
NielsRogge committed
307
        ("markuplm", "MARKUPLM_PRETRAINED_CONFIG_ARCHIVE_MAP"),
Alara Dirik's avatar
Alara Dirik committed
308
        ("mask2former", "MASK2FORMER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
309
310
        ("maskformer", "MASKFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("mbart", "MBART_PRETRAINED_CONFIG_ARCHIVE_MAP"),
Chan Woo Kim's avatar
Chan Woo Kim committed
311
        ("mctct", "MCTCT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
312
        ("mega", "MEGA_PRETRAINED_CONFIG_ARCHIVE_MAP"),
313
        ("megatron-bert", "MEGATRON_BERT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
wangpeng's avatar
wangpeng committed
314
        ("mgp-str", "MGP_STR_PRETRAINED_CONFIG_ARCHIVE_MAP"),
315
        ("mobilenet_v1", "MOBILENET_V1_PRETRAINED_CONFIG_ARCHIVE_MAP"),
316
        ("mobilenet_v2", "MOBILENET_V2_PRETRAINED_CONFIG_ARCHIVE_MAP"),
317
        ("mobilevit", "MOBILEVIT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
318
        ("mpnet", "MPNET_PRETRAINED_CONFIG_ARCHIVE_MAP"),
StevenTang1998's avatar
StevenTang1998 committed
319
        ("mvp", "MVP_PRETRAINED_CONFIG_ARCHIVE_MAP"),
320
        ("nat", "NAT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
321
        ("nezha", "NEZHA_PRETRAINED_CONFIG_ARCHIVE_MAP"),
322
        ("nllb-moe", "NLLB_MOE_PRETRAINED_CONFIG_ARCHIVE_MAP"),
323
        ("nystromformer", "NYSTROMFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
Jitesh Jain's avatar
Jitesh Jain committed
324
        ("oneformer", "ONEFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
325
        ("open-llama", "OPEN_LLAMA_PRETRAINED_CONFIG_ARCHIVE_MAP"),
326
327
        ("openai-gpt", "OPENAI_GPT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("opt", "OPT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
328
        ("owlvit", "OWLVIT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
329
        ("pegasus", "PEGASUS_PRETRAINED_CONFIG_ARCHIVE_MAP"),
Jason Phang's avatar
Jason Phang committed
330
        ("pegasus_x", "PEGASUS_X_PRETRAINED_CONFIG_ARCHIVE_MAP"),
331
        ("perceiver", "PERCEIVER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
Younes Belkada's avatar
Younes Belkada committed
332
        ("pix2struct", "PIX2STRUCT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
333
334
335
336
337
338
339
340
341
342
        ("plbart", "PLBART_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("poolformer", "POOLFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("prophetnet", "PROPHETNET_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("qdqbert", "QDQBERT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("realm", "REALM_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("regnet", "REGNET_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("rembert", "REMBERT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("resnet", "RESNET_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("retribert", "RETRIBERT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("roberta", "ROBERTA_PRETRAINED_CONFIG_ARCHIVE_MAP"),
343
        ("roberta-prelayernorm", "ROBERTA_PRELAYERNORM_PRETRAINED_CONFIG_ARCHIVE_MAP"),
Weiwe Shi's avatar
Weiwe Shi committed
344
        ("roc_bert", "ROC_BERT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
345
        ("roformer", "ROFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
346
        ("sam", "SAM_PRETRAINED_CONFIG_ARCHIVE_MAP"),
347
        ("segformer", "SEGFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
348
        ("sew", "SEW_PRETRAINED_CONFIG_ARCHIVE_MAP"),
349
350
351
        ("sew-d", "SEW_D_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("speech_to_text", "SPEECH_TO_TEXT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("speech_to_text_2", "SPEECH_TO_TEXT_2_PRETRAINED_CONFIG_ARCHIVE_MAP"),
352
        ("speecht5", "SPEECHT5_PRETRAINED_CONFIG_ARCHIVE_MAP"),
353
354
355
        ("splinter", "SPLINTER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("squeezebert", "SQUEEZEBERT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("swin", "SWIN_PRETRAINED_CONFIG_ARCHIVE_MAP"),
NielsRogge's avatar
NielsRogge committed
356
        ("swin2sr", "SWIN2SR_PRETRAINED_CONFIG_ARCHIVE_MAP"),
357
        ("swinv2", "SWINV2_PRETRAINED_CONFIG_ARCHIVE_MAP"),
358
        ("switch_transformers", "SWITCH_TRANSFORMERS_PRETRAINED_CONFIG_ARCHIVE_MAP"),
359
        ("t5", "T5_PRETRAINED_CONFIG_ARCHIVE_MAP"),
360
        ("table-transformer", "TABLE_TRANSFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
361
        ("tapas", "TAPAS_PRETRAINED_CONFIG_ARCHIVE_MAP"),
362
        ("time_series_transformer", "TIME_SERIES_TRANSFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
363
        ("timesformer", "TIMESFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
364
        ("transfo-xl", "TRANSFO_XL_PRETRAINED_CONFIG_ARCHIVE_MAP"),
Zineng Tang's avatar
Zineng Tang committed
365
        ("tvlt", "TVLT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
366
        ("unispeech", "UNISPEECH_PRETRAINED_CONFIG_ARCHIVE_MAP"),
367
368
        ("unispeech-sat", "UNISPEECH_SAT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("van", "VAN_PRETRAINED_CONFIG_ARCHIVE_MAP"),
NielsRogge's avatar
NielsRogge committed
369
        ("videomae", "VIDEOMAE_PRETRAINED_CONFIG_ARCHIVE_MAP"),
370
371
372
        ("vilt", "VILT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("visual_bert", "VISUAL_BERT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("vit", "VIT_PRETRAINED_CONFIG_ARCHIVE_MAP"),
NielsRogge's avatar
NielsRogge committed
373
        ("vit_hybrid", "VIT_HYBRID_PRETRAINED_CONFIG_ARCHIVE_MAP"),
374
        ("vit_mae", "VIT_MAE_PRETRAINED_CONFIG_ARCHIVE_MAP"),
375
        ("vit_msn", "VIT_MSN_PRETRAINED_CONFIG_ARCHIVE_MAP"),
376
        ("wav2vec2", "WAV_2_VEC_2_PRETRAINED_CONFIG_ARCHIVE_MAP"),
377
        ("wav2vec2-conformer", "WAV2VEC2_CONFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
378
        ("whisper", "WHISPER_PRETRAINED_CONFIG_ARCHIVE_MAP"),
379
        ("xclip", "XCLIP_PRETRAINED_CONFIG_ARCHIVE_MAP"),
380
381
382
383
384
        ("xglm", "XGLM_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("xlm", "XLM_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("xlm-prophetnet", "XLM_PROPHETNET_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("xlm-roberta", "XLM_ROBERTA_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("xlnet", "XLNET_PRETRAINED_CONFIG_ARCHIVE_MAP"),
Jannis Vamvas's avatar
Jannis Vamvas committed
385
        ("xmod", "XMOD_PRETRAINED_CONFIG_ARCHIVE_MAP"),
386
387
        ("yolos", "YOLOS_PRETRAINED_CONFIG_ARCHIVE_MAP"),
        ("yoso", "YOSO_PRETRAINED_CONFIG_ARCHIVE_MAP"),
388
389
390
391
392
    ]
)

MODEL_NAMES_MAPPING = OrderedDict(
    [
393
        # Add full (and cased) model names here
394
        ("albert", "ALBERT"),
395
        ("align", "ALIGN"),
Jongjyh's avatar
Jongjyh committed
396
        ("altclip", "AltCLIP"),
397
        ("audio-spectrogram-transformer", "Audio Spectrogram Transformer"),
398
399
400
        ("bart", "BART"),
        ("barthez", "BARThez"),
        ("bartpho", "BARTpho"),
NielsRogge's avatar
NielsRogge committed
401
        ("beit", "BEiT"),
402
403
404
        ("bert", "BERT"),
        ("bert-generation", "Bert Generation"),
        ("bert-japanese", "BertJapanese"),
405
        ("bertweet", "BERTweet"),
406
        ("big_bird", "BigBird"),
407
        ("bigbird_pegasus", "BigBird-Pegasus"),
Kamal Raj Kanakarajan's avatar
Kamal Raj Kanakarajan committed
408
        ("biogpt", "BioGpt"),
NielsRogge's avatar
NielsRogge committed
409
        ("bit", "BiT"),
410
411
        ("blenderbot", "Blenderbot"),
        ("blenderbot-small", "BlenderbotSmall"),
Younes Belkada's avatar
Younes Belkada committed
412
        ("blip", "BLIP"),
NielsRogge's avatar
NielsRogge committed
413
        ("blip-2", "BLIP-2"),
Younes Belkada's avatar
Younes Belkada committed
414
        ("bloom", "BLOOM"),
415
        ("bort", "BORT"),
416
        ("bridgetower", "BridgeTower"),
417
418
        ("byt5", "ByT5"),
        ("camembert", "CamemBERT"),
419
        ("canine", "CANINE"),
420
        ("chinese_clip", "Chinese-CLIP"),
421
        ("clap", "CLAP"),
Suraj Patil's avatar
Suraj Patil committed
422
        ("clip", "CLIP"),
NielsRogge's avatar
NielsRogge committed
423
        ("clipseg", "CLIPSeg"),
rooa's avatar
rooa committed
424
        ("codegen", "CodeGen"),
425
        ("conditional_detr", "Conditional DETR"),
426
        ("convbert", "ConvBERT"),
427
        ("convnext", "ConvNeXT"),
Alara Dirik's avatar
Alara Dirik committed
428
        ("convnextv2", "ConvNeXTV2"),
429
        ("cpm", "CPM"),
430
        ("cpmant", "CPM-Ant"),
431
        ("ctrl", "CTRL"),
NielsRogge's avatar
NielsRogge committed
432
        ("cvt", "CvT"),
433
434
435
436
437
438
        ("data2vec-audio", "Data2VecAudio"),
        ("data2vec-text", "Data2VecText"),
        ("data2vec-vision", "Data2VecVision"),
        ("deberta", "DeBERTa"),
        ("deberta-v2", "DeBERTa-v2"),
        ("decision_transformer", "Decision Transformer"),
NielsRogge's avatar
NielsRogge committed
439
        ("deformable_detr", "Deformable DETR"),
NielsRogge's avatar
NielsRogge committed
440
        ("deit", "DeiT"),
441
        ("deplot", "DePlot"),
NielsRogge's avatar
NielsRogge committed
442
        ("deta", "DETA"),
NielsRogge's avatar
NielsRogge committed
443
        ("detr", "DETR"),
444
        ("dialogpt", "DialoGPT"),
445
        ("dinat", "DiNAT"),
446
447
        ("distilbert", "DistilBERT"),
        ("dit", "DiT"),
NielsRogge's avatar
NielsRogge committed
448
        ("donut-swin", "DonutSwin"),
449
450
        ("dpr", "DPR"),
        ("dpt", "DPT"),
451
        ("efficientformer", "EfficientFormer"),
Alara Dirik's avatar
Alara Dirik committed
452
        ("efficientnet", "EfficientNet"),
453
454
        ("electra", "ELECTRA"),
        ("encoder-decoder", "Encoder decoder"),
455
        ("ernie", "ERNIE"),
456
        ("ernie_m", "ErnieM"),
457
        ("esm", "ESM"),
458
        ("flan-t5", "FLAN-T5"),
Arthur's avatar
Arthur committed
459
        ("flan-ul2", "FLAN-UL2"),
460
        ("flaubert", "FlauBERT"),
461
        ("flava", "FLAVA"),
462
        ("fnet", "FNet"),
NielsRogge's avatar
NielsRogge committed
463
        ("focalnet", "FocalNet"),
464
465
        ("fsmt", "FairSeq Machine-Translation"),
        ("funnel", "Funnel Transformer"),
466
        ("git", "GIT"),
467
        ("glpn", "GLPN"),
468
        ("gpt-sw3", "GPT-Sw3"),
469
        ("gpt2", "OpenAI GPT-2"),
470
        ("gpt_bigcode", "GPTBigCode"),
Suraj Patil's avatar
Suraj Patil committed
471
        ("gpt_neo", "GPT Neo"),
472
        ("gpt_neox", "GPT NeoX"),
473
        ("gpt_neox_japanese", "GPT NeoX Japanese"),
474
        ("gptj", "GPT-J"),
475
        ("gptsan-japanese", "GPTSAN-japanese"),
476
        ("graphormer", "Graphormer"),
477
        ("groupvit", "GroupViT"),
478
479
        ("herbert", "HerBERT"),
        ("hubert", "Hubert"),
Sehoon Kim's avatar
Sehoon Kim committed
480
        ("ibert", "I-BERT"),
481
        ("imagegpt", "ImageGPT"),
482
        ("informer", "Informer"),
483
        ("jukebox", "Jukebox"),
484
485
        ("layoutlm", "LayoutLM"),
        ("layoutlmv2", "LayoutLMv2"),
NielsRogge's avatar
NielsRogge committed
486
        ("layoutlmv3", "LayoutLMv3"),
487
488
        ("layoutxlm", "LayoutXLM"),
        ("led", "LED"),
489
        ("levit", "LeViT"),
NielsRogge's avatar
NielsRogge committed
490
        ("lilt", "LiLT"),
Jason Phang's avatar
Jason Phang committed
491
        ("llama", "LLaMA"),
492
        ("longformer", "Longformer"),
Daniel Stancl's avatar
Daniel Stancl committed
493
        ("longt5", "LongT5"),
494
495
496
        ("luke", "LUKE"),
        ("lxmert", "LXMERT"),
        ("m2m_100", "M2M100"),
497
        ("marian", "Marian"),
NielsRogge's avatar
NielsRogge committed
498
        ("markuplm", "MarkupLM"),
Alara Dirik's avatar
Alara Dirik committed
499
        ("mask2former", "Mask2Former"),
500
        ("maskformer", "MaskFormer"),
501
        ("maskformer-swin", "MaskFormerSwin"),
502
        ("matcha", "MatCha"),
503
        ("mbart", "mBART"),
504
        ("mbart50", "mBART-50"),
Chan Woo Kim's avatar
Chan Woo Kim committed
505
        ("mctct", "M-CTC-T"),
506
        ("mega", "MEGA"),
507
508
        ("megatron-bert", "Megatron-BERT"),
        ("megatron_gpt2", "Megatron-GPT2"),
wangpeng's avatar
wangpeng committed
509
        ("mgp-str", "MGP-STR"),
510
511
        ("mluke", "mLUKE"),
        ("mobilebert", "MobileBERT"),
512
        ("mobilenet_v1", "MobileNetV1"),
513
        ("mobilenet_v2", "MobileNetV2"),
514
        ("mobilevit", "MobileViT"),
515
        ("mpnet", "MPNet"),
516
        ("mt5", "MT5"),
StevenTang1998's avatar
StevenTang1998 committed
517
        ("mvp", "MVP"),
518
        ("nat", "NAT"),
519
        ("nezha", "Nezha"),
Lysandre Debut's avatar
Lysandre Debut committed
520
        ("nllb", "NLLB"),
521
        ("nllb-moe", "NLLB-MOE"),
522
        ("nystromformer", "Nystr枚mformer"),
Jitesh Jain's avatar
Jitesh Jain committed
523
        ("oneformer", "OneFormer"),
524
        ("open-llama", "OpenLlama"),
525
        ("openai-gpt", "OpenAI GPT"),
Younes Belkada's avatar
Younes Belkada committed
526
        ("opt", "OPT"),
527
        ("owlvit", "OWL-ViT"),
528
        ("pegasus", "Pegasus"),
Jason Phang's avatar
Jason Phang committed
529
        ("pegasus_x", "PEGASUS-X"),
530
531
        ("perceiver", "Perceiver"),
        ("phobert", "PhoBERT"),
Younes Belkada's avatar
Younes Belkada committed
532
        ("pix2struct", "Pix2Struct"),
533
534
535
536
537
        ("plbart", "PLBart"),
        ("poolformer", "PoolFormer"),
        ("prophetnet", "ProphetNet"),
        ("qdqbert", "QDQBert"),
        ("rag", "RAG"),
538
        ("realm", "REALM"),
539
        ("reformer", "Reformer"),
540
541
542
543
        ("regnet", "RegNet"),
        ("rembert", "RemBERT"),
        ("resnet", "ResNet"),
        ("retribert", "RetriBERT"),
544
        ("roberta", "RoBERTa"),
545
        ("roberta-prelayernorm", "RoBERTa-PreLayerNorm"),
Weiwe Shi's avatar
Weiwe Shi committed
546
        ("roc_bert", "RoCBert"),
547
        ("roformer", "RoFormer"),
548
        ("sam", "SAM"),
549
550
551
        ("segformer", "SegFormer"),
        ("sew", "SEW"),
        ("sew-d", "SEW-D"),
552
        ("speech-encoder-decoder", "Speech Encoder decoder"),
553
554
        ("speech_to_text", "Speech2Text"),
        ("speech_to_text_2", "Speech2Text2"),
555
        ("speecht5", "SpeechT5"),
Ori Ram's avatar
Ori Ram committed
556
        ("splinter", "Splinter"),
557
        ("squeezebert", "SqueezeBERT"),
558
        ("swin", "Swin Transformer"),
NielsRogge's avatar
NielsRogge committed
559
        ("swin2sr", "Swin2SR"),
560
        ("swinv2", "Swin Transformer V2"),
561
        ("switch_transformers", "SwitchTransformers"),
562
563
        ("t5", "T5"),
        ("t5v1.1", "T5v1.1"),
564
        ("table-transformer", "Table Transformer"),
565
566
        ("tapas", "TAPAS"),
        ("tapex", "TAPEX"),
567
        ("time_series_transformer", "Time Series Transformer"),
568
        ("timesformer", "TimeSformer"),
Carl's avatar
Carl committed
569
        ("trajectory_transformer", "Trajectory Transformer"),
570
571
        ("transfo-xl", "Transformer-XL"),
        ("trocr", "TrOCR"),
Zineng Tang's avatar
Zineng Tang committed
572
        ("tvlt", "TVLT"),
573
        ("ul2", "UL2"),
574
        ("unispeech", "UniSpeech"),
575
        ("unispeech-sat", "UniSpeechSat"),
NielsRogge's avatar
NielsRogge committed
576
        ("upernet", "UPerNet"),
577
        ("van", "VAN"),
NielsRogge's avatar
NielsRogge committed
578
        ("videomae", "VideoMAE"),
579
580
581
        ("vilt", "ViLT"),
        ("vision-encoder-decoder", "Vision Encoder decoder"),
        ("vision-text-dual-encoder", "VisionTextDualEncoder"),
582
        ("visual_bert", "VisualBERT"),
583
        ("vit", "ViT"),
NielsRogge's avatar
NielsRogge committed
584
        ("vit_hybrid", "ViT Hybrid"),
585
        ("vit_mae", "ViTMAE"),
586
        ("vit_msn", "ViTMSN"),
587
        ("wav2vec2", "Wav2Vec2"),
588
        ("wav2vec2-conformer", "Wav2Vec2-Conformer"),
589
        ("wav2vec2_phoneme", "Wav2Vec2Phoneme"),
Patrick von Platen's avatar
Patrick von Platen committed
590
        ("wavlm", "WavLM"),
591
        ("whisper", "Whisper"),
NielsRogge's avatar
NielsRogge committed
592
        ("xclip", "X-CLIP"),
593
594
        ("xglm", "XGLM"),
        ("xlm", "XLM"),
595
        ("xlm-prophetnet", "XLM-ProphetNet"),
596
597
        ("xlm-roberta", "XLM-RoBERTa"),
        ("xlm-roberta-xl", "XLM-RoBERTa-XL"),
598
        ("xlm-v", "XLM-V"),
599
        ("xlnet", "XLNet"),
600
601
        ("xls_r", "XLS-R"),
        ("xlsr_wav2vec2", "XLSR-Wav2Vec2"),
Jannis Vamvas's avatar
Jannis Vamvas committed
602
        ("xmod", "X-MOD"),
603
604
        ("yolos", "YOLOS"),
        ("yoso", "YOSO"),
605
606
607
    ]
)

608
SPECIAL_MODEL_TYPE_TO_MODULE_NAME = OrderedDict(
609
610
611
612
613
    [
        ("openai-gpt", "openai"),
        ("data2vec-audio", "data2vec"),
        ("data2vec-text", "data2vec"),
        ("data2vec-vision", "data2vec"),
NielsRogge's avatar
NielsRogge committed
614
        ("donut-swin", "donut"),
615
        ("maskformer-swin", "maskformer"),
NielsRogge's avatar
NielsRogge committed
616
        ("xclip", "x_clip"),
617
    ]
618
)
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644


def model_type_to_module_name(key):
    """Converts a config key to the corresponding module."""
    # Special treatment
    if key in SPECIAL_MODEL_TYPE_TO_MODULE_NAME:
        return SPECIAL_MODEL_TYPE_TO_MODULE_NAME[key]

    return key.replace("-", "_")


def config_class_to_model_type(config):
    """Converts a config class name to the corresponding model type"""
    for key, cls in CONFIG_MAPPING_NAMES.items():
        if cls == config:
            return key
    return None


class _LazyConfigMapping(OrderedDict):
    """
    A dictionary that lazily load its values when they are requested.
    """

    def __init__(self, mapping):
        self._mapping = mapping
645
        self._extra_content = {}
646
647
648
        self._modules = {}

    def __getitem__(self, key):
649
650
        if key in self._extra_content:
            return self._extra_content[key]
651
652
653
654
655
656
        if key not in self._mapping:
            raise KeyError(key)
        value = self._mapping[key]
        module_name = model_type_to_module_name(key)
        if module_name not in self._modules:
            self._modules[module_name] = importlib.import_module(f".{module_name}", "transformers.models")
657
658
659
660
661
662
663
        if hasattr(self._modules[module_name], value):
            return getattr(self._modules[module_name], value)

        # Some of the mappings have entries model_type -> config of another model type. In that case we try to grab the
        # object at the top level.
        transformers_module = importlib.import_module("transformers")
        return getattr(transformers_module, value)
664
665

    def keys(self):
666
        return list(self._mapping.keys()) + list(self._extra_content.keys())
667
668

    def values(self):
669
        return [self[k] for k in self._mapping.keys()] + list(self._extra_content.values())
670

671
    def items(self):
672
        return [(k, self[k]) for k in self._mapping.keys()] + list(self._extra_content.items())
673
674

    def __iter__(self):
675
        return iter(list(self._mapping.keys()) + list(self._extra_content.keys()))
676
677

    def __contains__(self, item):
678
679
680
681
682
683
684
685
686
        return item in self._mapping or item in self._extra_content

    def register(self, key, value):
        """
        Register a new configuration in this mapping.
        """
        if key in self._mapping.keys():
            raise ValueError(f"'{key}' is already used by a Transformers config, pick another name.")
        self._extra_content[key] = value
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751


CONFIG_MAPPING = _LazyConfigMapping(CONFIG_MAPPING_NAMES)


class _LazyLoadAllMappings(OrderedDict):
    """
    A mapping that will load all pairs of key values at the first access (either by indexing, requestions keys, values,
    etc.)

    Args:
        mapping: The mapping to load.
    """

    def __init__(self, mapping):
        self._mapping = mapping
        self._initialized = False
        self._data = {}

    def _initialize(self):
        if self._initialized:
            return
        warnings.warn(
            "ALL_PRETRAINED_CONFIG_ARCHIVE_MAP is deprecated and will be removed in v5 of Transformers. "
            "It does not contain all available model checkpoints, far from it. Checkout hf.co/models for that.",
            FutureWarning,
        )

        for model_type, map_name in self._mapping.items():
            module_name = model_type_to_module_name(model_type)
            module = importlib.import_module(f".{module_name}", "transformers.models")
            mapping = getattr(module, map_name)
            self._data.update(mapping)

        self._initialized = True

    def __getitem__(self, key):
        self._initialize()
        return self._data[key]

    def keys(self):
        self._initialize()
        return self._data.keys()

    def values(self):
        self._initialize()
        return self._data.values()

    def items(self):
        self._initialize()
        return self._data.keys()

    def __iter__(self):
        self._initialize()
        return iter(self._data)

    def __contains__(self, item):
        self._initialize()
        return item in self._data


ALL_PRETRAINED_CONFIG_ARCHIVE_MAP = _LazyLoadAllMappings(CONFIG_ARCHIVE_MAP_MAPPING_NAMES)


def _get_class_name(model_class: Union[str, List[str]]):
752
    if isinstance(model_class, (list, tuple)):
Stas Bekman's avatar
Stas Bekman committed
753
754
        return " or ".join([f"[`{c}`]" for c in model_class if c is not None])
    return f"[`{model_class}`]"
755
756


757
758
759
760
761
def _list_model_options(indent, config_to_class=None, use_model_types=True):
    if config_to_class is None and not use_model_types:
        raise ValueError("Using `use_model_types=False` requires a `config_to_class` dictionary.")
    if use_model_types:
        if config_to_class is None:
Stas Bekman's avatar
Stas Bekman committed
762
            model_type_to_name = {model_type: f"[`{config}`]" for model_type, config in CONFIG_MAPPING_NAMES.items()}
763
764
        else:
            model_type_to_name = {
765
766
767
                model_type: _get_class_name(model_class)
                for model_type, model_class in config_to_class.items()
                if model_type in MODEL_NAMES_MAPPING
768
769
            }
        lines = [
770
            f"{indent}- **{model_type}** -- {model_type_to_name[model_type]} ({MODEL_NAMES_MAPPING[model_type]} model)"
771
            for model_type in sorted(model_type_to_name.keys())
772
773
        ]
    else:
774
775
776
777
778
        config_to_name = {
            CONFIG_MAPPING_NAMES[config]: _get_class_name(clas)
            for config, clas in config_to_class.items()
            if config in CONFIG_MAPPING_NAMES
        }
779
        config_to_model_name = {
780
            config: MODEL_NAMES_MAPPING[model_type] for model_type, config in CONFIG_MAPPING_NAMES.items()
781
782
        }
        lines = [
Sylvain Gugger's avatar
Sylvain Gugger committed
783
784
            f"{indent}- [`{config_name}`] configuration class:"
            f" {config_to_name[config_name]} ({config_to_model_name[config_name]} model)"
785
            for config_name in sorted(config_to_name.keys())
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
        ]
    return "\n".join(lines)


def replace_list_option_in_docstrings(config_to_class=None, use_model_types=True):
    def docstring_decorator(fn):
        docstrings = fn.__doc__
        lines = docstrings.split("\n")
        i = 0
        while i < len(lines) and re.search(r"^(\s*)List options\s*$", lines[i]) is None:
            i += 1
        if i < len(lines):
            indent = re.search(r"^(\s*)List options\s*$", lines[i]).groups()[0]
            if use_model_types:
                indent = f"{indent}    "
            lines[i] = _list_model_options(indent, config_to_class=config_to_class, use_model_types=use_model_types)
            docstrings = "\n".join(lines)
        else:
            raise ValueError(
Sylvain Gugger's avatar
Sylvain Gugger committed
805
806
                f"The function {fn} should have an empty 'List options' in its docstring as placeholder, current"
                f" docstring is:\n{docstrings}"
807
808
809
810
811
812
813
            )
        fn.__doc__ = docstrings
        return fn

    return docstring_decorator


Julien Chaumond's avatar
Julien Chaumond committed
814
class AutoConfig:
Lysandre Debut's avatar
Lysandre Debut committed
815
    r"""
816
    This is a generic configuration class that will be instantiated as one of the configuration classes of the library
817
    when created with the [`~AutoConfig.from_pretrained`] class method.
818

819
    This class cannot be instantiated directly using `__init__()` (throws an error).
820
    """
821

822
    def __init__(self):
823
824
825
826
        raise EnvironmentError(
            "AutoConfig is designed to be instantiated "
            "using the `AutoConfig.from_pretrained(pretrained_model_name_or_path)` method."
        )
827

828
    @classmethod
829
830
831
832
    def for_model(cls, model_type: str, *args, **kwargs):
        if model_type in CONFIG_MAPPING:
            config_class = CONFIG_MAPPING[model_type]
            return config_class(*args, **kwargs)
833
        raise ValueError(
834
            f"Unrecognized model identifier: {model_type}. Should contain one of {', '.join(CONFIG_MAPPING.keys())}"
835
        )
836

837
    @classmethod
838
    @replace_list_option_in_docstrings()
839
    def from_pretrained(cls, pretrained_model_name_or_path, **kwargs):
840
841
        r"""
        Instantiate one of the configuration classes of the library from a pretrained model configuration.
842

Sylvain Gugger's avatar
Sylvain Gugger committed
843
844
        The configuration class to instantiate is selected based on the `model_type` property of the config object that
        is loaded, or when it's missing, by falling back to using pattern matching on `pretrained_model_name_or_path`:
845

846
        List options
Lysandre Debut's avatar
Lysandre Debut committed
847
848

        Args:
849
            pretrained_model_name_or_path (`str` or `os.PathLike`):
850
851
                Can be either:

852
853
854
855
                    - A string, the *model id* of a pretrained model configuration hosted inside a model repo on
                      huggingface.co. Valid model ids can be located at the root-level, like `bert-base-uncased`, or
                      namespaced under a user or organization name, like `dbmdz/bert-base-german-cased`.
                    - A path to a *directory* containing a configuration file saved using the
Sylvain Gugger's avatar
Sylvain Gugger committed
856
857
                      [`~PretrainedConfig.save_pretrained`] method, or the [`~PreTrainedModel.save_pretrained`] method,
                      e.g., `./my_model_directory/`.
858
859
860
                    - A path or url to a saved configuration JSON *file*, e.g.,
                      `./my_model_directory/configuration.json`.
            cache_dir (`str` or `os.PathLike`, *optional*):
861
862
                Path to a directory in which a downloaded pretrained model configuration should be cached if the
                standard cache should not be used.
863
            force_download (`bool`, *optional*, defaults to `False`):
864
865
                Whether or not to force the (re-)download the model weights and configuration files and override the
                cached versions if they exist.
866
            resume_download (`bool`, *optional*, defaults to `False`):
867
868
                Whether or not to delete incompletely received files. Will attempt to resume the download if such a
                file exists.
869
            proxies (`Dict[str, str]`, *optional*):
Sylvain Gugger's avatar
Sylvain Gugger committed
870
871
                A dictionary of proxy servers to use by protocol or endpoint, e.g., `{'http': 'foo.bar:3128',
                'http://hostname': 'foo.bar:4012'}`. The proxies are used on each request.
872
            revision (`str`, *optional*, defaults to `"main"`):
Julien Chaumond's avatar
Julien Chaumond committed
873
                The specific model version to use. It can be a branch name, a tag name, or a commit id, since we use a
874
                git-based system for storing models and other artifacts on huggingface.co, so `revision` can be any
Julien Chaumond's avatar
Julien Chaumond committed
875
                identifier allowed by git.
876
877
            return_unused_kwargs (`bool`, *optional*, defaults to `False`):
                If `False`, then this function returns just the final configuration object.
878

Sylvain Gugger's avatar
Sylvain Gugger committed
879
880
881
                If `True`, then this functions returns a `Tuple(config, unused_kwargs)` where *unused_kwargs* is a
                dictionary consisting of the key/value pairs whose keys are not configuration attributes: i.e., the
                part of `kwargs` which has not been used to update `config` and is otherwise ignored.
882
            trust_remote_code (`bool`, *optional*, defaults to `False`):
883
                Whether or not to allow for custom models defined on the Hub in their own modeling files. This option
Sylvain Gugger's avatar
Sylvain Gugger committed
884
885
                should only be set to `True` for repositories you trust and in which you have read the code, as it will
                execute code present on the Hub on your local machine.
886
            kwargs(additional keyword arguments, *optional*):
887
                The values in kwargs of any keys which are configuration attributes will be used to override the loaded
Sylvain Gugger's avatar
Sylvain Gugger committed
888
                values. Behavior concerning key/value pairs whose keys are *not* configuration attributes is controlled
889
                by the `return_unused_kwargs` keyword parameter.
Lysandre Debut's avatar
Lysandre Debut committed
890

891
        Examples:
892

893
894
        ```python
        >>> from transformers import AutoConfig
895

896
        >>> # Download configuration from huggingface.co and cache.
Sylvain Gugger's avatar
Sylvain Gugger committed
897
        >>> config = AutoConfig.from_pretrained("bert-base-uncased")
Lysandre Debut's avatar
Lysandre Debut committed
898

899
        >>> # Download configuration from huggingface.co (user-uploaded) and cache.
Sylvain Gugger's avatar
Sylvain Gugger committed
900
        >>> config = AutoConfig.from_pretrained("dbmdz/bert-base-german-cased")
Lysandre Debut's avatar
Lysandre Debut committed
901

902
        >>> # If configuration file is in a directory (e.g., was saved using *save_pretrained('./test/saved_model/')*).
Sylvain Gugger's avatar
Sylvain Gugger committed
903
        >>> config = AutoConfig.from_pretrained("./test/bert_saved_model/")
904

905
        >>> # Load a specific configuration file.
Sylvain Gugger's avatar
Sylvain Gugger committed
906
        >>> config = AutoConfig.from_pretrained("./test/bert_saved_model/my_configuration.json")
907

908
        >>> # Change some config attributes when loading a pretrained config.
Sylvain Gugger's avatar
Sylvain Gugger committed
909
        >>> config = AutoConfig.from_pretrained("bert-base-uncased", output_attentions=True, foo=False)
910
911
        >>> config.output_attentions
        True
Sylvain Gugger's avatar
Sylvain Gugger committed
912
913
914
915

        >>> config, unused_kwargs = AutoConfig.from_pretrained(
        ...     "bert-base-uncased", output_attentions=True, foo=False, return_unused_kwargs=True
        ... )
916
917
        >>> config.output_attentions
        True
Sylvain Gugger's avatar
Sylvain Gugger committed
918

919
        >>> unused_kwargs
920
921
        {'foo': False}
        ```"""
922
        kwargs["_from_auto"] = True
923
924
        kwargs["name_or_path"] = pretrained_model_name_or_path
        trust_remote_code = kwargs.pop("trust_remote_code", False)
925
        config_dict, unused_kwargs = PretrainedConfig.get_config_dict(pretrained_model_name_or_path, **kwargs)
926
927
928
        if "auto_map" in config_dict and "AutoConfig" in config_dict["auto_map"]:
            if not trust_remote_code:
                raise ValueError(
Sylvain Gugger's avatar
Sylvain Gugger committed
929
930
931
                    f"Loading {pretrained_model_name_or_path} requires you to execute the configuration file in that"
                    " repo on your local machine. Make sure you have read the code there to avoid malicious use, then"
                    " set the option `trust_remote_code=True` to remove this error."
932
933
                )
            class_ref = config_dict["auto_map"]["AutoConfig"]
934
            config_class = get_class_from_dynamic_module(class_ref, pretrained_model_name_or_path, **kwargs)
935
936
            return config_class.from_pretrained(pretrained_model_name_or_path, **kwargs)
        elif "model_type" in config_dict:
937
            config_class = CONFIG_MAPPING[config_dict["model_type"]]
938
            return config_class.from_dict(config_dict, **unused_kwargs)
939
940
        else:
            # Fallback: use pattern matching on the string.
941
942
            # We go from longer names to shorter names to catch roberta before bert (for instance)
            for pattern in sorted(CONFIG_MAPPING.keys(), key=len, reverse=True):
943
                if pattern in str(pretrained_model_name_or_path):
944
                    return CONFIG_MAPPING[pattern].from_dict(config_dict, **unused_kwargs)
945

946
        raise ValueError(
947
            f"Unrecognized model in {pretrained_model_name_or_path}. "
948
            f"Should have a `model_type` key in its {CONFIG_NAME}, or contain one of the following strings "
949
            f"in its name: {', '.join(CONFIG_MAPPING.keys())}"
950
        )
951
952
953
954
955
956
957

    @staticmethod
    def register(model_type, config):
        """
        Register a new configuration for this class.

        Args:
958
959
            model_type (`str`): The model type like "bert" or "gpt".
            config ([`PretrainedConfig`]): The config to register.
960
961
962
963
964
965
966
967
        """
        if issubclass(config, PretrainedConfig) and config.model_type != model_type:
            raise ValueError(
                "The config you are passing has a `model_type` attribute that is not consistent with the model type "
                f"you passed (config has {config.model_type} and you passed {model_type}. Fix one of those so they "
                "match!"
            )
        CONFIG_MAPPING.register(model_type, config)