|  | @@ -1,6 +1,6 @@
 | 
	
		
			
				|  |  |  import logging
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -from flask_restful import Resource, reqparse
 | 
	
		
			
				|  |  | +from flask_restful import Resource, fields, marshal_with, reqparse
 | 
	
		
			
				|  |  |  from werkzeug.exceptions import InternalServerError
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  from controllers.service_api import api
 | 
	
	
		
			
				|  | @@ -21,14 +21,43 @@ from core.errors.error import (
 | 
	
		
			
				|  |  |      QuotaExceededError,
 | 
	
		
			
				|  |  |  )
 | 
	
		
			
				|  |  |  from core.model_runtime.errors.invoke import InvokeError
 | 
	
		
			
				|  |  | +from extensions.ext_database import db
 | 
	
		
			
				|  |  |  from libs import helper
 | 
	
		
			
				|  |  |  from models.model import App, AppMode, EndUser
 | 
	
		
			
				|  |  | +from models.workflow import WorkflowRun
 | 
	
		
			
				|  |  |  from services.app_generate_service import AppGenerateService
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  logger = logging.getLogger(__name__)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class WorkflowRunApi(Resource):
 | 
	
		
			
				|  |  | +    workflow_run_fields = {
 | 
	
		
			
				|  |  | +        'id': fields.String,
 | 
	
		
			
				|  |  | +        'workflow_id': fields.String,
 | 
	
		
			
				|  |  | +        'status': fields.String,
 | 
	
		
			
				|  |  | +        'inputs': fields.Raw,
 | 
	
		
			
				|  |  | +        'outputs': fields.Raw,
 | 
	
		
			
				|  |  | +        'error': fields.String,
 | 
	
		
			
				|  |  | +        'total_steps': fields.Integer,
 | 
	
		
			
				|  |  | +        'total_tokens': fields.Integer,
 | 
	
		
			
				|  |  | +        'created_at': fields.DateTime,
 | 
	
		
			
				|  |  | +        'finished_at': fields.DateTime,
 | 
	
		
			
				|  |  | +        'elapsed_time': fields.Float,
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @validate_app_token
 | 
	
		
			
				|  |  | +    @marshal_with(workflow_run_fields)
 | 
	
		
			
				|  |  | +    def get(self, app_model: App, workflow_id: str):
 | 
	
		
			
				|  |  | +        """
 | 
	
		
			
				|  |  | +        Get a workflow task running detail
 | 
	
		
			
				|  |  | +        """
 | 
	
		
			
				|  |  | +        app_mode = AppMode.value_of(app_model.mode)
 | 
	
		
			
				|  |  | +        if app_mode != AppMode.WORKFLOW:
 | 
	
		
			
				|  |  | +            raise NotWorkflowAppError()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        workflow_run = db.session.query(WorkflowRun).filter(WorkflowRun.id == workflow_id).first()
 | 
	
		
			
				|  |  | +        return workflow_run
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @validate_app_token(fetch_user_arg=FetchUserArg(fetch_from=WhereisUserArg.JSON, required=True))
 | 
	
		
			
				|  |  |      def post(self, app_model: App, end_user: EndUser):
 | 
	
		
			
				|  |  |          """
 | 
	
	
		
			
				|  | @@ -88,5 +117,5 @@ class WorkflowTaskStopApi(Resource):
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -api.add_resource(WorkflowRunApi, '/workflows/run')
 | 
	
		
			
				|  |  | +api.add_resource(WorkflowRunApi, '/workflows/run/<string:workflow_id>', '/workflows/run')
 | 
	
		
			
				|  |  |  api.add_resource(WorkflowTaskStopApi, '/workflows/tasks/<string:task_id>/stop')
 |