@@ -126,6 +126,7 @@ async def handle_server_message(
126126 output_dir : Path | None ,
127127 verbose : bool ,
128128 audio_buffer : list [bytes ],
129+ turn_complete_event : asyncio .Event | None = None ,
129130) -> None :
130131 """Process a message from the server."""
131132 if isinstance (message , bytes ):
@@ -160,6 +161,8 @@ async def handle_server_message(
160161 path = save_audio (combined , output_dir )
161162 logger .info ("Saved audio: %s (%d bytes)" , path , len (combined ))
162163 audio_buffer .clear ()
164+ if turn_complete_event :
165+ turn_complete_event .set ()
163166 case "INTERRUPTED" :
164167 logger .info ("Agent interrupted" )
165168 audio_buffer .clear ()
@@ -212,12 +215,13 @@ async def receive_messages(
212215 ws : ClientConnection ,
213216 output_dir : Path | None ,
214217 verbose : bool ,
218+ turn_complete_event : asyncio .Event ,
215219) -> None :
216220 """Receive and handle all messages from the server."""
217221 audio_buffer : list [bytes ] = []
218222
219223 async for message in ws :
220- await handle_server_message (message , output_dir , verbose , audio_buffer )
224+ await handle_server_message (message , output_dir , verbose , audio_buffer , turn_complete_event )
221225
222226
223227async def run_client (
@@ -262,12 +266,18 @@ async def run_client(
262266 logger .info ("Sent IMAGE frame" )
263267
264268 ping_task = asyncio .create_task (send_ping_periodically (ws ))
265- receive_task = asyncio .create_task (receive_messages (ws , output_dir , verbose ))
269+ turn_complete_event = asyncio .Event ()
270+ receive_task = asyncio .create_task (
271+ receive_messages (ws , output_dir , verbose , turn_complete_event )
272+ )
266273
267274 await stream_audio (ws , audio_data , verbose )
268275
269276 logger .info ("Waiting for agent response..." )
270- await asyncio .sleep (2 )
277+ try :
278+ await asyncio .wait_for (turn_complete_event .wait (), timeout = 60.0 )
279+ except TimeoutError :
280+ logger .warning ("Timeout waiting for TURN_COMPLETE" )
271281
272282 ping_task .cancel ()
273283 with contextlib .suppress (asyncio .CancelledError ):
0 commit comments