feat(tools): let toolsets replace a failed tools listing - #6749
Conversation
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
Apps fronting per-user OAuth MCP servers need a seam to contribute placeholder tools on HTTP 401 instead of the framework silently dropping the toolset. Add BaseToolset.on_tools_listing_error and invoke it from the agent and SkillToolset isolate-and-continue paths.
bb41cc5 to
5a342a6
Compare
|
@googlebot I fixed it. |
varunbiluri
left a comment
There was a problem hiding this comment.
Staff review: one prefix-contract issue to address.
Keep the BaseToolset naming contract on the isolate-and-continue path by routing listing-error replacements through the shared prefix helper.
|
@varunbiluri addressed your prefix-contract note in the latest push — thank you again for the staff review. Please take another look when you have a chance, and let me know if there’s anything else you’d like changed. |
varunbiluri
left a comment
There was a problem hiding this comment.
Re-reviewed 08bcf768. Fallback tools now go through the same copy-and-prefix transformation as successful listings in both the agent and SkillToolset isolation paths, with behavioral coverage at each boundary. The hook contract clearly tells overrides to return unprefixed names. My prefix-contract concern is resolved.
Summary
BaseToolset.on_tools_listing_errorso apps can contribute replacement tools when listing fails (default: empty list / current skip behavior)LlmAgenttool loading andSkillToolsetadditional-tool resolution after the existing isolate-and-continue loggingFixes #6748
Test plan
pytest tests/unittests/tools/test_base_toolset.py(default + override hook)pytest tests/unittests/agents/test_llm_agent_fields.py -k canonical_toolspytest tests/unittests/tools/test_skill_toolset.py -k resolution_get_tools()/get_tools_with_prefix()calls (exceptions still propagate there)