From 584ef0d68a3a6ee7e3dbc705652039c1b1228b5f Mon Sep 17 00:00:00 2001 From: kxz2002 Date: Tue, 4 Nov 2025 19:17:27 +0800 Subject: [PATCH 1/2] fix ernie_vl_reasoning_parsers.py 'end_token' to 'think_end_token' --- fastdeploy/reasoning/ernie_vl_reasoning_parsers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fastdeploy/reasoning/ernie_vl_reasoning_parsers.py b/fastdeploy/reasoning/ernie_vl_reasoning_parsers.py index 5636ee9f5ea..18e15f18aa3 100644 --- a/fastdeploy/reasoning/ernie_vl_reasoning_parsers.py +++ b/fastdeploy/reasoning/ernie_vl_reasoning_parsers.py @@ -70,9 +70,9 @@ def extract_reasoning_content_streaming( if len(delta_token_ids) == 1 and delta_token_ids[0] == self.think_end_token_id: return None if self.think_end_token_id in delta_token_ids: - end_index = delta_text.find(self.end_token) + end_index = delta_text.find(self.think_end_token) reasoning_content = delta_text[:end_index] - content = delta_text[end_index + len(self.end_token) :] + content = delta_text[end_index + len(self.think_end_token) :] return DeltaMessage(reasoning_content=reasoning_content, content=content) elif self.think_end_token_id in previous_token_ids: return DeltaMessage(content=delta_text) From 5684ab62815ceee03cbe31e4ee56caa214b21ac2 Mon Sep 17 00:00:00 2001 From: kxz2002 Date: Wed, 5 Nov 2025 11:36:36 +0800 Subject: [PATCH 2/2] add unit tests --- tests/reasoning/test_reasoning_parser.py | 56 ++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/tests/reasoning/test_reasoning_parser.py b/tests/reasoning/test_reasoning_parser.py index 26a7457db9a..e6deded445d 100644 --- a/tests/reasoning/test_reasoning_parser.py +++ b/tests/reasoning/test_reasoning_parser.py @@ -21,6 +21,7 @@ from fastdeploy.reasoning.ernie_45_vl_thinking_reasoning_parser import ( Ernie45VLThinkingReasoningParser, ) +from fastdeploy.reasoning.ernie_vl_reasoning_parsers import ErnieVLReasoningParser from fastdeploy.reasoning.ernie_x1_reasoning_parsers import ErnieX1ReasoningParser @@ -425,5 +426,60 @@ def test_batch_think_end_content_with_newline(self): self.assertEqual(content, "\n\n actual response") +class TestErnieVLReasoningParser(unittest.TestCase): + def setUp(self): + self.tokenizer = DummyTokenizer() + self.parser = ErnieVLReasoningParser(tokenizer=self.tokenizer) + self.test_request = ChatCompletionRequest( + model="ernie-test", messages=[{"role": "user", "content": "test prompt"}] + ) + + def test_extract_reasoning_content_stream(self): + result = self.parser.extract_reasoning_content_streaming( + previous_text="abc", + current_text="abcxyz", + delta_text="xyz", + previous_token_ids=[200, 201, 202], + current_token_ids=[200, 201, 202, 100, 110, 120, 130], + delta_token_ids=[100, 110, 120, 130], + ) + self.assertIsInstance(result, DeltaMessage) + self.assertEqual(result.reasoning_content, "") + self.assertEqual(result.content, "xyz") + + def test_extract_reasoning_content_stream_think_in_previous(self): + result = self.parser.extract_reasoning_content_streaming( + previous_text="abc", + current_text="abcxyz", + delta_text="xyz", + previous_token_ids=[200, 201, 202, 100], + current_token_ids=[200, 201, 202, 100, 110, 120, 130], + delta_token_ids=[110, 120, 130], + ) + self.assertIsInstance(result, DeltaMessage) + self.assertIsNone(result.reasoning_content) + self.assertEqual(result.content, "xyz") + + def test_extract_reasoning_content_stream_no_think_token(self): + result = self.parser.extract_reasoning_content_streaming( + previous_text="abc", + current_text="abcxyz", + delta_text="xyz", + previous_token_ids=[200, 201, 202], + current_token_ids=[200, 201, 202, 110, 120, 130], + delta_token_ids=[110, 120, 130], + ) + self.assertIsInstance(result, DeltaMessage) + self.assertIsNone(result.content) + self.assertEqual(result.reasoning_content, "xyz") + + def test_extract_reasoning_content(self): + reasoning, content = self.parser.extract_reasoning_content( + model_output="reasoning\nactual response", request=self.test_request + ) + self.assertEqual(reasoning, "reasoning") + self.assertEqual(content, "\nactual response") + + if __name__ == "__main__": unittest.main()