thinking.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import unittest
  2. import time
  3. from g4f.tools.run_tools import ThinkingProcessor, Reasoning
  4. class TestThinkingProcessor(unittest.TestCase):
  5. def test_non_thinking_chunk(self):
  6. chunk = "This is a regular text."
  7. expected_time, expected_result = 0, [chunk]
  8. actual_time, actual_result = ThinkingProcessor.process_thinking_chunk(chunk)
  9. self.assertEqual(actual_time, expected_time)
  10. self.assertEqual(actual_result, expected_result)
  11. def test_thinking_start(self):
  12. chunk = "Hello <think>World"
  13. expected_time = time.time()
  14. expected_result = ["Hello ", Reasoning(status="🤔 Is thinking...", is_thinking="<think>"), Reasoning("World")]
  15. actual_time, actual_result = ThinkingProcessor.process_thinking_chunk(chunk)
  16. self.assertAlmostEqual(actual_time, expected_time, delta=1)
  17. self.assertEqual(actual_result[0], expected_result[0])
  18. self.assertEqual(actual_result[1], expected_result[1])
  19. self.assertEqual(actual_result[2], expected_result[2])
  20. def test_thinking_end(self):
  21. start_time = time.time()
  22. chunk = "token</think> content after"
  23. expected_result = [Reasoning("token"), Reasoning(status="Finished", is_thinking="</think>"), " content after"]
  24. actual_time, actual_result = ThinkingProcessor.process_thinking_chunk(chunk, start_time)
  25. self.assertEqual(actual_time, 0)
  26. self.assertEqual(actual_result[0], expected_result[0])
  27. self.assertEqual(actual_result[1], expected_result[1])
  28. self.assertEqual(actual_result[2], expected_result[2])
  29. def test_thinking_start_and_end(self):
  30. start_time = time.time()
  31. chunk = "<think>token</think> content after"
  32. expected_result = [Reasoning(status="🤔 Is thinking...", is_thinking="<think>"), Reasoning("token"), Reasoning(status="Finished", is_thinking="</think>"), " content after"]
  33. actual_time, actual_result = ThinkingProcessor.process_thinking_chunk(chunk, start_time)
  34. self.assertEqual(actual_time, 0)
  35. self.assertEqual(actual_result[0], expected_result[0])
  36. self.assertEqual(actual_result[1], expected_result[1])
  37. self.assertEqual(actual_result[2], expected_result[2])
  38. self.assertEqual(actual_result[3], expected_result[3])
  39. def test_ongoing_thinking(self):
  40. start_time = time.time()
  41. chunk = "Still thinking..."
  42. expected_result = [Reasoning("Still thinking...")]
  43. actual_time, actual_result = ThinkingProcessor.process_thinking_chunk(chunk, start_time)
  44. self.assertEqual(actual_time, start_time)
  45. self.assertEqual(actual_result, expected_result)
  46. def test_chunk_with_text_after_think(self):
  47. chunk = "Start <think>Middle</think>End"
  48. expected_time = 0
  49. expected_result = ["Start ", Reasoning(status="🤔 Is thinking...", is_thinking="<think>"), Reasoning("Middle"), Reasoning(status="Finished", is_thinking="</think>"), "End"]
  50. actual_time, actual_result = ThinkingProcessor.process_thinking_chunk(chunk)
  51. self.assertEqual(actual_time, expected_time)
  52. self.assertEqual(actual_result, expected_result)