From a532e7b1696ef7539a4616b9c26fbf950f3721a3 Mon Sep 17 00:00:00 2001 From: CaptainJack2491 Date: Wed, 25 Mar 2026 18:24:11 +0000 Subject: fix: catch and recover from JSONDecodeError on malformed tool args --- src/agent.py | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/agent.py b/src/agent.py index 4047b08..a8edb20 100644 --- a/src/agent.py +++ b/src/agent.py @@ -248,20 +248,24 @@ class Agent: logger.info(f"LLM requested {len(response_message.tool_calls)} tool execution(s)") for tool_call in response_message.tool_calls: function_name = tool_call.function.name - function_args = json.loads(tool_call.function.arguments) - - function_to_call = self.available_functions.get(function_name) - if not function_to_call: - error_msg = f"Unknown tool: {function_name}" + try: + function_args = json.loads(tool_call.function.arguments) + logger.info(f"Executing: {function_name}({function_args})") + + function_to_call = self.available_functions.get(function_name) + if not function_to_call: + error_msg = f"Unknown tool: {function_name}" + logger.warning(error_msg) + function_output = error_msg + else: + try: + function_output = function_to_call(**function_args) + except Exception as e: + function_output = f"Error executing {function_name}: {str(e)}" + except json.JSONDecodeError as e: + error_msg = f"Error parsing tool arguments for {function_name}: {str(e)}. Arguments must be valid JSON." logger.warning(error_msg) function_output = error_msg - else: - try: - function_output = function_to_call(**function_args) - except Exception as e: - function_output = f"Error executing {function_name}: {str(e)}" - - logger.info(f"Executing: {function_name}({function_args})") tool_message = { "tool_call_id": tool_call.id, -- cgit v1.2.3