已合并
[Featture]Add session_control to AgentHint #737
zengwei创建于 22 天前
[Featture]Add session_control to AgentHint #737
已合并
Pull Request已成功合入, 合并人@wangyang
(感谢 zengwei 的贡献)atomgit-bot
22 天前 评论:
22 天前 评论:
变更摘要
本 PR 在 agent_hint 中新增 session_control 能力,用于表达会话生命周期控制意图。核心逻辑是在 motor/coordinator/domain/agent_hint.py 中新增 SessionControl 模型与解析函数,并提供 apply_session_control_autofill 将 pause / stop / compact / resume 等操作转换为面向 session 的 context_management 管理请求,同时保持 session_control 与 context_management 互斥;在请求分发链路中先执行自动填充,再解析并注入最小消息占位;在 OpenAI 请求校验中允许带 session_control 的空消息请求绕过非空校验。
主要改动
- 新增
SessionControl模型与类型白名单:在agent_hint.py中新增SessionControl模型及_SESSION_CONTROL_TYPES_ALLOWED(start/pause/stop/compact/resume)和_SESSION_CONTROL_EDIT_TYPES映射,非法type会触发校验失败或丢弃。 - 新增
apply_session_control_autofill自动填充逻辑:将agent_hint.session_control的pause/stop/compact/resume分别转换为 session 目标的offload/evict/evict/prefetch管理请求;start不注入任何上下文操作,且当context_management同时存在时保留后者并丢弃session_control。 - 调整请求分发调用顺序:在
dispatch.py中于parse_agent_hint之前调用apply_session_control_autofill(request_json),使自动填充的context_management对后续解析和消息注入可见。 - 放宽空消息请求校验:在
inference_server.py的_validate_openai_request中,通过新增的session_control_implies_manage_request判断,允许pause/stop/compact/resume类型的空消息请求绕过非空校验,而start及冲突场景仍按原逻辑拒绝。 - 补充单元与接口测试:在
test_agent_hint.py和test_http_server.py中新增针对SessionControl校验、自动填充、互斥冲突、非法类型丢弃、空消息校验绕过等场景的测试用例。


atomgit-bot
22 天前 评论:
22 天前 评论:
代码审查
我已逐一审查全部 5 个变更文件,并核对了关键符号的调用链与下游消费者。最终结论如下:
审查结论
发现 1 个 P1 问题:
motor/coordinator/router/dispatch.py:371—ensure_minimum_messages_for_session_edits调用被apply_session_control_autofill直接替换(而非在其前插入),导致生产路径上不再注入默认消息。空messages的管理类请求(既有的context_management manage_request + session target,以及新增的session_control=stop/pause/compact/resume)会通过非空校验后,在下游apply_chat_template对空列表越界崩溃。全仓库 grep 确认该函数已无任何生产调用方,且apply_session_control_autofill的 docstring 与单测test_session_control_autofill_then_minimum_messages_injection均表明两者本应顺序执行。
各文件审查结果
| 文件 | 结论 |
|---|---|
motor/coordinator/api_server/inference_server.py |
无独立新增问题(空 messages 绕过逻辑本身正确,与 session_control_implies_manage_request 一致) |
motor/coordinator/domain/agent_hint.py |
无独立新增问题(SessionControl/apply_session_control_autofill/session_control_implies_manage_request 逻辑自洽,_SESSION_CONTROL_EDIT_TYPES 无 KeyError 路径,互斥与类型丢弃语义一致) |
motor/coordinator/router/dispatch.py |
1 个 P1(误删消息注入调用,见上) |
tests/coordinator/domain/test_agent_hint.py |
无独立新增问题(单测覆盖充分且断言正确;文件末尾缺换行属格式噪音,未报) |
tests/coordinator/test_http_server.py |
无独立新增问题(集成测试 mock 了 handle_request,因而无法捕获上述分发层回归——已并入 P1 建议中,作为补测方向) |
总体风险判断
中高风险:本次变更引入了一个明确的功能回归——空 messages 的管理类请求(含既有 context_management 特性)将不再注入默认消息,触发下游越界崩溃,建议合入前恢复 ensure_minimum_messages_for_session_edits 调用并补充分发顺序测试。其余新增解析/校验逻辑自洽,未见独立缺陷。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 2 |
| 🟡 建议 | 0 |
⛔ 需要修改


22 天前 添加了label:pr-audit-failed
xiangjie10
22 天前 评论:
22 天前 评论:
🔍 PR 规范审计未通过,以下项目需要修正:
- ❌ PR 未关联里程碑或 Issue
请修正后重新提交,或联系仓库管理员。


22 天前 添加了label:ascend-cla/yes
此处折叠了127条消息 查看更多
19 天前 解决了最后一个问题
jason lyu
19 天前 评论:
19 天前 评论:
/approve


19 天前 添加了label:approvedlgtm
18 天前 关闭了关联的issue
18 天前 合入了pull request
1. 合入背景
本 PR 在 agent_hint 中新增 session_control 能力,用于表达会话生命周期控制意图。核心逻辑是在 motor/coordinator/domain/agent_hint.py 中新增 SessionControl 模型与解析函数,并提供 apply_session_control_autofill 将 pause / stop / compact / resume 等操作转换为面向 session 的 context_management 管理请求,同时保持 session_control 与 context_management 互斥;在请求分发链路中先执行自动填充,再解析并注入最小消息占位;在 OpenAI 请求校验中允许带 session_control 的空消息请求绕过非空校验。
关联ISSUE:#484
当前AgentHint特性仅支持OpenAI API,对于Anthropic API暂未支持
2. 修改内容
3. 资料变更
不涉及
4. 接口变更
不涉及
5. 测试结果
当前需求是对AgentHint字段的扩展,主要是新增一层session_control- >context_management的转换,对contex_management的性能测试结果参考[Feature]Add AgentHint feature for agent inference。本次只针对session_control做基本的功能UT测试,UT测试结果:
6. CheckList
[x] 代码注释完备
[x] 正确记录维测日志
[x] 是否有UT用例
[x] 若涉及多线程场景,考虑了并发场景,不存在死锁问题