From 2439d51231c7c92c7767267a6fcf2768f9a55938 Mon Sep 17 00:00:00 2001 From: John Wang Date: Tue, 16 May 2023 12:05:45 +0800 Subject: [PATCH] feat: recommended app model config detail api --- api/controllers/console/app/explore.py | 56 +++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/api/controllers/console/app/explore.py b/api/controllers/console/app/explore.py index eeec2ddc24..3a46c7d4fe 100644 --- a/api/controllers/console/app/explore.py +++ b/api/controllers/console/app/explore.py @@ -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/') -api.add_resource(RecommendedAppsResource, '/explore/apps') +api.add_resource(RecommendedAppListResource, '/explore/apps') +api.add_resource(RecommendedAppResource, '/explore/apps/')