diff --git a/api/gateway_chat.py b/api/gateway_chat.py index f7b48536..2ad544c2 100644 --- a/api/gateway_chat.py +++ b/api/gateway_chat.py @@ -508,7 +508,8 @@ def _run_gateway_chat_streaming( s.model = model s.model_provider = model_provider s.save() - gateway_session_payload = s.compact() | {"messages": s.messages, "tool_calls": []} + from api.streaming import _session_payload_with_full_messages + gateway_session_payload = _session_payload_with_full_messages(s, tool_calls=[]) put_gateway_event("done", {"session": redact_session_data(gateway_session_payload), "usage": usage}) put_gateway_event("stream_end", {"session_id": session_id}) except urllib.error.HTTPError as exc: diff --git a/tests/test_streaming_done_payload_message_count.py b/tests/test_streaming_done_payload_message_count.py index 1a136bc3..f3c8ded4 100644 --- a/tests/test_streaming_done_payload_message_count.py +++ b/tests/test_streaming_done_payload_message_count.py @@ -51,3 +51,16 @@ def test_apperror_payload_uses_full_message_count_helper(): assert "_session_payload_with_full_messages(s, tool_calls=s.tool_calls)" in block assert "s.compact() | {'messages': s.messages" not in block + + +def test_gateway_done_payload_uses_full_message_count_helper(): + """The gateway-routed chat `done` SSE shares the settled-payload path and + must also report a message_count matching the embedded transcript (sibling + of the two streaming.py sites).""" + gateway_source = Path("api/gateway_chat.py").read_text(encoding="utf-8") + done_idx = gateway_source.index('put_gateway_event("done"') + block_start = gateway_source.rfind("gateway_session_payload =", 0, done_idx) + block = gateway_source[block_start:done_idx] + + assert "_session_payload_with_full_messages(s, tool_calls=[])" in block + assert 's.compact() | {"messages": s.messages' not in block