From dfdd7b6e6fc3ec3b637d200d95e36adc7c6a49bb Mon Sep 17 00:00:00 2001 From: Zyproth Date: Sun, 3 May 2026 16:27:25 +0300 Subject: [PATCH] fix(codex-transport): preserve request override headers for xai responses --- agent/transports/codex.py | 13 ++++++++++++- scripts/release.py | 1 + tests/agent/transports/test_codex_transport.py | 14 ++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/agent/transports/codex.py b/agent/transports/codex.py index 7d6bed46de..2ebc396fbb 100644 --- a/agent/transports/codex.py +++ b/agent/transports/codex.py @@ -143,7 +143,18 @@ class ResponsesApiTransport(ProviderTransport): kwargs["max_output_tokens"] = max_tokens if is_xai_responses and session_id: - kwargs["extra_headers"] = {"x-grok-conv-id": session_id} + existing_extra_headers = kwargs.get("extra_headers") + merged_extra_headers: Dict[str, str] = {} + if isinstance(existing_extra_headers, dict): + merged_extra_headers.update( + { + str(key): str(value) + for key, value in existing_extra_headers.items() + if key and value is not None + } + ) + merged_extra_headers["x-grok-conv-id"] = session_id + kwargs["extra_headers"] = merged_extra_headers return kwargs diff --git a/scripts/release.py b/scripts/release.py index c1988049d4..6871f58ce1 100755 --- a/scripts/release.py +++ b/scripts/release.py @@ -621,6 +621,7 @@ AUTHOR_MAP = { "2114364329@qq.com": "cuyua9", "2557058999@qq.com": "Disaster-Terminator", "cine.dreamer.one@gmail.com": "LeonSGP43", + "zyprothh@gmail.com": "Zyproth", "leozeli@qq.com": "leozeli", "linlehao@cuhk.edu.cn": "LehaoLin", "liutong@isacas.ac.cn": "I3eg1nner", diff --git a/tests/agent/transports/test_codex_transport.py b/tests/agent/transports/test_codex_transport.py index d9db3be7c3..26145660cc 100644 --- a/tests/agent/transports/test_codex_transport.py +++ b/tests/agent/transports/test_codex_transport.py @@ -126,6 +126,20 @@ class TestCodexBuildKwargs: ) assert kw.get("extra_headers", {}).get("x-grok-conv-id") == "conv-123" + def test_xai_headers_preserve_request_override_headers(self, transport): + messages = [{"role": "user", "content": "Hi"}] + kw = transport.build_kwargs( + model="grok-3", messages=messages, tools=[], + session_id="conv-123", + is_xai_responses=True, + request_overrides={"extra_headers": {"X-Test": "1", "X-Trace": "abc"}}, + ) + assert kw.get("extra_headers") == { + "X-Test": "1", + "X-Trace": "abc", + "x-grok-conv-id": "conv-123", + } + def test_minimal_effort_clamped(self, transport): messages = [{"role": "user", "content": "Hi"}] kw = transport.build_kwargs(