fix: special prompt not work for comfyUI tool (#10307)
This commit is contained in:
parent
7f583ec1ac
commit
d92e3bd620
@ -8,6 +8,20 @@ from core.tools.provider.builtin.comfyui.tools.comfyui_client import ComfyUiClie
|
|||||||
from core.tools.tool.builtin_tool import BuiltinTool
|
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):
|
class ComfyUIWorkflowTool(BuiltinTool):
|
||||||
def _invoke(self, user_id: str, tool_parameters: dict[str, Any]) -> ToolInvokeMessage | list[ToolInvokeMessage]:
|
def _invoke(self, user_id: str, tool_parameters: dict[str, Any]) -> ToolInvokeMessage | list[ToolInvokeMessage]:
|
||||||
comfyui = ComfyUiClient(self.runtime.credentials["base_url"])
|
comfyui = ComfyUiClient(self.runtime.credentials["base_url"])
|
||||||
@ -26,11 +40,15 @@ class ComfyUIWorkflowTool(BuiltinTool):
|
|||||||
set_prompt_with_ksampler = True
|
set_prompt_with_ksampler = True
|
||||||
if "{{positive_prompt}}" in workflow:
|
if "{{positive_prompt}}" in workflow:
|
||||||
set_prompt_with_ksampler = False
|
set_prompt_with_ksampler = False
|
||||||
workflow = workflow.replace("{{positive_prompt}}", positive_prompt)
|
workflow = workflow.replace("{{positive_prompt}}", positive_prompt.replace('"', "'"))
|
||||||
workflow = workflow.replace("{{negative_prompt}}", negative_prompt)
|
workflow = workflow.replace("{{negative_prompt}}", negative_prompt.replace('"', "'"))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
prompt = json.loads(workflow)
|
prompt = json.loads(workflow)
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
cleaned_string = sanitize_json_string(workflow)
|
||||||
|
try:
|
||||||
|
prompt = json.loads(cleaned_string)
|
||||||
except:
|
except:
|
||||||
return self.create_text_message("the Workflow JSON is not correct")
|
return self.create_text_message("the Workflow JSON is not correct")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user