@@ -28,10 +28,11 @@ def mock_engine_and_tokenizer():
2828 mock_engine = MagicMock ()
2929 mock_model = MagicMock ()
3030 mock_tokenizer = MagicMock ()
31- mock_tokenizer .tokenizer .tokenizer = MagicMock ()
32- mock_tokenizer .tokenizer .tokenizer .chat_template = "{{messages}}"
33- mock_tokenizer .tokenizer .tokenizer .bos_token = "<bos>"
34- mock_tokenizer .tokenizer .tokenizer .eos_token = "<eos>"
31+ # MBridge tokenizer uses _tokenizer to access the underlying HF tokenizer
32+ mock_tokenizer ._tokenizer = MagicMock ()
33+ mock_tokenizer ._tokenizer .chat_template = "{{messages}}"
34+ mock_tokenizer ._tokenizer .bos_token = "<bos>"
35+ mock_tokenizer ._tokenizer .eos_token = "<eos>"
3536
3637 return mock_engine , mock_model , mock_tokenizer
3738
@@ -70,7 +71,7 @@ def test_dict_to_str():
7071@pytest .mark .run_only_on ("GPU" )
7172def test_apply_chat_template_none_template (deployable ):
7273 """Test chat template application when tokenizer has no chat template."""
73- deployable .mcore_tokenizer .tokenizer . tokenizer .chat_template = None
74+ deployable .mcore_tokenizer ._tokenizer .chat_template = None
7475 messages = [{"role" : "user" , "content" : "Hello" }]
7576
7677 with pytest .raises (ValueError , match = "The tokenizer does not have a chat template defined" ):
@@ -81,7 +82,7 @@ def test_apply_chat_template_none_template(deployable):
8182def test_apply_chat_template_attribute_error (deployable ):
8283 """Test chat template application when tokenizer raises AttributeError."""
8384 # Remove the chat_template attribute to trigger AttributeError
84- del deployable .mcore_tokenizer .tokenizer . tokenizer .chat_template
85+ del deployable .mcore_tokenizer ._tokenizer .chat_template
8586 messages = [{"role" : "user" , "content" : "Hello" }]
8687
8788 with pytest .raises (ValueError , match = "The tokenizer does not have chat template" ):
@@ -441,7 +442,7 @@ def test_apply_chat_template(deployable):
441442@pytest .mark .run_only_on ("GPU" )
442443def test_remove_eos_token (deployable ):
443444 """Test EOS token removal covering all code paths."""
444- # Test normal case - eos_token accessible via self.mcore_tokenizer.tokenizer.tokenizer .eos_token
445+ # Test normal case - eos_token accessible via self.mcore_tokenizer._tokenizer .eos_token
445446 texts = ["Hello<eos>" , "World" , "Test<eos>" ]
446447 cleaned_texts = deployable .remove_eos_token (texts )
447448 assert cleaned_texts == ["Hello" , "World" , "Test" ]
@@ -452,7 +453,7 @@ def test_remove_eos_token_comprehensive(deployable):
452453 """Test remove_eos_token method covering all code paths and edge cases."""
453454
454455 # Test case 1: Normal case - eos_token accessible
455- deployable .mcore_tokenizer .tokenizer . tokenizer .eos_token = "<eos>"
456+ deployable .mcore_tokenizer ._tokenizer .eos_token = "<eos>"
456457 texts = ["Hello<eos>" , "World" , "Test<eos>" ]
457458 cleaned_texts = deployable .remove_eos_token (texts )
458459 assert cleaned_texts == ["Hello" , "World" , "Test" ]
@@ -477,10 +478,10 @@ def test_remove_eos_token_comprehensive(deployable):
477478 cleaned_texts = deployable .remove_eos_token (texts )
478479 assert cleaned_texts == ["" , "Hello" , "" ]
479480
480- # Test case 6: Fallback case 1 - AttributeError on eos_token, but eos_id and special_tokens work
481- del deployable .mcore_tokenizer .tokenizer . tokenizer .eos_token
482- deployable .mcore_tokenizer .tokenizer . tokenizer .eos_id = 2
483- deployable .mcore_tokenizer .tokenizer . tokenizer . special_tokens = {2 : "</s>" }
481+ # Test case 6: Fallback case 1 - AttributeError on eos_token, but eos_id and inv_vocab work
482+ del deployable .mcore_tokenizer ._tokenizer .eos_token
483+ deployable .mcore_tokenizer ._tokenizer .eos_id = 2
484+ deployable .mcore_tokenizer ._tokenizer . inv_vocab = {2 : "</s>" }
484485
485486 texts = ["Hello</s>" , "World" , "Test</s>" ]
486487 cleaned_texts = deployable .remove_eos_token (texts )
@@ -492,16 +493,16 @@ def test_remove_eos_token_comprehensive(deployable):
492493 assert cleaned_texts == ["Hello</s>World" ]
493494
494495 # Test case 8: Fallback case 2 - Both AttributeErrors, return unchanged
495- del deployable .mcore_tokenizer .tokenizer . tokenizer .eos_id
496+ del deployable .mcore_tokenizer ._tokenizer .eos_id
496497
497498 texts = ["Hello<eos>" , "World</s>" , "Test" ]
498499 cleaned_texts = deployable .remove_eos_token (texts )
499500 assert cleaned_texts == ["Hello<eos>" , "World</s>" , "Test" ] # Should return unchanged
500501
501502 # Test case 9: Fallback case 2 - AttributeError on eos_id but not on eos_token access
502- # First delete the special_tokens to trigger AttributeError in second try block
503- deployable .mcore_tokenizer .tokenizer . tokenizer .eos_id = 2
504- del deployable .mcore_tokenizer .tokenizer . tokenizer . special_tokens
503+ # First delete the inv_vocab to trigger AttributeError in second try block
504+ deployable .mcore_tokenizer ._tokenizer .eos_id = 2
505+ del deployable .mcore_tokenizer ._tokenizer . inv_vocab
505506
506507 texts = ["Hello<eos>" , "World" ]
507508 cleaned_texts = deployable .remove_eos_token (texts )
0 commit comments