refactor: 更新ComfyWorkflow类的构造函数,简化工作流数据处理逻辑,并在相关API调用中应用新结构

This commit is contained in:
iHeyTang
2025-08-21 14:59:43 +08:00
parent 3c4c689532
commit fc265570d3
6 changed files with 66 additions and 51 deletions

View File

@@ -258,12 +258,12 @@ class WorkflowQueueManager:
if not workflow_run:
raise Exception(f"找不到工作流运行记录: {workflow_run_id}")
workflow_data = json.loads(workflow_run["workflow_json"])
request_data = json.loads(workflow_run["request_data"])
workflow_data = json.loads(workflow_run.workflow_json)
request_data = json.loads(workflow_run.request_data)
workflow = ComfyWorkflow(workflow_run.workflow_name, workflow_data)
# 执行工作流
result = await _execute_prompt_on_server(
workflow_data, request_data, server, workflow_run_id
workflow, request_data, server, workflow_run_id
)
# 保存处理后的结果到数据库
@@ -307,19 +307,19 @@ class WorkflowQueueManager:
result = {
"id": workflow_run_id,
"status": workflow_run["status"],
"created_at": workflow_run["created_at"],
"started_at": workflow_run["started_at"],
"completed_at": workflow_run["completed_at"],
"server_url": workflow_run["server_url"],
"error_message": workflow_run["error_message"],
"status": workflow_run.status,
"created_at": workflow_run.created_at,
"started_at": workflow_run.started_at,
"completed_at": workflow_run.completed_at,
"server_url": workflow_run.server_url,
"error_message": workflow_run.error_message,
"nodes": nodes,
}
# 如果任务完成,从数据库获取结果
if workflow_run["status"] == "completed" and workflow_run.get("result"):
if workflow_run.status == "completed" and workflow_run.result:
try:
result["result"] = json.loads(workflow_run["result"])
result["result"] = json.loads(workflow_run.result)
except (json.JSONDecodeError, TypeError):
result["result"] = None
@@ -369,7 +369,7 @@ queue_manager = WorkflowQueueManager(monitor_interval=5)
async def _execute_prompt_on_server(
workflow_data: dict,
workflow: ComfyWorkflow,
request_data: dict,
server: ComfyUIServerInfo,
workflow_run_id: str,
@@ -381,8 +381,7 @@ async def _execute_prompt_on_server(
client_id = str(uuid.uuid4())
# 构建prompt
flow = ComfyWorkflow(workflow_data)
prompt = await flow.build_prompt(server, request_data)
prompt = await workflow.build_prompt(server, request_data)
# 更新工作流运行状态记录prompt_id和client_id
await update_workflow_run_status(
@@ -394,7 +393,7 @@ async def _execute_prompt_on_server(
)
# 提交到ComfyUI
prompt_id = await _queue_prompt(workflow_data, prompt, client_id, server.http_url)
prompt_id = await _queue_prompt(workflow, prompt, client_id, server.http_url)
# 更新prompt_id
await update_workflow_run_status(
@@ -407,13 +406,13 @@ async def _execute_prompt_on_server(
# 获取执行结果,现在支持节点级别的状态跟踪
results = await _get_execution_results(
workflow_data, prompt_id, client_id, server.ws_url, workflow_run_id
workflow, prompt_id, client_id, server.ws_url, workflow_run_id
)
return results
async def _queue_prompt(
workflow: dict, prompt: dict, client_id: str, http_url: str
workflow: ComfyWorkflow, prompt: dict, client_id: str, http_url: str
) -> str:
"""通过HTTP POST将工作流任务提交到指定的ComfyUI服务器。"""
for node_id in prompt:
@@ -423,7 +422,7 @@ async def _queue_prompt(
"client_id": client_id,
"extra_data": {
"api_key_comfy_org": "",
"extra_pnginfo": {"workflow": workflow},
"extra_pnginfo": {"workflow": workflow.workflow_data.model_dump()},
},
}
async with aiohttp.ClientSession(timeout=ClientTimeout(total=90)) as session:
@@ -443,7 +442,7 @@ async def _queue_prompt(
async def _get_execution_results(
workflow_data: Dict,
workflow: ComfyWorkflow,
prompt_id: str,
client_id: str,
ws_url: str,
@@ -511,17 +510,17 @@ async def _get_execution_results(
node = next(
(
x
for x in workflow_data["nodes"]
if str(x["id"]) == node_id
for x in workflow.workflow_data.nodes
if str(x.id) == node_id
),
None,
)
if (
node
and node.get("title", "")
and node["title"].startswith(API_OUTPUT_PREFIX)
and node.title
and node.title.startswith(API_OUTPUT_PREFIX)
):
title = node["title"].replace(API_OUTPUT_PREFIX, "")
title = node.title.replace(API_OUTPUT_PREFIX, "")
aggregated_outputs[title] = output_data
logger.info(
f"收到节点 {node_id} 的输出 (Prompt ID: {prompt_id})"