🧹 Refactor ToolRegistry to dynamically identify final answer tools#268
🧹 Refactor ToolRegistry to dynamically identify final answer tools#268
Conversation
Co-authored-by: KeithCu <662157+KeithCu@users.noreply.github.com>
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
🎯 What: The code health issue addressed
Removed the hardcoded list of strings (
["final_answer", "specialized_workflow_finished", "reply_to_user"]) inplugin/framework/tool_registry.pyand replaced it with a dynamic boolean checkgetattr(t, "is_final_answer_tool", False). Addedis_final_answer_tool = FalsetoToolBaseand overrode it asTruein theSpecializedWorkflowFinishedtool.💡 Why: How this improves maintainability
This prevents the
ToolRegistryfrom needing to know the specific names of final answer tools across different domains. Hardcoding class names/identifiers in a central registry makes adding new tools brittle and couples the registry to specific features (e.g. Writer specialized tools, Librarian). By using a boolean flag, tools can self-declare their role in the workflow.✅ Verification: How you confirmed the change is safe
Ran
uv run ty check plugin/framework/tool_registry.pyto verify type safety. Ran the full pytest suite (uv run pytest plugin/tests/) and confirmed all tests pass without introducing new failures. Validated thatreply_to_userandfinal_answerare handled dynamically asfinal_answer_tool_nameparameters withinsmolagentsand thus never needed to be in theToolBaselist anyway.✨ Result: The improvement achieved
A cleaner, decoupled
ToolRegistrythat scales safely with new tools and cleanly relies on properties of theToolBasehierarchy.PR created automatically by Jules for task 9247852521992975344 started by @KeithCu