mirror of
https://github.com/xtekky/gpt4free.git
synced 2025-12-06 02:30:41 -08:00
- Modified `TestThinkingProcessor` unit tests in `thinking.py` to update expected results for reasoning statuses: - Changed `"Finished"` status to `""` in `test_thinking_end`, `test_thinking_start_and_end`, and `test_chunk_with_text_after_think`. feat: Add model aliases to HuggingFaceMedia provider - Imported `model_aliases` from `.models` in `HuggingFaceMedia.py`. - Added `model_aliases` attribute to `HuggingFaceMedia` provider class. feat: Add timeout argument to CLI API parser - Introduced `--timeout` argument in `get_api_parser()` in `cli.py` with default value of `600` seconds. - Passed `timeout` argument to `run_api_args()` function. ```
67 lines
No EOL
3.7 KiB
Python
67 lines
No EOL
3.7 KiB
Python
import unittest
|
|
import time
|
|
|
|
from g4f.tools.run_tools import ThinkingProcessor, Reasoning
|
|
|
|
class TestThinkingProcessor(unittest.TestCase):
|
|
def assertEqualReasoning(self, first, second, msg=None):
|
|
if isinstance(first, Reasoning) and isinstance(second, Reasoning):
|
|
if first.status != second.status or first.is_thinking != second.is_thinking or first.token != second.token or first.label != second.label:
|
|
raise self.failureException(msg or f"{first.label} != {second.label}")
|
|
elif first != second:
|
|
raise self.failureException(msg or f"{first} != {second}")
|
|
|
|
def test_non_thinking_chunk(self):
|
|
chunk = "This is a regular text."
|
|
expected_time, expected_result = 0, [chunk]
|
|
actual_time, actual_result = ThinkingProcessor.process_thinking_chunk(chunk)
|
|
self.assertEqual(actual_time, expected_time)
|
|
self.assertEqual(actual_result, expected_result)
|
|
|
|
def test_thinking_start(self):
|
|
chunk = "Hello <think>World"
|
|
expected_time = time.time()
|
|
expected_result = ["Hello ", Reasoning(status="🤔 Is thinking...", is_thinking="<think>"), Reasoning("World")]
|
|
actual_time, actual_result = ThinkingProcessor.process_thinking_chunk(chunk)
|
|
self.assertAlmostEqual(actual_time, expected_time, delta=1)
|
|
self.assertEqual(actual_result[0], expected_result[0])
|
|
self.assertEqualReasoning(actual_result[1], expected_result[1])
|
|
self.assertEqualReasoning(actual_result[2], expected_result[2])
|
|
|
|
def test_thinking_end(self):
|
|
start_time = time.time()
|
|
chunk = "token</think> content after"
|
|
expected_result = [Reasoning("token"), Reasoning(status="", is_thinking="</think>"), " content after"]
|
|
actual_time, actual_result = ThinkingProcessor.process_thinking_chunk(chunk, start_time)
|
|
self.assertEqual(actual_time, 0)
|
|
self.assertEqualReasoning(actual_result[0], expected_result[0])
|
|
self.assertEqualReasoning(actual_result[1], expected_result[1])
|
|
self.assertEqual(actual_result[2], expected_result[2])
|
|
|
|
def test_thinking_start_and_end(self):
|
|
start_time = time.time()
|
|
chunk = "<think>token</think> content after"
|
|
expected_result = [Reasoning(status="🤔 Is thinking...", is_thinking="<think>"), Reasoning("token"), Reasoning(status="", is_thinking="</think>"), " content after"]
|
|
actual_time, actual_result = ThinkingProcessor.process_thinking_chunk(chunk, start_time)
|
|
self.assertEqual(actual_time, 0)
|
|
self.assertEqualReasoning(actual_result[0], expected_result[0])
|
|
self.assertEqualReasoning(actual_result[1], expected_result[1])
|
|
self.assertEqualReasoning(actual_result[2], expected_result[2])
|
|
self.assertEqual(actual_result[3], expected_result[3])
|
|
|
|
def test_ongoing_thinking(self):
|
|
start_time = time.time()
|
|
chunk = "Still thinking..."
|
|
expected_result = [Reasoning("Still thinking...")]
|
|
actual_time, actual_result = ThinkingProcessor.process_thinking_chunk(chunk, start_time)
|
|
self.assertEqual(actual_time, start_time)
|
|
self.assertEqualReasoning(actual_result[0], expected_result[0])
|
|
|
|
def test_chunk_with_text_after_think(self):
|
|
chunk = "Start <think>Middle</think>End"
|
|
expected_time = 0
|
|
expected_result = ["Start ", Reasoning(status="🤔 Is thinking...", is_thinking="<think>"), Reasoning("Middle"), Reasoning(status="", is_thinking="</think>"), "End"]
|
|
actual_time, actual_result = ThinkingProcessor.process_thinking_chunk(chunk)
|
|
self.assertEqual(actual_time, expected_time)
|
|
for i in range(1, len(expected_result)):
|
|
self.assertEqualReasoning(actual_result[i], expected_result[i]) |