Skip to content

Commit c3d1f7c

Browse files
authored
feature: Title: Distinguish Between Tool Call and MCP Tool Call for AgentScope (#268)
1 parent 2f2c49b commit c3d1f7c

File tree

2 files changed

+45
-9
lines changed

2 files changed

+45
-9
lines changed

src/agentscope_runtime/adapters/agentscope/stream.py

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
ImageContent,
1515
AudioContent,
1616
DataContent,
17+
McpCall,
18+
McpCallOutput,
1719
FunctionCall,
1820
FunctionCallOutput,
1921
MessageType,
@@ -78,8 +80,6 @@ async def adapt_agentscope_message_stream(
7880
# Note: Tool use content only happens in the last of messages
7981
tool_start = False
8082

81-
tool_use_messages_dict = {}
82-
8383
# Cache msg id
8484
msg_id = msg.id
8585

@@ -251,6 +251,17 @@ async def adapt_agentscope_message_stream(
251251
elif element.get("type") == "tool_use": # Tool use
252252
call_id = element.get("id")
253253

254+
if element.get("tool_type", "plugin") == "mcp":
255+
msg_type = MessageType.MCP_TOOL_CALL
256+
fc_cls = McpCall
257+
fc_kwargs = {
258+
"server_label": element.get("server_label"),
259+
}
260+
else:
261+
msg_type = MessageType.PLUGIN_CALL
262+
fc_cls = FunctionCall
263+
fc_kwargs = {}
264+
254265
if last:
255266
plugin_call_message = tool_use_messages_dict.get(
256267
call_id,
@@ -260,16 +271,17 @@ async def adapt_agentscope_message_stream(
260271
# Only one tool use message yields, we fake
261272
# Build a new tool call message
262273
plugin_call_message = Message(
263-
type=MessageType.PLUGIN_CALL,
274+
type=msg_type,
264275
role="assistant",
265276
)
266277

267278
data_delta_content = DataContent(
268279
index=index,
269-
data=FunctionCall(
280+
data=fc_cls(
270281
call_id=element.get("id"),
271282
name=element.get("name"),
272283
arguments="",
284+
**fc_kwargs,
273285
).model_dump(),
274286
delta=True,
275287
)
@@ -290,10 +302,11 @@ async def adapt_agentscope_message_stream(
290302
json_str = json.dumps(element.get("input"))
291303
data_delta_content = DataContent(
292304
index=index,
293-
data=FunctionCall(
305+
data=fc_cls(
294306
call_id=element.get("id"),
295307
name=element.get("name"),
296308
arguments=json_str,
309+
**fc_kwargs,
297310
).model_dump(),
298311
delta=True,
299312
)
@@ -316,16 +329,17 @@ async def adapt_agentscope_message_stream(
316329
else:
317330
# Build a new tool call message
318331
plugin_call_message = Message(
319-
type=MessageType.PLUGIN_CALL,
332+
type=msg_type,
320333
role="assistant",
321334
)
322335

323336
data_delta_content = DataContent(
324337
index=index,
325-
data=FunctionCall(
338+
data=fc_cls(
326339
call_id=element.get("id"),
327340
name=element.get("name"),
328341
arguments="",
342+
**fc_kwargs,
329343
).model_dump(),
330344
delta=True,
331345
)
@@ -348,20 +362,39 @@ async def adapt_agentscope_message_stream(
348362
] = plugin_call_message
349363

350364
elif element.get("type") == "tool_result": # Tool result
365+
call_id = element.get("id")
366+
367+
plugin_call_message = tool_use_messages_dict.get(
368+
call_id,
369+
)
370+
# Determine the output message type and class to use
371+
# for the tool result message based on the type of
372+
# the original tool call message.
373+
msg_type = MessageType.PLUGIN_CALL_OUTPUT
374+
fc_cls = FunctionCallOutput
375+
376+
if plugin_call_message:
377+
if (
378+
plugin_call_message.type
379+
== MessageType.MCP_TOOL_CALL
380+
):
381+
msg_type = MessageType.MCP_TOOL_CALL_OUTPUT
382+
fc_cls = McpCallOutput
383+
351384
json_str = json.dumps(
352385
element.get("output"),
353386
ensure_ascii=False,
354387
)
355388
data_delta_content = DataContent(
356389
index=index,
357-
data=FunctionCallOutput(
390+
data=fc_cls(
358391
call_id=element.get("id"),
359392
name=element.get("name"),
360393
output=json_str,
361394
).model_dump(),
362395
)
363396
plugin_output_message = Message(
364-
type=MessageType.PLUGIN_CALL_OUTPUT,
397+
type=msg_type,
365398
role="tool",
366399
content=[data_delta_content],
367400
)

src/agentscope_runtime/engine/schemas/agent_schemas.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,9 @@ class McpCallOutput(BaseModel):
178178
call_id: str
179179
"""The unique ID of the tool call."""
180180

181+
name: Optional[str] = None
182+
"""The name of the tool call."""
183+
181184
output: str
182185
"""The output from the tool call."""
183186

0 commit comments

Comments
 (0)