diff --git a/agent/codex_runtime.py b/agent/codex_runtime.py index 34ef399b261ae..65cc3cd1a0d07 100644 --- a/agent/codex_runtime.py +++ b/agent/codex_runtime.py @@ -46,7 +46,10 @@ def _codex_request_failure_details(error: BaseException) -> tuple[int | None, st exception_classes.append(type(current).__name__) if request_body_bytes is None: - request = getattr(current, "request", None) + try: + request = getattr(current, "request", None) + except Exception: + request = None if request is not None: try: content = request.content diff --git a/tests/agent/test_codex_request_transport_diagnostics.py b/tests/agent/test_codex_request_transport_diagnostics.py index deea310fdb351..0cb4567d2a312 100644 --- a/tests/agent/test_codex_request_transport_diagnostics.py +++ b/tests/agent/test_codex_request_transport_diagnostics.py @@ -9,7 +9,16 @@ import httpx import pytest from openai import APIConnectionError -from agent.codex_runtime import run_codex_stream +from agent.codex_runtime import _codex_request_failure_details, run_codex_stream + + +def test_transport_failure_without_attached_request_reports_unknown_size(): + error = httpx.RemoteProtocolError("connection closed") + + request_body_bytes, exception_chain = _codex_request_failure_details(error) + + assert request_body_bytes is None + assert exception_chain == "RemoteProtocolError" def test_transport_failure_logs_exact_request_bytes_and_class_chain(caplog):