Co-authored-by: -LAN- <laipz8200@outlook.com>tags/1.7.0
| ), | ), | ||||
| ) | ) | ||||
| 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: |
| 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 |
| """ | """ | ||||
| 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): |
| 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) |