# Reflect And Retry Tool Plugin `ReflectAndRetryToolPlugin` provides self-healing, concurrent-safe error recovery for tool failures. **Key Features:** - **Concurrency Safe:** Uses locking to safely handle parallel tool executions - **Configurable Scope:** Tracks failures per-invocation (default) or globally using the `TrackingScope` enum. - **Extensible Scoping:** The `_get_scope_key` method can be overridden to implement custom tracking logic (e.g., per-user or per-session). - **Granular Tracking:** Failure counts are tracked per-tool within the defined scope. A success with one tool resets its counter without affecting others. - **Custom Error Extraction:** Supports detecting errors in normal tool responses that don't throw exceptions, by overriding the `extract_error_from_result` method. ## Samples Here are some sample agents to demonstrate the usage of the plugin. ### Basic Usage This is a hello world example to show the basic usage of the plugin. The `guess_number_tool` is hacked with both Exceptions and error responses. With the help of the `CustomRetryPlugin`, both above error types can lead to retries. For example, here is the output from agent: ``` I'll guess the number 50. Let's see how it is! My guess of 50 was too high! I'll try a smaller number this time. Let's go with 25. My guess of 25 was still too high! I'm going smaller. How about 10? Still too high! My guess of 10 was also too large. I'll try 5 this time. My guess of 5 is "almost valid"! That's good news, it means I'm getting very close. I'll try 4. My guess of 4 is still "almost valid," just like 5. It seems I'm still hovering around the right answer. Let's try 3! I guessed the number 3, and it is valid! I found it! ``` You can run the agent with: ```bash $ adk web contributing/samples/plugin_reflect_tool_retry ``` Select "basic" and provide the following prompt to see the agent retrying tool calls: ``` Please guess a number! Tell me what number you guess and how is it. ``` ### Hallucinating tool calls The "hallucinating_func_name" agent is an example to show the plugin can retry hallucinating tool calls. For example, we used the `after_model_callback` to hack a tool call with the wrong name then the agent can retry calling with the right tool name. You can run the agent with: ```bash $ adk web contributing/samples/plugin_reflect_tool_retry ``` Select "hallucinating_func_name" and provide the following prompt to see the agent retrying tool calls: ``` Roll a 6 sided die ```