ClientCitation deserialization fails when Copilot Studio citation contains @id: "ClientCitation" object has no field "at_id"
还没有人认领这个 Issue。
评估
调研方向
问题位于 microsoft_agents.activity.entity._schema_mixin 中的 _SchemaMixin 验证器。查看处理 @id 属性的 validate_schema_model 函数。microsoft_agents.activity.entity.ai_entity 中的 ClientCitation 类缺少 at_id 字段。检查是应该将该字段添加到模型中,还是验证器应在字段未定义时跳过设置 at_id。运行链接仓库中的复现脚本来验证修复。
由索引模型根据 Issue 内容生成。
描述
Summary
When using the Microsoft Agents SDK with a signed-in Microsoft user to invoke a Copilot Studio agent, some Copilot Studio responses contain citations with an @id property.
Those responses fail during Activity deserialization with:
entities.citation.0
Value error, "ClientCitation" object has no field "at_id"
The Copilot Studio request itself succeeds and a response is returned. The exception occurs while the Python SDK is deserializing the returned Activity.
The issue can also be reproduced locally without a Microsoft tenant, authentication, Copilot Studio, or any network request.
Environment
Originally observed with:
microsoft-agents-copilotstudio-client==1.5.0
microsoft-agents-activity==1.5.0
pydantic==2.13.4
Python 3.14
I also tested after upgrading to:
microsoft-agents-copilotstudio-client==1.7.0
and the same ClientCitation / at_id exception is still reproduced.
Reproduction repository
A standalone reproduction is available here:
https://github.com/abdurrafay0610/microsoft-agents-activity-sdk-issue-recreation
The repository contains the minimal reproduction, Activity-level reproduction, requirements, and additional diagnostic information.
To reproduce:
git clone https://github.com/abdurrafay0610/microsoft-agents-activity-sdk-issue-recreation.git
cd microsoft-agents-activity-sdk-issue-recreation
pip install -r requirements.txt
python reproduce.py
python reproduce_activity.py
No Microsoft credentials, tenant, or Copilot Studio agent are required for the standalone reproduction.
Input that triggers the failure
The relevant portion of the citation returned by Copilot Studio has this shape:
{
"@type": "Claim",
"@id": "turn16search0",
"position": 1,
"appearance": {
"@type": "DigitalDocument",
"name": "Example citation"
}
}
The important property is:
"@id": "turn16search0"
SDK deserialization path
microsoft-agents-copilotstudio-client receives the Copilot Studio SSE Activity response in:
microsoft_agents.copilotstudio.client.copilot_client.CopilotClient.post_request()
The Activity JSON is then passed to:
Activity.model_validate_json(activity_data)
During Activity validation, the citation is deserialized as:
microsoft_agents.activity.entity.ai_entity.ClientCitation
ClientCitation uses _SchemaMixin.
The relevant validation helper is:
microsoft_agents.activity.entity._schema_mixin.validate_schema_model
When @id is present in the input, the helper attempts:
setattr(model, "at_id", data["@id"])
However, ClientCitation defines:
at_type
position
appearance
and does not define an at_id field.
The assignment therefore results in:
Value error, "ClientCitation" object has no field "at_id"
Documentation / implementation mismatch
The _SchemaMixin validator describes its behavior as handling @type, @context, and @id when those properties are defined in the destination type.
However, for @id, the implementation attempts to assign at_id when the property is present in the input, without first establishing that the destination model defines at_id.
For ClientCitation, the destination model does not define that field.
Expected behavior
A Copilot Studio Activity containing a citation with the returned @id property should be deserialized without the SDK raising an exception.
Actual behavior
Activity deserialization fails with:
entities.citation.0
Value error, "ClientCitation" object has no field "at_id"
This prevents the application from consuming an otherwise successfully returned Copilot Studio response.
Additional details
The full failure path and standalone examples are documented in the reproduction repository:
https://github.com/abdurrafay0610/microsoft-agents-activity-sdk-issue-recreation
One thing I would definitely fix before submitting is the `repro.py` → `reproduce.py` filename mismatch, because otherwise the first thing a Microsoft maintainer sees when following the instructions is an unrelated `No such file` error.
- 主要语言
- Python
- 星标
- 211
- 派生
- 90
- 平均合并
- 1 天 6 小时
- 30 天内合并 PR
- 14
贡献指南
这个仓库没有索引到贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
microsoft/Agents-for-python 的其他 Issue
-
microsoft/Agents-for-python#587 · 已指派 1 人 ·
-
microsoft/Agents-for-python#572 · 已指派 1 人 ·
-
microsoft/Agents-for-python#559 · 已指派 1 人 ·
-
microsoft/Agents-for-python#550 · 已指派 1 人 ·
-
microsoft/Agents-for-python#537 · 2 条评论 · 已指派 1 人 ·
查看 microsoft/Agents-for-python 的全部 Issue
相似的 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 75/100
stephrobert/dsoxlab#238 ·
-
难度 2/5 1-3 小时 新手友好度 75/100
-
难度 2/5 1-3 小时 新手友好度 75/100
sublimehq/package_control#1780 ·
-
难度 2/5 1-3 小时 新手友好度 65/100
-
难度 2/5 1-3 小时 新手友好度 70/100
nwg-piotr/nwg-displays#145 ·