已合并
[Featture]Add session_control to AgentHint #737
[Featture]Add session_control to AgentHint #737
已合并
zengwei创建于 22 天前
zengwei
zengwei
22 天前

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. 修改内容

  • 新增 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 校验、自动填充、互斥冲突、非法类型丢弃、空消息校验绕过等场景的测试用例。

3. 资料变更

不涉及

4. 接口变更

不涉及

5. 测试结果

当前需求是对AgentHint字段的扩展,主要是新增一层session_control- >context_management的转换,对contex_management的性能测试结果参考[Feature]Add AgentHint feature for agent inference。本次只针对session_control做基本的功能UT测试,UT测试结果:

image.png

6. CheckList

PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x]

[x] 代码注释完备

[x] 正确记录维测日志

[x] 是否有UT用例

[x] 若涉及多线程场景,考虑了并发场景,不存在死锁问题

likedislike
Pull Request已成功合入, 合并人@wangyang
(感谢 zengwei 的贡献)
atomgit-bot
atomgit-bot
22 天前 评论:

变更摘要

本 PR 在 agent_hint 中新增 session_control 能力,用于表达会话生命周期控制意图。核心逻辑是在 motor/coordinator/domain/agent_hint.py 中新增 SessionControl 模型与解析函数,并提供 apply_session_control_autofillpause / stop / compact / resume 等操作转换为面向 session 的 context_management 管理请求,同时保持 session_controlcontext_management 互斥;在请求分发链路中先执行自动填充,再解析并注入最小消息占位;在 OpenAI 请求校验中允许带 session_control 的空消息请求绕过非空校验。

主要改动

  • 新增 SessionControl 模型与类型白名单:在 agent_hint.py 中新增 SessionControl 模型及 _SESSION_CONTROL_TYPES_ALLOWEDstart / pause / stop / compact / resume)和 _SESSION_CONTROL_EDIT_TYPES 映射,非法 type 会触发校验失败或丢弃。
  • 新增 apply_session_control_autofill 自动填充逻辑:将 agent_hint.session_controlpause / 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.pytest_http_server.py 中新增针对 SessionControl 校验、自动填充、互斥冲突、非法类型丢弃、空消息校验绕过等场景的测试用例。
likedislike
atomgit-bot
atomgit-bot
22 天前 评论:

代码审查

我已逐一审查全部 5 个变更文件,并核对了关键符号的调用链与下游消费者。最终结论如下:

审查结论

发现 1 个 P1 问题:

  • motor/coordinator/router/dispatch.py:371ensure_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

⛔ 需要修改

likedislike
Xxiangjie10成员
22 天前 添加了label:pr-audit-failed
xiangjie10成员
22 天前 评论:
🔍 PR 规范审计未通过,以下项目需要修正:
  • PR 未关联里程碑或 Issue

请修正后重新提交,或联系仓库管理员。

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

/approve

likedislike
ascend-robotascend-robot成员
19 天前 添加了label:approvedlgtm
wangyangwangyang成员
18 天前 关闭了关联的issue
wangyangwangyang成员
18 天前 合入了pull request