mirror of
https://github.com/langgenius/dify.git
synced 2026-05-06 02:18:08 +08:00
feat: add API endpoint to fetch list of available tools and corresponding request model
This commit is contained in:
@ -448,3 +448,53 @@ class PluginFetchAppInfoApi(Resource):
|
|||||||
return BaseBackwardsInvocationResponse(
|
return BaseBackwardsInvocationResponse(
|
||||||
data=PluginAppBackwardsInvocation.fetch_app_info(payload.app_id, tenant_model.id)
|
data=PluginAppBackwardsInvocation.fetch_app_info(payload.app_id, tenant_model.id)
|
||||||
).model_dump()
|
).model_dump()
|
||||||
|
|
||||||
|
|
||||||
|
@inner_api_ns.route("/fetch/tools/list")
|
||||||
|
class PluginFetchToolsListApi(Resource):
|
||||||
|
@get_user_tenant
|
||||||
|
@setup_required
|
||||||
|
@plugin_inner_api_only
|
||||||
|
@inner_api_ns.doc("plugin_fetch_tools_list")
|
||||||
|
@inner_api_ns.doc(description="Fetch all available tools through plugin interface")
|
||||||
|
@inner_api_ns.doc(
|
||||||
|
responses={
|
||||||
|
200: "Tools list retrieved successfully",
|
||||||
|
401: "Unauthorized - invalid API key",
|
||||||
|
404: "Service not available",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
def post(self, user_model: Account | EndUser, tenant_model: Tenant):
|
||||||
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
|
from extensions.ext_database import db
|
||||||
|
from services.tools.api_tools_manage_service import ApiToolManageService
|
||||||
|
from services.tools.builtin_tools_manage_service import BuiltinToolManageService
|
||||||
|
from services.tools.mcp_tools_manage_service import MCPToolManageService
|
||||||
|
from services.tools.workflow_tools_manage_service import WorkflowToolManageService
|
||||||
|
|
||||||
|
providers = []
|
||||||
|
|
||||||
|
# Get builtin tools
|
||||||
|
builtin_providers = BuiltinToolManageService.list_builtin_tools(user_model.id, tenant_model.id)
|
||||||
|
for provider in builtin_providers:
|
||||||
|
providers.append(provider.to_dict())
|
||||||
|
|
||||||
|
# Get API tools
|
||||||
|
api_providers = ApiToolManageService.list_api_tools(tenant_model.id)
|
||||||
|
for provider in api_providers:
|
||||||
|
providers.append(provider.to_dict())
|
||||||
|
|
||||||
|
# Get workflow tools
|
||||||
|
workflow_providers = WorkflowToolManageService.list_tenant_workflow_tools(user_model.id, tenant_model.id)
|
||||||
|
for provider in workflow_providers:
|
||||||
|
providers.append(provider.to_dict())
|
||||||
|
|
||||||
|
# Get MCP tools
|
||||||
|
with Session(db.engine) as session:
|
||||||
|
mcp_service = MCPToolManageService(session)
|
||||||
|
mcp_providers = mcp_service.list_providers(tenant_id=tenant_model.id, for_list=True)
|
||||||
|
for provider in mcp_providers:
|
||||||
|
providers.append(provider.to_dict())
|
||||||
|
|
||||||
|
return BaseBackwardsInvocationResponse(data={"providers": providers}).model_dump()
|
||||||
|
|||||||
@ -282,3 +282,11 @@ class TriggerDispatchResponse(BaseModel):
|
|||||||
return deserialize_response(binascii.unhexlify(v.encode()))
|
return deserialize_response(binascii.unhexlify(v.encode()))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise ValueError("Failed to deserialize response from hex string") from e
|
raise ValueError("Failed to deserialize response from hex string") from e
|
||||||
|
|
||||||
|
|
||||||
|
class RequestListTools(BaseModel):
|
||||||
|
"""
|
||||||
|
Request to list all available tools
|
||||||
|
"""
|
||||||
|
|
||||||
|
pass
|
||||||
|
|||||||
Reference in New Issue
Block a user