Skip to content

fix: resolve postponed dataclass fields in ComponentTool - #13095

Draft
pei711 wants to merge 1 commit into
deepset-ai:mainfrom
pei711:fix/component-tool-postponed-dataclasses
Draft

pei711 wants to merge 1 commit into
deepset-ai:mainfrom
pei711:fix/component-tool-postponed-dataclasses

Conversation

@pei711

@pei711 pei711 commented Oct 3, 2026

Copy link
Copy Markdown

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

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: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.
  • 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.

@pei711
pei711 requested a review from a team as a code owner October 3, 2026 12:24
@pei711
pei711 requested review from bogdankostic and removed request for a team October 3, 2026 12:24
@vercel

vercel Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

@pei711 is attempting to deploy a commit to the deepset Team on Vercel.

A member of the Team first needs to authorize it.

@CLAassistant

Copy link
Copy Markdown

CLA assistant check
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.

@HaystackBot

Copy link
Copy Markdown
Contributor

Hi @pei711, thanks a lot for your contribution! 🙏

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.

@HaystackBot
HaystackBot removed the request for review from bogdankostic October 3, 2026 14:25
@HaystackBot HaystackBot added the cla-pending PR is in draft until the contributor signs the CLA label Oct 3, 2026
@HaystackBot
HaystackBot marked this pull request as draft October 3, 2026 14:25

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-pending PR is in draft until the contributor signs the CLA topic:tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants