feat: recommended app model config detail api

pull/182/head
John Wang 3 years ago
parent 3117619ef3
commit 2439d51231

@ -6,6 +6,8 @@ from flask_restful import Resource, reqparse, fields, marshal_with, abort, input
from sqlalchemy import and_
from controllers.console import api
from controllers.console.app.error import AppNotFoundError
from controllers.console.wraps import account_initialization_required
from extensions.ext_database import db
from models.model import Tenant, App, InstalledApp, RecommendedApp
from services.account_service import TenantService
@ -53,6 +55,7 @@ recommended_app_list_fields = {
class InstalledAppsListResource(Resource):
@login_required
@account_initialization_required
@marshal_with(installed_app_list_fields)
def get(self):
current_tenant_id = Tenant.query.first().id
@ -73,6 +76,7 @@ class InstalledAppsListResource(Resource):
return {'installed_apps': installed_apps}
@login_required
@account_initialization_required
def post(self):
parser = reqparse.RequestParser()
parser.add_argument('app_id', type=str, required=True, help='Invalid app_id')
@ -112,6 +116,7 @@ class InstalledAppsListResource(Resource):
class InstalledAppResource(Resource):
@login_required
@account_initialization_required
def delete(self, installed_app_id):
installed_app = InstalledApp.query.filter(and_(
@ -131,6 +136,7 @@ class InstalledAppResource(Resource):
return {'result': 'success', 'message': 'App uninstalled successfully'}
@login_required
@account_initialization_required
def patch(self, installed_app_id):
parser = reqparse.RequestParser()
parser.add_argument('is_pinned', type=inputs.boolean)
@ -156,8 +162,9 @@ class InstalledAppResource(Resource):
return {'result': 'success', 'message': 'App info updated successfully'}
class RecommendedAppsResource(Resource):
class RecommendedAppListResource(Resource):
@login_required
@account_initialization_required
@marshal_with(recommended_app_list_fields)
def get(self):
recommended_apps = db.session.query(RecommendedApp).filter(
@ -204,6 +211,51 @@ class RecommendedAppsResource(Resource):
return {'recommended_apps': recommended_apps_result, 'categories': list(categories)}
class RecommendedAppResource(Resource):
model_config_fields = {
'opening_statement': fields.String,
'suggested_questions': fields.Raw(attribute='suggested_questions_list'),
'suggested_questions_after_answer': fields.Raw(attribute='suggested_questions_after_answer_dict'),
'more_like_this': fields.Raw(attribute='more_like_this_dict'),
'model': fields.Raw(attribute='model_dict'),
'user_input_form': fields.Raw(attribute='user_input_form_list'),
'pre_prompt': fields.String,
'agent_mode': fields.Raw(attribute='agent_mode_dict'),
}
app_simple_detail_fields = {
'id': fields.String,
'name': fields.String,
'icon': fields.String,
'icon_background': fields.String,
'mode': fields.String,
'app_model_config': fields.Nested(model_config_fields),
}
@login_required
@account_initialization_required
@marshal_with(app_simple_detail_fields)
def get(self, app_id):
app_id = str(app_id)
# is in public recommended list
recommended_app = db.session.query(RecommendedApp).filter(
RecommendedApp.is_listed == True,
RecommendedApp.app_id == app_id
).first()
if not recommended_app:
raise AppNotFoundError
# get app detail
app = db.session.query(App).filter(App.id == app_id).first()
if not app:
raise AppNotFoundError
return app
api.add_resource(InstalledAppsListResource, '/installed-apps')
api.add_resource(InstalledAppResource, '/installed-apps/<uuid:installed_app_id>')
api.add_resource(RecommendedAppsResource, '/explore/apps')
api.add_resource(RecommendedAppListResource, '/explore/apps')
api.add_resource(RecommendedAppResource, '/explore/apps/<uuid:app_id>')

Loading…
Cancel
Save