diff --git a/api/core/tools/provider/builtin/comfyui/tools/comfyui_workflow.py b/api/core/tools/provider/builtin/comfyui/tools/comfyui_workflow.py index 79fe08a86b..d62772cda7 100644 --- a/api/core/tools/provider/builtin/comfyui/tools/comfyui_workflow.py +++ b/api/core/tools/provider/builtin/comfyui/tools/comfyui_workflow.py @@ -8,6 +8,20 @@ from core.tools.provider.builtin.comfyui.tools.comfyui_client import ComfyUiClie from core.tools.tool.builtin_tool import BuiltinTool +def sanitize_json_string(s): + escape_dict = { + "\n": "\\n", + "\r": "\\r", + "\t": "\\t", + "\b": "\\b", + "\f": "\\f", + } + for char, escaped in escape_dict.items(): + s = s.replace(char, escaped) + + return s + + class ComfyUIWorkflowTool(BuiltinTool): def _invoke(self, user_id: str, tool_parameters: dict[str, Any]) -> ToolInvokeMessage | list[ToolInvokeMessage]: comfyui = ComfyUiClient(self.runtime.credentials["base_url"]) @@ -26,13 +40,17 @@ class ComfyUIWorkflowTool(BuiltinTool): set_prompt_with_ksampler = True if "{{positive_prompt}}" in workflow: set_prompt_with_ksampler = False - workflow = workflow.replace("{{positive_prompt}}", positive_prompt) - workflow = workflow.replace("{{negative_prompt}}", negative_prompt) + workflow = workflow.replace("{{positive_prompt}}", positive_prompt.replace('"', "'")) + workflow = workflow.replace("{{negative_prompt}}", negative_prompt.replace('"', "'")) try: prompt = json.loads(workflow) - except: - return self.create_text_message("the Workflow JSON is not correct") + except json.JSONDecodeError: + cleaned_string = sanitize_json_string(workflow) + try: + prompt = json.loads(cleaned_string) + except: + return self.create_text_message("the Workflow JSON is not correct") if set_prompt_with_ksampler: try: