@@ -28,6 +28,17 @@ async def get_final_task_from_stream(stream: AsyncIterator[ClientEvent | Message
2828 return final_task
2929
3030
31+ async def send_message_get_response (
32+ client : Client , content : str , context_id : str | None = None
33+ ) -> tuple [list [str ], str ]:
34+ message = create_text_message_object (content = content )
35+ if context_id is not None :
36+ message .context_id = context_id
37+ final_task = await get_final_task_from_stream (client .send_message (message ))
38+ agent_messages = [msg .parts [0 ].root .text for msg in final_task .history or []]
39+ return agent_messages , final_task .context_id
40+
41+
3142@pytest .fixture
3243async def history_agent (create_server_with_agent ) -> AsyncGenerator [tuple [Server , Client ]]:
3344 """Agent that tests context.store.load_history() functionality."""
@@ -44,25 +55,40 @@ async def history_agent(input: Message, context: RunContext) -> AsyncGenerator[R
4455 yield server , client
4556
4657
58+ @pytest .fixture
59+ async def history_deleting_agent (create_server_with_agent ) -> AsyncGenerator [tuple [Server , Client ]]:
60+ """Agent that tests context.store.load_history() functionality."""
61+ context_store = InMemoryContextStore ()
62+
63+ async def history_agent (input : Message , context : RunContext ) -> AsyncGenerator [RunYield , None ]:
64+ await context .store (input )
65+ n_messages = 0
66+ async for message in context .load_history ():
67+ n_messages += 1
68+ if n_messages == 1 :
69+ delete_id = message .message_id
70+ if n_messages > 3 :
71+ await context .delete_history_from_id (delete_id )
72+
73+ async for message in context .load_history ():
74+ message .role = Role .agent
75+ yield message
76+
77+ async with create_server_with_agent (history_agent , context_store = context_store ) as (server , client ):
78+ yield server , client
79+
80+
4781async def test_agent_history (history_agent ):
4882 """Test that history starts empty."""
4983 _ , client = history_agent
50- message = create_text_message_object (content = "first message" )
5184
52- final_task = await get_final_task_from_stream (client .send_message (message ))
53- agent_messages = [msg .parts [0 ].root .text for msg in final_task .history ]
85+ agent_messages , context_id = await send_message_get_response (client , "first message" )
5486 assert agent_messages == ["first message" ]
5587
56- message = create_text_message_object (content = "second message" )
57- message .context_id = final_task .context_id
58- final_task = await get_final_task_from_stream (client .send_message (message ))
59- agent_messages = [msg .parts [0 ].root .text for msg in final_task .history ]
88+ agent_messages , context_id = await send_message_get_response (client , "second message" , context_id = context_id )
6089 assert agent_messages == ["first message" , "first message" , "second message" ]
6190
62- message = create_text_message_object (content = "third message" )
63- message .context_id = final_task .context_id
64- final_task = await get_final_task_from_stream (client .send_message (message ))
65- agent_messages = [msg .parts [0 ].root .text for msg in final_task .history ]
91+ agent_messages , context_id = await send_message_get_response (client , "third message" , context_id = context_id )
6692 assert agent_messages == [
6793 # first run
6894 "first message" ,
@@ -75,3 +101,23 @@ async def test_agent_history(history_agent):
75101 "second message" ,
76102 "third message" ,
77103 ]
104+
105+
106+ async def test_agent_deleting_history (history_deleting_agent ):
107+ """Test that history starts empty."""
108+ _ , client = history_deleting_agent
109+
110+ agent_messages , context_id = await send_message_get_response (client , "first message" )
111+ assert agent_messages == ["first message" ]
112+
113+ agent_messages , context_id = await send_message_get_response (client , "second message" , context_id = context_id )
114+ assert agent_messages == ["first message" , "second message" ]
115+
116+ agent_messages , context_id = await send_message_get_response (client , "third message" , context_id = context_id )
117+ assert agent_messages == ["first message" , "second message" , "third message" ]
118+
119+ agent_messages , context_id = await send_message_get_response (client , "delete message" , context_id = context_id )
120+ assert agent_messages == []
121+
122+ agent_messages , context_id = await send_message_get_response (client , "first message" )
123+ assert agent_messages == ["first message" ]
0 commit comments