from flask_restful import Resource, reqparse from controllers.console.setup import setup_required from controllers.inner_api import api from controllers.inner_api.plugin.wraps import get_tenant from controllers.inner_api.wraps import plugin_inner_api_only from libs.helper import compact_generate_response from models.account import Tenant from services.plugin.plugin_invoke_service import PluginInvokeService class PluginInvokeModelApi(Resource): @setup_required @plugin_inner_api_only @get_tenant def post(self, user_id: str, tenant_model: Tenant): parser = reqparse.RequestParser() parser.add_argument('provider', type=dict, required=True, location='json') parser.add_argument('model', type=dict, required=True, location='json') parser.add_argument('parameters', type=dict, required=True, location='json') args = parser.parse_args() class PluginInvokeToolApi(Resource): @setup_required @plugin_inner_api_only @get_tenant def post(self, user_id: str, tenant_model: Tenant): parser = reqparse.RequestParser() parser.add_argument('provider', type=dict, required=True, location='json') parser.add_argument('tool', type=dict, required=True, location='json') parser.add_argument('parameters', type=dict, required=True, location='json') args = parser.parse_args() response = PluginInvokeService.invoke_tool(user_id, tenant_model, args['provider'], args['tool'], args['parameters']) return compact_generate_response(response) class PluginInvokeNodeApi(Resource): @setup_required @plugin_inner_api_only @get_tenant def post(self, user_id: str, tenant_model: Tenant): parser = reqparse.RequestParser() args = parser.parse_args() return { 'message': 'success' } api.add_resource(PluginInvokeModelApi, '/invoke/model') api.add_resource(PluginInvokeToolApi, '/invoke/tool') api.add_resource(PluginInvokeNodeApi, '/invoke/node')