From f25339c92b70fe38fb73d26b3521d8ea5149dce2 Mon Sep 17 00:00:00 2001 From: Concedo <39025047+LostRuins@users.noreply.github.com> Date: Fri, 25 Jul 2025 22:22:27 +0800 Subject: [PATCH] handle empty objects returned by tool calls, also remove misinterpretation of the tools calls instruct tag within ChatML autoguess --- kcpp_adapters/AutoGuess.json | 4 +--- koboldcpp.py | 11 +++++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/kcpp_adapters/AutoGuess.json b/kcpp_adapters/AutoGuess.json index 5082095a7..2ac961342 100644 --- a/kcpp_adapters/AutoGuess.json +++ b/kcpp_adapters/AutoGuess.json @@ -19,9 +19,7 @@ "user_start": "<|im_start|>user\n", "user_end": "<|im_end|>\n", "assistant_start": "<|im_start|>assistant\n", - "assistant_end": "<|im_end|>\n", - "tools_start": "\n\n# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within XML tags:\n\n\n", - "tools_end": "\n\n\nFor each function call, return a json object with function name and arguments within XML tags:\n\n{\"name\": , \"arguments\": }\n<|im_end|>\n" + "assistant_end": "<|im_end|>\n" } }, { "search": ["<|im_user|>user<|im_middle|>", "<|im_assistant|>assistant<|im_middle|>", "<|im_end|>"], diff --git a/koboldcpp.py b/koboldcpp.py index d1f465b1a..da5497e49 100644 --- a/koboldcpp.py +++ b/koboldcpp.py @@ -2286,7 +2286,7 @@ def transform_genparams(genparams, api_format): user_message_end = adapter_obj.get("user_end", "") assistant_message_start = adapter_obj.get("assistant_start", "\n### Response:\n") assistant_message_end = adapter_obj.get("assistant_end", "") - tools_message_start = adapter_obj.get("tools_start", "") + tools_message_start = adapter_obj.get("tools_start", "\nTool Results:\n") tools_message_end = adapter_obj.get("tools_end", "") images_added = [] audio_added = [] @@ -2365,6 +2365,13 @@ ws ::= | " " | "\n" [ \t]{0,20} for img in imgs: images_added.append(img) if not curr_content: + if "tool_calls" in message: + try: + if len(message.get("tool_calls"))>0: + tcfnname = message.get("tool_calls")[0].get("function").get("name") + messages_string += f"\n(Made a function call to {tcfnname})\n" + except Exception: + messages_string += "\n(Made a function call)\n" pass # do nothing elif isinstance(curr_content, str): messages_string += curr_content @@ -2738,7 +2745,7 @@ class KcppServerRequestHandler(http.server.SimpleHTTPRequestHandler): for tc in tool_calls: tcarg = tc.get("function",{}).get("arguments",None) tc["id"] = f"call_{random.randint(10000, 99999)}" - if tcarg and not isinstance(tcarg, str): + if tcarg is not None and not isinstance(tcarg, str): tc["function"]["arguments"] = json.dumps(tcarg) recvtxt = None currfinishreason = "tool_calls"