From 1bf5d587ad2686fd9723f82d2c6b4b16ea3a9ac7 Mon Sep 17 00:00:00 2001 From: Julien Denize <40604584+juliendenize@users.noreply.github.com> Date: Fri, 24 Apr 2026 13:24:56 +0200 Subject: [PATCH 1/3] [MistralCommonBackend] Soften validation mode and apply_chat_template checks --- src/transformers/tokenization_mistral_common.py | 12 +++--------- tests/test_tokenization_mistral_common.py | 8 +++++--- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/transformers/tokenization_mistral_common.py b/src/transformers/tokenization_mistral_common.py index 1f218fe40873..6b5cb5845be8 100644 --- a/src/transformers/tokenization_mistral_common.py +++ b/src/transformers/tokenization_mistral_common.py @@ -1090,16 +1090,11 @@ def apply_chat_template( # type: ignore[override] If not specified, the default reasoning effort will be used. kwargs (additional keyword arguments, *optional*): - Not supported by `MistralCommonBackend.apply_chat_template`. - Will raise an error if used. + Additional arguments passed to the mistral-common `ChatCompletionRequest.from_openai` method. Returns: `Union[str, list[int], list[str], list[list[int]], BatchEncoding]`: The tokenized chat so far, including control tokens. This output is ready to pass to the model, either directly or via methods like `generate()`. """ - if kwargs: - raise ValueError( - f"Kwargs {list(kwargs.keys())} are not supported by `MistralCommonBackend.apply_chat_template`." - ) if not isinstance(truncation, bool): raise TypeError("`truncation` must be a boolean for `apply_chat_template` method.") @@ -1185,6 +1180,7 @@ def _maybe_adapt_message(message: dict[str, Any]) -> None: tools=tools, continue_final_message=continue_final_message, reasoning_effort=reasoning_effort, + **kwargs ) tokenized_request = self.tokenizer.encode_chat_completion(chat_request) @@ -1595,7 +1591,7 @@ def save_pretrained( # type: ignore[override] def _get_validation_mode(mode: str | ValidationMode) -> ValidationMode: """Get the validation mode from a string or a ValidationMode.""" _invalid_mode_msg = ( - f"Invalid `mistral-common` tokenizer mode: {mode}. Possible values are 'finetuning' or 'test'." + f"Invalid `mistral-common` tokenizer mode: {mode}. Possible values are {', '.join([vm.value for vm in list(ValidationMode)])}." ) if isinstance(mode, str): try: @@ -1605,8 +1601,6 @@ def _get_validation_mode(mode: str | ValidationMode) -> ValidationMode: elif not isinstance(mode, (str, ValidationMode)): raise ValueError(_invalid_mode_msg) - if mode not in [ValidationMode.finetuning, ValidationMode.test]: - raise ValueError(_invalid_mode_msg) return mode def __repr__(self) -> str: diff --git a/tests/test_tokenization_mistral_common.py b/tests/test_tokenization_mistral_common.py index 96d44e2cc80c..365994cc35b2 100644 --- a/tests/test_tokenization_mistral_common.py +++ b/tests/test_tokenization_mistral_common.py @@ -903,7 +903,7 @@ def test_apply_chat_template_basic(self): ) with self.assertRaises( - ValueError, msg="Kwargs [unk_args] are not supported by `MistralCommonBackend.apply_chat_template`." + ValueError, msg="Invalid parameters passed to `ChatCompletionRequest.from_openai`" ): self.tokenizer.apply_chat_template(conversation, tokenize=True, unk_args="") @@ -1270,7 +1270,7 @@ def test_batch_apply_chat_template(self): with self.assertRaises( ValueError, - msg="Kwargs [unk_args] are not supported by `MistralCommonBackend.batch_apply_chat_template`.", + msg="Invalid parameters passed to `ChatCompletionRequest.from_openai`", ): self.tokenizer.apply_chat_template(conversations, tools=tools, tokenize=True, unk_args="") @@ -2140,10 +2140,12 @@ def test_get_validation_mode(self): (ValidationMode.test, ValidationMode.test), ("finetuning", ValidationMode.finetuning), (ValidationMode.finetuning, ValidationMode.finetuning), + ("serving", ValidationMode.serving), + (ValidationMode.serving, ValidationMode.serving), ]: self.assertEqual(MistralCommonBackend._get_validation_mode(mode), expected) - for invalid_mode in [("serving", ValidationMode.serving, "invalid", 1)]: + for invalid_mode in ["invalid", 1]: with self.assertRaises(ValueError): MistralCommonBackend._get_validation_mode(invalid_mode) From 5e736f68e6aba63cfb2f5c3ae873be7f01834ebe Mon Sep 17 00:00:00 2001 From: Julien Denize <40604584+juliendenize@users.noreply.github.com> Date: Fri, 24 Apr 2026 14:46:49 +0200 Subject: [PATCH 2/3] style --- src/transformers/tokenization_mistral_common.py | 6 ++---- tests/test_tokenization_mistral_common.py | 4 +--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/transformers/tokenization_mistral_common.py b/src/transformers/tokenization_mistral_common.py index 6b5cb5845be8..85fdeea1850f 100644 --- a/src/transformers/tokenization_mistral_common.py +++ b/src/transformers/tokenization_mistral_common.py @@ -1180,7 +1180,7 @@ def _maybe_adapt_message(message: dict[str, Any]) -> None: tools=tools, continue_final_message=continue_final_message, reasoning_effort=reasoning_effort, - **kwargs + **kwargs, ) tokenized_request = self.tokenizer.encode_chat_completion(chat_request) @@ -1590,9 +1590,7 @@ def save_pretrained( # type: ignore[override] @staticmethod def _get_validation_mode(mode: str | ValidationMode) -> ValidationMode: """Get the validation mode from a string or a ValidationMode.""" - _invalid_mode_msg = ( - f"Invalid `mistral-common` tokenizer mode: {mode}. Possible values are {', '.join([vm.value for vm in list(ValidationMode)])}." - ) + _invalid_mode_msg = f"Invalid `mistral-common` tokenizer mode: {mode}. Possible values are {', '.join([vm.value for vm in list(ValidationMode)])}." if isinstance(mode, str): try: mode = ValidationMode[mode] diff --git a/tests/test_tokenization_mistral_common.py b/tests/test_tokenization_mistral_common.py index 365994cc35b2..3d79639069d9 100644 --- a/tests/test_tokenization_mistral_common.py +++ b/tests/test_tokenization_mistral_common.py @@ -902,9 +902,7 @@ def test_apply_chat_template_basic(self): expected_tokenized.tokens, ) - with self.assertRaises( - ValueError, msg="Invalid parameters passed to `ChatCompletionRequest.from_openai`" - ): + with self.assertRaises(ValueError, msg="Invalid parameters passed to `ChatCompletionRequest.from_openai`"): self.tokenizer.apply_chat_template(conversation, tokenize=True, unk_args="") def test_apply_chat_template_continue_final_message(self): From 587b45d6f67091e077364768d92ff26acc243b86 Mon Sep 17 00:00:00 2001 From: Julien Denize <40604584+juliendenize@users.noreply.github.com> Date: Mon, 27 Apr 2026 10:46:09 +0200 Subject: [PATCH 3/3] Remove error catch of ChatCompletionRequest.from_openai --- tests/test_tokenization_mistral_common.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/tests/test_tokenization_mistral_common.py b/tests/test_tokenization_mistral_common.py index 3d79639069d9..a6b195239641 100644 --- a/tests/test_tokenization_mistral_common.py +++ b/tests/test_tokenization_mistral_common.py @@ -902,9 +902,6 @@ def test_apply_chat_template_basic(self): expected_tokenized.tokens, ) - with self.assertRaises(ValueError, msg="Invalid parameters passed to `ChatCompletionRequest.from_openai`"): - self.tokenizer.apply_chat_template(conversation, tokenize=True, unk_args="") - def test_apply_chat_template_continue_final_message(self): conversation = [ {"role": "system", "content": "You are a helpful assistant."}, @@ -1266,12 +1263,6 @@ def test_batch_apply_chat_template(self): self.assertEqual(text, expected.text) self.assertEqual(token, expected.tokens) - with self.assertRaises( - ValueError, - msg="Invalid parameters passed to `ChatCompletionRequest.from_openai`", - ): - self.tokenizer.apply_chat_template(conversations, tools=tools, tokenize=True, unk_args="") - def test_batch_apply_chat_template_images(self): conversations = [ [