Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions fastdeploy/reasoning/ernie_vl_reasoning_parsers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
56 changes: 56 additions & 0 deletions tests/reasoning/test_reasoning_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down Expand Up @@ -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="abc</think>xyz",
delta_text="</think>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</think>",
current_text="abc</think>xyz",
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</think>\nactual response", request=self.test_request
)
self.assertEqual(reasoning, "reasoning")
self.assertEqual(content, "\nactual response")


if __name__ == "__main__":
unittest.main()
Loading