| 
									
										
										
										
											2024-01-23 19:58:23 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-06 13:21:13 +08:00
										 |  |  | from flask import current_app | 
					
						
							|  |  |  | from flask_restful import fields, marshal_with | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-25 15:54:45 +08:00
										 |  |  | from controllers.console import api | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | from controllers.console.app.error import AppUnavailableError | 
					
						
							| 
									
										
										
										
											2023-05-25 15:54:45 +08:00
										 |  |  | from controllers.console.explore.wraps import InstalledAppResource | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | from models.model import AppMode, InstalledApp | 
					
						
							|  |  |  | from services.app_service import AppService | 
					
						
							| 
									
										
										
										
											2023-07-27 13:08:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-25 15:54:45 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | class AppParameterApi(InstalledAppResource): | 
					
						
							|  |  |  |     """Resource for app variables.""" | 
					
						
							|  |  |  |     variable_fields = { | 
					
						
							|  |  |  |         'key': fields.String, | 
					
						
							|  |  |  |         'name': fields.String, | 
					
						
							|  |  |  |         'description': fields.String, | 
					
						
							|  |  |  |         'type': fields.String, | 
					
						
							|  |  |  |         'default': fields.String, | 
					
						
							|  |  |  |         'max_length': fields.Integer, | 
					
						
							|  |  |  |         'options': fields.List(fields.String) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-13 22:05:46 +08:00
										 |  |  |     system_parameters_fields = { | 
					
						
							|  |  |  |         'image_file_size_limit': fields.String | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-25 15:54:45 +08:00
										 |  |  |     parameters_fields = { | 
					
						
							|  |  |  |         'opening_statement': fields.String, | 
					
						
							|  |  |  |         'suggested_questions': fields.Raw, | 
					
						
							|  |  |  |         'suggested_questions_after_answer': fields.Raw, | 
					
						
							| 
									
										
										
										
											2023-07-07 17:50:42 +08:00
										 |  |  |         'speech_to_text': fields.Raw, | 
					
						
							| 
									
										
										
										
											2024-01-24 01:05:37 +08:00
										 |  |  |         'text_to_speech': fields.Raw, | 
					
						
							| 
									
										
										
										
											2023-09-10 15:17:43 +08:00
										 |  |  |         'retriever_resource': fields.Raw, | 
					
						
							| 
									
										
										
										
											2023-12-18 13:10:05 +08:00
										 |  |  |         'annotation_reply': fields.Raw, | 
					
						
							| 
									
										
										
										
											2023-05-25 15:54:45 +08:00
										 |  |  |         'more_like_this': fields.Raw, | 
					
						
							|  |  |  |         'user_input_form': fields.Raw, | 
					
						
							| 
									
										
										
										
											2023-11-13 22:05:46 +08:00
										 |  |  |         'sensitive_word_avoidance': fields.Raw, | 
					
						
							|  |  |  |         'file_upload': fields.Raw, | 
					
						
							|  |  |  |         'system_parameters': fields.Nested(system_parameters_fields) | 
					
						
							| 
									
										
										
										
											2023-05-25 15:54:45 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @marshal_with(parameters_fields) | 
					
						
							| 
									
										
										
										
											2023-07-27 13:08:57 +08:00
										 |  |  |     def get(self, installed_app: InstalledApp): | 
					
						
							| 
									
										
										
										
											2023-05-25 15:54:45 +08:00
										 |  |  |         """Retrieve app parameters.""" | 
					
						
							|  |  |  |         app_model = installed_app.app | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if app_model.mode in [AppMode.ADVANCED_CHAT.value, AppMode.WORKFLOW.value]: | 
					
						
							|  |  |  |             workflow = app_model.workflow | 
					
						
							|  |  |  |             if workflow is None: | 
					
						
							|  |  |  |                 raise AppUnavailableError() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             features_dict = workflow.features_dict | 
					
						
							|  |  |  |             user_input_form = workflow.user_input_form(to_old_structure=True) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             app_model_config = app_model.app_model_config | 
					
						
							|  |  |  |             features_dict = app_model_config.to_dict() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             user_input_form = features_dict.get('user_input_form', []) | 
					
						
							| 
									
										
										
										
											2023-05-25 15:54:45 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return { | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |             'opening_statement': features_dict.get('opening_statement'), | 
					
						
							|  |  |  |             'suggested_questions': features_dict.get('suggested_questions', []), | 
					
						
							|  |  |  |             'suggested_questions_after_answer': features_dict.get('suggested_questions_after_answer', | 
					
						
							|  |  |  |                                                                   {"enabled": False}), | 
					
						
							|  |  |  |             'speech_to_text': features_dict.get('speech_to_text', {"enabled": False}), | 
					
						
							|  |  |  |             'text_to_speech': features_dict.get('text_to_speech', {"enabled": False}), | 
					
						
							|  |  |  |             'retriever_resource': features_dict.get('retriever_resource', {"enabled": False}), | 
					
						
							|  |  |  |             'annotation_reply': features_dict.get('annotation_reply', {"enabled": False}), | 
					
						
							|  |  |  |             'more_like_this': features_dict.get('more_like_this', {"enabled": False}), | 
					
						
							|  |  |  |             'user_input_form': user_input_form, | 
					
						
							|  |  |  |             'sensitive_word_avoidance': features_dict.get('sensitive_word_avoidance', | 
					
						
							|  |  |  |                                                           {"enabled": False, "type": "", "configs": []}), | 
					
						
							|  |  |  |             'file_upload': features_dict.get('file_upload', {"image": { | 
					
						
							|  |  |  |                                                      "enabled": False, | 
					
						
							|  |  |  |                                                      "number_limits": 3, | 
					
						
							|  |  |  |                                                      "detail": "high", | 
					
						
							|  |  |  |                                                      "transfer_methods": ["remote_url", "local_file"] | 
					
						
							|  |  |  |                                                  }}), | 
					
						
							| 
									
										
										
										
											2023-11-13 22:05:46 +08:00
										 |  |  |             'system_parameters': { | 
					
						
							|  |  |  |                 'image_file_size_limit': current_app.config.get('UPLOAD_IMAGE_FILE_SIZE_LIMIT') | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2023-05-25 15:54:45 +08:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-23 19:58:23 +08:00
										 |  |  | class ExploreAppMetaApi(InstalledAppResource): | 
					
						
							|  |  |  |     def get(self, installed_app: InstalledApp): | 
					
						
							|  |  |  |         """Get app meta""" | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  |         app_model = installed_app.app | 
					
						
							|  |  |  |         return AppService().get_app_meta(app_model) | 
					
						
							| 
									
										
										
										
											2024-01-23 19:58:23 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-25 15:54:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-08 18:51:46 +08:00
										 |  |  | api.add_resource(AppParameterApi, '/installed-apps/<uuid:installed_app_id>/parameters', | 
					
						
							|  |  |  |                  endpoint='installed_app_parameters') | 
					
						
							| 
									
										
										
										
											2024-01-23 19:58:23 +08:00
										 |  |  | api.add_resource(ExploreAppMetaApi, '/installed-apps/<uuid:installed_app_id>/meta', endpoint='installed_app_meta') |