masterofaudio2077 commited on
Commit
67061fd
·
verified ·
1 Parent(s): 21a599d

Fix two transformers-v5 AttributeErrors in Florence-2 remote code

Browse files

transformers v5 changed two things this repo's remote code still assumes the old behavior for (see MIGRATION_GUIDE_V5.md):

1. `forced_bos_token_id` is no longer auto-set as a config instance attribute ('Modeling > Generate'). `Florence2LanguageConfig` read `self.forced_bos_token_id` assuming the old behavior.
2. `additional_special_tokens` was renamed to `extra_special_tokens`. `Florence2Processor.__init__` read the old attribute name, raising AttributeError.

Both fixes are minimal and backward compatible with transformers v4. Related: kijai/ComfyUI-Florence2#187, #199, Comfy-Org/ComfyUI#12277, Lightricks/ComfyUI-LTXVideo#394 all hit the symptom of bug 1. #119 also contains fixes for both but bundles them with a full-repo rewrite that corrupts config.json (swaps in Florence-2-base's architecture dimensions), so it's not safe to merge as-is -- this PR is scoped to just these two AttributeErrors. Supersedes #121, which fixed bug 1 alone and later had bug 2 added as a second commit; this PR bundles both from the start instead.

configuration_florence2.py CHANGED
@@ -261,6 +261,7 @@ class Florence2LanguageConfig(PretrainedConfig):
261
  **kwargs,
262
  )
263
 
 
264
  # ensure backward compatibility for BART CNN models
265
  if self.forced_bos_token_id is None and kwargs.get("force_bos_token_to_be_generated", False):
266
  self.forced_bos_token_id = self.bos_token_id
 
261
  **kwargs,
262
  )
263
 
264
+ self.forced_bos_token_id = kwargs.get("forced_bos_token_id", None)
265
  # ensure backward compatibility for BART CNN models
266
  if self.forced_bos_token_id is None and kwargs.get("force_bos_token_to_be_generated", False):
267
  self.forced_bos_token_id = self.bos_token_id
processing_florence2.py CHANGED
@@ -86,7 +86,9 @@ class Florence2Processor(ProcessorMixin):
86
 
87
  tokens_to_add = {
88
  'additional_special_tokens': \
89
- tokenizer.additional_special_tokens + \
 
 
90
  ['<od>', '</od>', '<ocr>', '</ocr>'] + \
91
  [f'<loc_{x}>' for x in range(1000)] + \
92
  ['<cap>', '</cap>', '<ncap>', '</ncap>','<dcap>', '</dcap>', '<grounding>', '</grounding>', '<seg>', '</seg>', '<sep>', '<region_cap>', '</region_cap>', '<region_to_desciption>', '</region_to_desciption>', '<proposal>', '</proposal>', '<poly>', '</poly>', '<and>']
 
86
 
87
  tokens_to_add = {
88
  'additional_special_tokens': \
89
+ (getattr(tokenizer, "extra_special_tokens", None)
90
+ if getattr(tokenizer, "extra_special_tokens", None) is not None
91
+ else getattr(tokenizer, "additional_special_tokens", [])) + \
92
  ['<od>', '</od>', '<ocr>', '</ocr>'] + \
93
  [f'<loc_{x}>' for x in range(1000)] + \
94
  ['<cap>', '</cap>', '<ncap>', '</ncap>','<dcap>', '</dcap>', '<grounding>', '</grounding>', '<seg>', '</seg>', '<sep>', '<region_cap>', '</region_cap>', '<region_to_desciption>', '</region_to_desciption>', '<proposal>', '</proposal>', '<poly>', '</poly>', '<and>']