From 6342d196e874d7a4485fb49bf41141d4d44af0b9 Mon Sep 17 00:00:00 2001 From: Asuka Minato Date: Fri, 23 Jan 2026 19:06:21 +0900 Subject: [PATCH] refactor: split changes for api/controllers/web/workflow.py (#29852) --- api/controllers/web/workflow.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/api/controllers/web/workflow.py b/api/controllers/web/workflow.py index 3cbb07a296..95d8c6d5a5 100644 --- a/api/controllers/web/workflow.py +++ b/api/controllers/web/workflow.py @@ -1,8 +1,10 @@ import logging +from typing import Any -from flask_restx import reqparse +from pydantic import BaseModel, Field from werkzeug.exceptions import InternalServerError +from controllers.common.schema import register_schema_models from controllers.web import web_ns from controllers.web.error import ( CompletionRequestError, @@ -27,19 +29,22 @@ from models.model import App, AppMode, EndUser from services.app_generate_service import AppGenerateService from services.errors.llm import InvokeRateLimitError + +class WorkflowRunPayload(BaseModel): + inputs: dict[str, Any] = Field(description="Input variables for the workflow") + files: list[dict[str, Any]] | None = Field(default=None, description="Files to be processed by the workflow") + + logger = logging.getLogger(__name__) +register_schema_models(web_ns, WorkflowRunPayload) + @web_ns.route("/workflows/run") class WorkflowRunApi(WebApiResource): @web_ns.doc("Run Workflow") @web_ns.doc(description="Execute a workflow with provided inputs and files.") - @web_ns.doc( - params={ - "inputs": {"description": "Input variables for the workflow", "type": "object", "required": True}, - "files": {"description": "Files to be processed by the workflow", "type": "array", "required": False}, - } - ) + @web_ns.expect(web_ns.models[WorkflowRunPayload.__name__]) @web_ns.doc( responses={ 200: "Success", @@ -58,12 +63,8 @@ class WorkflowRunApi(WebApiResource): if app_mode != AppMode.WORKFLOW: raise NotWorkflowAppError() - parser = ( - reqparse.RequestParser() - .add_argument("inputs", type=dict, required=True, nullable=False, location="json") - .add_argument("files", type=list, required=False, location="json") - ) - args = parser.parse_args() + payload = WorkflowRunPayload.model_validate(web_ns.payload or {}) + args = payload.model_dump(exclude_none=True) try: response = AppGenerateService.generate(