File tree Expand file tree Collapse file tree 2 files changed +30
-0
lines changed
Expand file tree Collapse file tree 2 files changed +30
-0
lines changed Original file line number Diff line number Diff line change 1+ import time
2+ from strands .hooks import HookProvider , HookRegistry , AfterToolCallEvent
3+
4+
5+ class FailOnToolError (HookProvider ):
6+ def __init__ (self , max_retries : int = 3 , retry_delay : float = 1.0 ):
7+ self .max_retries = max_retries
8+ self .retry_delay = retry_delay
9+
10+ def register_hooks (self , registry : HookRegistry ) -> None :
11+ registry .add_callback (AfterToolCallEvent , self .check_result )
12+
13+ def check_result (self , event : AfterToolCallEvent ) -> None :
14+ if event .result .get ("isError" , False ):
15+ for attempt in range (self .max_retries ):
16+ time .sleep (self .retry_delay )
17+ try :
18+ # Retry the tool execution
19+ result = event .selected_tool (event .tool_use , event .invocation_state )
20+ if not result .get ("isError" , False ):
21+ event .result = result
22+ return
23+ except Exception :
24+ continue
25+
26+ # All retries failed
27+ error_content = event .result .get ("content" , [{}])[0 ].get ("text" , "Unknown error" )
28+ raise RuntimeError (f"Tool { event .tool_use ['name' ]} failed after { self .max_retries } retries: { error_content } " )
Original file line number Diff line number Diff line change 1212 create_lambda_function_url_client ,
1313 create_automated_oauth_client ,
1414)
15+ from fail_on_tool_error import FailOnToolError
1516
1617# Configure logging
1718logging .basicConfig (
@@ -83,6 +84,7 @@ def main() -> None:
8384 model = bedrock_model ,
8485 tools = mcp_clients ,
8586 system_prompt = "You are a helpful assistant." ,
87+ hooks = [FailOnToolError ()],
8688 )
8789
8890 # Run test utterances
You can’t perform that action at this time.
0 commit comments