Skip to content

Commit 8eb27b7

Browse files
committed
fix: add closed state check to prevent operations on closed session
Added RuntimeError guards to send_message(), send_audio(), and interrupt() methods to prevent operations on closed RealtimeSession instances. Problem: - Session has _closed flag (line 114) but only __aiter__ checks it - send_message(), send_audio(), interrupt() methods don't verify state - Calling these after close() leads to operations on closed model - Can cause undefined behavior, data loss, or connection errors Fix: Added state check at start of each method: - send_message(): raises "Cannot send message: session is closed" - send_audio(): raises "Cannot send audio: session is closed" - interrupt(): raises "Cannot interrupt: session is closed" This provides clear, immediate feedback when attempting invalid operations instead of silent failures or confusing downstream errors. Test results: All 53 tests in tests/realtime/test_session.py passed
1 parent d1abf43 commit 8eb27b7

1 file changed

Lines changed: 6 additions & 0 deletions

File tree

src/agents/realtime/session.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,14 +187,20 @@ async def close(self) -> None:
187187

188188
async def send_message(self, message: RealtimeUserInput) -> None:
189189
"""Send a message to the model."""
190+
if self._closed:
191+
raise RuntimeError("Cannot send message: session is closed")
190192
await self._model.send_event(RealtimeModelSendUserInput(user_input=message))
191193

192194
async def send_audio(self, audio: bytes, *, commit: bool = False) -> None:
193195
"""Send a raw audio chunk to the model."""
196+
if self._closed:
197+
raise RuntimeError("Cannot send audio: session is closed")
194198
await self._model.send_event(RealtimeModelSendAudio(audio=audio, commit=commit))
195199

196200
async def interrupt(self) -> None:
197201
"""Interrupt the model."""
202+
if self._closed:
203+
raise RuntimeError("Cannot interrupt: session is closed")
198204
await self._model.send_event(RealtimeModelSendInterrupt())
199205

200206
async def update_agent(self, agent: RealtimeAgent) -> None:

0 commit comments

Comments
 (0)