-
Notifications
You must be signed in to change notification settings - Fork 350
fix(types): check min_length for parts in Artifact
#671
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
fix(types): check min_length for parts in Artifact
#671
Conversation
Summary of ChangesHello @punkyoon, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request addresses a critical data integrity issue by ensuring that the Highlights
Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code Review
This pull request aims to enforce that an Artifact must contain at least one part, which aligns with the A2A Protocol Specification. The implementation using Pydantic's Field(min_length=1) is functionally correct. However, there's a significant maintenance concern as the change is made to an auto-generated file (src/a2a/types.py). My review comment details why this change should be made in the source JSON schema instead to ensure it's not lost upon regeneration.
| An optional, human-readable name for the artifact. | ||
| """ | ||
| parts: list[Part] | ||
| parts: list[Part] = Field(min_length=1) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
While this change correctly enforces the min_length constraint, this file is marked as auto-generated by datamodel-codegen at the top. Manual edits to generated files are fragile and likely to be overwritten the next time the code generation script is run. To make this change permanent, the constraint should be added to the source JSON schema (likely as "minItems": 1 for the parts array within the Artifact definition) and then this Python model file should be regenerated.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I missed that types.py is automatically generated. I have opened an issue in the main repository to ensure the constraint is included during model generation: a2aproject/A2A#1456
Description
Thank you for opening a Pull Request!
Before submitting your PR, there are a few things you can do to make sure it goes smoothly:
CONTRIBUTINGGuide.fix:which represents bug fixes, and correlates to a SemVer patch.feat:represents a new feature, and correlates to a SemVer minor.feat!:, orfix!:,refactor!:, etc., which represent a breaking change (indicated by the!) and will result in a SemVer major.bash scripts/format.shfrom the repository root to format)Fixes #670 🦕
Summary
This PR adds validation to the
Artifactmodel ina2a/types.pyto ensure that thepartslist is never empty.Motivation
According to the A2A Protocol Specification (Section 4.17), an Artifact's parts list "Must contain at least one part."
Previously, it was possible to initialize an
Artifactwith an empty list[]. This discrepancy allowed invalid artifacts to be created (e.g., bystrands-agents) which could cause issues for downstream consumers.This change also aligns the Python SDK with the Java SDK, which already strictly enforces this rule (see a2a-java implementation).
Changes
Artifactclass ina2a/types.py.Field(min_length=1)to enforce the constraint at the model level.Verification
Attempting to create an Artifact with empty parts now raises a
ValidationError: