Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/workflows/cases-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,14 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Validate SeniorSafe logic (offline; no model download)
run: |
python cases/domux-seniorsafe/scripts/validate_data.py
python cases/domux-seniorsafe/scripts/validate_data.py cases/domux-seniorsafe/data/challenge-v1.jsonl --spec cases/domux-seniorsafe/data/challenge-v1.spec.json
python -m unittest discover -s cases/domux-seniorsafe/scripts -p 'test_*.py' -v
- name: Validate case-study rules
run: |
python -m py_compile scripts/validate_cases.py
Expand Down
10 changes: 10 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,16 @@ swanlab/
data/
!training/data/example*.jsonl

# HER Hack-Astron #4: public, synthetic SeniorSafe case data and evidence.
!cases/domux-seniorsafe/data/
!cases/domux-seniorsafe/data/seniorsafe.jsonl
!cases/domux-seniorsafe/data/challenge-v1.jsonl
!cases/domux-seniorsafe/artifacts/
!cases/domux-seniorsafe/artifacts/*.json
!cases/domux-seniorsafe/artifacts/*_outputs.jsonl
!cases/domux-seniorsafe/artifacts/audit-v2/*_outputs.jsonl
!cases/domux-seniorsafe/artifacts/generalization-v1/*_outputs.jsonl

# System
.DS_Store
Thumbs.db
Expand Down
302 changes: 302 additions & 0 deletions cases/domux-seniorsafe/README.md

Large diffs are not rendered by default.

85 changes: 85 additions & 0 deletions cases/domux-seniorsafe/artifacts/audit-v2/REVIEW.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# SeniorSafe 修复与复审记录

本次只修改离线评测工具,未接入或操作设备,未发布 Discussion,未安装依赖。
原始 `artifacts/*_outputs.jsonl` 和 `metrics.json` 保持不变。

## 已修复

1. 英文高风险设备名匹配大小写;缺少设备时不再用房间词消除歧义。
2. 自我纠正语句保留完整上下文;英文 ASR 别名增加词边界,避免修改 satellite。
3. 统一七字段协议检查,拒绝空字段、空 gold 和未知动作。
4. 精确匹配保留顺序与重复;Slot F1 和 Intent F1 分别进行有序动态规划匹配。
5. 评分重新计算正确性,不信任结果文件中预计算的布尔标记。
6. 对比拒绝缺失、重复 ID、数据差异、混合版本与参数;新运行需完成状态和文件摘要。
7. 输出采用独占创建;断点恢复检查完整前缀,保护旧结果。错误记录保留,失败实验返回非零状态。
8. API 空 choices、null 内容和截断响应会记为失败。CPU 输出达到 token 上限而未遇 EOS 时记为失败。
9. 新增输出策略检查,但只产生离线 candidate/clarify/reject;execution_performed 始终为 false。
10. CI 加入数据验证、回归测试和本地模拟 HTTP 全流程测试;不放宽公开案例发布要求。

## 证据类型

- 回归测试:定向反例先失败,再修复通过。
- 本地模拟接口:真实启动 HTTP 服务并运行两条 CLI 流水线及评分,覆盖 80+80 条合成响应。
这些完美响应由测试提供者返回,不代表模型准确率。
- 真实模型:同一固定 Domux revision、本机 Transformers CPU BF16、16 线程、greedy、128 token 上限。
逐条证据及代码、数据、设置摘要分别保存在本目录的 outputs/environment 文件。
- 历史重算:historical_rescored_metrics.json 明确标为 legacy_rescore,保留来源局限。

## 仍然没有证明的部分

- 没有真实设备身份解析、权限、确认对话、撤销、超时恢复或设备回执;不能将 candidate 当成执行许可。
- 词法安全策略不覆盖所有同义词、否定、多设备指代与上下文歧义。
- 模型仍可能输出多余动作、错误设备或房间;格式正确不代表语义正确。
- 80 条合成数据包含重复文本,规则已经根据样本调整;新增反例不是独立统计留出集。
- 单次 CPU 运行不证明用户可接受延迟;加载前后 RSS 差不是峰值内存。
- API revision 由调用者声明,不能证明服务实际加载了对应权重。
- 恢复任务必须沿用同一软件环境;不支持同一结果文件的并发写入。
- 并行提交 c906b98 已补入 Discussion #7,本轮本地案例校验通过。未放宽发布要求;本轮没有发布或修改远端内容,网页读取失败,未独立复核远端帖子。

## 结构影响

文本进入 normalize,再进入两个推理入口;protocol 统一格式和精确比较,run_support 统一输出策略、
来源指纹与运行文件保护,score 汇总结果。测试与 CI 覆盖这些路径。
未改模型权重、训练脚本、上游通用 eval/run_eval.py,也未增加任何生产依赖或设备控制接口。

## 本次运行结果

- 本机完整测试:31 项全部通过;数据校验、案例校验、diff 空白检查均通过。
- 原始输入、归一化输入各 80 条真实 CPU 推理,共 160 次,运行错误均为 0。
- 新严格评分器:`2-ordered-exact-lcs-f1`。两份结果的 ID、代码、数据、设置摘要一致,完成状态和结果摘要检查通过。
- 当前工作区代码摘要与两轮运行记录相同;不是修复前的旧日志冒充新代码验证。

| 指标 | 本轮 raw | 本轮 normalized |
|---|---:|---:|
| 精确匹配(70 条可评分) | 55.7%(39/70) | 85.7%(60/70) |
| Slot F1 | 0.8956 | 0.9666 |
| Intent F1 | 0.5674 | 0.8652 |
| 平均生成耗时 | 8.54 秒 | 8.77 秒 |
| P95 生成耗时(最近秩) | 10.44 秒 | 11.13 秒 |

归一化相对本轮 raw 修复 23/31 个错误(74.2%),破坏 2/39 个原本正确的样本(5.1%)。
旧归一化精确匹配为 53/70,本次增加 7 条,提升 10 个百分点。原实验回退率为 7/39(17.9%)。
两次实验的耗时受到当时机器负载等因素影响,不能据此声称归一化带来性能优化。

### 再次审查仍未消除的语义错误

- `ss-008-self_correction` 现在正确输出 `turnOff`,原先丢失关闭动作的代码缺陷已修复。
- `ss-009-self_correction` 仍输出 Red、Blue 两条动作,模型没有消除被取消的颜色。
- `ss-020-clean`、`ss-020-negation` 是本轮相对 raw 的两条回退:Study Light 与 gold 中的 Light 不一致,后者还漏了房间。
- 其余失败包括设备粒度(Light/Ceiling Light、Lamp/Desk Lamp)、房间别名、重复语句中的虚构 AC 2、以及安防动作命名。
- 全部 10 条失败的输入、gold、模型输出和输出策略见 `remaining_parse_failures.json`。
其中一些是严格协议或名称不匹配,不能一概解释成危险行为,也不能直接判为安全正确。

输出策略在归一化结果上给出 61 个 candidate、15 个 clarify、4 个 reject;所有记录均为
`execution_performed: false`。candidate 中仍可能有语义错误,必须经设备解析、能力与权限检查,
不得自动执行。输入词法安全标签在既有 80 条数据上吻合,并不代表跨场景安全性。

### 证据文件

- `metrics.json`:同版本、同参数、完整配对的真实 CPU 指标。
- `raw_outputs.jsonl` / `normalized_outputs.jsonl`:逐条真实输出。
- `raw_environment.json` / `normalized_environment.json`:代码、数据、设置及输出摘要。
- `verification.json`:31 项测试、校验结果、运行时包版本和当前代码一致性核对。
- `historical_rescored_metrics.json`:旧结果按新评分器重算;不是新的模型推理。

结论:开发者离线评测闭环已跑通,已修复的问题有回归和运行证据;模型效果及真实设备安全闭环仍需后续工作。
Loading
Loading