mirror of
https://github.com/langgenius/dify.git
synced 2024-11-16 03:32:23 +08:00
feat: support get workflow task execution status (#6411)
This commit is contained in:
parent
166a40c66e
commit
afe95fa780
|
@ -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')
|
||||
|
|
|
@ -224,6 +224,63 @@ Workflow applications offers non-session support and is ideal for translation, a
|
|||
|
||||
---
|
||||
|
||||
<Heading
|
||||
url='/workflows/run/:workflow_id'
|
||||
method='GET'
|
||||
title='Get Workflow Run Detail'
|
||||
name='#get-workflow-run-detail'
|
||||
/>
|
||||
<Row>
|
||||
<Col>
|
||||
Retrieve the current execution results of a workflow task based on the workflow execution ID.
|
||||
### Path
|
||||
- `workflow_id` (string) Workflow ID, can be obtained from the streaming chunk return
|
||||
### Response
|
||||
- `id` (string) ID of workflow execution
|
||||
- `workflow_id` (string) ID of relatied workflow
|
||||
- `status` (string) status of execution, `running` / `succeeded` / `failed` / `stopped`
|
||||
- `inputs` (json) content of input
|
||||
- `outputs` (json) content of output
|
||||
- `error` (string) reason of error
|
||||
- `total_steps` (int) total steps of task
|
||||
- `total_tokens` (int) total tokens to be used
|
||||
- `created_at` (timestamp) start time
|
||||
- `finished_at` (timestamp) end time
|
||||
- `elapsed_time` (float) total seconds to be used
|
||||
</Col>
|
||||
<Col sticky>
|
||||
### Request Example
|
||||
<CodeGroup title="Request" tag="GET" label="/workflows/run/:workflow_id" targetCode={`curl -X GET '${props.appDetail.api_base_url}/workflows/run/:workflow_id' \\\n-H 'Authorization: Bearer {api_key}' \\\n-H 'Content-Type: application/json'`}>
|
||||
```bash {{ title: 'cURL' }}
|
||||
curl -X GET '${props.appDetail.api_base_url}/workflows/run/:workflow_id' \
|
||||
-H 'Authorization: Bearer {api_key}' \
|
||||
-H 'Content-Type: application/json'
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
### Response Example
|
||||
<CodeGroup title="Response">
|
||||
```json {{ title: 'Response' }}
|
||||
{
|
||||
"id": "b1ad3277-089e-42c6-9dff-6820d94fbc76",
|
||||
"workflow_id": "19eff89f-ec03-4f75-b0fc-897e7effea02",
|
||||
"status": "succeeded",
|
||||
"inputs": "{\"sys.files\": [], \"sys.user_id\": \"abc-123\"}",
|
||||
"outputs": null,
|
||||
"error": null,
|
||||
"total_steps": 3,
|
||||
"total_tokens": 0,
|
||||
"created_at": "Thu, 18 Jul 2024 03:17:40 -0000",
|
||||
"finished_at": "Thu, 18 Jul 2024 03:18:10 -0000",
|
||||
"elapsed_time": 30.098514399956912
|
||||
}
|
||||
```
|
||||
</CodeGroup>
|
||||
</Col>
|
||||
</Row>
|
||||
|
||||
---
|
||||
|
||||
<Heading
|
||||
url='/workflows/tasks/:task_id/stop'
|
||||
method='POST'
|
||||
|
|
|
@ -220,6 +220,63 @@ Workflow 应用无会话支持,适合用于翻译/文章写作/总结 AI 等
|
|||
|
||||
---
|
||||
|
||||
<Heading
|
||||
url='/workflows/run/:workflow_id'
|
||||
method='GET'
|
||||
title='获取workflow执行情况'
|
||||
name='#get-workflow-run-detail'
|
||||
/>
|
||||
<Row>
|
||||
<Col>
|
||||
根据 workflow 执行 ID 获取 workflow 任务当前执行结果
|
||||
### Path
|
||||
- `workflow_id` (string) workflow 执行 ID,可在流式返回 Chunk 中获取
|
||||
### Response
|
||||
- `id` (string) workflow 执行 ID
|
||||
- `workflow_id` (string) 关联的 Workflow ID
|
||||
- `status` (string) 执行状态 `running` / `succeeded` / `failed` / `stopped`
|
||||
- `inputs` (json) 任务输入内容
|
||||
- `outputs` (json) 任务输出内容
|
||||
- `error` (string) 错误原因
|
||||
- `total_steps` (int) 任务执行总步数
|
||||
- `total_tokens` (int) 任务执行总 tokens
|
||||
- `created_at` (timestamp) 任务开始时间
|
||||
- `finished_at` (timestamp) 任务结束时间
|
||||
- `elapsed_time` (float) 耗时(s)
|
||||
</Col>
|
||||
<Col sticky>
|
||||
### Request Example
|
||||
<CodeGroup title="Request" tag="GET" label="/workflows/run/:workflow_id" targetCode={`curl -X GET '${props.appDetail.api_base_url}/workflows/run/:workflow_id' \\\n-H 'Authorization: Bearer {api_key}' \\\n-H 'Content-Type: application/json'`}>
|
||||
```bash {{ title: 'cURL' }}
|
||||
curl -X GET '${props.appDetail.api_base_url}/workflows/run/:workflow_id' \
|
||||
-H 'Authorization: Bearer {api_key}' \
|
||||
-H 'Content-Type: application/json'
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
### Response Example
|
||||
<CodeGroup title="Response">
|
||||
```json {{ title: 'Response' }}
|
||||
{
|
||||
"id": "b1ad3277-089e-42c6-9dff-6820d94fbc76",
|
||||
"workflow_id": "19eff89f-ec03-4f75-b0fc-897e7effea02",
|
||||
"status": "succeeded",
|
||||
"inputs": "{\"sys.files\": [], \"sys.user_id\": \"abc-123\"}",
|
||||
"outputs": null,
|
||||
"error": null,
|
||||
"total_steps": 3,
|
||||
"total_tokens": 0,
|
||||
"created_at": "Thu, 18 Jul 2024 03:17:40 -0000",
|
||||
"finished_at": "Thu, 18 Jul 2024 03:18:10 -0000",
|
||||
"elapsed_time": 30.098514399956912
|
||||
}
|
||||
```
|
||||
</CodeGroup>
|
||||
</Col>
|
||||
</Row>
|
||||
|
||||
---
|
||||
|
||||
<Heading
|
||||
url='/workflows/tasks/:task_id/stop'
|
||||
method='POST'
|
||||
|
|
Loading…
Reference in New Issue
Block a user