You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
No existing issue found for dataclass field annotations. This complements #12739, which resolves postponed function parameter annotations. Reproduced on main at 87dba65.
Proposed Changes
ComponentTool cannot generate a schema for a dataclass whose string field annotations mention a nested dataclass or Annotated. This includes dataclasses in modules using from __future__ import annotations; construction raises SchemaGenerationError before the Agent can call the tool.
Resolve dataclass field hints in the defining class's namespace with include_extras=True, then apply the existing schema conversion. Keep recursive references as ForwardRef back-edges so previously supported recursive dataclasses still work. Public tool signatures and serialization formats are unchanged.
How did you test it?
The two postponed-annotation regressions fail on the original implementation and pass with the fix. They cover nested schema descriptions, an Annotated constraint, serialization round trips, and sync/async public tool invocation.
A recursive dataclass regression checks schema generation and public invocation.
hatch run test:types haystack/tools/parameters_schema_utils.py test/tools/test_component_tool.py: no issues found.
Changed-file Ruff and all applicable pre-commit hooks pass; git diff --check passes.
An independent module using real future annotations fails at tool construction on the original helper. With the fix, a real Haystack Agent executes the component tool through both run() and run_async(). Only the chat generator is scripted with MockChatGenerator; no provider API is called.
Checks ran on Windows with Python 3.13 through Hatch. The broader suite reports two existing warnings about _delegate_default not being JSON serializable. Cross-version CI is pending.
Checklist
Read the contributor guidelines and code of conduct.
Added regression tests and updated private helper docstrings.
Used a conventional commit title.
Added a release note.
Ran applicable pre-commit hooks.
This PR was fully generated with OpenAI Codex, including the implementation, tests, and description. Codex reviewed the changes and ran the checks listed above; no human review is claimed.
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution. You have signed the CLA already but the status is still pending? Let us recheck it.
We noticed that the Contributor License Agreement (CLA) check (license/cla) hasn't passed yet, so we've temporarily moved this PR to draft and paused the review assignment.
To get your PR reviewed, please sign the CLA via the link in the license/cla check below (or in the CLA bot comment). As soon as the check turns green, this PR will automatically be marked ready for review again and a reviewer will be re-assigned.
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
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.
Related Issues
No existing issue found for dataclass field annotations. This complements #12739, which resolves postponed function parameter annotations. Reproduced on main at
87dba65.Proposed Changes
ComponentToolcannot generate a schema for a dataclass whose string field annotations mention a nested dataclass orAnnotated. This includes dataclasses in modules usingfrom __future__ import annotations; construction raisesSchemaGenerationErrorbefore the Agent can call the tool.Resolve dataclass field hints in the defining class's namespace with
include_extras=True, then apply the existing schema conversion. Keep recursive references asForwardRefback-edges so previously supported recursive dataclasses still work. Public tool signatures and serialization formats are unchanged.How did you test it?
Annotatedconstraint, serialization round trips, and sync/async public tool invocation.hatch run test:unit test/tools test/core/test_type_utils.py test/core/component test/components/agents -q --no-cov: 1750 passed, 18 deselected.hatch run test:types haystack/tools/parameters_schema_utils.py test/tools/test_component_tool.py: no issues found.git diff --checkpasses.Agentexecutes the component tool through bothrun()andrun_async(). Only the chat generator is scripted withMockChatGenerator; no provider API is called.Checks ran on Windows with Python 3.13 through Hatch. The broader suite reports two existing warnings about
_delegate_defaultnot being JSON serializable. Cross-version CI is pending.Checklist
This PR was fully generated with OpenAI Codex, including the implementation, tests, and description. Codex reviewed the changes and ran the checks listed above; no human review is claimed.