Skip to content

Commit d476fcb

Browse files
committed
fix: Add exception checking to AfterToolCall hook
1 parent 57f8f03 commit d476fcb

1 file changed

Lines changed: 8 additions & 4 deletions

File tree

e2e_tests/python/fail_on_tool_error.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,13 @@ def register_hooks(self, registry: HookRegistry) -> None:
1414
registry.add_callback(AfterToolCallEvent, self.check_result)
1515

1616
def check_result(self, event: AfterToolCallEvent) -> None:
17-
if event.result.get("isError", False):
17+
is_error = event.result.get("isError", False) if event.result else False
18+
has_exception = event.exception is not None
19+
20+
if is_error or has_exception:
1821
tool_name = event.tool_use["name"]
19-
error_content = event.result.get("content", [{}])[0].get("text", "Unknown error")
20-
logger.warning(f"Tool {tool_name} failed: {error_content}")
22+
error_msg = str(event.exception) if has_exception else event.result.get("content", [{}])[0].get("text", "Unknown error")
23+
logger.warning(f"Tool {tool_name} failed: {error_msg}")
2124

2225
for attempt in range(self.max_retries):
2326
logger.info(f"Retrying tool {tool_name} (attempt {attempt + 1}/{self.max_retries})")
@@ -27,9 +30,10 @@ def check_result(self, event: AfterToolCallEvent) -> None:
2730
if not result.get("isError", False):
2831
logger.info(f"Tool {tool_name} succeeded on retry {attempt + 1}")
2932
event.result = result
33+
event.exception = None
3034
return
3135
except Exception as e:
3236
logger.warning(f"Retry {attempt + 1} failed: {e}")
3337
continue
3438

35-
raise RuntimeError(f"Tool {tool_name} failed after {self.max_retries} retries: {error_content}")
39+
raise RuntimeError(f"Tool {tool_name} failed after {self.max_retries} retries: {error_msg}")

0 commit comments

Comments
 (0)