Merge pull request #21416 from BerriAI/fix/token-counter-hf-fallback

fix(token-counter): normalize encode() return type and handle HF tokenizer fallback
This commit is contained in:
jquinter
2026-02-17 20:01:42 -03:00
committed by GitHub
2 changed files with 11 additions and 2 deletions
+4
View File
@@ -2178,6 +2178,10 @@ def encode(model="", text="", custom_tokenizer: Optional[dict] = None):
enc = tokenizer_json["tokenizer"].encode(text, disallowed_special=())
else:
enc = tokenizer_json["tokenizer"].encode(text)
# Normalize: HuggingFace Tokenizer.encode() returns an Encoding object;
# extract .ids so the return type is always List[int].
if hasattr(enc, "ids"):
return enc.ids
return enc
@@ -210,8 +210,13 @@ def test_tokenizers():
)
# assert that all token values are different
# llama2 may fall back to the tiktoken tokenizer when the HuggingFace
# model hub is unreachable (e.g. in CI). In that case the count will
# equal the openai count and the differentiation assertion is skipped.
if openai_tokens == llama2_tokens:
pytest.skip("llama2 fell back to tiktoken (HF hub unreachable); skipping differentiation assertion")
assert (
openai_tokens != llama2_tokens != llama3_tokens_1
llama2_tokens != llama3_tokens_1
), "Token values are not different."
assert (
@@ -251,7 +256,7 @@ def test_encoding_and_decoding():
# llama2 encoding + decoding
llama2_tokens = encode(model="meta-llama/Llama-2-7b-chat", text=sample_text)
llama2_text = decode(
model="meta-llama/Llama-2-7b-chat", tokens=llama2_tokens.ids # type: ignore
model="meta-llama/Llama-2-7b-chat", tokens=llama2_tokens
)
assert llama2_text == sample_text