docs(tasks): defer custom AI model integration

This commit is contained in:
chengma
2026-07-11 11:25:06 +08:00
parent 9e4a6def92
commit 0a34e2f0a9
6 changed files with 80 additions and 34 deletions
+19 -26
View File
@@ -1,46 +1,39 @@
---
id: T-594
title: AI工场自定义模型(BYOK)授权代理与异步生图接入
title: AI工场 cmhub 托管生图故障恢复、计费一致性与运行回归
phase: 7
deps: [T-590]
status: BLOCKED
deps: [T-590, T-591]
status: TODO
created: 2026-07-11
---
## 问题 / 背景
cmhub 托管生图上游存在稳定性风险,AI工场正式发布前需要“自定义模型”逃生口。但自定义 Key 仍必须经过软件套餐/设备授权和 cmhub 异步任务代理,不能恢复客户端 direct 直连或同步长等待。
当前阻塞:cmhub 尚未完成《卡密设备绑定与套餐授权方案》V1.5 所定义的 device credential、BYOK Provider 白名单、加密 task secret、零点数使用记录和 submit/poll 契约。契约和测试环境落地前,本任务不编码、不猜字段。
## 解除阻塞条件
- cmhub 提供版本化 API 文档、错误码、至少一个受支持 Provider、测试凭证和 mock/测试环境。
- 明确 BYOK title/image 请求、task secret 生命周期、终态清理、幂等键和计费字段。
- 服务端确认 Key 不进入 request_payload、CallRecord、队列日志、遥测或异常监控。
AI工场会同时持有多张 cmhub 异步生图任务。基础编排和 GUI 接通后,还需要集中验证超时、停止、重启续查、下载失败和部分成功等运行场景,确保不会重复提交、重复扣点、丢失 task_id 或阻塞界面。本任务只处理 cmhub 托管模型,不接入自定义 Provider。
## 方案
- ⑤/AI工场增加显式“cmhub托管/自定义模型”来源;不自动切换。
- 自定义 Key 本地使用 Windows DPAPI 保存,UI 仅掩码、替换、清除;不回显明文。
- 所有请求带 device credential/product,服务端先校验套餐和设备;BYOK `points_cost=0`,显示“费用由模型服务商收取”。
- 生图仍 submit→poll→下载,job task_id 持久化续查;不走同步长等待。
- 正式发行版禁用普通用户通过 config 开启 direct 后端。
- 基于 T-590 的 job 生命周期和 T-591 的界面事件,补齐 submitted/running/succeeded/failed/expired/cancelled 的状态映射和中文反馈。
- 覆盖程序停止、强退、重启后的续查:已有 task_id 只 poll,不再次 submit;下载失败只重试下载。
- 对点数不足、submit 超时但服务端已受理、poll 超时、结果 URL 失效、图片校验失败和单张失败做可恢复处理。
- 核对每个 job 的预计点数、实际扣点、余额和 call_id 展示,不把一张失败扩大为整轮失败。
- 增加服务层与 GUI 状态测试,使用 mock/fake cmhub,不在自动测试中产生真实费用。
## 验收要点
- 无有效套餐/设备时 BYOK submit 被服务端拒绝;普通 API Key/direct 配置不能绕过。
- Key 不出现在 DB 普通字段、任务快照、日志、命令行、错误或导出;DPAPI 文件复制到另一用户/设备不可直接解密。
- 托管失败不静默用 BYOK,BYOK 失败不扣 cmhub 点数。
- 自定义生图可重启续查、下载失败不重 submit;Provider/域名/参数严格白名单。
- 全部测试使用占位 Key,不提交真实密钥。
- N 张任务部分成功时,成功图片正常进入照片池,失败图片有独立中文状态,可单张重试。
- submit 响应丢失后可用稳定 task key 恢复,不重复创建或扣费;已有 task_id 的任务重启后不再次 POST。
- 停止与关闭程序不会删除已提交任务信息;再次打开项目可以继续查询。
- 下载超时、非图片响应和本地保存失败不重新提交生图;恢复后仍关联原 job/task_id。
- 点数、余额、call_id 和失败退点口径与现有 cmhub 客户端一致,日志不暴露接口路径、密钥或内部响应。
- GUI 主线程不执行网络等待;全量 unittest、ruff、compileall 和 `git diff --check` 通过。
## 边界(不改什么)
- 阻塞解除前不实现临时兼容接口。
- 不允许任意上游 URL,不做客户端直连,不同步长等待。
- 不改 cmhub 托管预扣/退点账本。
- 不实现 BYOK、自定义 Provider、API Key、来源切换或客户端直连。
- 不实现终选拖放、导出或蝦皮写操作。
- 不用真实收费请求作为自动化测试前提,不改变 cmhub 服务端计费契约。
## 执行记录
BLOCKED:等待 cmhub V1.5 授权与 BYOK 异步契约。
(完成后记录故障矩阵、状态决策与验证结果。)