1515 BidiAfterInvocationEvent ,
1616 BidiBeforeConnectionRestartEvent ,
1717 BidiBeforeInvocationEvent ,
18- BidiMessageAddedEvent ,
1918)
2019from ...hooks .events import (
2120 BidiInterruptionEvent as BidiInterruptionHookEvent ,
@@ -51,8 +50,6 @@ class _BidiAgentLoop:
5150 that tools can access via their invocation_state parameter.
5251 _send_gate: Gate the sending of events to the model.
5352 Blocks when agent is reseting the model connection after timeout.
54- _message_lock: Lock to ensure that paired messages are added to history in sequence without interference.
55- For example, tool use and tool result messages must be added adjacent to each other.
5653 """
5754
5855 def __init__ (self , agent : "BidiAgent" ) -> None :
@@ -70,7 +67,6 @@ def __init__(self, agent: "BidiAgent") -> None:
7067 self ._invocation_state : dict [str , Any ]
7168
7269 self ._send_gate = asyncio .Event ()
73- self ._message_lock = asyncio .Lock ()
7470
7571 async def start (self , invocation_state : dict [str , Any ] | None = None ) -> None :
7672 """Start the agent loop.
@@ -145,7 +141,7 @@ async def send(self, event: BidiInputEvent | ToolResultEvent) -> None:
145141
146142 if isinstance (event , BidiTextInputEvent ):
147143 message : Message = {"role" : "user" , "content" : [{"text" : event .text }]}
148- await self ._add_messages (message )
144+ await self ._agent . _append_messages (message )
149145
150146 await self ._agent .model .send (event )
151147
@@ -224,7 +220,7 @@ async def _run_model(self) -> None:
224220 if isinstance (event , BidiTranscriptStreamEvent ):
225221 if event ["is_final" ]:
226222 message : Message = {"role" : event ["role" ], "content" : [{"text" : event ["text" ]}]}
227- await self ._add_messages (message )
223+ await self ._agent . _append_messages (message )
228224
229225 elif isinstance (event , ToolUseStreamEvent ):
230226 tool_use = event ["current_tool_use" ]
@@ -282,7 +278,7 @@ async def _run_tool(self, tool_use: ToolUse) -> None:
282278
283279 tool_use_message : Message = {"role" : "assistant" , "content" : [{"toolUse" : tool_use }]}
284280 tool_result_message : Message = {"role" : "user" , "content" : [{"toolResult" : tool_result_event .tool_result }]}
285- await self ._add_messages (tool_use_message , tool_result_message )
281+ await self ._agent . _append_messages (tool_use_message , tool_result_message )
286282
287283 await self ._event_queue .put (ToolResultMessageEvent (tool_result_message ))
288284
@@ -300,16 +296,3 @@ async def _run_tool(self, tool_use: ToolUse) -> None:
300296
301297 except Exception as error :
302298 await self ._event_queue .put (error )
303-
304- async def _add_messages (self , * messages : Message ) -> None :
305- """Add messages to history in sequence without interference.
306-
307- Args:
308- *messages: List of messages to add into history.
309- """
310- async with self ._message_lock :
311- for message in messages :
312- self ._agent .messages .append (message )
313- await self ._agent .hooks .invoke_callbacks_async (
314- BidiMessageAddedEvent (agent = self ._agent , message = message )
315- )
0 commit comments