transformers 5.0.0rc0__py3-none-any.whl → 5.0.0rc1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. transformers/__init__.py +30 -3
  2. transformers/cli/serve.py +47 -17
  3. transformers/conversion_mapping.py +15 -2
  4. transformers/convert_slow_tokenizer.py +225 -10
  5. transformers/core_model_loading.py +196 -135
  6. transformers/data/data_collator.py +12 -4
  7. transformers/dependency_versions_table.py +1 -2
  8. transformers/dynamic_module_utils.py +1 -2
  9. transformers/feature_extraction_utils.py +1 -2
  10. transformers/file_utils.py +0 -1
  11. transformers/generation/__init__.py +11 -1
  12. transformers/generation/configuration_utils.py +3 -2
  13. transformers/generation/continuous_batching/__init__.py +4 -0
  14. transformers/generation/continuous_batching/continuous_api.py +134 -79
  15. transformers/image_processing_base.py +1 -2
  16. transformers/integrations/__init__.py +4 -2
  17. transformers/integrations/accelerate.py +15 -3
  18. transformers/integrations/aqlm.py +38 -66
  19. transformers/integrations/awq.py +48 -514
  20. transformers/integrations/bitnet.py +45 -100
  21. transformers/integrations/bitsandbytes.py +79 -191
  22. transformers/integrations/deepspeed.py +1 -0
  23. transformers/integrations/eetq.py +84 -79
  24. transformers/integrations/fbgemm_fp8.py +191 -145
  25. transformers/integrations/finegrained_fp8.py +236 -193
  26. transformers/integrations/fp_quant.py +92 -0
  27. transformers/integrations/ggml.py +11 -1
  28. transformers/integrations/higgs.py +40 -62
  29. transformers/integrations/hub_kernels.py +42 -3
  30. transformers/integrations/integration_utils.py +10 -0
  31. transformers/integrations/mxfp4.py +25 -65
  32. transformers/integrations/peft.py +7 -29
  33. transformers/integrations/quanto.py +73 -55
  34. transformers/integrations/quark.py +55 -0
  35. transformers/integrations/spqr.py +44 -90
  36. transformers/integrations/torchao.py +32 -38
  37. transformers/integrations/vptq.py +42 -59
  38. transformers/modelcard.py +1 -2
  39. transformers/modeling_gguf_pytorch_utils.py +8 -0
  40. transformers/modeling_rope_utils.py +30 -6
  41. transformers/modeling_utils.py +116 -112
  42. transformers/models/__init__.py +3 -0
  43. transformers/models/afmoe/modeling_afmoe.py +4 -4
  44. transformers/models/albert/tokenization_albert.py +6 -12
  45. transformers/models/align/modeling_align.py +2 -0
  46. transformers/models/altclip/modeling_altclip.py +4 -0
  47. transformers/models/apertus/modeling_apertus.py +4 -4
  48. transformers/models/arcee/modeling_arcee.py +4 -4
  49. transformers/models/aria/modeling_aria.py +4 -4
  50. transformers/models/audioflamingo3/modeling_audioflamingo3.py +1 -0
  51. transformers/models/audioflamingo3/modular_audioflamingo3.py +1 -0
  52. transformers/models/auto/configuration_auto.py +11 -0
  53. transformers/models/auto/feature_extraction_auto.py +2 -0
  54. transformers/models/auto/image_processing_auto.py +1 -0
  55. transformers/models/auto/modeling_auto.py +6 -0
  56. transformers/models/auto/processing_auto.py +18 -10
  57. transformers/models/auto/tokenization_auto.py +74 -472
  58. transformers/models/autoformer/modeling_autoformer.py +4 -0
  59. transformers/models/bamba/modeling_bamba.py +4 -3
  60. transformers/models/bark/modeling_bark.py +2 -0
  61. transformers/models/bart/modeling_bart.py +7 -0
  62. transformers/models/barthez/tokenization_barthez.py +5 -10
  63. transformers/models/beit/modeling_beit.py +6 -1
  64. transformers/models/bert/tokenization_bert.py +8 -21
  65. transformers/models/big_bird/modeling_big_bird.py +6 -0
  66. transformers/models/big_bird/tokenization_big_bird.py +18 -42
  67. transformers/models/bigbird_pegasus/modeling_bigbird_pegasus.py +8 -2
  68. transformers/models/biogpt/modeling_biogpt.py +2 -0
  69. transformers/models/biogpt/modular_biogpt.py +2 -0
  70. transformers/models/bit/modeling_bit.py +11 -2
  71. transformers/models/bitnet/modeling_bitnet.py +4 -4
  72. transformers/models/blenderbot/modeling_blenderbot.py +5 -0
  73. transformers/models/blenderbot/tokenization_blenderbot.py +12 -16
  74. transformers/models/blenderbot_small/modeling_blenderbot_small.py +5 -0
  75. transformers/models/blip/modeling_blip_text.py +2 -0
  76. transformers/models/blip_2/modeling_blip_2.py +2 -1
  77. transformers/models/bloom/modeling_bloom.py +4 -0
  78. transformers/models/blt/modeling_blt.py +2 -2
  79. transformers/models/blt/modular_blt.py +2 -2
  80. transformers/models/bridgetower/modeling_bridgetower.py +5 -1
  81. transformers/models/bros/modeling_bros.py +4 -0
  82. transformers/models/camembert/tokenization_camembert.py +8 -12
  83. transformers/models/canine/modeling_canine.py +5 -0
  84. transformers/models/chameleon/modeling_chameleon.py +2 -1
  85. transformers/models/chinese_clip/modeling_chinese_clip.py +3 -0
  86. transformers/models/clap/modeling_clap.py +5 -0
  87. transformers/models/clip/tokenization_clip.py +22 -44
  88. transformers/models/clipseg/modeling_clipseg.py +5 -0
  89. transformers/models/clvp/modeling_clvp.py +5 -0
  90. transformers/models/clvp/tokenization_clvp.py +1 -63
  91. transformers/models/code_llama/tokenization_code_llama.py +20 -43
  92. transformers/models/codegen/tokenization_codegen.py +14 -43
  93. transformers/models/cohere/modeling_cohere.py +4 -3
  94. transformers/models/cohere/modular_cohere.py +2 -1
  95. transformers/models/cohere/tokenization_cohere.py +12 -42
  96. transformers/models/cohere2/modeling_cohere2.py +7 -6
  97. transformers/models/cohere2/modular_cohere2.py +5 -5
  98. transformers/models/cohere2_vision/image_processing_cohere2_vision_fast.py +4 -3
  99. transformers/models/cohere2_vision/modular_cohere2_vision.py +4 -3
  100. transformers/models/colqwen2/modeling_colqwen2.py +1 -0
  101. transformers/models/colqwen2/modular_colqwen2.py +1 -0
  102. transformers/models/conditional_detr/modeling_conditional_detr.py +5 -0
  103. transformers/models/convbert/modeling_convbert.py +6 -0
  104. transformers/models/convnext/modeling_convnext.py +2 -4
  105. transformers/models/convnextv2/modeling_convnextv2.py +2 -4
  106. transformers/models/csm/modeling_csm.py +4 -3
  107. transformers/models/ctrl/modeling_ctrl.py +1 -0
  108. transformers/models/cvt/modeling_cvt.py +2 -0
  109. transformers/models/cwm/modeling_cwm.py +4 -4
  110. transformers/models/d_fine/modeling_d_fine.py +2 -0
  111. transformers/models/d_fine/modular_d_fine.py +1 -0
  112. transformers/models/dab_detr/modeling_dab_detr.py +4 -0
  113. transformers/models/dac/modeling_dac.py +2 -2
  114. transformers/models/data2vec/modeling_data2vec_audio.py +5 -0
  115. transformers/models/data2vec/modeling_data2vec_vision.py +4 -1
  116. transformers/models/dbrx/modeling_dbrx.py +2 -2
  117. transformers/models/deberta/modeling_deberta.py +5 -0
  118. transformers/models/deberta/tokenization_deberta.py +11 -20
  119. transformers/models/deberta_v2/modeling_deberta_v2.py +6 -0
  120. transformers/models/deberta_v2/tokenization_deberta_v2.py +13 -28
  121. transformers/models/decision_transformer/modeling_decision_transformer.py +4 -1
  122. transformers/models/deepseek_v2/modeling_deepseek_v2.py +2 -3
  123. transformers/models/deepseek_v2/modular_deepseek_v2.py +2 -2
  124. transformers/models/deepseek_v3/modeling_deepseek_v3.py +3 -2
  125. transformers/models/deepseek_v3/modular_deepseek_v3.py +1 -0
  126. transformers/models/deformable_detr/modeling_deformable_detr.py +4 -0
  127. transformers/models/depth_anything/modeling_depth_anything.py +1 -0
  128. transformers/models/depth_pro/modeling_depth_pro.py +2 -0
  129. transformers/models/detr/modeling_detr.py +5 -0
  130. transformers/models/dia/modeling_dia.py +4 -3
  131. transformers/models/dia/modular_dia.py +0 -1
  132. transformers/models/diffllama/modeling_diffllama.py +2 -2
  133. transformers/models/dinat/modeling_dinat.py +3 -0
  134. transformers/models/dinov3_convnext/modeling_dinov3_convnext.py +1 -1
  135. transformers/models/dinov3_vit/modeling_dinov3_vit.py +2 -2
  136. transformers/models/dinov3_vit/modular_dinov3_vit.py +2 -2
  137. transformers/models/distilbert/tokenization_distilbert.py +13 -0
  138. transformers/models/doge/modeling_doge.py +2 -3
  139. transformers/models/doge/modular_doge.py +0 -1
  140. transformers/models/donut/modeling_donut_swin.py +2 -0
  141. transformers/models/dots1/modeling_dots1.py +10 -7
  142. transformers/models/dots1/modular_dots1.py +5 -3
  143. transformers/models/dpr/modeling_dpr.py +5 -0
  144. transformers/models/dpr/tokenization_dpr.py +12 -0
  145. transformers/models/edgetam/modeling_edgetam.py +1 -1
  146. transformers/models/edgetam_video/modeling_edgetam_video.py +1 -0
  147. transformers/models/edgetam_video/modular_edgetam_video.py +1 -0
  148. transformers/models/efficientloftr/modeling_efficientloftr.py +2 -2
  149. transformers/models/efficientnet/modeling_efficientnet.py +2 -0
  150. transformers/models/emu3/modeling_emu3.py +4 -4
  151. transformers/models/eomt/image_processing_eomt.py +13 -1
  152. transformers/models/eomt/image_processing_eomt_fast.py +14 -2
  153. transformers/models/ernie4_5/modeling_ernie4_5.py +4 -4
  154. transformers/models/ernie4_5/modular_ernie4_5.py +2 -1
  155. transformers/models/ernie4_5_moe/modeling_ernie4_5_moe.py +5 -5
  156. transformers/models/ernie4_5_moe/modular_ernie4_5_moe.py +2 -2
  157. transformers/models/esm/modeling_esmfold.py +5 -4
  158. transformers/models/evolla/modeling_evolla.py +4 -4
  159. transformers/models/exaone4/modeling_exaone4.py +2 -2
  160. transformers/models/exaone4/modular_exaone4.py +0 -1
  161. transformers/models/falcon/modeling_falcon.py +6 -1
  162. transformers/models/falcon_h1/modeling_falcon_h1.py +4 -3
  163. transformers/models/falcon_mamba/modeling_falcon_mamba.py +25 -35
  164. transformers/models/falcon_mamba/modular_falcon_mamba.py +12 -31
  165. transformers/{kernels/falcon_mamba → models/fast_vlm}/__init__.py +15 -3
  166. transformers/models/fast_vlm/configuration_fast_vlm.py +137 -0
  167. transformers/models/fast_vlm/modeling_fast_vlm.py +455 -0
  168. transformers/models/fast_vlm/modular_fast_vlm.py +273 -0
  169. transformers/models/fastspeech2_conformer/modeling_fastspeech2_conformer.py +8 -3
  170. transformers/models/flaubert/modeling_flaubert.py +7 -0
  171. transformers/models/flava/modeling_flava.py +6 -1
  172. transformers/models/flex_olmo/modeling_flex_olmo.py +4 -5
  173. transformers/models/florence2/modeling_florence2.py +2 -1
  174. transformers/models/florence2/modular_florence2.py +2 -1
  175. transformers/models/fnet/modeling_fnet.py +7 -0
  176. transformers/models/focalnet/modeling_focalnet.py +4 -0
  177. transformers/models/fsmt/modeling_fsmt.py +2 -0
  178. transformers/models/funnel/modeling_funnel.py +8 -0
  179. transformers/models/funnel/tokenization_funnel.py +17 -24
  180. transformers/models/fuyu/processing_fuyu.py +3 -3
  181. transformers/models/gemma/modeling_gemma.py +4 -4
  182. transformers/models/gemma/tokenization_gemma.py +10 -27
  183. transformers/models/gemma2/modeling_gemma2.py +4 -4
  184. transformers/models/gemma2/modular_gemma2.py +2 -1
  185. transformers/models/gemma3/modeling_gemma3.py +14 -84
  186. transformers/models/gemma3/modular_gemma3.py +12 -81
  187. transformers/models/gemma3n/modeling_gemma3n.py +18 -209
  188. transformers/models/gemma3n/modular_gemma3n.py +17 -59
  189. transformers/models/git/modeling_git.py +2 -0
  190. transformers/models/glm/modeling_glm.py +4 -4
  191. transformers/models/glm4/modeling_glm4.py +4 -4
  192. transformers/models/glm4_moe/modeling_glm4_moe.py +5 -3
  193. transformers/models/glm4v/configuration_glm4v.py +3 -1
  194. transformers/models/glm4v/modeling_glm4v.py +3 -3
  195. transformers/models/glm4v/modular_glm4v.py +6 -4
  196. transformers/models/glm4v_moe/configuration_glm4v_moe.py +3 -1
  197. transformers/models/glm4v_moe/modeling_glm4v_moe.py +6 -5
  198. transformers/models/glm4v_moe/modular_glm4v_moe.py +1 -1
  199. transformers/models/glpn/modeling_glpn.py +2 -0
  200. transformers/models/gpt2/modeling_gpt2.py +5 -1
  201. transformers/models/gpt2/tokenization_gpt2.py +16 -44
  202. transformers/models/gpt_bigcode/modeling_gpt_bigcode.py +1 -0
  203. transformers/models/gpt_neo/modeling_gpt_neo.py +4 -0
  204. transformers/models/gpt_neox/modeling_gpt_neox.py +5 -2
  205. transformers/models/gpt_neox/modular_gpt_neox.py +3 -0
  206. transformers/models/gpt_neox/tokenization_gpt_neox.py +10 -49
  207. transformers/models/gpt_neox_japanese/modeling_gpt_neox_japanese.py +3 -1
  208. transformers/models/gpt_oss/modeling_gpt_oss.py +5 -6
  209. transformers/models/gpt_oss/modular_gpt_oss.py +3 -5
  210. transformers/models/gptj/modeling_gptj.py +3 -0
  211. transformers/models/granite/modeling_granite.py +4 -4
  212. transformers/models/granitemoe/modeling_granitemoe.py +4 -6
  213. transformers/models/granitemoe/modular_granitemoe.py +0 -2
  214. transformers/models/granitemoehybrid/modeling_granitemoehybrid.py +4 -6
  215. transformers/models/granitemoeshared/modeling_granitemoeshared.py +4 -6
  216. transformers/models/grounding_dino/modeling_grounding_dino.py +4 -0
  217. transformers/models/groupvit/modeling_groupvit.py +3 -0
  218. transformers/models/helium/modeling_helium.py +4 -3
  219. transformers/models/herbert/tokenization_herbert.py +9 -25
  220. transformers/models/hgnet_v2/modeling_hgnet_v2.py +6 -1
  221. transformers/models/hgnet_v2/modular_hgnet_v2.py +6 -1
  222. transformers/models/hiera/modeling_hiera.py +4 -0
  223. transformers/models/hubert/modeling_hubert.py +3 -0
  224. transformers/models/hubert/modular_hubert.py +1 -0
  225. transformers/models/hunyuan_v1_dense/modeling_hunyuan_v1_dense.py +4 -4
  226. transformers/models/hunyuan_v1_moe/modeling_hunyuan_v1_moe.py +4 -4
  227. transformers/models/ibert/modeling_ibert.py +6 -0
  228. transformers/models/idefics/modeling_idefics.py +5 -21
  229. transformers/models/imagegpt/modeling_imagegpt.py +2 -1
  230. transformers/models/informer/modeling_informer.py +4 -0
  231. transformers/models/informer/modular_informer.py +1 -0
  232. transformers/models/internvl/modeling_internvl.py +2 -4
  233. transformers/models/internvl/modular_internvl.py +2 -4
  234. transformers/models/jamba/modeling_jamba.py +2 -2
  235. transformers/models/janus/modeling_janus.py +1 -0
  236. transformers/models/janus/modular_janus.py +1 -0
  237. transformers/models/jetmoe/modeling_jetmoe.py +2 -2
  238. transformers/models/kosmos2/modeling_kosmos2.py +1 -0
  239. transformers/models/kyutai_speech_to_text/modeling_kyutai_speech_to_text.py +3 -1
  240. transformers/models/lasr/__init__.py +29 -0
  241. transformers/models/lasr/configuration_lasr.py +244 -0
  242. transformers/models/lasr/feature_extraction_lasr.py +277 -0
  243. transformers/models/lasr/modeling_lasr.py +729 -0
  244. transformers/models/lasr/modular_lasr.py +569 -0
  245. transformers/models/lasr/processing_lasr.py +96 -0
  246. transformers/models/lasr/tokenization_lasr.py +186 -0
  247. transformers/models/layoutlm/modeling_layoutlm.py +5 -0
  248. transformers/models/layoutlmv2/modeling_layoutlmv2.py +4 -0
  249. transformers/models/layoutlmv2/tokenization_layoutlmv2.py +10 -53
  250. transformers/models/layoutlmv3/modeling_layoutlmv3.py +4 -0
  251. transformers/models/layoutlmv3/tokenization_layoutlmv3.py +12 -61
  252. transformers/models/layoutxlm/tokenization_layoutxlm.py +13 -38
  253. transformers/models/led/modeling_led.py +6 -0
  254. transformers/models/levit/modeling_levit.py +3 -0
  255. transformers/models/lfm2/modeling_lfm2.py +4 -5
  256. transformers/models/lfm2/modular_lfm2.py +0 -1
  257. transformers/models/lfm2_moe/modeling_lfm2_moe.py +4 -5
  258. transformers/models/lightglue/modeling_lightglue.py +3 -1
  259. transformers/models/lightglue/modular_lightglue.py +1 -0
  260. transformers/models/lilt/modeling_lilt.py +4 -0
  261. transformers/models/llama/modeling_llama.py +4 -4
  262. transformers/models/llama/tokenization_llama.py +15 -43
  263. transformers/models/llama4/modeling_llama4.py +3 -2
  264. transformers/models/longcat_flash/modeling_longcat_flash.py +4 -4
  265. transformers/models/longcat_flash/modular_longcat_flash.py +2 -2
  266. transformers/models/longformer/modeling_longformer.py +6 -0
  267. transformers/models/longt5/modeling_longt5.py +4 -0
  268. transformers/models/luke/modeling_luke.py +9 -0
  269. transformers/models/luke/tokenization_luke.py +11 -38
  270. transformers/models/lxmert/modeling_lxmert.py +2 -0
  271. transformers/models/m2m_100/modeling_m2m_100.py +4 -0
  272. transformers/models/mamba/modeling_mamba.py +14 -22
  273. transformers/models/marian/modeling_marian.py +5 -0
  274. transformers/models/markuplm/modeling_markuplm.py +4 -0
  275. transformers/models/markuplm/tokenization_markuplm.py +28 -61
  276. transformers/models/mask2former/modeling_mask2former.py +2 -0
  277. transformers/models/maskformer/modeling_maskformer.py +2 -0
  278. transformers/models/maskformer/modeling_maskformer_swin.py +2 -0
  279. transformers/models/mbart/modeling_mbart.py +7 -0
  280. transformers/models/mbart/tokenization_mbart.py +11 -52
  281. transformers/models/mbart50/tokenization_mbart50.py +7 -10
  282. transformers/models/megatron_bert/modeling_megatron_bert.py +7 -0
  283. transformers/models/mgp_str/modeling_mgp_str.py +2 -0
  284. transformers/models/mimi/modeling_mimi.py +3 -1
  285. transformers/models/minimax/modeling_minimax.py +4 -4
  286. transformers/models/ministral/modeling_ministral.py +4 -4
  287. transformers/models/ministral3/configuration_ministral3.py +1 -1
  288. transformers/models/ministral3/modeling_ministral3.py +4 -3
  289. transformers/models/mistral/modeling_mistral.py +4 -3
  290. transformers/models/mixtral/modeling_mixtral.py +4 -4
  291. transformers/models/mllama/modeling_mllama.py +2 -2
  292. transformers/models/mluke/tokenization_mluke.py +6 -6
  293. transformers/models/mm_grounding_dino/modeling_mm_grounding_dino.py +4 -0
  294. transformers/models/mobilenet_v1/modeling_mobilenet_v1.py +2 -0
  295. transformers/models/mobilenet_v2/modeling_mobilenet_v2.py +3 -0
  296. transformers/models/mobilevit/modeling_mobilevit.py +3 -0
  297. transformers/models/mobilevitv2/modeling_mobilevitv2.py +3 -0
  298. transformers/models/modernbert/modeling_modernbert.py +4 -1
  299. transformers/models/modernbert/modular_modernbert.py +2 -0
  300. transformers/models/modernbert_decoder/modeling_modernbert_decoder.py +8 -9
  301. transformers/models/modernbert_decoder/modular_modernbert_decoder.py +6 -7
  302. transformers/models/moonshine/modeling_moonshine.py +4 -2
  303. transformers/models/moshi/modeling_moshi.py +5 -2
  304. transformers/models/mpnet/modeling_mpnet.py +5 -0
  305. transformers/models/mpnet/tokenization_mpnet.py +5 -13
  306. transformers/models/mpt/modeling_mpt.py +2 -0
  307. transformers/models/mra/modeling_mra.py +6 -0
  308. transformers/models/mt5/modeling_mt5.py +7 -0
  309. transformers/models/musicgen/modeling_musicgen.py +2 -0
  310. transformers/models/musicgen_melody/modeling_musicgen_melody.py +3 -0
  311. transformers/models/mvp/modeling_mvp.py +7 -0
  312. transformers/models/nanochat/modeling_nanochat.py +4 -4
  313. transformers/models/nemotron/modeling_nemotron.py +4 -2
  314. transformers/models/nllb/tokenization_nllb.py +8 -22
  315. transformers/models/nougat/tokenization_nougat.py +11 -59
  316. transformers/models/nystromformer/modeling_nystromformer.py +6 -0
  317. transformers/models/olmo/modeling_olmo.py +4 -4
  318. transformers/models/olmo/modular_olmo.py +2 -2
  319. transformers/models/olmo2/modeling_olmo2.py +4 -5
  320. transformers/models/olmo2/modular_olmo2.py +0 -1
  321. transformers/models/olmo3/modeling_olmo3.py +4 -4
  322. transformers/models/olmoe/modeling_olmoe.py +4 -4
  323. transformers/models/omdet_turbo/modeling_omdet_turbo.py +2 -0
  324. transformers/models/oneformer/modeling_oneformer.py +4 -1
  325. transformers/models/openai/modeling_openai.py +3 -0
  326. transformers/models/openai/tokenization_openai.py +10 -46
  327. transformers/models/opt/modeling_opt.py +2 -0
  328. transformers/models/owlv2/modeling_owlv2.py +4 -0
  329. transformers/models/owlvit/modeling_owlvit.py +4 -0
  330. transformers/models/paddleocr_vl/__init__.py +32 -0
  331. transformers/models/paddleocr_vl/configuration_paddleocr_vl.py +336 -0
  332. transformers/models/paddleocr_vl/image_processing_paddleocr_vl.py +503 -0
  333. transformers/models/paddleocr_vl/image_processing_paddleocr_vl_fast.py +209 -0
  334. transformers/models/paddleocr_vl/modeling_paddleocr_vl.py +1668 -0
  335. transformers/models/paddleocr_vl/modular_paddleocr_vl.py +1349 -0
  336. transformers/models/paddleocr_vl/processing_paddleocr_vl.py +135 -0
  337. transformers/models/parakeet/configuration_parakeet.py +4 -6
  338. transformers/models/parakeet/modeling_parakeet.py +9 -6
  339. transformers/models/parakeet/modular_parakeet.py +2 -2
  340. transformers/models/parakeet/processing_parakeet.py +1 -0
  341. transformers/models/patchtsmixer/modeling_patchtsmixer.py +6 -0
  342. transformers/models/patchtst/modeling_patchtst.py +20 -2
  343. transformers/models/pegasus/modeling_pegasus.py +5 -0
  344. transformers/models/pegasus/tokenization_pegasus.py +17 -44
  345. transformers/models/pegasus_x/modeling_pegasus_x.py +4 -0
  346. transformers/models/perceiver/modeling_perceiver.py +8 -0
  347. transformers/models/persimmon/modeling_persimmon.py +2 -1
  348. transformers/models/phi/modeling_phi.py +4 -5
  349. transformers/models/phi/modular_phi.py +0 -1
  350. transformers/models/phi3/modeling_phi3.py +2 -1
  351. transformers/models/phi4_multimodal/modeling_phi4_multimodal.py +5 -5
  352. transformers/models/phi4_multimodal/modular_phi4_multimodal.py +4 -4
  353. transformers/models/phimoe/modeling_phimoe.py +4 -4
  354. transformers/models/phimoe/modular_phimoe.py +2 -2
  355. transformers/models/pix2struct/modeling_pix2struct.py +2 -0
  356. transformers/models/pixtral/modeling_pixtral.py +2 -1
  357. transformers/models/plbart/modeling_plbart.py +6 -0
  358. transformers/models/plbart/modular_plbart.py +2 -0
  359. transformers/models/plbart/tokenization_plbart.py +0 -2
  360. transformers/models/poolformer/modeling_poolformer.py +2 -0
  361. transformers/models/pop2piano/modeling_pop2piano.py +2 -0
  362. transformers/models/prompt_depth_anything/modeling_prompt_depth_anything.py +1 -0
  363. transformers/models/prompt_depth_anything/modular_prompt_depth_anything.py +1 -0
  364. transformers/models/prophetnet/modeling_prophetnet.py +3 -0
  365. transformers/models/pvt/modeling_pvt.py +2 -0
  366. transformers/models/pvt_v2/modeling_pvt_v2.py +3 -0
  367. transformers/models/qwen2/modeling_qwen2.py +4 -4
  368. transformers/models/qwen2/tokenization_qwen2.py +14 -18
  369. transformers/models/qwen2_5_omni/configuration_qwen2_5_omni.py +4 -2
  370. transformers/models/qwen2_5_omni/modeling_qwen2_5_omni.py +13 -16
  371. transformers/models/qwen2_5_omni/modular_qwen2_5_omni.py +14 -16
  372. transformers/models/qwen2_5_vl/configuration_qwen2_5_vl.py +1 -1
  373. transformers/models/qwen2_5_vl/modeling_qwen2_5_vl.py +5 -6
  374. transformers/models/qwen2_5_vl/modular_qwen2_5_vl.py +3 -5
  375. transformers/models/qwen2_audio/modeling_qwen2_audio.py +2 -0
  376. transformers/models/qwen2_moe/modeling_qwen2_moe.py +4 -4
  377. transformers/models/qwen2_vl/configuration_qwen2_vl.py +1 -1
  378. transformers/models/qwen2_vl/modeling_qwen2_vl.py +6 -16
  379. transformers/models/qwen3/modeling_qwen3.py +4 -4
  380. transformers/models/qwen3_moe/modeling_qwen3_moe.py +4 -4
  381. transformers/models/qwen3_next/modeling_qwen3_next.py +4 -3
  382. transformers/models/qwen3_omni_moe/modeling_qwen3_omni_moe.py +21 -23
  383. transformers/models/qwen3_omni_moe/modular_qwen3_omni_moe.py +14 -16
  384. transformers/models/qwen3_vl/modeling_qwen3_vl.py +39 -37
  385. transformers/models/qwen3_vl/modular_qwen3_vl.py +37 -35
  386. transformers/models/qwen3_vl_moe/modeling_qwen3_vl_moe.py +39 -37
  387. transformers/models/qwen3_vl_moe/modular_qwen3_vl_moe.py +4 -1
  388. transformers/models/rag/modeling_rag.py +1 -0
  389. transformers/models/recurrent_gemma/modeling_recurrent_gemma.py +15 -1
  390. transformers/models/reformer/modeling_reformer.py +4 -0
  391. transformers/models/reformer/tokenization_reformer.py +11 -28
  392. transformers/models/regnet/modeling_regnet.py +6 -1
  393. transformers/models/rembert/modeling_rembert.py +6 -0
  394. transformers/models/rembert/tokenization_rembert.py +3 -10
  395. transformers/models/resnet/modeling_resnet.py +11 -2
  396. transformers/models/roberta/tokenization_roberta.py +18 -27
  397. transformers/models/roformer/modeling_roformer.py +6 -0
  398. transformers/models/roformer/tokenization_roformer.py +77 -412
  399. transformers/models/rt_detr/modeling_rt_detr.py +2 -0
  400. transformers/models/rt_detr/modeling_rt_detr_resnet.py +5 -1
  401. transformers/models/rt_detr_v2/modeling_rt_detr_v2.py +2 -0
  402. transformers/models/rwkv/modeling_rwkv.py +1 -0
  403. transformers/models/sam2/modeling_sam2.py +2 -2
  404. transformers/models/sam2/modular_sam2.py +2 -2
  405. transformers/models/sam2_video/modeling_sam2_video.py +1 -0
  406. transformers/models/sam2_video/modular_sam2_video.py +1 -0
  407. transformers/models/sam3/modeling_sam3.py +77 -80
  408. transformers/models/sam3_tracker/modeling_sam3_tracker.py +6 -1
  409. transformers/models/sam3_tracker/modular_sam3_tracker.py +6 -1
  410. transformers/models/sam3_tracker_video/modeling_sam3_tracker_video.py +1 -0
  411. transformers/models/sam3_video/modeling_sam3_video.py +1 -0
  412. transformers/models/seamless_m4t/modeling_seamless_m4t.py +5 -1
  413. transformers/models/seamless_m4t/tokenization_seamless_m4t.py +27 -59
  414. transformers/models/seamless_m4t_v2/modeling_seamless_m4t_v2.py +5 -1
  415. transformers/models/seed_oss/modeling_seed_oss.py +2 -2
  416. transformers/models/segformer/modeling_segformer.py +4 -1
  417. transformers/models/seggpt/modeling_seggpt.py +2 -0
  418. transformers/models/sew/modeling_sew.py +3 -0
  419. transformers/models/sew/modular_sew.py +1 -0
  420. transformers/models/sew_d/modeling_sew_d.py +3 -0
  421. transformers/models/siglip2/modeling_siglip2.py +4 -0
  422. transformers/models/siglip2/modular_siglip2.py +4 -0
  423. transformers/models/smollm3/modeling_smollm3.py +4 -4
  424. transformers/models/smolvlm/processing_smolvlm.py +0 -7
  425. transformers/models/speech_to_text/modeling_speech_to_text.py +4 -0
  426. transformers/models/speecht5/modeling_speecht5.py +13 -1
  427. transformers/models/splinter/modeling_splinter.py +3 -0
  428. transformers/models/splinter/tokenization_splinter.py +9 -28
  429. transformers/models/squeezebert/modeling_squeezebert.py +6 -0
  430. transformers/models/stablelm/modeling_stablelm.py +3 -1
  431. transformers/models/starcoder2/modeling_starcoder2.py +4 -3
  432. transformers/models/superglue/modeling_superglue.py +1 -0
  433. transformers/models/superpoint/modeling_superpoint.py +1 -0
  434. transformers/models/swiftformer/modeling_swiftformer.py +2 -0
  435. transformers/models/swin/modeling_swin.py +4 -0
  436. transformers/models/swin2sr/modeling_swin2sr.py +2 -0
  437. transformers/models/swinv2/modeling_swinv2.py +4 -0
  438. transformers/models/t5/modeling_t5.py +7 -0
  439. transformers/models/t5/tokenization_t5.py +4 -8
  440. transformers/models/t5gemma/modeling_t5gemma.py +5 -5
  441. transformers/models/t5gemma2/modeling_t5gemma2.py +6 -6
  442. transformers/models/table_transformer/modeling_table_transformer.py +4 -0
  443. transformers/models/tapas/modeling_tapas.py +3 -0
  444. transformers/models/textnet/modeling_textnet.py +11 -2
  445. transformers/models/time_series_transformer/modeling_time_series_transformer.py +4 -0
  446. transformers/models/timesfm/modeling_timesfm.py +2 -0
  447. transformers/models/timesfm/modular_timesfm.py +2 -0
  448. transformers/models/timesformer/modeling_timesformer.py +2 -0
  449. transformers/models/timm_wrapper/modeling_timm_wrapper.py +1 -1
  450. transformers/models/trocr/modeling_trocr.py +2 -0
  451. transformers/models/tvp/modeling_tvp.py +2 -0
  452. transformers/models/udop/modeling_udop.py +4 -0
  453. transformers/models/udop/tokenization_udop.py +5 -13
  454. transformers/models/umt5/modeling_umt5.py +7 -0
  455. transformers/models/unispeech/modeling_unispeech.py +4 -0
  456. transformers/models/unispeech/modular_unispeech.py +2 -0
  457. transformers/models/unispeech_sat/modeling_unispeech_sat.py +6 -0
  458. transformers/models/unispeech_sat/modular_unispeech_sat.py +2 -0
  459. transformers/models/univnet/modeling_univnet.py +1 -0
  460. transformers/models/upernet/modeling_upernet.py +1 -0
  461. transformers/models/vaultgemma/modeling_vaultgemma.py +4 -4
  462. transformers/models/vilt/modeling_vilt.py +6 -0
  463. transformers/models/vision_text_dual_encoder/modeling_vision_text_dual_encoder.py +1 -0
  464. transformers/models/visual_bert/modeling_visual_bert.py +6 -0
  465. transformers/models/vitdet/modeling_vitdet.py +2 -0
  466. transformers/models/vitmatte/modeling_vitmatte.py +1 -0
  467. transformers/models/vits/modeling_vits.py +1 -0
  468. transformers/models/vjepa2/modeling_vjepa2.py +1 -0
  469. transformers/models/wav2vec2/modeling_wav2vec2.py +7 -0
  470. transformers/models/wav2vec2_bert/modeling_wav2vec2_bert.py +5 -0
  471. transformers/models/wav2vec2_bert/modular_wav2vec2_bert.py +5 -0
  472. transformers/models/wav2vec2_conformer/modeling_wav2vec2_conformer.py +6 -0
  473. transformers/models/wavlm/modeling_wavlm.py +5 -0
  474. transformers/models/whisper/modeling_whisper.py +6 -0
  475. transformers/models/whisper/tokenization_whisper.py +4 -15
  476. transformers/models/x_clip/modeling_x_clip.py +3 -0
  477. transformers/models/xglm/modeling_xglm.py +1 -0
  478. transformers/models/xglm/tokenization_xglm.py +4 -9
  479. transformers/models/xlm/modeling_xlm.py +5 -0
  480. transformers/models/xlm_roberta/tokenization_xlm_roberta.py +9 -16
  481. transformers/models/xlnet/tokenization_xlnet.py +3 -7
  482. transformers/models/yoso/modeling_yoso.py +6 -0
  483. transformers/models/zamba/modeling_zamba.py +2 -0
  484. transformers/models/zamba2/modeling_zamba2.py +4 -2
  485. transformers/models/zamba2/modular_zamba2.py +1 -1
  486. transformers/models/zoedepth/modeling_zoedepth.py +1 -0
  487. transformers/pipelines/__init__.py +2 -3
  488. transformers/pipelines/base.py +1 -9
  489. transformers/pipelines/document_question_answering.py +3 -1
  490. transformers/pipelines/text_generation.py +1 -1
  491. transformers/processing_utils.py +23 -11
  492. transformers/quantizers/base.py +35 -110
  493. transformers/quantizers/quantizer_aqlm.py +1 -5
  494. transformers/quantizers/quantizer_auto_round.py +1 -2
  495. transformers/quantizers/quantizer_awq.py +17 -81
  496. transformers/quantizers/quantizer_bitnet.py +3 -8
  497. transformers/quantizers/quantizer_bnb_4bit.py +13 -110
  498. transformers/quantizers/quantizer_bnb_8bit.py +16 -92
  499. transformers/quantizers/quantizer_compressed_tensors.py +1 -5
  500. transformers/quantizers/quantizer_eetq.py +14 -62
  501. transformers/quantizers/quantizer_fbgemm_fp8.py +34 -125
  502. transformers/quantizers/quantizer_finegrained_fp8.py +13 -105
  503. transformers/quantizers/quantizer_fp_quant.py +48 -78
  504. transformers/quantizers/quantizer_gptq.py +7 -24
  505. transformers/quantizers/quantizer_higgs.py +40 -54
  506. transformers/quantizers/quantizer_hqq.py +144 -153
  507. transformers/quantizers/quantizer_mxfp4.py +13 -167
  508. transformers/quantizers/quantizer_quanto.py +20 -64
  509. transformers/quantizers/quantizer_quark.py +36 -17
  510. transformers/quantizers/quantizer_spqr.py +1 -4
  511. transformers/quantizers/quantizer_torchao.py +23 -202
  512. transformers/quantizers/quantizer_vptq.py +8 -22
  513. transformers/quantizers/quantizers_utils.py +20 -0
  514. transformers/testing_utils.py +297 -36
  515. transformers/tokenization_mistral_common.py +4 -0
  516. transformers/tokenization_utils_base.py +113 -222
  517. transformers/tokenization_utils_tokenizers.py +168 -107
  518. transformers/trainer.py +28 -31
  519. transformers/trainer_jit_checkpoint.py +126 -0
  520. transformers/trainer_utils.py +1 -1
  521. transformers/training_args.py +66 -28
  522. transformers/utils/__init__.py +3 -4
  523. transformers/utils/auto_docstring.py +1 -0
  524. transformers/utils/generic.py +27 -1
  525. transformers/utils/hub.py +5 -15
  526. transformers/utils/import_utils.py +61 -16
  527. transformers/utils/kernel_config.py +4 -2
  528. transformers/utils/loading_report.py +19 -10
  529. transformers/utils/quantization_config.py +75 -242
  530. transformers/video_processing_utils.py +1 -2
  531. {transformers-5.0.0rc0.dist-info → transformers-5.0.0rc1.dist-info}/METADATA +274 -227
  532. {transformers-5.0.0rc0.dist-info → transformers-5.0.0rc1.dist-info}/RECORD +536 -520
  533. {transformers-5.0.0rc0.dist-info → transformers-5.0.0rc1.dist-info}/WHEEL +1 -1
  534. transformers/kernels/__init__.py +0 -0
  535. transformers/kernels/falcon_mamba/selective_scan_with_ln_interface.py +0 -529
  536. transformers/models/roformer/tokenization_roformer_fast.py +0 -160
  537. {transformers-5.0.0rc0.dist-info → transformers-5.0.0rc1.dist-info}/entry_points.txt +0 -0
  538. {transformers-5.0.0rc0.dist-info → transformers-5.0.0rc1.dist-info/licenses}/LICENSE +0 -0
  539. {transformers-5.0.0rc0.dist-info → transformers-5.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -19,19 +19,21 @@ fronting encoding methods) Special token mixing (host the special tokens logic)
19
19
  of output with special method for the Fast tokenizers)
20
20
  """
21
21
 
22
+ from __future__ import annotations
23
+
22
24
  import copy
23
25
  import json
24
26
  import os
25
27
  import re
26
28
  import warnings
27
29
  from collections import OrderedDict, UserDict
28
- from collections.abc import Callable, Mapping, Sequence, Sized
30
+ from collections.abc import Callable, Collection, Mapping, Sequence, Sized
29
31
  from dataclasses import dataclass
30
32
  from pathlib import Path
31
33
  from typing import TYPE_CHECKING, Any, NamedTuple, Optional, Union
32
34
 
33
35
  import numpy as np
34
- from huggingface_hub import create_repo, list_repo_files
36
+ from huggingface_hub import create_repo, is_offline_mode, list_repo_files
35
37
  from packaging import version
36
38
 
37
39
  from . import __version__
@@ -49,7 +51,6 @@ from .utils import (
49
51
  extract_commit_hash,
50
52
  is_mlx_available,
51
53
  is_numpy_array,
52
- is_offline_mode,
53
54
  is_protobuf_available,
54
55
  is_tokenizers_available,
55
56
  is_torch_available,
@@ -60,6 +61,7 @@ from .utils import (
60
61
  requires_backends,
61
62
  to_py_obj,
62
63
  )
64
+ from .utils.chat_parsing_utils import recursive_parse
63
65
  from .utils.chat_template_utils import render_jinja_template
64
66
  from .utils.import_utils import PROTOBUF_IMPORT_ERROR
65
67
 
@@ -756,7 +758,7 @@ class BatchEncoding(UserDict):
756
758
 
757
759
  return self
758
760
 
759
- def to(self, device: Union[str, "torch.device"], *, non_blocking: bool = False) -> "BatchEncoding":
761
+ def to(self, device: Union[str, torch.device], *, non_blocking: bool = False) -> BatchEncoding:
760
762
  """
761
763
  Send all values to device by calling `v.to(device, non_blocking=non_blocking)` (PyTorch only).
762
764
 
@@ -1629,11 +1631,9 @@ class PreTrainedTokenizerBase(PushToHubMixin):
1629
1631
  f"Calling {cls.__name__}.from_pretrained() with the path to a single file or url is not "
1630
1632
  "supported for this tokenizer. Use a model identifier or the path to a directory instead."
1631
1633
  )
1632
- # Use first vocab file that's not tokenizer_file
1633
- file_id = list(cls.vocab_files_names.keys())[0]
1634
- if file_id == "tokenizer_file" and vocab_files_count > 1:
1635
- file_id = [k for k in cls.vocab_files_names.keys() if k != "tokenizer_file"][0]
1636
-
1634
+ file_id = "vocab_file"
1635
+ if pretrained_model_name_or_path.endswith("tokenizer.json"):
1636
+ file_id = "tokenizer_file"
1637
1637
  vocab_files[file_id] = pretrained_model_name_or_path
1638
1638
  single_file_id = file_id
1639
1639
  else:
@@ -1651,10 +1651,10 @@ class PreTrainedTokenizerBase(PushToHubMixin):
1651
1651
  }
1652
1652
 
1653
1653
  vocab_files = {**cls.vocab_files_names, **additional_files_names}
1654
+
1655
+ # Check for versioned tokenizer files
1654
1656
  if "tokenizer_file" in vocab_files:
1655
- # Try to get the tokenizer config to see if there are versioned tokenizer files.
1656
1657
  fast_tokenizer_file = FULL_TOKENIZER_FILE
1657
-
1658
1658
  try:
1659
1659
  resolved_config_file = cached_file(
1660
1660
  pretrained_model_name_or_path,
@@ -1670,43 +1670,33 @@ class PreTrainedTokenizerBase(PushToHubMixin):
1670
1670
  _raise_exceptions_for_missing_entries=False,
1671
1671
  _commit_hash=commit_hash,
1672
1672
  )
1673
- except OSError:
1674
- # Re-raise any error raised by cached_file in order to get a helpful error message
1675
- raise
1673
+ if resolved_config_file is not None:
1674
+ with open(resolved_config_file, encoding="utf-8") as reader:
1675
+ tokenizer_config = json.load(reader)
1676
+ if "fast_tokenizer_files" in tokenizer_config:
1677
+ fast_tokenizer_file = get_fast_tokenizer_file(tokenizer_config["fast_tokenizer_files"])
1678
+ commit_hash = extract_commit_hash(resolved_config_file, commit_hash)
1676
1679
  except Exception:
1677
- # For any other exception, we throw a generic error.
1678
- raise OSError(
1679
- f"Can't load tokenizer for '{pretrained_model_name_or_path}'. If you were trying to load it from "
1680
- "'https://huggingface.co/models', make sure you don't have a local directory with the same name. "
1681
- f"Otherwise, make sure '{pretrained_model_name_or_path}' is the correct path to a directory "
1682
- f"containing all relevant files for a {cls.__name__} tokenizer."
1683
- )
1684
-
1685
- commit_hash = extract_commit_hash(resolved_config_file, commit_hash)
1686
- if resolved_config_file is not None:
1687
- with open(resolved_config_file, encoding="utf-8") as reader:
1688
- tokenizer_config = json.load(reader)
1689
- if "fast_tokenizer_files" in tokenizer_config:
1690
- fast_tokenizer_file = get_fast_tokenizer_file(tokenizer_config["fast_tokenizer_files"])
1680
+ pass
1691
1681
  vocab_files["tokenizer_file"] = fast_tokenizer_file
1692
1682
 
1693
- # This block looks for any extra chat template files
1694
- if is_local:
1695
- template_dir = Path(pretrained_model_name_or_path, CHAT_TEMPLATE_DIR)
1696
- if template_dir.is_dir():
1697
- for template_file in template_dir.glob("*.jinja"):
1698
- template_name = template_file.name.removesuffix(".jinja")
1699
- vocab_files[f"chat_template_{template_name}"] = f"{CHAT_TEMPLATE_DIR}/{template_file.name}"
1700
- else:
1701
- for template in list_repo_templates(
1702
- pretrained_model_name_or_path,
1703
- local_files_only=local_files_only,
1704
- revision=revision,
1705
- cache_dir=cache_dir,
1706
- token=token,
1707
- ):
1708
- template = template.removesuffix(".jinja")
1709
- vocab_files[f"chat_template_{template}"] = f"{CHAT_TEMPLATE_DIR}/{template}.jinja"
1683
+ # This block looks for any extra chat template files
1684
+ if is_local:
1685
+ template_dir = Path(pretrained_model_name_or_path, CHAT_TEMPLATE_DIR)
1686
+ if template_dir.is_dir():
1687
+ for template_file in template_dir.glob("*.jinja"):
1688
+ template_name = template_file.name.removesuffix(".jinja")
1689
+ vocab_files[f"chat_template_{template_name}"] = f"{CHAT_TEMPLATE_DIR}/{template_file.name}"
1690
+ else:
1691
+ for template in list_repo_templates(
1692
+ pretrained_model_name_or_path,
1693
+ local_files_only=local_files_only,
1694
+ revision=revision,
1695
+ cache_dir=cache_dir,
1696
+ token=token,
1697
+ ):
1698
+ template = template.removesuffix(".jinja")
1699
+ vocab_files[f"chat_template_{template}"] = f"{CHAT_TEMPLATE_DIR}/{template}.jinja"
1710
1700
 
1711
1701
  remote_files = []
1712
1702
  if not is_local and not local_files_only:
@@ -1764,11 +1754,6 @@ class PreTrainedTokenizerBase(PushToHubMixin):
1764
1754
  if file_id not in resolved_vocab_files:
1765
1755
  continue
1766
1756
 
1767
- if is_local:
1768
- logger.info(f"loading file {file_path}")
1769
- else:
1770
- logger.info(f"loading file {file_path} from cache at {resolved_vocab_files[file_id]}")
1771
-
1772
1757
  return cls._from_pretrained(
1773
1758
  resolved_vocab_files,
1774
1759
  pretrained_model_name_or_path,
@@ -1798,29 +1783,6 @@ class PreTrainedTokenizerBase(PushToHubMixin):
1798
1783
  trust_remote_code=False,
1799
1784
  **kwargs,
1800
1785
  ):
1801
- # We instantiate fast tokenizers based on a slow tokenizer if we don't have access to the tokenizer.json
1802
- # file or if `from_slow` is set to True.
1803
- from_slow = kwargs.get("from_slow", False)
1804
- gguf_file = kwargs.get("gguf_file")
1805
- has_tokenizer_file = resolved_vocab_files.get("tokenizer_file", None) is not None
1806
-
1807
- # If one passes a GGUF file path to `gguf_file` there is no need for this check as the tokenizer will be
1808
- # loaded directly from the GGUF file.
1809
- if (from_slow or not has_tokenizer_file) and cls.slow_tokenizer_class is not None and not gguf_file:
1810
- slow_tokenizer = (cls.slow_tokenizer_class)._from_pretrained(
1811
- copy.deepcopy(resolved_vocab_files),
1812
- pretrained_model_name_or_path,
1813
- copy.deepcopy(init_configuration),
1814
- *init_inputs,
1815
- token=token,
1816
- cache_dir=cache_dir,
1817
- local_files_only=local_files_only,
1818
- _commit_hash=_commit_hash,
1819
- **(copy.deepcopy(kwargs)),
1820
- )
1821
- else:
1822
- slow_tokenizer = None
1823
-
1824
1786
  # Prepare tokenizer initialization kwargs
1825
1787
  # Did we saved some inputs and kwargs to reload ?
1826
1788
  tokenizer_config_file = resolved_vocab_files.pop("tokenizer_config_file", None)
@@ -1829,14 +1791,16 @@ class PreTrainedTokenizerBase(PushToHubMixin):
1829
1791
  init_kwargs = json.load(tokenizer_config_handle)
1830
1792
  # used in the past to check if the tokenizer class matches the class in the repo
1831
1793
  init_kwargs.pop("tokenizer_class", None)
1832
- if not has_tokenizer_file:
1833
- init_kwargs.get("tokenizer_file", None)
1834
1794
  saved_init_inputs = init_kwargs.pop("init_inputs", ())
1835
1795
  if not init_inputs:
1836
1796
  init_inputs = saved_init_inputs
1837
1797
  else:
1838
1798
  init_kwargs = init_configuration
1839
1799
 
1800
+ if resolved_vocab_files.get("tokenizer_file", None) is not None:
1801
+ init_kwargs.pop("add_bos_token", None)
1802
+ init_kwargs.pop("add_eos_token", None)
1803
+
1840
1804
  # If independent chat template file(s) exist, they take priority over template entries in the tokenizer config
1841
1805
  chat_templates = {}
1842
1806
  chat_template_file = resolved_vocab_files.pop("chat_template_file", None)
@@ -1917,8 +1881,6 @@ class PreTrainedTokenizerBase(PushToHubMixin):
1917
1881
  init_kwargs[args_name] = file_path
1918
1882
  tokenizer_file = resolved_vocab_files.get("tokenizer_file", None)
1919
1883
 
1920
- if slow_tokenizer is not None:
1921
- init_kwargs["__slow_tokenizer"] = slow_tokenizer
1922
1884
  init_kwargs["name_or_path"] = pretrained_model_name_or_path
1923
1885
  init_kwargs["is_local"] = _is_local
1924
1886
 
@@ -2037,28 +1999,12 @@ class PreTrainedTokenizerBase(PushToHubMixin):
2037
1999
  if key in init_kwargs and added_tokens_map != {} and init_kwargs[key] is not None:
2038
2000
  init_kwargs[key] = added_tokens_map.get(str(init_kwargs[key]), init_kwargs[key])
2039
2001
 
2040
- # Track which files were loaded (if not already set by AutoTokenizer)
2041
- if "files_loaded" not in init_kwargs:
2042
- files_loaded = []
2043
- # Check which files this tokenizer class actually uses based on vocab_files_names
2044
- tokenizer_needs_files = set(cls.vocab_files_names.keys()) if hasattr(cls, "vocab_files_names") else set()
2045
-
2046
- # If tokenizer_file is in the class's vocab_files_names and exists, prioritize it (TokenizersBackend)
2047
- if "tokenizer_file" in tokenizer_needs_files and resolved_vocab_files.get("tokenizer_file"):
2048
- files_loaded.append(os.path.basename(resolved_vocab_files["tokenizer_file"]))
2049
- else:
2050
- # Otherwise, add the actual vocab files that were used by this tokenizer class
2051
- for file_key, file_path in resolved_vocab_files.items():
2052
- if (
2053
- file_path
2054
- and file_key not in ["tokenizer_config_file", "special_tokens_map_file", "added_tokens_file"]
2055
- and file_key in tokenizer_needs_files
2056
- ):
2057
- # Extract just the filename from the path
2058
- files_loaded.append(os.path.basename(file_path))
2059
- init_kwargs["files_loaded"] = files_loaded
2002
+ # From pretrained with the legacy fixes
2003
+ # for `tokenizers` based tokenizer, we actually want to have vocab and merges pre-extracted from whatever inputs
2004
+ # for `none` (PythonBackend) based tokenizer, we also want the vocab file / merge files not extracted.
2005
+ # for `sentencepiece` based tokenizer, we pass the sentencepiece model file directly.
2006
+ init_kwargs = cls.convert_to_native_format(**init_kwargs)
2060
2007
 
2061
- # Instantiate the tokenizer.
2062
2008
  try:
2063
2009
  tokenizer = cls(*init_inputs, **init_kwargs)
2064
2010
  except import_protobuf_decode_error():
@@ -2079,118 +2025,12 @@ class PreTrainedTokenizerBase(PushToHubMixin):
2079
2025
  "Unable to load vocabulary from file. "
2080
2026
  "Please check that the provided vocabulary is accessible and not corrupted."
2081
2027
  )
2082
-
2083
- # If tokenizer_file exists and tokenizer has a TokenizersBackend, replace the blank tokenizer with tokenizer.json
2084
- if tokenizer_file is not None and hasattr(tokenizer, "_tokenizer"):
2085
- from tokenizers import Tokenizer as TokenizerFast
2086
-
2087
- tokenizer._tokenizer = TokenizerFast.from_file(tokenizer_file)
2088
- # Re-run post-initialization if the tokenizer has it
2089
- if hasattr(tokenizer, "_post_init"):
2090
- tokenizer._post_init()
2091
- # If only SPM exists, try to get vocab and merges and init to load a tokenizers-backend
2092
- else:
2093
- spm_filename = find_sentencepiece_model_file(
2094
- pretrained_model_name_or_path,
2095
- revision=kwargs.get("revision"),
2096
- token=kwargs.get("token"),
2097
- cache_dir=kwargs.get("cache_dir"),
2098
- local_files_only=kwargs.get("local_files_only", False),
2099
- subfolder=kwargs.get("subfolder", ""),
2100
- )
2101
- if spm_filename is not None:
2102
- try:
2103
- resolved_spm = cached_file(
2104
- pretrained_model_name_or_path,
2105
- spm_filename,
2106
- cache_dir=kwargs.get("cache_dir"),
2107
- force_download=kwargs.get("force_download", False),
2108
- proxies=kwargs.get("proxies"),
2109
- token=kwargs.get("token"),
2110
- revision=kwargs.get("revision"),
2111
- local_files_only=kwargs.get("local_files_only", False),
2112
- subfolder=kwargs.get("subfolder", ""),
2113
- )
2114
- except Exception:
2115
- resolved_spm = None
2116
- if resolved_spm is not None:
2117
- try:
2118
- # Mirror AutoTokenizer fallback: extract vocab/merges from SentencePiece
2119
- import inspect as _inspect
2120
-
2121
- from .tokenization_utils_sentencepiece import SentencePieceExtractor
2122
-
2123
- class_sig = _inspect.signature(getattr(cls, "__init__", cls))
2124
- vocab_ids, vocab_scores, merges = SentencePieceExtractor(resolved_spm).extract()
2125
- files_loaded = [spm_filename]
2126
- init_kwargs["backend"] = "tokenizers"
2127
- init_kwargs["files_loaded"] = files_loaded
2128
- # If tokenizer needs merges too (BPE), pass both; unigram models only need vocab
2129
- if "merges" in class_sig.parameters:
2130
- return cls.from_pretrained(
2131
- pretrained_model_name_or_path,
2132
- *init_inputs,
2133
- vocab=vocab_scores,
2134
- merges=merges,
2135
- **init_kwargs,
2136
- )
2137
- elif "vocab" in class_sig.parameters:
2138
- return cls.from_pretrained(
2139
- pretrained_model_name_or_path,
2140
- *init_inputs,
2141
- vocab=vocab_scores,
2142
- **init_kwargs,
2143
- )
2144
- except Exception as e:
2145
- logger.warning(
2146
- f"Could not extract vocab/merges from the SentencePiece model to initialize a Tokenizers backend: {e}. We are falling back so we are falling back to the standard loading method."
2147
- )
2148
- pass
2149
- # Fallback to vocab.json + merges.txt (BPE) or just vocab.json (WordLevel/WordPiece)
2150
- vocab, merges, files_loaded = load_vocab_and_merges(
2151
- pretrained_model_name_or_path,
2152
- cache_dir=kwargs.get("cache_dir"),
2153
- force_download=kwargs.get("force_download", False),
2154
- proxies=kwargs.get("proxies"),
2155
- token=kwargs.get("token"),
2156
- revision=kwargs.get("revision"),
2157
- local_files_only=kwargs.get("local_files_only", False),
2158
- subfolder=kwargs.get("subfolder", ""),
2159
- )
2160
-
2161
- if vocab is not None:
2162
- try:
2163
- import inspect as _inspect
2164
-
2165
- class_sig = _inspect.signature(getattr(cls, "__init__", cls))
2166
- init_kwargs["backend"] = "tokenizers"
2167
- init_kwargs["files_loaded"] = files_loaded
2168
-
2169
- if merges is not None and "merges" in class_sig.parameters:
2170
- return cls.from_pretrained(
2171
- pretrained_model_name_or_path,
2172
- *init_inputs,
2173
- vocab=vocab,
2174
- merges=merges,
2175
- **init_kwargs,
2176
- )
2177
- elif "vocab" in class_sig.parameters:
2178
- return cls.from_pretrained(
2179
- pretrained_model_name_or_path,
2180
- *init_inputs,
2181
- vocab=vocab,
2182
- **init_kwargs,
2183
- )
2184
- except Exception:
2185
- pass
2186
- if added_tokens_decoder != {} and max(list(added_tokens_decoder.keys())[-1], 0) > tokenizer.vocab_size:
2187
- logger.info(
2188
- "Special tokens have been added in the vocabulary, make sure the associated word embeddings are"
2189
- " fine-tuned or trained."
2190
- )
2191
-
2192
2028
  return tokenizer
2193
2029
 
2030
+ @classmethod
2031
+ def convert_to_native_format(cls, **kwargs):
2032
+ return kwargs
2033
+
2194
2034
  @classmethod
2195
2035
  def convert_added_tokens(cls, obj: Union[AddedToken, Any], save=False, add_type_field=True):
2196
2036
  if isinstance(obj, dict) and "__type" in obj and obj["__type"] == "AddedToken":
@@ -2271,9 +2111,13 @@ class PreTrainedTokenizerBase(PushToHubMixin):
2271
2111
  )
2272
2112
 
2273
2113
  tokenizer_config = copy.deepcopy(self.init_kwargs)
2114
+ tokenizer_config.pop("add_bos_token", None)
2115
+ tokenizer_config.pop("add_eos_token", None)
2274
2116
 
2275
2117
  # Let's save the init kwargs
2276
2118
  target_keys = set(self.init_kwargs.keys())
2119
+ target_keys.discard("add_bos_token")
2120
+ target_keys.discard("add_eos_token")
2277
2121
  # Let's save the special tokens map (only the strings)
2278
2122
  target_keys.update(["model_max_length"])
2279
2123
 
@@ -3045,7 +2889,7 @@ class PreTrainedTokenizerBase(PushToHubMixin):
3045
2889
 
3046
2890
  def decode(
3047
2891
  self,
3048
- token_ids: Union[int, list[int], list[list[int]], np.ndarray, "torch.Tensor"],
2892
+ token_ids: Union[int, list[int], list[list[int]], np.ndarray, torch.Tensor],
3049
2893
  skip_special_tokens: bool = False,
3050
2894
  **kwargs,
3051
2895
  ) -> Union[str, list[str]]:
@@ -3093,7 +2937,7 @@ class PreTrainedTokenizerBase(PushToHubMixin):
3093
2937
 
3094
2938
  def batch_decode(
3095
2939
  self,
3096
- sequences: Union[list[int], list[list[int]], np.ndarray, "torch.Tensor"],
2940
+ sequences: Union[list[int], list[list[int]], np.ndarray, torch.Tensor],
3097
2941
  skip_special_tokens: bool = False,
3098
2942
  clean_up_tokenization_spaces: Optional[bool] = None,
3099
2943
  **kwargs,
@@ -3192,7 +3036,7 @@ class PreTrainedTokenizerBase(PushToHubMixin):
3192
3036
  truncation: bool = False,
3193
3037
  max_length: Optional[int] = None,
3194
3038
  return_tensors: Optional[Union[str, TensorType]] = None,
3195
- return_dict: bool = False,
3039
+ return_dict: bool = True,
3196
3040
  return_assistant_tokens_mask: bool = False,
3197
3041
  tokenizer_kwargs: Optional[dict[str, Any]] = None,
3198
3042
  **kwargs,
@@ -3265,14 +3109,11 @@ class PreTrainedTokenizerBase(PushToHubMixin):
3265
3109
  set, will return a dict of tokenizer outputs instead.
3266
3110
  """
3267
3111
 
3268
- if return_dict and not tokenize:
3269
- raise ValueError(
3270
- "`return_dict=True` is incompatible with `tokenize=False`, because there is no dict "
3271
- "of tokenizer outputs to return."
3272
- )
3112
+ if not tokenize:
3113
+ return_dict = False # dicts are only returned by the tokenizer anyway
3273
3114
 
3274
- if return_assistant_tokens_mask and not return_dict:
3275
- raise ValueError("`return_assistant_tokens_mask=True` is incompatible with `return_dict=False`")
3115
+ if return_assistant_tokens_mask and not (return_dict and tokenize):
3116
+ raise ValueError("`return_assistant_tokens_mask=True` requires `return_dict=True` and `tokenize=True`")
3276
3117
 
3277
3118
  if tokenizer_kwargs is None:
3278
3119
  tokenizer_kwargs = {}
@@ -3387,13 +3228,17 @@ class PreTrainedTokenizerBase(PushToHubMixin):
3387
3228
  )
3388
3229
 
3389
3230
  if conversation_history is None or len(conversation_history) == 0:
3390
- return self.apply_chat_template([message], add_generation_prompt=False, tokenize=True, **kwargs)
3231
+ return self.apply_chat_template(
3232
+ [message], add_generation_prompt=False, tokenize=True, return_dict=False, **kwargs
3233
+ )
3391
3234
 
3392
3235
  conversation = conversation_history + [message]
3393
- tokens = self.apply_chat_template(conversation, add_generation_prompt=False, tokenize=True, **kwargs)
3236
+ tokens = self.apply_chat_template(
3237
+ conversation, add_generation_prompt=False, tokenize=True, return_dict=False, **kwargs
3238
+ )
3394
3239
 
3395
3240
  prefix_tokens = self.apply_chat_template(
3396
- conversation_history, add_generation_prompt=False, tokenize=True, **kwargs
3241
+ conversation_history, add_generation_prompt=False, tokenize=True, return_dict=False, **kwargs
3397
3242
  )
3398
3243
  # It's possible that the prefix tokens are not a prefix of the full list of tokens.
3399
3244
  # For example, if the prefix is `<s>User: Hi` and the full conversation is `<s>User: Hi</s><s>Assistant: Hello`.
@@ -3519,6 +3364,45 @@ class PreTrainedTokenizerBase(PushToHubMixin):
3519
3364
  tokenizer_config["chat_template"] = self.chat_template
3520
3365
  return tokenizer_config, saved_raw_chat_template_files
3521
3366
 
3367
+ def parse_response(
3368
+ self,
3369
+ response: str | list[str | int | list[int]] | np.ndarray | torch.Tensor,
3370
+ schema: list | dict | None = None,
3371
+ ):
3372
+ """
3373
+ Converts an output string created by generating text from a model into a parsed message dictionary.
3374
+ This method is intended for use with chat models, and will read the tokenizer's `response_schema` attribute to
3375
+ control parsing, although this can be overridden by passing a `response_schema` argument directly.
3376
+
3377
+ This method is currently **highly experimental** and the schema specification is likely to change in future!
3378
+ We recommend not building production code on top of it just yet.
3379
+
3380
+ Args:
3381
+ response (`str`):
3382
+ The output string generated by the model. This can be either a decoded string or list of strings,
3383
+ or token IDs as a list/array.
3384
+ schema (`Union[list, dict]`, *optional*):
3385
+ A response schema that indicates the expected output format and how parsing should be performed.
3386
+ If not provided, the tokenizer's `response_schema` attribute will be used.
3387
+ """
3388
+ batched = (
3389
+ (isinstance(response, list) and not isinstance(response[0], int))
3390
+ or getattr(response, "ndim", 0) > 1 # For torch/numpy tensors
3391
+ )
3392
+
3393
+ if schema is None:
3394
+ if getattr(self, "response_schema", None) is None:
3395
+ raise AttributeError("This tokenizer does not have a `response_schema` for parsing chat responses!")
3396
+ schema = self.response_schema
3397
+ if batched:
3398
+ if not (isinstance(response, list) and isinstance(response[0], str)):
3399
+ response = self.batch_decode(response)
3400
+ return [recursive_parse(single_response, schema) for single_response in response]
3401
+ else:
3402
+ if not isinstance(response, str):
3403
+ response = self.decode(response)
3404
+ return recursive_parse(response, schema)
3405
+
3522
3406
 
3523
3407
  def get_fast_tokenizer_file(tokenization_files: list[str]) -> str:
3524
3408
  """
@@ -3728,15 +3612,22 @@ def _get_prepend_scheme(add_prefix_space: bool, original_tokenizer) -> str:
3728
3612
  return prepend_scheme
3729
3613
 
3730
3614
 
3731
- def generate_merges(vocab, vocab_scores: Optional[dict[str, float]] = None):
3615
+ def generate_merges(
3616
+ vocab, vocab_scores: Optional[dict[str, float]] = None, skip_tokens: Optional[Collection[str]] = None
3617
+ ):
3618
+ skip_tokens = set(skip_tokens) if skip_tokens is not None else set()
3732
3619
  reverse = vocab_scores is not None
3733
3620
  vocab_scores = dict(vocab_scores) if reverse else vocab
3734
3621
 
3735
3622
  merges = []
3736
3623
  for merge, piece_score in vocab_scores.items():
3624
+ if merge in skip_tokens:
3625
+ continue
3737
3626
  local = []
3738
3627
  for index in range(1, len(merge)):
3739
3628
  piece_l, piece_r = merge[:index], merge[index:]
3629
+ if piece_l in skip_tokens or piece_r in skip_tokens:
3630
+ continue
3740
3631
  if piece_l in vocab and piece_r in vocab:
3741
3632
  local.append((piece_l, piece_r, piece_score))
3742
3633
  local = sorted(local, key=lambda x: (vocab[x[0]], vocab[x[1]]))