1414 ImageContent ,
1515 AudioContent ,
1616 DataContent ,
17+ McpCall ,
18+ McpCallOutput ,
1719 FunctionCall ,
1820 FunctionCallOutput ,
1921 MessageType ,
@@ -251,6 +253,17 @@ async def adapt_agentscope_message_stream(
251253 elif element .get ("type" ) == "tool_use" : # Tool use
252254 call_id = element .get ("id" )
253255
256+ if element .get ("tool_type" , "plugin" ) == "mcp" :
257+ msg_type = MessageType .MCP_TOOL_CALL
258+ fc_cls = McpCall
259+ fc_kwargs = {
260+ "server_label" : element .get ("server_label" ),
261+ }
262+ else :
263+ msg_type = MessageType .PLUGIN_CALL
264+ fc_cls = FunctionCall
265+ fc_kwargs = {}
266+
254267 if last :
255268 plugin_call_message = tool_use_messages_dict .get (
256269 call_id ,
@@ -260,16 +273,17 @@ async def adapt_agentscope_message_stream(
260273 # Only one tool use message yields, we fake
261274 # Build a new tool call message
262275 plugin_call_message = Message (
263- type = MessageType . PLUGIN_CALL ,
276+ type = msg_type ,
264277 role = "assistant" ,
265278 )
266279
267280 data_delta_content = DataContent (
268281 index = index ,
269- data = FunctionCall (
282+ data = fc_cls (
270283 call_id = element .get ("id" ),
271284 name = element .get ("name" ),
272285 arguments = "" ,
286+ ** fc_kwargs ,
273287 ).model_dump (),
274288 delta = True ,
275289 )
@@ -290,10 +304,11 @@ async def adapt_agentscope_message_stream(
290304 json_str = json .dumps (element .get ("input" ))
291305 data_delta_content = DataContent (
292306 index = index ,
293- data = FunctionCall (
307+ data = fc_cls (
294308 call_id = element .get ("id" ),
295309 name = element .get ("name" ),
296310 arguments = json_str ,
311+ ** fc_kwargs ,
297312 ).model_dump (),
298313 delta = True ,
299314 )
@@ -316,16 +331,17 @@ async def adapt_agentscope_message_stream(
316331 else :
317332 # Build a new tool call message
318333 plugin_call_message = Message (
319- type = MessageType . PLUGIN_CALL ,
334+ type = msg_type ,
320335 role = "assistant" ,
321336 )
322337
323338 data_delta_content = DataContent (
324339 index = index ,
325- data = FunctionCall (
340+ data = fc_cls (
326341 call_id = element .get ("id" ),
327342 name = element .get ("name" ),
328343 arguments = "" ,
344+ ** fc_kwargs ,
329345 ).model_dump (),
330346 delta = True ,
331347 )
@@ -348,20 +364,36 @@ async def adapt_agentscope_message_stream(
348364 ] = plugin_call_message
349365
350366 elif element .get ("type" ) == "tool_result" : # Tool result
367+ call_id = element .get ("call_id" )
368+
369+ plugin_call_message = tool_use_messages_dict .get (
370+ call_id ,
371+ )
372+ # Check if the tool type
373+ msg_type = MessageType .PLUGIN_CALL_OUTPUT
374+ fc_cls = FunctionCallOutput
375+ if plugin_call_message :
376+ if (
377+ plugin_call_message .type
378+ == MessageType .MCP_TOOL_CALL
379+ ):
380+ msg_type = MessageType .MCP_TOOL_CALL_OUTPUT
381+ fc_cls = McpCallOutput
382+
351383 json_str = json .dumps (
352384 element .get ("output" ),
353385 ensure_ascii = False ,
354386 )
355387 data_delta_content = DataContent (
356388 index = index ,
357- data = FunctionCallOutput (
389+ data = fc_cls (
358390 call_id = element .get ("id" ),
359391 name = element .get ("name" ),
360392 output = json_str ,
361393 ).model_dump (),
362394 )
363395 plugin_output_message = Message (
364- type = MessageType . PLUGIN_CALL_OUTPUT ,
396+ type = msg_type ,
365397 role = "tool" ,
366398 content = [data_delta_content ],
367399 )
0 commit comments