From ebaedc6f059c919f4aba0f031b62b1b2b6caa03b Mon Sep 17 00:00:00 2001 From: "Paul Gauthier (aider)" Date: Fri, 7 Mar 2025 17:18:33 -0800 Subject: [PATCH] fix: Resolve JSON serialization issue in test_send_with_think_tags_stream --- tests/basic/test_reasoning.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/tests/basic/test_reasoning.py b/tests/basic/test_reasoning.py index 6a4ed23f8..1d0110e81 100644 --- a/tests/basic/test_reasoning.py +++ b/tests/basic/test_reasoning.py @@ -120,7 +120,8 @@ class TestReasoning(unittest.TestCase): mock_hash.hexdigest.return_value = "mock_hash_digest" # Mock the model's send_completion to return the hash and completion - with patch.object(model, "send_completion", return_value=(mock_hash, chunks)): + with patch.object(model, "send_completion", return_value=(mock_hash, chunks)), \ + patch.object(model, "token_count", return_value=10): # Mock token count to avoid serialization issues # Set mdstream directly on the coder object coder.mdstream = mock_mdstream @@ -243,7 +244,7 @@ class TestReasoning(unittest.TestCase): # Mock streaming response chunks class MockStreamingChunk: - def __init__(self, content=None, finish_reason=None): + def __init__(self, content=None, reasoning_content=None, finish_reason=None): self.choices = [MagicMock()] self.choices[0].delta = MagicMock() self.choices[0].finish_reason = finish_reason @@ -254,20 +255,27 @@ class TestReasoning(unittest.TestCase): else: # Need to handle attribute access that would raise AttributeError delattr(self.choices[0].delta, "content") + + # Set reasoning_content if provided + if reasoning_content is not None: + self.choices[0].delta.reasoning_content = reasoning_content + else: + # Need to handle attribute access that would raise AttributeError + delattr(self.choices[0].delta, "reasoning_content") # Create chunks to simulate streaming with think tags chunks = [ # Start with open think tag - MockStreamingChunk(content="\n"), + MockStreamingChunk(content="\n", reasoning_content=None), # Reasoning content inside think tags - MockStreamingChunk(content="My step-by-step "), - MockStreamingChunk(content="reasoning process\n"), + MockStreamingChunk(content="My step-by-step ", reasoning_content=None), + MockStreamingChunk(content="reasoning process\n", reasoning_content=None), # Close think tag - MockStreamingChunk(content="\n\n"), + MockStreamingChunk(content="\n\n", reasoning_content=None), # Main content - MockStreamingChunk(content="Final "), - MockStreamingChunk(content="answer "), - MockStreamingChunk(content="after reasoning"), + MockStreamingChunk(content="Final ", reasoning_content=None), + MockStreamingChunk(content="answer ", reasoning_content=None), + MockStreamingChunk(content="after reasoning", reasoning_content=None), # End the response MockStreamingChunk(finish_reason="stop"), ]