From dff88f4fb03610e12aee8512565452c2a7c21bc4 Mon Sep 17 00:00:00 2001 From: pewdiepie-archdaemon Date: Fri, 18 Sep 2026 15:31:57 +0000 Subject: [PATCH] preserve artifact request contract in native traces --- src/clean_agent_preview.py | 5 ++++- tests/test_clean_agent_preview.py | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/clean_agent_preview.py b/src/clean_agent_preview.py index 2a53821c0..cf93366b5 100644 --- a/src/clean_agent_preview.py +++ b/src/clean_agent_preview.py @@ -4438,7 +4438,10 @@ async def stream_preview(*, endpoint_url, model, messages, headers, turn_contrac request = provider_compatible_tool_choice_request(request, model) if artifact_write_phase and not successful_artifact_write: yield event({ - 'type': 'provider_request_contract', + # Reuse the native runner's preserved step event family + # so request-boundary diagnostics survive normalization. + 'type': 'agent_step', + 'stage': 'provider_request', 'round': round_number, 'artifact_write_phase': True, 'offered_tools': [ diff --git a/tests/test_clean_agent_preview.py b/tests/test_clean_agent_preview.py index 8b771a736..4ff47e4cd 100644 --- a/tests/test_clean_agent_preview.py +++ b/tests/test_clean_agent_preview.py @@ -4705,7 +4705,8 @@ async def test_native_stream_reserves_remaining_budget_for_required_artifact(mon assert recovery["calls_used"] == module.NATIVE_ARTIFACT_RESEARCH_LIMIT request_contract = next( event for event in events - if event.get("type") == "provider_request_contract" + if event.get("type") == "agent_step" + and event.get("stage") == "provider_request" and event.get("artifact_write_phase") is True ) assert "write_file" in request_contract["offered_tools"]