| 
									
										
										
										
											2025-04-17 15:07:23 +08:00
										 |  |  | import logging | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-04-27 14:31:19 +08:00
										 |  |  | from flask import request | 
					
						
							|  |  |  | from flask_restful import Resource, reqparse  # type: ignore  # type: ignore | 
					
						
							| 
									
										
										
										
											2025-04-17 15:07:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | from controllers.console import api | 
					
						
							|  |  |  | from controllers.console.wraps import ( | 
					
						
							|  |  |  |     account_initialization_required, | 
					
						
							|  |  |  |     enterprise_license_required, | 
					
						
							|  |  |  |     setup_required, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2025-04-27 14:31:19 +08:00
										 |  |  | from libs.login import login_required | 
					
						
							| 
									
										
										
										
											2025-04-17 15:07:23 +08:00
										 |  |  | from services.entities.knowledge_entities.rag_pipeline_entities import PipelineTemplateInfoEntity | 
					
						
							|  |  |  | from services.rag_pipeline.rag_pipeline import RagPipelineService | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | logger = logging.getLogger(__name__) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _validate_name(name): | 
					
						
							|  |  |  |     if not name or len(name) < 1 or len(name) > 40: | 
					
						
							|  |  |  |         raise ValueError("Name must be between 1 to 40 characters.") | 
					
						
							|  |  |  |     return name | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _validate_description_length(description): | 
					
						
							|  |  |  |     if len(description) > 400: | 
					
						
							|  |  |  |         raise ValueError("Description cannot exceed 400 characters.") | 
					
						
							|  |  |  |     return description | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PipelineTemplateListApi(Resource): | 
					
						
							|  |  |  |     @setup_required | 
					
						
							|  |  |  |     @login_required | 
					
						
							|  |  |  |     @account_initialization_required | 
					
						
							|  |  |  |     @enterprise_license_required | 
					
						
							|  |  |  |     def get(self): | 
					
						
							|  |  |  |         type = request.args.get("type", default="built-in", type=str, choices=["built-in", "customized"]) | 
					
						
							|  |  |  |         language = request.args.get("language", default="en-US", type=str) | 
					
						
							|  |  |  |         # get pipeline templates | 
					
						
							|  |  |  |         pipeline_templates = RagPipelineService.get_pipeline_templates(type, language) | 
					
						
							|  |  |  |         return pipeline_templates, 200 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PipelineTemplateDetailApi(Resource): | 
					
						
							|  |  |  |     @setup_required | 
					
						
							|  |  |  |     @login_required | 
					
						
							|  |  |  |     @account_initialization_required | 
					
						
							|  |  |  |     @enterprise_license_required | 
					
						
							|  |  |  |     def get(self, pipeline_id: str): | 
					
						
							|  |  |  |         pipeline_template = RagPipelineService.get_pipeline_template_detail(pipeline_id) | 
					
						
							|  |  |  |         return pipeline_template, 200 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CustomizedPipelineTemplateApi(Resource): | 
					
						
							|  |  |  |     @setup_required | 
					
						
							|  |  |  |     @login_required | 
					
						
							|  |  |  |     @account_initialization_required | 
					
						
							|  |  |  |     @enterprise_license_required | 
					
						
							|  |  |  |     def patch(self, template_id: str): | 
					
						
							|  |  |  |         parser = reqparse.RequestParser() | 
					
						
							|  |  |  |         parser.add_argument( | 
					
						
							|  |  |  |             "name", | 
					
						
							|  |  |  |             nullable=False, | 
					
						
							|  |  |  |             required=True, | 
					
						
							|  |  |  |             help="Name must be between 1 to 40 characters.", | 
					
						
							|  |  |  |             type=_validate_name, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         parser.add_argument( | 
					
						
							|  |  |  |             "description", | 
					
						
							|  |  |  |             type=str, | 
					
						
							|  |  |  |             nullable=True, | 
					
						
							|  |  |  |             required=False, | 
					
						
							|  |  |  |             default="", | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         parser.add_argument( | 
					
						
							|  |  |  |             "icon_info", | 
					
						
							|  |  |  |             type=dict, | 
					
						
							|  |  |  |             location="json", | 
					
						
							|  |  |  |             nullable=True, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         args = parser.parse_args() | 
					
						
							|  |  |  |         pipeline_template_info = PipelineTemplateInfoEntity(**args) | 
					
						
							|  |  |  |         pipeline_template = RagPipelineService.update_customized_pipeline_template(template_id, pipeline_template_info) | 
					
						
							|  |  |  |         return pipeline_template, 200 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @setup_required | 
					
						
							|  |  |  |     @login_required | 
					
						
							|  |  |  |     @account_initialization_required | 
					
						
							|  |  |  |     @enterprise_license_required | 
					
						
							|  |  |  |     def delete(self, template_id: str): | 
					
						
							|  |  |  |         RagPipelineService.delete_customized_pipeline_template(template_id) | 
					
						
							|  |  |  |         return 200 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | api.add_resource( | 
					
						
							|  |  |  |     PipelineTemplateListApi, | 
					
						
							|  |  |  |     "/rag/pipeline/templates", | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | api.add_resource( | 
					
						
							|  |  |  |     PipelineTemplateDetailApi, | 
					
						
							|  |  |  |     "/rag/pipeline/templates/<string:pipeline_id>", | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | api.add_resource( | 
					
						
							|  |  |  |     CustomizedPipelineTemplateApi, | 
					
						
							|  |  |  |     "/rag/pipeline/templates/<string:template_id>", | 
					
						
							|  |  |  | ) |