Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/agents/realtime/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,9 @@ async def on_event(self, event: RealtimeModelEvent) -> None:
content=[AssistantAudio(transcript=self._item_transcripts[item_id])],
),
)
await self._put_event(
RealtimeHistoryUpdated(info=self._event_info, history=self._history)
)

# Check if we should run guardrails based on debounce threshold
current_length = len(self._item_transcripts[item_id])
Expand Down
24 changes: 18 additions & 6 deletions tests/realtime/test_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -565,11 +565,13 @@ async def test_item_deleted_event_removes_item(self, mock_model, mock_agent):

@pytest.mark.asyncio
async def test_ignored_events_only_generate_raw_events(self, mock_model, mock_agent):
"""Test that ignored events (transcript_delta, connection_status, other) only generate raw
events"""
"""Test that connection_status and other events only generate raw events.

transcript_delta now also emits RealtimeHistoryUpdated after updating history.
"""
session = RealtimeSession(mock_model, mock_agent, None)

# Test transcript delta (should be ignored per TODO comment)
# transcript_delta updates history and emits RealtimeHistoryUpdated
transcript_event = RealtimeModelTranscriptDeltaEvent(
item_id="item_1", delta="hello", response_id="resp_1"
)
Expand All @@ -583,10 +585,20 @@ async def test_ignored_events_only_generate_raw_events(self, mock_model, mock_ag
other_event = RealtimeModelOtherEvent(data={"custom": "data"})
await session.on_event(other_event)

# Should only have 3 raw events (no transformed events)
assert session._event_queue.qsize() == 3
# transcript_delta emits: 1 raw + 1 RealtimeHistoryUpdated
# connection_status and other each emit: 1 raw
assert session._event_queue.qsize() == 4

# raw event for transcript_delta
event = await session._event_queue.get()
assert isinstance(event, RealtimeRawModelEvent)

# history updated from transcript_delta
event = await session._event_queue.get()
assert isinstance(event, RealtimeHistoryUpdated)

for _ in range(3):
# raw events for connection_status and other
for _ in range(2):
event = await session._event_queue.get()
assert isinstance(event, RealtimeRawModelEvent)

Expand Down
Loading