Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

workflow_run.py 5.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. from typing import cast
  2. from flask_login import current_user
  3. from flask_restx import Resource, marshal_with, reqparse
  4. from flask_restx.inputs import int_range
  5. from controllers.console import api, console_ns
  6. from controllers.console.app.wraps import get_app_model
  7. from controllers.console.wraps import account_initialization_required, setup_required
  8. from fields.workflow_run_fields import (
  9. advanced_chat_workflow_run_pagination_fields,
  10. workflow_run_detail_fields,
  11. workflow_run_node_execution_list_fields,
  12. workflow_run_pagination_fields,
  13. )
  14. from libs.helper import uuid_value
  15. from libs.login import login_required
  16. from models import Account, App, AppMode, EndUser
  17. from services.workflow_run_service import WorkflowRunService
  18. @console_ns.route("/apps/<uuid:app_id>/advanced-chat/workflow-runs")
  19. class AdvancedChatAppWorkflowRunListApi(Resource):
  20. @api.doc("get_advanced_chat_workflow_runs")
  21. @api.doc(description="Get advanced chat workflow run list")
  22. @api.doc(params={"app_id": "Application ID"})
  23. @api.doc(params={"last_id": "Last run ID for pagination", "limit": "Number of items per page (1-100)"})
  24. @api.response(200, "Workflow runs retrieved successfully", advanced_chat_workflow_run_pagination_fields)
  25. @setup_required
  26. @login_required
  27. @account_initialization_required
  28. @get_app_model(mode=[AppMode.ADVANCED_CHAT])
  29. @marshal_with(advanced_chat_workflow_run_pagination_fields)
  30. def get(self, app_model: App):
  31. """
  32. Get advanced chat app workflow run list
  33. """
  34. parser = reqparse.RequestParser()
  35. parser.add_argument("last_id", type=uuid_value, location="args")
  36. parser.add_argument("limit", type=int_range(1, 100), required=False, default=20, location="args")
  37. args = parser.parse_args()
  38. workflow_run_service = WorkflowRunService()
  39. result = workflow_run_service.get_paginate_advanced_chat_workflow_runs(app_model=app_model, args=args)
  40. return result
  41. @console_ns.route("/apps/<uuid:app_id>/workflow-runs")
  42. class WorkflowRunListApi(Resource):
  43. @api.doc("get_workflow_runs")
  44. @api.doc(description="Get workflow run list")
  45. @api.doc(params={"app_id": "Application ID"})
  46. @api.doc(params={"last_id": "Last run ID for pagination", "limit": "Number of items per page (1-100)"})
  47. @api.response(200, "Workflow runs retrieved successfully", workflow_run_pagination_fields)
  48. @setup_required
  49. @login_required
  50. @account_initialization_required
  51. @get_app_model(mode=[AppMode.ADVANCED_CHAT, AppMode.WORKFLOW])
  52. @marshal_with(workflow_run_pagination_fields)
  53. def get(self, app_model: App):
  54. """
  55. Get workflow run list
  56. """
  57. parser = reqparse.RequestParser()
  58. parser.add_argument("last_id", type=uuid_value, location="args")
  59. parser.add_argument("limit", type=int_range(1, 100), required=False, default=20, location="args")
  60. args = parser.parse_args()
  61. workflow_run_service = WorkflowRunService()
  62. result = workflow_run_service.get_paginate_workflow_runs(app_model=app_model, args=args)
  63. return result
  64. @console_ns.route("/apps/<uuid:app_id>/workflow-runs/<uuid:run_id>")
  65. class WorkflowRunDetailApi(Resource):
  66. @api.doc("get_workflow_run_detail")
  67. @api.doc(description="Get workflow run detail")
  68. @api.doc(params={"app_id": "Application ID", "run_id": "Workflow run ID"})
  69. @api.response(200, "Workflow run detail retrieved successfully", workflow_run_detail_fields)
  70. @api.response(404, "Workflow run not found")
  71. @setup_required
  72. @login_required
  73. @account_initialization_required
  74. @get_app_model(mode=[AppMode.ADVANCED_CHAT, AppMode.WORKFLOW])
  75. @marshal_with(workflow_run_detail_fields)
  76. def get(self, app_model: App, run_id):
  77. """
  78. Get workflow run detail
  79. """
  80. run_id = str(run_id)
  81. workflow_run_service = WorkflowRunService()
  82. workflow_run = workflow_run_service.get_workflow_run(app_model=app_model, run_id=run_id)
  83. return workflow_run
  84. @console_ns.route("/apps/<uuid:app_id>/workflow-runs/<uuid:run_id>/node-executions")
  85. class WorkflowRunNodeExecutionListApi(Resource):
  86. @api.doc("get_workflow_run_node_executions")
  87. @api.doc(description="Get workflow run node execution list")
  88. @api.doc(params={"app_id": "Application ID", "run_id": "Workflow run ID"})
  89. @api.response(200, "Node executions retrieved successfully", workflow_run_node_execution_list_fields)
  90. @api.response(404, "Workflow run not found")
  91. @setup_required
  92. @login_required
  93. @account_initialization_required
  94. @get_app_model(mode=[AppMode.ADVANCED_CHAT, AppMode.WORKFLOW])
  95. @marshal_with(workflow_run_node_execution_list_fields)
  96. def get(self, app_model: App, run_id):
  97. """
  98. Get workflow run node execution list
  99. """
  100. run_id = str(run_id)
  101. workflow_run_service = WorkflowRunService()
  102. user = cast("Account | EndUser", current_user)
  103. node_executions = workflow_run_service.get_workflow_run_node_executions(
  104. app_model=app_model,
  105. run_id=run_id,
  106. user=user,
  107. )
  108. return {"data": node_executions}