Added a check to ensure the input text is a string before proceeding with parsing (#22809)

Co-authored-by: -LAN- <laipz8200@outlook.com>
This commit is contained in:
crazywoola
2025-07-23 13:53:27 +08:00
committed by GitHub
parent 82cc37bf51
commit 60c37fe492
4 changed files with 26 additions and 3 deletions

View File

@@ -114,7 +114,8 @@ class LLMGenerator:
), ),
) )
questions = output_parser.parse(cast(str, response.message.content)) text_content = response.message.get_text_content()
questions = output_parser.parse(text_content) if text_content else []
except InvokeError: except InvokeError:
questions = [] questions = []
except Exception: except Exception:

View File

@@ -15,5 +15,4 @@ class SuggestedQuestionsAfterAnswerOutputParser:
json_obj = json.loads(action_match.group(0).strip()) json_obj = json.loads(action_match.group(0).strip())
else: else:
json_obj = [] json_obj = []
return json_obj return json_obj

View File

@@ -156,6 +156,23 @@ class PromptMessage(ABC, BaseModel):
""" """
return not self.content return not self.content
def get_text_content(self) -> str:
"""
Get text content from prompt message.
:return: Text content as string, empty string if no text content
"""
if isinstance(self.content, str):
return self.content
elif isinstance(self.content, list):
text_parts = []
for item in self.content:
if isinstance(item, TextPromptMessageContent):
text_parts.append(item.data)
return "".join(text_parts)
else:
return ""
@field_validator("content", mode="before") @field_validator("content", mode="before")
@classmethod @classmethod
def validate_content(cls, v): def validate_content(cls, v):

View File

@@ -317,7 +317,13 @@ class ToolNode(BaseNode):
elif message.type == ToolInvokeMessage.MessageType.FILE: elif message.type == ToolInvokeMessage.MessageType.FILE:
assert message.meta is not None assert message.meta is not None
assert isinstance(message.meta, dict) assert isinstance(message.meta, dict)
assert "file" in message.meta and isinstance(message.meta["file"], File) # Validate that meta contains a 'file' key
if "file" not in message.meta:
raise ToolNodeError("File message is missing 'file' key in meta")
# Validate that the file is an instance of File
if not isinstance(message.meta["file"], File):
raise ToolNodeError(f"Expected File object but got {type(message.meta['file']).__name__}")
files.append(message.meta["file"]) files.append(message.meta["file"])
elif message.type == ToolInvokeMessage.MessageType.LOG: elif message.type == ToolInvokeMessage.MessageType.LOG:
assert isinstance(message.message, ToolInvokeMessage.LogMessage) assert isinstance(message.message, ToolInvokeMessage.LogMessage)