Skip to content

Commit

Permalink
[Bugfix] Fix edge-case crash when using chat with the Mistral Tekken …
Browse files Browse the repository at this point in the history
…Tokenizer (vllm-project#10051)

Signed-off-by: Travis Johnson <[email protected]>
Signed-off-by: Sumit Dubey <[email protected]>
  • Loading branch information
tjohnson31415 authored and sumitd2 committed Nov 14, 2024
1 parent 4edbd2f commit 1bc3c94
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 5 deletions.
9 changes: 6 additions & 3 deletions tests/models/decoder_only/language/test_mistral.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,22 @@

MODELS = [
"mistralai/Mistral-7B-Instruct-v0.1",
"mistralai/Mistral-7B-Instruct-v0.3",
# Mistral-Nemo is to big for CI, but passes locally
# "mistralai/Mistral-Nemo-Instruct-2407"
]

MISTRAL_FORMAT_MODELS = [
"mistralai/Mistral-7B-Instruct-v0.3",
# uses the v3-Tekken tokenizer
"mistralai/Ministral-8B-Instruct-2410",
# Mistral-Nemo is to big for CI, but passes locally
# "mistralai/Mistral-Nemo-Instruct-2407"
]

SAMPLING_PARAMS = SamplingParams(max_tokens=512, temperature=0.0, logprobs=5)
SYMBOLIC_LANG_PROMPTS = [
"勇敢な船乗りについての詩を書く", # japanese
"寫一首關於勇敢的水手的詩", # chinese
"ပုံပြင်လေးပြောပြပါ်:\n", # burmese
"Repeat the phrase 'URGENCY🌶️':\nURGENCY🌶️\nURGENCY🌶️\n", # see https://github.com/vllm-project/vllm/pull/9625
]

# for function calling
Expand Down
8 changes: 6 additions & 2 deletions vllm/transformers_utils/tokenizers/mistral.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ def decode(self,
skip_special_tokens: bool = True) -> str:
assert (
skip_special_tokens
), "Skipping special tokens is not supported for Mistral tokenizers."
), "skip_special_tokens=False is not supported for Mistral tokenizers."

if isinstance(ids, int):
ids = [ids]
Expand All @@ -268,12 +268,16 @@ def convert_ids_to_tokens(
# TODO(Patrick) - potentially allow special tokens to not be skipped
assert (
skip_special_tokens
), "Skipping special tokens is not supported for Mistral tokenizers."
), "skip_special_tokens=False is not supported for Mistral tokenizers."

assert isinstance(self.tokenizer,
(Tekkenizer, SentencePieceTokenizer)), type(
self.tokenizer)

if isinstance(self.tokenizer, Tekkenizer):
# skip special tokens
ids = [i for i in ids if i > self.tokenizer.num_special_tokens]

tokens = [self.tokenizer.id_to_piece(id) for id in ids]

if any("�" in t for t in tokens):
Expand Down

0 comments on commit 1bc3c94

Please sign in to comment.