@@ -812,6 +812,53 @@ async def fake_send_raw(event):
812812
813813 assert payload_types == ["conversation.item.create" , "response.create" ]
814814
815+ @pytest .mark .asyncio
816+ async def test_release_response_waiters_clears_active_response_state (self , model ):
817+ """Releasing waiters should also clear local active-response bookkeeping."""
818+ await model ._mark_response_created ()
819+
820+ await model ._release_response_waiters ()
821+
822+ assert model ._ongoing_response is False
823+ assert model ._response_control == "free"
824+
825+ @pytest .mark .asyncio
826+ async def test_close_unblocks_waiting_response_create_after_active_response (self , model ):
827+ """Closing should unblock waiters without sending a new response.create."""
828+ sent_types : list [str ] = []
829+ websocket_closed = False
830+
831+ async def send (payload : str ) -> None :
832+ nonlocal websocket_closed
833+ if websocket_closed :
834+ raise AssertionError ("send should not run after close" )
835+ sent_types .append (json .loads (payload )["type" ])
836+
837+ async def close () -> None :
838+ nonlocal websocket_closed
839+ websocket_closed = True
840+
841+ model ._websocket = SimpleNamespace (send = send , close = close )
842+ await model ._mark_response_created ()
843+
844+ task = asyncio .create_task (
845+ model ._send_user_input (RealtimeModelSendUserInput (user_input = "hi" ))
846+ )
847+ await asyncio .sleep (0 )
848+
849+ assert sent_types == ["conversation.item.create" ]
850+ assert task .done () is False
851+
852+ await model .close ()
853+
854+ with pytest .raises (AssertionError , match = "Not connected" ):
855+ await asyncio .wait_for (task , timeout = 1 )
856+
857+ assert sent_types == ["conversation.item.create" ]
858+ assert model ._ongoing_response is False
859+ assert model ._response_control == "free"
860+ assert model ._websocket is None
861+
815862 @pytest .mark .asyncio
816863 async def test_tool_output_start_response_waits_for_response_done_before_response_create (
817864 self , model , monkeypatch
0 commit comments