MCPcopy Index your code
hub / github.com/TaskingAI/TaskingAI / run_tools

Function run_tools

backend/app/services/tool/tool.py:85–131  ·  view source on GitHub ↗

Run tools :param tool_inputs: the tool inputs :return: the tool outputs

(tool_inputs: List[ToolInput])

Source from the content-addressed store, hash-verified

83
84
85async def run_tools(tool_inputs: List[ToolInput]) -> List[ToolOutput]:
86 """
87 Run tools
88 :param tool_inputs: the tool inputs
89 :return: the tool outputs
90 """
91
92 tasks = []
93 for tool_input in tool_inputs:
94 if tool_input.type == ToolType.ACTION:
95 tasks.append(
96 run_action(
97 action_id=tool_input.tool_id,
98 parameters=tool_input.arguments,
99 )
100 )
101
102 elif tool_input.type == ToolType.PLUGIN:
103 if "/" not in tool_input.tool_id:
104 raise_request_validation_error(f"Invalid plugin tool ID: {tool_input.id}")
105 bundle_instance_id, plugin_id = tool_input.tool_id.split("/")
106 tasks.append(
107 run_plugin(
108 bundle_instance_id=bundle_instance_id,
109 plugin_id=plugin_id,
110 parameters=tool_input.arguments,
111 )
112 )
113 else:
114 raise_request_validation_error(f"Invalid tool type: {tool_input.type}")
115
116 results = await asyncio.gather(*tasks)
117
118 tool_outputs: List[ToolOutput] = []
119 for i, tool in enumerate(tool_inputs):
120 if tool.type == ToolType.ACTION or tool.type == ToolType.PLUGIN:
121 tool_outputs.append(
122 ToolOutput(
123 type=tool.type,
124 tool_id=tool.tool_id,
125 tool_call_id=tool.tool_call_id,
126 status=results[i].get("status"),
127 data=results[i].get("data"),
128 )
129 )
130
131 return tool_outputs
132
133
134async def ui_fetch_tools(tools: List[Dict]) -> List[Dict]:

Callers 1

run_toolsMethod · 0.90

Calls 5

ToolOutputClass · 0.90
run_pluginFunction · 0.85
run_actionFunction · 0.50
getMethod · 0.45

Tested by

no test coverage detected