kashif HF Staff commited on
Commit
1f15b8c
·
verified ·
1 Parent(s): 0650dae

load chat_template in from_pretrained (vLLM apply_chat_template fix)

Browse files
Files changed (1) hide show
  1. tokenizer.py +47 -15
tokenizer.py CHANGED
@@ -580,29 +580,61 @@ class HybridDNATokenizer(PreTrainedTokenizer):
580
  return (save_directory,)
581
 
582
  @classmethod
583
- def from_pretrained(cls, pretrained_model_name_or_path, *args, **kwargs):
 
 
 
 
 
 
 
 
 
 
584
  # Custom loader: PreTrainedTokenizer.from_pretrained is incompatible with this
585
  # tokenizer's __init__ (it re-passes bos_token etc.), so construct directly from
586
  # bio_config/dna_config. That bypasses standard metadata loading, so also read
587
  # chat_template from tokenizer_config.json (vLLM / apply_chat_template need it).
588
- import os as _os, json as _json
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
589
  cfg = {}
590
  for _name in ("bio_config.json", "dna_config.json"):
591
- _p = _os.path.join(pretrained_model_name_or_path, _name)
592
- if _os.path.exists(_p):
593
- with open(_p, "r", encoding="utf-8") as _f:
594
- cfg = _json.load(_f)
595
  break
 
596
  _init = {"base_tokenizer_path": pretrained_model_name_or_path}
597
  for _key in ("k", "tail", "auto_dna_tags"):
598
  if _key in cfg:
599
  _init[_key] = cfg[_key]
600
- tok = cls(**_init, **kwargs)
601
- if getattr(tok, "chat_template", None) is None:
602
- _tc = _os.path.join(pretrained_model_name_or_path, "tokenizer_config.json")
603
- if _os.path.exists(_tc):
604
- with open(_tc, "r", encoding="utf-8") as _f:
605
- _c = _json.load(_f)
606
- if _c.get("chat_template"):
607
- tok.chat_template = _c["chat_template"]
608
- return tok
 
 
 
 
 
 
 
580
  return (save_directory,)
581
 
582
  @classmethod
583
+ def from_pretrained(
584
+ cls,
585
+ pretrained_model_name_or_path,
586
+ *args,
587
+ cache_dir=None,
588
+ local_files_only=False,
589
+ token=None,
590
+ revision="main",
591
+ trust_remote_code=False,
592
+ **kwargs,
593
+ ):
594
  # Custom loader: PreTrainedTokenizer.from_pretrained is incompatible with this
595
  # tokenizer's __init__ (it re-passes bos_token etc.), so construct directly from
596
  # bio_config/dna_config. That bypasses standard metadata loading, so also read
597
  # chat_template from tokenizer_config.json (vLLM / apply_chat_template need it).
598
+ from transformers.utils.hub import cached_file
599
+
600
+ proxies = kwargs.pop("proxies", None)
601
+ subfolder = kwargs.pop("subfolder", None)
602
+ commit_hash = kwargs.pop("_commit_hash", None)
603
+ hub_kwargs = {
604
+ "cache_dir": cache_dir,
605
+ "local_files_only": local_files_only,
606
+ "proxies": proxies,
607
+ "revision": revision,
608
+ "subfolder": subfolder,
609
+ "token": token,
610
+ "_commit_hash": commit_hash,
611
+ "_raise_exceptions_for_missing_entries": False,
612
+ }
613
+
614
  cfg = {}
615
  for _name in ("bio_config.json", "dna_config.json"):
616
+ _p = cached_file(pretrained_model_name_or_path, _name, **hub_kwargs)
617
+ if _p is not None:
618
+ with open(_p, encoding="utf-8") as _f:
619
+ cfg = json.load(_f)
620
  break
621
+
622
  _init = {"base_tokenizer_path": pretrained_model_name_or_path}
623
  for _key in ("k", "tail", "auto_dna_tags"):
624
  if _key in cfg:
625
  _init[_key] = cfg[_key]
626
+
627
+ tokenizer_config_path = cached_file(pretrained_model_name_or_path, "tokenizer_config.json", **hub_kwargs)
628
+ if tokenizer_config_path is not None:
629
+ with open(tokenizer_config_path, encoding="utf-8") as _f:
630
+ tokenizer_config = json.load(_f)
631
+ if tokenizer_config.get("chat_template"):
632
+ _init["chat_template"] = tokenizer_config["chat_template"]
633
+
634
+ chat_template_path = cached_file(pretrained_model_name_or_path, "chat_template.jinja", **hub_kwargs)
635
+ if chat_template_path is not None:
636
+ with open(chat_template_path, encoding="utf-8") as _f:
637
+ _init["chat_template"] = _f.read()
638
+
639
+ _init.update(kwargs)
640
+ return cls(**_init)