From b9810b1ea64f285b224bf52fce8b0bce2eaeee64 Mon Sep 17 00:00:00 2001 From: Junhyuk Lee Date: Thu, 30 Apr 2026 07:43:16 +0000 Subject: [PATCH 1/2] Advance OSS contribution for Responses WebSocket (/v1/responses) closes with code 1000 and no events when temperature is a decimal (e.g., 1.2) Nightly Codex produced a focused contribution for https://github.com/openai/openai-python/issues/2919. Constraint: Automated nightly run; keep changes small and reviewable. Confidence: medium Scope-risk: narrow Tested: See uploaded nightly artifacts and workflow logs. Not-tested: Maintainer CI beyond this workflow. --- NIGHTLY_CODEX_FINAL_ATTEMPT_1.md | 14 +++++++++ tests/test_responses_websocket.py | 48 +++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 NIGHTLY_CODEX_FINAL_ATTEMPT_1.md create mode 100644 tests/test_responses_websocket.py diff --git a/NIGHTLY_CODEX_FINAL_ATTEMPT_1.md b/NIGHTLY_CODEX_FINAL_ATTEMPT_1.md new file mode 100644 index 0000000000..f172a95caa --- /dev/null +++ b/NIGHTLY_CODEX_FINAL_ATTEMPT_1.md @@ -0,0 +1,14 @@ +Implemented a small regression test contribution for issue #2919. + +Added: +- [tests/test_responses_websocket.py](/home/runner/work/oss-nightly-control/oss-nightly-control/target/tests/test_responses_websocket.py) +- [NIGHTLY_REPORT.md](/home/runner/work/oss-nightly-control/oss-nightly-control/target/NIGHTLY_REPORT.md) + +The test verifies both sync and async Responses WebSocket helpers serialize `temperature=1.2` as a JSON numeric float in `response.create`. + +Validation run: +- `uv run pytest tests/test_responses_websocket.py` → `2 passed` +- `uv run ruff format --check tests/test_responses_websocket.py` → passed +- `uv run ruff check tests/test_responses_websocket.py` → passed + +Remaining risk: the reported raw WebSocket close behavior appears server-side, so this locks SDK behavior rather than fixing the production close directly. \ No newline at end of file diff --git a/tests/test_responses_websocket.py b/tests/test_responses_websocket.py new file mode 100644 index 0000000000..261138f186 --- /dev/null +++ b/tests/test_responses_websocket.py @@ -0,0 +1,48 @@ +from __future__ import annotations + +import json +from typing import Any, cast + +from openai.resources.responses.responses import ResponsesConnection, AsyncResponsesConnection + + +class FakeWebSocket: + def __init__(self) -> None: + self.sent: list[str] = [] + + def send(self, data: str) -> None: + self.sent.append(data) + + +class AsyncFakeWebSocket: + def __init__(self) -> None: + self.sent: list[str] = [] + + async def send(self, data: str) -> None: + self.sent.append(data) + + +def test_responses_websocket_create_preserves_decimal_temperature() -> None: + websocket = FakeWebSocket() + connection = ResponsesConnection(cast(Any, websocket)) + + connection.response.create(model="gpt-4.1-mini", input="hello", temperature=1.2) + + assert len(websocket.sent) == 1 + payload = json.loads(websocket.sent[0]) + assert payload["type"] == "response.create" + assert payload["temperature"] == 1.2 + assert isinstance(payload["temperature"], float) + + +async def test_async_responses_websocket_create_preserves_decimal_temperature() -> None: + websocket = AsyncFakeWebSocket() + connection = AsyncResponsesConnection(cast(Any, websocket)) + + await connection.response.create(model="gpt-4.1-mini", input="hello", temperature=1.2) + + assert len(websocket.sent) == 1 + payload = json.loads(websocket.sent[0]) + assert payload["type"] == "response.create" + assert payload["temperature"] == 1.2 + assert isinstance(payload["temperature"], float) From a3645b8979a8174532970db96a41647fd106aebb Mon Sep 17 00:00:00 2001 From: Junhyuk Lee <58055473+xodn348@users.noreply.github.com> Date: Thu, 30 Apr 2026 11:45:59 -0500 Subject: [PATCH 2/2] Remove nightly runner artifact from PR branch --- NIGHTLY_CODEX_FINAL_ATTEMPT_1.md | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 NIGHTLY_CODEX_FINAL_ATTEMPT_1.md diff --git a/NIGHTLY_CODEX_FINAL_ATTEMPT_1.md b/NIGHTLY_CODEX_FINAL_ATTEMPT_1.md deleted file mode 100644 index f172a95caa..0000000000 --- a/NIGHTLY_CODEX_FINAL_ATTEMPT_1.md +++ /dev/null @@ -1,14 +0,0 @@ -Implemented a small regression test contribution for issue #2919. - -Added: -- [tests/test_responses_websocket.py](/home/runner/work/oss-nightly-control/oss-nightly-control/target/tests/test_responses_websocket.py) -- [NIGHTLY_REPORT.md](/home/runner/work/oss-nightly-control/oss-nightly-control/target/NIGHTLY_REPORT.md) - -The test verifies both sync and async Responses WebSocket helpers serialize `temperature=1.2` as a JSON numeric float in `response.create`. - -Validation run: -- `uv run pytest tests/test_responses_websocket.py` → `2 passed` -- `uv run ruff format --check tests/test_responses_websocket.py` → passed -- `uv run ruff check tests/test_responses_websocket.py` → passed - -Remaining risk: the reported raw WebSocket close behavior appears server-side, so this locks SDK behavior rather than fixing the production close directly. \ No newline at end of file