test: pin per-turn reasoning extraction semantics

Covers four scenarios for the reasoning-box extraction loop:
 - simple turn with reasoning
 - simple turn with no reasoning
 - tool-calling turn where reasoning lives on the tool-call step
 - prior turn had reasoning, current turn does not (the stale-display
   bug the fix exists for)
 - tool-calling turn where reasoning lives on BOTH steps (latest wins)
 - empty-string reasoning treated as missing

Also updates the four inline replica loops in tests/cli/test_reasoning_command.py
to match the new turn-boundary shape so the test file reflects
production semantics.
This commit is contained in:
Teknium
2026-05-05 04:39:58 -07:00
parent efe1cb00c8
commit 9e0ef2a1bc
2 changed files with 117 additions and 0 deletions

View File

@@ -178,6 +178,8 @@ class TestLastReasoningInResult(unittest.TestCase):
messages = self._build_messages(reasoning="Let me think...")
last_reasoning = None
for msg in reversed(messages):
if msg.get("role") == "user":
break
if msg.get("role") == "assistant" and msg.get("reasoning"):
last_reasoning = msg["reasoning"]
break
@@ -187,6 +189,8 @@ class TestLastReasoningInResult(unittest.TestCase):
messages = self._build_messages(reasoning=None)
last_reasoning = None
for msg in reversed(messages):
if msg.get("role") == "user":
break
if msg.get("role") == "assistant" and msg.get("reasoning"):
last_reasoning = msg["reasoning"]
break
@@ -201,6 +205,8 @@ class TestLastReasoningInResult(unittest.TestCase):
]
last_reasoning = None
for msg in reversed(messages):
if msg.get("role") == "user":
break
if msg.get("role") == "assistant" and msg.get("reasoning"):
last_reasoning = msg["reasoning"]
break
@@ -210,6 +216,8 @@ class TestLastReasoningInResult(unittest.TestCase):
messages = self._build_messages(reasoning="")
last_reasoning = None
for msg in reversed(messages):
if msg.get("role") == "user":
break
if msg.get("role") == "assistant" and msg.get("reasoning"):
last_reasoning = msg["reasoning"]
break
@@ -584,6 +592,8 @@ class TestEndToEndPipeline(unittest.TestCase):
last_reasoning = None
for msg in reversed(messages):
if msg.get("role") == "user":
break
if msg.get("role") == "assistant" and msg.get("reasoning"):
last_reasoning = msg["reasoning"]
break