55from a2a .types import Message , Part , PushNotificationConfig , Role , TextPart
66from valuecell .utils import generate_uuid
77
8- from .types import MessageResponse
8+ from .. types import RemoteAgentResponse
99
1010
1111class AgentClient :
@@ -48,8 +48,12 @@ async def _setup_client(self):
4848 self ._client = client_factory .create (card )
4949
5050 async def send_message (
51- self , text : str , context_id : str = None , streaming : bool = False
52- ) -> MessageResponse | AsyncIterator [MessageResponse ]:
51+ self ,
52+ query : str ,
53+ context_id : str = None ,
54+ metadata : dict = None ,
55+ streaming : bool = False ,
56+ ) -> AsyncIterator [RemoteAgentResponse ]:
5357 """Send message to Agent.
5458
5559 If `streaming` is True, return an async iterator producing (task, event) pairs.
@@ -59,18 +63,28 @@ async def send_message(
5963
6064 message = Message (
6165 role = Role .user ,
62- parts = [Part (root = TextPart (text = text ))],
66+ parts = [Part (root = TextPart (text = query ))],
6367 message_id = generate_uuid ("msg" ),
6468 context_id = context_id or generate_uuid ("ctx" ),
69+ metadata = metadata if metadata else None ,
6570 )
6671
67- generator = self ._client .send_message (message )
68- if streaming :
69- return generator
70-
71- task , event = await generator .__anext__ ()
72- await generator .aclose ()
73- return task , event
72+ source_gen = self ._client .send_message (message )
73+
74+ async def wrapper () -> AsyncIterator [RemoteAgentResponse ]:
75+ try :
76+ if streaming :
77+ async for item in source_gen :
78+ yield item
79+ else :
80+ # yield only the first item
81+ item = await source_gen .__anext__ ()
82+ yield item
83+ finally :
84+ # ensure underlying generator is closed
85+ await source_gen .aclose ()
86+
87+ return wrapper ()
7488
7589 async def get_agent_card (self ):
7690 await self ._ensure_initialized ()
0 commit comments