Skip to content

Commit e2b36b1

Browse files
committed
test(runner): cover state_delta duplicate detection
1 parent b4162c5 commit e2b36b1

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

tests/unittests/test_runners.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,65 @@ async def test_append_new_message_to_session_keeps_non_duplicate_messages():
375375
assert len(matched_events) == 2
376376

377377

378+
@pytest.mark.asyncio
379+
async def test_append_new_message_to_session_state_delta_deduping():
380+
session_service = InMemorySessionService()
381+
runner = Runner(
382+
app_name="test_app",
383+
agent=MockLlmAgent("root_agent"),
384+
session_service=session_service,
385+
artifact_service=InMemoryArtifactService(),
386+
)
387+
session = await session_service.create_session(
388+
app_name="test_app",
389+
user_id="test_user",
390+
)
391+
user_message = types.Content(role="user", parts=[types.Part(text="same message")])
392+
invocation_context = runner._new_invocation_context(
393+
session,
394+
invocation_id="inv-state-delta",
395+
new_message=user_message,
396+
run_config=RunConfig(),
397+
)
398+
399+
await runner._append_new_message_to_session(
400+
session=session,
401+
new_message=user_message,
402+
invocation_context=invocation_context,
403+
state_delta={"attempt": 1},
404+
)
405+
await runner._append_new_message_to_session(
406+
session=session,
407+
new_message=user_message,
408+
invocation_context=invocation_context,
409+
state_delta={"attempt": 1},
410+
)
411+
await runner._append_new_message_to_session(
412+
session=session,
413+
new_message=user_message,
414+
invocation_context=invocation_context,
415+
state_delta={"attempt": 2},
416+
)
417+
await runner._append_new_message_to_session(
418+
session=session,
419+
new_message=user_message,
420+
invocation_context=invocation_context,
421+
state_delta=None,
422+
)
423+
424+
matched_events = [
425+
event
426+
for event in session.events
427+
if event.author == "user"
428+
and event.invocation_id == "inv-state-delta"
429+
and event.content == user_message
430+
]
431+
assert len(matched_events) == 3
432+
assert matched_events[0].actions.state_delta == {"attempt": 1}
433+
assert matched_events[1].actions.state_delta == {"attempt": 2}
434+
assert matched_events[2].actions.state_delta == {}
435+
436+
378437
@pytest.mark.asyncio
379438
async def test_rewind_auto_create_session_on_missing_session():
380439
"""When auto_create_session=True, rewind should create session if missing.

0 commit comments

Comments
 (0)