Phase2 dry-run: pending A, probe, build-config client, gated task/add

Still default dry-run; ALLOW_LIVE_SUBMIT=0. Live gates closed.
This commit is contained in:
Victor Cao
2026-10-16 19:00:15 +08:00
parent 0d0f3b611a
commit bed3bc11ca
25 changed files with 952 additions and 110 deletions

View File

@@ -1,7 +1,7 @@
# API 探针设计(只读意图 · 禁止代调写接口)
- 日期:2026-10-16 Asia/Shanghai
- Phase1:**仅设计文档**;本仓不实现真实 HTTP 写客户端
- Phase2:客户端已实现但默认不调用;本轮禁止真实 task/add
## 管理 API `/agent_platform/strategies*`
@@ -22,15 +22,20 @@
|------|------|----------|
| GET | `/api/adapt/task/page` | 未来只读鉴权探针(对齐 huni-probe,`ALLOW_SUBMIT=0`) |
| POST | `/api/adapt/task/build-config` | 设计可引用;Phase1 不实现 |
| POST | `/api/adapt/task/add` | **禁止代调**;live 仅闸门 + 单测假客户端 |
| POST | `/api/adapt/task/add` | 显式注入客户端 + 双闸门;本轮只做 mock 测试 |
| GET | `/api/adapt/task/calculate-credit` | 只读索引;勿写死 KPI |
容器内社区鉴权(C):`Xc-Token` + body `strategyId` — **待 Victor 账号核实**后再实现探针。
容器内社区鉴权(C):`Xc-Token` + body `strategyId` — **待 Victor 账号核实**;60014 仍为 **D(unverified)**。
## Phase1 落地边界
## Phase2 落地边界
- `src/gate.py`:闸门逻辑 + `attempt_live_submit(..., client=Fake)` 仅供单测
- **无**默认 `urllib`/`requests` 客户端指向 `task/add` 或 `strategies` POST
- `src/gate.py`:闸门逻辑 + `attempt_live_submit(..., client=Fake)` ;真实客户端只能显式注入,测试必须 mock HTTP
- `src/task_add_client.py` 使用 urllib;import 和 dry-run 无网络调用,无自动重试
- token 优先级:XC_TOKEN_FILE → XC_TOKEN → MODELHUB_XC_TOKEN → EXTERNAL_SERVICE_TOKEN;禁止输出 token
- build_payload 中 GPU/framework/strategyId/configParams 占位须人工替换;真实调用要求 STRATEGY_ID 与 payload 一致
- 队列 ≥95 阻断;无效队列提示也阻断;每进程一次调用预算在调用前保留,异常也不重试(防止响应丢失造成重复创建)
- 名称/族硬门不能证明元数据 PASS;未跳过的 pending 行均标 needs_human
- 仍禁止所有 agent_platform 写接口
- Makefile **无** register / submit / deploy / push
## 冲突裁决提醒

View File

@@ -0,0 +1,25 @@
# configParams 配置来源与容器验证
日期:2026-10-16 Asia/Shanghai。
结论:**API**。配置来自服务端,前端将响应 `data` 写入 `configParams`。
依据:[autoconfig-capture-2026-10-16.md](/workspace/modelhub-adapt/logs/autoconfig-capture-2026-10-16.md)。原「公开面无 build-config」缺口关闭:**未公开文档但已抓包证实**。
## 已证实契约
- `POST /api/adapt/task/build-config`
- Query:`gpuType=Sunrise_pt-200-x1&framework=vllm&taskType=text-generation`
- 空 body,无 JSON;模型地址不进入 query/body,也无需传 strategyId。
- HTTP 2xx,JSON `code == 0`,非空字符串 `data` 为 YAML。
- 当前 UI 无「自动配置」标签。新建适配弹层选择模型、GPU、文本生成后,选择框架触发 effect 并填入配置。
- 抓包观察到 `Authorization` 头,值未记录。容器默认按社区实践发送 `Xc-Token`;`BUILD_CONFIG_USE_AUTHORIZATION=1` 改用同一 resolve_token 值作为 Authorization,不自动加 Bearer。
## 客户端与验证
`src/build_config_client.py` 的 `build_config()` 成功返回 YAML,失败抛出 `BuildConfigError`,包含安全归因、HTTP 状态和平台数字码;不返回服务端消息或传输异常细节。缺失/无效凭证不联网,40100、40101、其他平台码、传输失败和无效 data 均可区分。导入无 I/O。
默认 dry-run 使用 `templates/config_params.sample.yaml`,无网络。`CONFIG_PARAMS_SOURCE=build-config` 强制 API;或 `ALLOW_BUILD_CONFIG=1` 且可解析 token 时使用 API。调用失败直接报错,不回退 sample。调用方须传真实 GPU enum。`make build-config-dry` 仅生成配置,缺 token 非零退出,不输出 YAML 或凭证。
## 剩余 GAP 与边界
尚无容器 token 鉴权实证;需运行时 token + API 调用并与只读探针对照,不能宣称鉴权就绪。sample 本身不是 production-ready。队列 ≥95 禁 live。本轮仅 mock 测试,不进行真实 API 调用,不调用 task/add,不保存秘密,不提交任务或推送 tag。

49
docs/gpu-perf-order.md Normal file
View File

@@ -0,0 +1,49 @@
# GPU 缺卡序(契约)
- 日期:2026-10-16 Asia/Shanghai
- 对齐:模盒产品经理 + 模盒积分
- 正式性能表:**无** → 报告字段 `perf_order=unset`(勿写成官方 TPS 排名)
- 缺卡补齐所用序:**经验序 / 待平台核实**(下表)— 产品要求排序器按此序;非站内正式性能榜
## A. 正式性能序
| 优先级 | 展示名 | targetGpu | 依据 |
|--------|--------|-----------|------|
| — | — | — | 模盒积分定稿:无正式卡间性能表 → `perf_order=unset` |
## B. 缺卡经验序(排序器用 · 待平台核实)
跨卡总策略优先于本序:已验证/已下载落点 → 只打**未适配卡**;跳过正在验证 / 已验证成功 / 唯一性失败 / 同卡已知失败禁重试;队列 ≥95 停交(live)。
| 优先级(高→低) | 平台展示名 | targetGpu(已观察,待再核) | 备注 |
|-----------------|------------|------------------------------|------|
| 1(一梯队并列) | 壁砺166M | `Biren_166m` | ≈ 曦望 S2;社区成功量壁砺更高 |
| 1(一梯队并列) | 曦望 S2 | `Sunrise_pt-200-x1`(抓包证实) | 与壁砺并列,勿臆造先后「性能」 |
| 2 | 天垓150 | Iluvatar 天垓族(字符串待核) | 条件回退;饱和+唯一性碰撞多 |
| 3 | 天垓100 | (待核) | 一般不扇出 |
| 4 | 智铠 mrv-100 | `Iluvatar_mrv-100` | 我方唯一成功样本族;不当最快卡宣传 |
并列一梯队时:若 pending `try-next` 已给出相对顺序则保留;否则可按「壁砺 / 曦望」与池内缺口并列候选,报告标 `order_source=experience`。
## C. 映射备忘(非排名)
| 展示名 | 提交字段 | 备注 |
|--------|----------|------|
| 曦望 S2 | `Sunrise_pt-200-x1` | 2026-10-16 build-config query 抓包证实;非性能排名 |
| (docs sample) | `MetaX_c-500` | 与中文悬赏卡无已核实映射 |
## D. 依据文件(工作流/观察,非官方性能榜)
- `/workspace/modelhub-adapt/pending-submit.md`
- `/workspace/modelhub-adapt/submit-plan-2026-10-15-v2.md`
- `/workspace/modelhub-adapt/uniqueness-collision-notes-2026-10-15-eve.md`
- `/workspace/modelhub-adapt/gpu-skip-patterns-xiwang-vs-bili-2026-10-15-eve2.md`
## E. configParams 缺口(产品补充)
- 结论:**API**,未公开文档但已抓包证实,依据 [autoconfig-capture-2026-10-16.md](/workspace/modelhub-adapt/logs/autoconfig-capture-2026-10-16.md)。
- `POST /api/adapt/task/build-config`,query 为 `gpuType` / `framework` / `taskType`,空 body;成功 JSON `code=0`,`data` 为 YAML。
- UI 无「自动配置」标签;选择框架触发 effect 填入 configParams。模型地址不进入该请求。
- 抓包观察 Authorization(值未记录);容器默认 Xc-Token 社区实践,可显式切换 Authorization,尚无 token 鉴权实证。
- 默认 dry-run 离线 sample;CONFIG_PARAMS_SOURCE=build-config 或 ALLOW_BUILD_CONFIG=1 且 token 可解析时调用 API,失败不可静默回退。
- **live 前必须有 token + API 调用实证**;sample 单独不是 production-ready。队列 ≥95 继续禁 live,本轮无 live。

View File

@@ -8,9 +8,9 @@
|-------------------|-----|--------------|
| Phase 0 调研冻结 | M0 | 文档已落 `docs/` |
| Phase 1 本地可部署样例 | M1 | **本轮交付** |
| Phase 2 Dry-run 闭环 | M2 | 骨架:`scripts/dry_run.py`;**待对接 pending-submit**:A→B / PASS / 硬门尚未自动核验 |
| Phase 2 Dry-run 闭环 | M2 | 已实现 pending A→B 解析、名称硬门/禁提过滤与 dry-run;元数据 PASS 仍需人工核实 |
| Phase 3 人工注册 + 只读探针 | M3 | 仅 runbook / api-probe-design;**不代注册** |
| Phase 4 一次 live 验证 | M4 | 闸门已备;**无真实客户端** |
| Phase 4 一次 live 验证 | M4 | 闸门已备;客户端已实现;默认关闭,必须显式注入 |
| Phase 5 规模化 | — | 未开 |
## P0 Issues
@@ -28,9 +28,9 @@
Phase1 构建与运行验收须独立记录;环境阻塞不等于通过。
## P1(未做)
## P1
- [ ] 对接 `/workspace/modelhub-adapt/pending-submit.md` A→B 只读
- [x] 对接 `/workspace/modelhub-adapt/pending-submit.md` A→B 只读
- [ ] 结构化 JSON 日志(禁密钥)
- [ ] evidence-agent 模板填写
@@ -43,5 +43,5 @@ Phase1 构建与运行验收须独立记录;环境阻塞不等于通过。
- 无 register / submit / deploy / push Makefile 目标
- 无 `/agent_platform/strategies*` 写调用
- 无 `/api/adapt/task/add` 真客户端
- `/api/adapt/task/add` 客户端默认不调用;双闸门、队列≥95 阻断、每进程最多一次;本轮未授权真网
- 适配 W1 优先;不抢队列

View File

@@ -0,0 +1,13 @@
# Tag 文案草稿(仍默认 dry-run)— 未授权勿 push
- 建议 Tag 名(待 Victor 确认):`v0.2.0-phase2-dryrun` 或 `v0.2.0-submit-ready-dryrun`
- 相对 Phase1 `v0.1.0-phase1@0d0f3b6`:pending A 池 + 经验序排序、只读 task/page 探针、task/add 客户端仍双重闸门默认关、configParams sample 仅 dry-run
- **不含**:live 开闸、真实自动配置、开闸环境变量默认开启
- 推 Tag 条件:仅当 Victor **明确**说「先上线 dry-run 客户端」;产品当前:**先别 push Tag**
- 队列满 / configParams 缺口期间:**不开闸**
推送检查清单(人工):
1. `make test` 绿
2. ALLOW_LIVE_SUBMIT 默认非 1;LIVE_CONFIRM 未设
3. 控制台重建后日志仍为 dry-run / Phase2 格式
4. 不代注册、不代 live