mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 02:42:59 +00:00 
			
		
		
		
	
		
			
	
	
		
			86 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			86 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import logging | ||
|  | 
 | ||
|  | from flask_restful import reqparse | ||
|  | from werkzeug.exceptions import InternalServerError | ||
|  | 
 | ||
|  | from controllers.console import api | ||
|  | from controllers.console.app.error import ( | ||
|  |     CompletionRequestError, | ||
|  |     ProviderModelCurrentlyNotSupportError, | ||
|  |     ProviderNotInitializeError, | ||
|  |     ProviderQuotaExceededError, | ||
|  | ) | ||
|  | from controllers.console.explore.error import NotWorkflowAppError | ||
|  | from controllers.console.explore.wraps import InstalledAppResource | ||
|  | from core.app.apps.base_app_queue_manager import AppQueueManager | ||
|  | from core.app.entities.app_invoke_entities import InvokeFrom | ||
|  | from core.errors.error import ModelCurrentlyNotSupportError, ProviderTokenNotInitError, QuotaExceededError | ||
|  | from core.model_runtime.errors.invoke import InvokeError | ||
|  | from libs import helper | ||
|  | from libs.login import current_user | ||
|  | from models.model import AppMode, InstalledApp | ||
|  | from services.app_generate_service import AppGenerateService | ||
|  | 
 | ||
|  | logger = logging.getLogger(__name__) | ||
|  | 
 | ||
|  | 
 | ||
|  | class InstalledAppWorkflowRunApi(InstalledAppResource): | ||
|  |     def post(self, installed_app: InstalledApp): | ||
|  |         """
 | ||
|  |         Run workflow | ||
|  |         """
 | ||
|  |         app_model = installed_app.app | ||
|  |         app_mode = AppMode.value_of(app_model.mode) | ||
|  |         if app_mode != AppMode.WORKFLOW: | ||
|  |             raise NotWorkflowAppError() | ||
|  | 
 | ||
|  |         parser = reqparse.RequestParser() | ||
|  |         parser.add_argument('inputs', type=dict, required=True, nullable=False, location='json') | ||
|  |         parser.add_argument('files', type=list, required=False, location='json') | ||
|  |         args = parser.parse_args() | ||
|  | 
 | ||
|  |         try: | ||
|  |             response = AppGenerateService.generate( | ||
|  |                 app_model=app_model, | ||
|  |                 user=current_user, | ||
|  |                 args=args, | ||
|  |                 invoke_from=InvokeFrom.EXPLORE, | ||
|  |                 streaming=True | ||
|  |             ) | ||
|  | 
 | ||
|  |             return helper.compact_generate_response(response) | ||
|  |         except ProviderTokenNotInitError as ex: | ||
|  |             raise ProviderNotInitializeError(ex.description) | ||
|  |         except QuotaExceededError: | ||
|  |             raise ProviderQuotaExceededError() | ||
|  |         except ModelCurrentlyNotSupportError: | ||
|  |             raise ProviderModelCurrentlyNotSupportError() | ||
|  |         except InvokeError as e: | ||
|  |             raise CompletionRequestError(e.description) | ||
|  |         except ValueError as e: | ||
|  |             raise e | ||
|  |         except Exception as e: | ||
|  |             logging.exception("internal server error.") | ||
|  |             raise InternalServerError() | ||
|  | 
 | ||
|  | 
 | ||
|  | class InstalledAppWorkflowTaskStopApi(InstalledAppResource): | ||
|  |     def post(self, installed_app: InstalledApp, task_id: str): | ||
|  |         """
 | ||
|  |         Stop workflow task | ||
|  |         """
 | ||
|  |         app_model = installed_app.app | ||
|  |         app_mode = AppMode.value_of(app_model.mode) | ||
|  |         if app_mode != AppMode.WORKFLOW: | ||
|  |             raise NotWorkflowAppError() | ||
|  | 
 | ||
|  |         AppQueueManager.set_stop_flag(task_id, InvokeFrom.EXPLORE, current_user.id) | ||
|  | 
 | ||
|  |         return { | ||
|  |             "result": "success" | ||
|  |         } | ||
|  | 
 | ||
|  | 
 | ||
|  | api.add_resource(InstalledAppWorkflowRunApi, '/installed-apps/<uuid:installed_app_id>/workflows/run') | ||
|  | api.add_resource(InstalledAppWorkflowTaskStopApi, '/installed-apps/<uuid:installed_app_id>/workflows/tasks/<string:task_id>/stop') |