fix(workflow): fix streaming output parsing errors and improve file-type output handling

This commit is contained in:
Eternity
2026-02-05 14:24:39 +08:00
parent 0632d7611f
commit 2f0ce3852e
3 changed files with 16 additions and 33 deletions

View File

@@ -667,6 +667,15 @@ class BaseNode(ABC):
@staticmethod
def process_model_output(content) -> str:
if isinstance(content, dict):
return content.get("text")
return content
result = ""
if isinstance(content, list):
for msg in content:
if isinstance(msg, dict):
result += msg.get("text")
elif isinstance(msg, str):
result += msg
elif isinstance(content, dict):
result = content.get("text")
elif isinstance(content, str):
return content
return result

View File

@@ -2,7 +2,7 @@ from typing import Any, TypeVar, Type, Generic
from deprecated import deprecated
from app.core.workflow.variable.base_variable import BaseVariable, VariableType, FileObject
from app.core.workflow.variable.base_variable import BaseVariable, VariableType, FileObject, FileType
T = TypeVar("T", bound=BaseVariable)
@@ -75,7 +75,7 @@ class FileVariable(BaseVariable):
raise TypeError(f"Value must be a FileObject - {type(value)}:{value}")
def to_literal(self) -> str:
return str(self.value.model_dump())
return f'{"!"if self.value.type == FileType.IMAGE else ""}[file]({self.value.url})'
def get_value(self) -> Any:
return self.value.model_dump()

View File

@@ -460,21 +460,8 @@ class WorkflowService:
input_data = {"message": payload.message, "variables": payload.variables,
"conversation_id": payload.conversation_id, "files": files}
# 转换 user_id 为 UUID
triggered_by_uuid = None
if payload.user_id:
try:
triggered_by_uuid = uuid.UUID(payload.user_id)
except (ValueError, AttributeError):
logger.warning(f"无效的 user_id 格式: {payload.user_id}")
# 转换 conversation_id 为 UUID
conversation_id_uuid = None
if payload.conversation_id:
try:
conversation_id_uuid = uuid.UUID(payload.conversation_id)
except (ValueError, AttributeError):
logger.warning(f"无效的 conversation_id 格式: {payload.conversation_id}")
conversation_id_uuid = uuid.UUID(payload.conversation_id) if payload.conversation_id else None
# 2. 创建执行记录
execution = self.create_execution(
@@ -661,21 +648,8 @@ class WorkflowService:
input_data = {"message": payload.message, "variables": payload.variables,
"conversation_id": payload.conversation_id, "files": files}
# 转换 user_id 为 UUID
triggered_by_uuid = None
if payload.user_id:
try:
triggered_by_uuid = uuid.UUID(payload.user_id)
except (ValueError, AttributeError):
logger.warning(f"无效的 user_id 格式: {payload.user_id}")
# 转换 conversation_id 为 UUID
conversation_id_uuid = None
if payload.conversation_id:
try:
conversation_id_uuid = uuid.UUID(payload.conversation_id)
except (ValueError, AttributeError):
logger.warning(f"无效的 conversation_id 格式: {payload.conversation_id}")
conversation_id_uuid = uuid.UUID(payload.conversation_id) if payload.conversation_id else None
# 2. 创建执行记录
execution = self.create_execution(