fix(tools): Return schema validation feedback to models - #6368
Closed
faiqali1 wants to merge 9 commits into
Closed
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. |
Contributor
Author
|
Hi @rohityan , thanks for triaging this PR. The CLA check is now passing. Could you please let me know if there is anything else needed from my side for review? Thank you! |
Collaborator
|
Hi @faiqali1 , Thank you for your contribution! We appreciate you taking the time to submit this pull request. |
Collaborator
|
Hi @wuliang229 , can you please review this. |
copybara-service Bot
pushed a commit
that referenced
this pull request
Jul 30, 2026
Update SetModelResponseTool to catch Pydantic validation errors and return the validation message as a tool error response. The flow now only promotes set_model_response into the final model response when validation succeeds, so invalid structured output is sent back to the model for correction instead of being treated as final output. Merge #6368 PiperOrigin-RevId: 956767514
Collaborator
FrigaZzz
pushed a commit
to FrigaZzz/adk-python
that referenced
this pull request
Aug 11, 2026
Update SetModelResponseTool to catch Pydantic validation errors and return the validation message as a tool error response. The flow now only promotes set_model_response into the final model response when validation succeeds, so invalid structured output is sent back to the model for correction instead of being treated as final output. Merge google#6368 PiperOrigin-RevId: 956767514
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Please ensure you have read the contribution guide before creating a pull request.
Link to Issue or Description of Change
1. Link to an existing issue (if applicable):
set_model_responseerror responses are treated as final output, bypassing ReflectAndRetryToolPlugin retry #45252. Or, if no issue exists, describe the change:
Problem:
When
output_schemais used with tools, ADK adds the internalset_model_responsetool so the model can submit its final structured output. If the model calls this tool with invalid structured data, Pydantic validation currently fails without returning the validation details to the model. This prevents the model from learning what was wrong and retrying with corrected arguments.Solution:
Update
SetModelResponseToolto catch Pydantic validation errors and return the validation message as a tool error response. The flow now only promotesset_model_responseinto the final model response when validation succeeds, so invalid structured output is sent back to the model for correction instead of being treated as final output.Testing Plan
Unit Tests:
Passed targeted unit tests:
Result:
Also ran pre-commit on changed files:
Result:
Manual End-to-End (E2E) Tests:
Not run yet. Suggested manual test:
output_schemaand tools.set_model_responsecall with invalid schema data, such as a string for an integer field or a missing required field.Checklist
Additional context
This behavior is similar to structured-output retry patterns used by libraries such as Instructor: validation failures are returned to the model with enough detail for the model to correct its next structured-output attempt.
This contribution was developed with AI assistance (Codex GPT-5.5).