Repository navigation
Generate tool outputSchema in serialization mode - #3650
guptaishaan wants to merge 1 commit into
Conversation
outputSchema was built with pydantic's default validation mode, while structuredContent is dumped with by_alias=True. Serialization aliases and computed fields showed up in the content but not in the schema, so clients validating the result rejected it. Pass mode="serialization" to json_schema so the two agree.
|
This PR has been closed automatically. This repo only keeps pull requests open when they come from a maintainer, or from a contributor a maintainer has assigned to the linked issue, and you aren't currently assigned to #3644. If a maintainer assigns you to #3644, this PR reopens on its own and there's nothing more you need to do here. Assignment is a maintainer call based on capacity; comments that only ask to be assigned don't factor in. What does help is engaging on the issue itself by confirming the repro, explaining why it matters for your use case, or describing the approach you'd take. You're welcome to keep pushing commits here (just avoid force-pushing, since GitHub can't reopen a rewritten branch), but that on its own won't get the PR reviewed or the issue assigned, and realistically most auto-closed PRs stay closed. There's no need to open a new PR either way. CONTRIBUTING.md has the full reasoning, but in short:
Maintainers: reopen, remove |
Fixes #3644
Motivation and Context
outputSchemawas generated in pydantic's default validation mode, butstructuredContentis dumped in serialization mode withby_alias=True. Aserialization_aliasor@computed_fieldon a tool's return model therefore appeared instructuredContentbut not (or under a different name) inoutputSchema. Clients that validate the result against the schema rejected it.The fix passes
mode="serialization"tojson_schemainFuncMetadata.model_post_init.Thanks to @jayzuccarelli for the report and repro.
How Has This Been Tested?
serialization_aliasfield and a@computed_field. It fails without the fix and passes with it.pytest tests/server tests/client: 2161 passed, 1 xfailed.ruff checkandruff format --checkare clean.Breaking Changes
outputSchemafor models with serialization aliases or computed fields changes to match what the tool already returned.Types of changes
Checklist
help wanted, or I'm a maintainer)Additional context
AI disclosure: this change was investigated and written by an automated Claude agent, and the diff is small enough to review in full.