豆豆友情提示:这是一个非官方 GitHub 代理镜像,主要用于网络测试或访问加速。请勿在此进行登录、注册或处理任何敏感信息。进行这些操作请务必访问官方网站 github.com。 Raw 内容也通过此代理提供。
Skip to content

Commit d96a8f5

Browse files
committed
fix(realtime): update assistant message status to completed when audio is done
1 parent 67fb85a commit d96a8f5

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

src/agents/realtime/session.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,11 +275,21 @@ async def on_event(self, event: RealtimeModelEvent) -> None:
275275
)
276276
)
277277
elif event.type == "audio_done":
278+
# Update history status to completed
279+
item_id = event.item_id
280+
for i, item in enumerate(self._history):
281+
if item.item_id == item_id and hasattr(item, "status"):
282+
self._history[i] = item.model_copy(update={"status": "completed"})
283+
break
284+
278285
await self._put_event(
279286
RealtimeAudioEnd(
280287
info=self._event_info, item_id=event.item_id, content_index=event.content_index
281288
)
282289
)
290+
await self._put_event(
291+
RealtimeHistoryUpdated(info=self._event_info, history=self._history)
292+
)
283293
elif event.type == "input_audio_transcription_completed":
284294
prev_len = len(self._history)
285295
self._history = RealtimeSession._get_new_history(self._history, event)

tests/realtime/test_session.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -382,8 +382,15 @@ async def test_audio_events_transformation(self, mock_model, mock_agent):
382382
done_event = RealtimeModelAudioDoneEvent(item_id="item_1", content_index=0)
383383
await session.on_event(done_event)
384384

385-
# Should have 6 events total (2 per event: raw + transformed)
386-
assert session._event_queue.qsize() == 6
385+
# Should have 7 events total:
386+
# 1. raw audio_event
387+
# 2. transformed RealtimeAudio
388+
# 3. raw interrupted_event
389+
# 4. transformed RealtimeAudioInterrupted
390+
# 5. raw done_event
391+
# 6. transformed RealtimeAudioEnd
392+
# 7. RealtimeHistoryUpdated (from audio_done)
393+
assert session._event_queue.qsize() == 7
387394

388395
# Check audio event transformation
389396
await session._event_queue.get() # raw event
@@ -401,6 +408,10 @@ async def test_audio_events_transformation(self, mock_model, mock_agent):
401408
done_session_event = await session._event_queue.get()
402409
assert isinstance(done_session_event, RealtimeAudioEnd)
403410

411+
# Check history updated event
412+
history_updated_event = await session._event_queue.get()
413+
assert isinstance(history_updated_event, RealtimeHistoryUpdated)
414+
404415
@pytest.mark.asyncio
405416
async def test_turn_events_transformation(self, mock_model, mock_agent):
406417
"""Test that turn start/end events are properly transformed"""

0 commit comments

Comments
 (0)