99
1010from picoagents ._cancellation_token import CancellationToken
1111from picoagents .agents import BaseAgent
12+ from picoagents .context import AgentContext
1213from picoagents .messages import AssistantMessage , Message , UserMessage
1314from picoagents .orchestration import (
1415 MaxMessageTermination ,
@@ -47,23 +48,27 @@ async def run(
4748 # Simulate agent processing
4849 await asyncio .sleep (0.01 )
4950
50- # Create response messages - preserve full context plus new response
51+ # Create context with messages (matching real Agent behavior)
52+ context = AgentContext ()
53+
54+ # Add input messages to context
5155 if isinstance (task , list ):
52- # Return full context plus our response
53- context_messages = task . copy ( )
56+ for msg in task :
57+ context . add_message ( msg )
5458 elif isinstance (task , str ):
55- context_messages = [ UserMessage (content = task , source = "user" )]
59+ context . add_message ( UserMessage (content = task , source = "user" ))
5660 else :
57- context_messages = [ task ]
61+ context . add_message ( task )
5862
63+ # Add assistant response
5964 assistant_message = AssistantMessage (
6065 content = self .response_text , source = self .name
6166 )
62- all_messages = cast ( List [ Message ], context_messages + [ assistant_message ] )
67+ context . add_message ( assistant_message )
6368
6469 return AgentResponse (
70+ context = context ,
6571 source = self .name ,
66- messages = all_messages ,
6772 usage = Usage (duration_ms = 10 , llm_calls = 1 , tokens_input = 10 , tokens_output = 5 ),
6873 finish_reason = "stop" ,
6974 )
@@ -83,28 +88,33 @@ async def run_stream(
8388 # Simulate agent processing
8489 await asyncio .sleep (0.01 )
8590
86- # Create response messages - preserve full context plus new response
91+ # Create context with messages (matching real Agent behavior)
92+ context = AgentContext ()
93+
94+ # Add input messages to context and yield them
8795 if isinstance (task , list ):
88- # Return full context plus our response
89- context_messages = task .copy ()
96+ for msg in task :
97+ context .add_message (msg )
98+ yield msg
9099 elif isinstance (task , str ):
91- context_messages = [UserMessage (content = task , source = "user" )]
100+ msg = UserMessage (content = task , source = "user" )
101+ context .add_message (msg )
102+ yield msg
92103 else :
93- context_messages = [task ]
104+ context .add_message (task )
105+ yield task
94106
107+ # Add and yield assistant response
95108 assistant_message = AssistantMessage (
96109 content = self .response_text , source = self .name
97110 )
98- all_messages = cast (List [Message ], context_messages + [assistant_message ])
99-
100- # Yield all messages
101- for message in all_messages :
102- yield message
111+ context .add_message (assistant_message )
112+ yield assistant_message
103113
104- # Yield final response
114+ # Yield final response with context
105115 yield AgentResponse (
116+ context = context ,
106117 source = self .name ,
107- messages = all_messages ,
108118 usage = Usage (duration_ms = 10 , llm_calls = 1 , tokens_input = 10 , tokens_output = 5 ),
109119 finish_reason = "stop" ,
110120 )
@@ -313,28 +323,32 @@ async def run(
313323
314324 await asyncio .sleep (0.01 )
315325
316- # Analyze the context to count how many turns have occurred
326+ # Create context with messages (matching real Agent behavior)
327+ context = AgentContext ()
328+
329+ # Analyze the task to count how many turns have occurred
330+ response_count = 0
317331 if isinstance (task , str ):
318332 # Count occurrences of "Iteration" in the context (indicating previous agent responses)
319333 response_count = task .count ("Iteration" )
320- context_messages = [ UserMessage (content = task , source = "user" )]
334+ context . add_message ( UserMessage (content = task , source = "user" ))
321335 elif isinstance (task , list ):
322336 response_count = len (
323337 [msg for msg in task if isinstance (msg , AssistantMessage )]
324338 )
325- context_messages = task .copy ()
339+ for msg in task :
340+ context .add_message (msg )
326341 else :
327- response_count = 0
328- context_messages = [UserMessage (content = str (task ), source = "user" )]
342+ context .add_message (UserMessage (content = str (task ), source = "user" ))
329343
330344 assistant_message = AssistantMessage (
331345 content = f"Iteration { response_count + 1 } " , source = self .name
332346 )
333- all_messages = cast ( List [ Message ], context_messages + [ assistant_message ] )
347+ context . add_message ( assistant_message )
334348
335349 return AgentResponse (
350+ context = context ,
336351 source = self .name ,
337- messages = all_messages ,
338352 usage = Usage (duration_ms = 10 , llm_calls = 1 ),
339353 finish_reason = "stop" ,
340354 )
@@ -351,33 +365,39 @@ async def run_stream(
351365
352366 await asyncio .sleep (0.01 )
353367
354- # Analyze the context to count how many turns have occurred
368+ # Create context with messages (matching real Agent behavior)
369+ context = AgentContext ()
370+
371+ # Analyze the task to count how many turns have occurred
372+ response_count = 0
355373 if isinstance (task , str ):
356374 # Count occurrences of "Iteration" in the context (indicating previous agent responses)
357375 response_count = task .count ("Iteration" )
358- context_messages = [UserMessage (content = task , source = "user" )]
376+ msg = UserMessage (content = task , source = "user" )
377+ context .add_message (msg )
378+ yield msg
359379 elif isinstance (task , list ):
360380 response_count = len (
361381 [msg for msg in task if isinstance (msg , AssistantMessage )]
362382 )
363- context_messages = task .copy ()
383+ for msg in task :
384+ context .add_message (msg )
385+ yield msg
364386 else :
365- response_count = 0
366- context_messages = [UserMessage (content = str (task ), source = "user" )]
387+ msg = UserMessage (content = str (task ), source = "user" )
388+ context .add_message (msg )
389+ yield msg
367390
368391 assistant_message = AssistantMessage (
369392 content = f"Iteration { response_count + 1 } " , source = self .name
370393 )
371- all_messages = cast (List [Message ], context_messages + [assistant_message ])
372-
373- # Yield all messages
374- for message in all_messages :
375- yield message
394+ context .add_message (assistant_message )
395+ yield assistant_message
376396
377- # Yield final response
397+ # Yield final response with context
378398 yield AgentResponse (
399+ context = context ,
379400 source = self .name ,
380- messages = all_messages ,
381401 usage = Usage (duration_ms = 10 , llm_calls = 1 ),
382402 finish_reason = "stop" ,
383403 )
0 commit comments