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:
@@ -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:
|
||||||
|
@@ -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
|
||||||
|
@@ -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):
|
||||||
|
@@ -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)
|
||||||
|
Reference in New Issue
Block a user