From 596e6db86e3b0874f393ed458933e060f9978e39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8D=89=E5=8E=9F=E7=8B=BC?= <20969793+coyoteXujie@users.noreply.github.com> Date: Fri, 15 Aug 2025 19:08:25 +0800 Subject: [PATCH 1/3] Update _base.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pydantic v2 中适配字段名和字段别名的方式,原始方式 model_config = ConfigDict( # SEE: https://docs.pydantic.dev/latest/api/config/#pydantic.config.ConfigDict.populate_by_name validate_by_name=True, validate_by_alias=True, serialize_by_alias=True, alias_generator=to_camel_custom, ) 会导致 实例化 AgentCard 方法的时候 报错 pydantic_core._pydantic_core.ValidationError: 2 validation errors for AgentCard defaultInputModes Field required [type=missing, input_value={'name': 'Hello World Age...ed_extended_card': True}, input_type=dict] For further information visit https://errors.pydantic.dev/2.10/v/missing defaultOutputModes --- src/a2a/_base.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/a2a/_base.py b/src/a2a/_base.py index 6c50734c..1d9debbc 100644 --- a/src/a2a/_base.py +++ b/src/a2a/_base.py @@ -31,8 +31,6 @@ class A2ABaseModel(BaseModel): model_config = ConfigDict( # SEE: https://docs.pydantic.dev/latest/api/config/#pydantic.config.ConfigDict.populate_by_name - validate_by_name=True, - validate_by_alias=True, - serialize_by_alias=True, + populate_by_name=True, alias_generator=to_camel_custom, ) From fd679b6e775a8e39dc43e643415b7a05d57db0f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8D=89=E5=8E=9F=E7=8B=BC?= <20969793+coyoteXujie@users.noreply.github.com> Date: Mon, 18 Aug 2025 09:58:31 +0800 Subject: [PATCH 2/3] Update _base.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 默认使用别名进行序列化 --- src/a2a/_base.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/a2a/_base.py b/src/a2a/_base.py index 1d9debbc..a7f0444f 100644 --- a/src/a2a/_base.py +++ b/src/a2a/_base.py @@ -1,3 +1,4 @@ +from typing import Any from pydantic import BaseModel, ConfigDict from pydantic.alias_generators import to_camel @@ -34,3 +35,13 @@ class A2ABaseModel(BaseModel): populate_by_name=True, alias_generator=to_camel_custom, ) + + def model_dump( + self, + **kwargs + ) -> dict[str, Any]: + + if not 'by_alias' in kwargs: + kwargs['by_alias'] = True + + return super().model_dump(**kwargs) From 712f206d5c6ad145a6bce6ec2b7bdc05b3ac04f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8D=89=E5=8E=9F=E7=8B=BC?= <20969793+coyoteXujie@users.noreply.github.com> Date: Mon, 18 Aug 2025 10:31:47 +0800 Subject: [PATCH 3/3] Update _base.py fix: ruff linting errors --- src/a2a/_base.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/a2a/_base.py b/src/a2a/_base.py index a7f0444f..76912c3f 100644 --- a/src/a2a/_base.py +++ b/src/a2a/_base.py @@ -1,4 +1,5 @@ from typing import Any + from pydantic import BaseModel, ConfigDict from pydantic.alias_generators import to_camel @@ -41,7 +42,7 @@ def model_dump( **kwargs ) -> dict[str, Any]: - if not 'by_alias' in kwargs: + if 'by_alias' not in kwargs: kwargs['by_alias'] = True return super().model_dump(**kwargs)