docs(tasks): defer custom AI model integration
This commit is contained in:
+2
-1
@@ -16,7 +16,7 @@ created: 2026-07-11
|
|||||||
- `app/db.py` 增加 ad-hoc 兼容迁移和数据对象:
|
- `app/db.py` 增加 ad-hoc 兼容迁移和数据对象:
|
||||||
- `image_studio_projects`:账号、商品 ID、目标主图数/详情数、草稿提示词、项目状态、软删除/时间字段;同一账号+商品唯一。
|
- `image_studio_projects`:账号、商品 ID、目标主图数/详情数、草稿提示词、项目状态、软删除/时间字段;同一账号+商品唯一。
|
||||||
- `image_studio_assets`:项目、类别(原图/生成主图/生成详情图)、远程 URL、本地路径、比例、父资产、生成提示词、可用/缺失状态。
|
- `image_studio_assets`:项目、类别(原图/生成主图/生成详情图)、远程 URL、本地路径、比例、父资产、生成提示词、可用/缺失状态。
|
||||||
- `image_studio_jobs`:资产候选、生成来源、task key/id、Provider、类型、状态、错误、重试和时间字段。
|
- `image_studio_jobs`:资产候选、生成来源、task key/id、Provider、类型、状态、错误、重试和时间字段;当前阶段 `provider` 固定为 `cmhub`,字段仅用于状态自描述和后续兼容。
|
||||||
- `image_studio_selections`:项目、`main/detail`、连续 position、asset;类别+位置唯一,同一资产在同类别唯一。
|
- `image_studio_selections`:项目、`main/detail`、连续 position、asset;类别+位置唯一,同一资产在同类别唯一。
|
||||||
- 新增独立 service 模块(命名按实现确定)封装 CRUD、事务排序、路径计算和状态转换,GUI 不直接写 SQL。
|
- 新增独立 service 模块(命名按实现确定)封装 CRUD、事务排序、路径计算和状态转换,GUI 不直接写 SQL。
|
||||||
- 图片目录固定在 `data/images/pool/<slug>/<item_id>/{originals,generated,exports}/`,所有路径继续通过 `appconfig` 从 `data/` 解析。
|
- 图片目录固定在 `data/images/pool/<slug>/<item_id>/{originals,generated,exports}/`,所有路径继续通过 `appconfig` 从 `data/` 解析。
|
||||||
@@ -34,6 +34,7 @@ created: 2026-07-11
|
|||||||
## 边界(不改什么)
|
## 边界(不改什么)
|
||||||
|
|
||||||
- 不做 GUI、CDP、网络下载、AI 请求、导出或蝦皮写操作。
|
- 不做 GUI、CDP、网络下载、AI 请求、导出或蝦皮写操作。
|
||||||
|
- 不实现自定义 Provider、API Key 或生成来源切换。
|
||||||
- 不把图片 BLOB 写 SQLite,不采用目录扫描猜状态。
|
- 不把图片 BLOB 写 SQLite,不采用目录扫描猜状态。
|
||||||
- 不提供本地图片导入,不物理删除项目历史。
|
- 不提供本地图片导入,不物理删除项目历史。
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -18,7 +18,7 @@ AI工场一次可生成 N 张,且每张都要独立计费、失败、重试、
|
|||||||
- 每条 job 在 submit 前落稳定 key,202 后立即落 task_id;poll 成功下载校验后创建 generated asset,记录 main/detail、比例、父 asset、提示词和计费元数据。
|
- 每条 job 在 submit 前落稳定 key,202 后立即落 task_id;poll 成功下载校验后创建 generated asset,记录 main/detail、比例、父 asset、提示词和计费元数据。
|
||||||
- 并发沿用当前最大 5 的 submit+poll/下载双池保护;逐条事件回调供 GUI 显示。
|
- 并发沿用当前最大 5 的 submit+poll/下载双池保护;逐条事件回调供 GUI 显示。
|
||||||
- 停止不删除已提交任务:未开始 job 取消,已提交 job 停止等待并保留 task_id,下次继续查询。
|
- 停止不删除已提交任务:未开始 job 取消,已提交 job 停止等待并保留 task_id,下次继续查询。
|
||||||
- 本任务只实现 cmhub 托管来源;数据结构预留 `generation_source/provider`,自定义模型由 T-594 解锁。
|
- 本任务只实现 cmhub 托管来源;`generation_source/provider` 固定写入 `cmhub`,只作为状态自描述和后续兼容字段。本轮不展示或实现来源切换,自定义模型后置到 T-596。
|
||||||
|
|
||||||
## 验收要点
|
## 验收要点
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ AI工场一次可生成 N 张,且每张都要独立计费、失败、重试、
|
|||||||
|
|
||||||
## 边界(不改什么)
|
## 边界(不改什么)
|
||||||
|
|
||||||
- 不做 BYOK、自定义 Provider、自动去重或自动重生成。
|
- 不做 BYOK、自定义 Provider、API Key、来源切换、自动去重或自动重生成。
|
||||||
- 不做 GUI、终选、导出、CDP 或蝦皮写操作。
|
- 不做 GUI、终选、导出、CDP 或蝦皮写操作。
|
||||||
- 不改变 cmhub 单次调用一张、预扣/失败退点契约。
|
- 不改变 cmhub 单次调用一张、预扣/失败退点契约。
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -18,7 +18,7 @@ created: 2026-07-11
|
|||||||
- 原主图抽屉异步显示;单击加入池,双击大图。
|
- 原主图抽屉异步显示;单击加入池,双击大图。
|
||||||
- 照片池显示原/主/详角标、比例、排队/生成/失败状态;单击设源图、双击大图、右键移除(引用中/任务中禁用并说明)。
|
- 照片池显示原/主/详角标、比例、排队/生成/失败状态;单击设源图、双击大图、右键移除(引用中/任务中禁用并说明)。
|
||||||
- 右侧使用单一提示词框和较窄模板下拉,按钮为新建/重命名/保存/删除;程序不显示“主提示词/每张动作词”label。
|
- 右侧使用单一提示词框和较窄模板下拉,按钮为新建/重命名/保存/删除;程序不显示“主提示词/每张动作词”label。
|
||||||
- 类型、数量、比例、生成来源和计费区域按 v3;T-594 前自定义来源隐藏或明确禁用,不伪装可用。
|
- 类型、数量、比例和 cmhub 计费区域按 v3;当前阶段固定使用 cmhub 托管模型,不显示自定义来源、Provider 或 API Key 控件,也不保留可点击的禁用占位。
|
||||||
- 所有网络/CDP/AI/图片解码走 worker/QThread 或异步 Qt API,主线程只更新 UI。
|
- 所有网络/CDP/AI/图片解码走 worker/QThread 或异步 Qt API,主线程只更新 UI。
|
||||||
|
|
||||||
## 验收要点
|
## 验收要点
|
||||||
@@ -26,13 +26,14 @@ created: 2026-07-11
|
|||||||
- 六个 Tab 顺序和中文文案正确,在 1180×760、960×640 及 Windows 缩放下无重叠/截断。
|
- 六个 Tab 顺序和中文文案正确,在 1180×760、960×640 及 Windows 缩放下无重叠/截断。
|
||||||
- 任意原图/池图双击打开大图;单击仍执行区域业务动作,不冲突。
|
- 任意原图/池图双击打开大图;单击仍执行区域业务动作,不冲突。
|
||||||
- 合并提示词、模板 CRUD、源图选择、N 张生成、停止、进度和逐图失败可用。
|
- 合并提示词、模板 CRUD、源图选择、N 张生成、停止、进度和逐图失败可用。
|
||||||
|
- 生成设置只呈现 cmhub 托管模型的点数、余额和实际扣点,不出现生成来源选择。
|
||||||
- 切项目不会串图片/任务/提示词;运行中关键控件禁用并可安全恢复。
|
- 切项目不会串图片/任务/提示词;运行中关键控件禁用并可安全恢复。
|
||||||
- 不存在“导入本地图片”按钮或隐藏入口。
|
- 不存在“导入本地图片”按钮或隐藏入口。
|
||||||
- GUI offscreen 测试覆盖 objectName、布局结构、信号和状态;人工截图与 SVG 对照。
|
- GUI offscreen 测试覆盖 objectName、布局结构、信号和状态;人工截图与 SVG 对照。
|
||||||
|
|
||||||
## 边界(不改什么)
|
## 边界(不改什么)
|
||||||
|
|
||||||
- 不实现终选拖放排序(T-592)、导出(T-593)或 BYOK(T-594)。
|
- 不实现终选拖放排序(T-592)、导出(T-593)、BYOK、自定义 Provider 或 API Key;自定义模型后置到 T-596。
|
||||||
- 不自动上传蝦皮,不增加本地图片导入。
|
- 不自动上传蝦皮,不增加本地图片导入。
|
||||||
- 不在 widget 槽函数直接写 SQL 或做网络请求。
|
- 不在 widget 槽函数直接写 SQL 或做网络请求。
|
||||||
|
|
||||||
|
|||||||
+19
-26
@@ -1,46 +1,39 @@
|
|||||||
---
|
---
|
||||||
id: T-594
|
id: T-594
|
||||||
title: AI工场自定义模型(BYOK)授权代理与异步生图接入
|
title: AI工场 cmhub 托管生图故障恢复、计费一致性与运行回归
|
||||||
phase: 7
|
phase: 7
|
||||||
deps: [T-590]
|
deps: [T-590, T-591]
|
||||||
status: BLOCKED
|
status: TODO
|
||||||
created: 2026-07-11
|
created: 2026-07-11
|
||||||
---
|
---
|
||||||
|
|
||||||
## 问题 / 背景
|
## 问题 / 背景
|
||||||
|
|
||||||
cmhub 托管生图上游存在稳定性风险,AI工场正式发布前需要“自定义模型”逃生口。但自定义 Key 仍必须经过软件套餐/设备授权和 cmhub 异步任务代理,不能恢复客户端 direct 直连或同步长等待。
|
AI工场会同时持有多张 cmhub 异步生图任务。基础编排和 GUI 接通后,还需要集中验证超时、停止、重启续查、下载失败和部分成功等运行场景,确保不会重复提交、重复扣点、丢失 task_id 或阻塞界面。本任务只处理 cmhub 托管模型,不接入自定义 Provider。
|
||||||
|
|
||||||
当前阻塞: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托管/自定义模型”来源;不自动切换。
|
- 基于 T-590 的 job 生命周期和 T-591 的界面事件,补齐 submitted/running/succeeded/failed/expired/cancelled 的状态映射和中文反馈。
|
||||||
- 自定义 Key 本地使用 Windows DPAPI 保存,UI 仅掩码、替换、清除;不回显明文。
|
- 覆盖程序停止、强退、重启后的续查:已有 task_id 只 poll,不再次 submit;下载失败只重试下载。
|
||||||
- 所有请求带 device credential/product,服务端先校验套餐和设备;BYOK `points_cost=0`,显示“费用由模型服务商收取”。
|
- 对点数不足、submit 超时但服务端已受理、poll 超时、结果 URL 失效、图片校验失败和单张失败做可恢复处理。
|
||||||
- 生图仍 submit→poll→下载,job task_id 持久化续查;不走同步长等待。
|
- 核对每个 job 的预计点数、实际扣点、余额和 call_id 展示,不把一张失败扩大为整轮失败。
|
||||||
- 正式发行版禁用普通用户通过 config 开启 direct 后端。
|
- 增加服务层与 GUI 状态测试,使用 mock/fake cmhub,不在自动测试中产生真实费用。
|
||||||
|
|
||||||
## 验收要点
|
## 验收要点
|
||||||
|
|
||||||
- 无有效套餐/设备时 BYOK submit 被服务端拒绝;普通 API Key/direct 配置不能绕过。
|
- N 张任务部分成功时,成功图片正常进入照片池,失败图片有独立中文状态,可单张重试。
|
||||||
- Key 不出现在 DB 普通字段、任务快照、日志、命令行、错误或导出;DPAPI 文件复制到另一用户/设备不可直接解密。
|
- submit 响应丢失后可用稳定 task key 恢复,不重复创建或扣费;已有 task_id 的任务重启后不再次 POST。
|
||||||
- 托管失败不静默用 BYOK,BYOK 失败不扣 cmhub 点数。
|
- 停止与关闭程序不会删除已提交任务信息;再次打开项目可以继续查询。
|
||||||
- 自定义生图可重启续查、下载失败不重 submit;Provider/域名/参数严格白名单。
|
- 下载超时、非图片响应和本地保存失败不重新提交生图;恢复后仍关联原 job/task_id。
|
||||||
- 全部测试使用占位 Key,不提交真实密钥。
|
- 点数、余额、call_id 和失败退点口径与现有 cmhub 客户端一致,日志不暴露接口路径、密钥或内部响应。
|
||||||
|
- GUI 主线程不执行网络等待;全量 unittest、ruff、compileall 和 `git diff --check` 通过。
|
||||||
|
|
||||||
## 边界(不改什么)
|
## 边界(不改什么)
|
||||||
|
|
||||||
- 阻塞解除前不实现临时兼容接口。
|
- 不实现 BYOK、自定义 Provider、API Key、来源切换或客户端直连。
|
||||||
- 不允许任意上游 URL,不做客户端直连,不同步长等待。
|
- 不实现终选拖放、导出或蝦皮写操作。
|
||||||
- 不改 cmhub 托管预扣/退点账本。
|
- 不用真实收费请求作为自动化测试前提,不改变 cmhub 服务端计费契约。
|
||||||
|
|
||||||
## 执行记录
|
## 执行记录
|
||||||
|
|
||||||
BLOCKED:等待 cmhub V1.5 授权与 BYOK 异步契约。
|
(完成后记录故障矩阵、状态决策与验证结果。)
|
||||||
|
|||||||
+5
-3
@@ -9,23 +9,24 @@ created: 2026-07-11
|
|||||||
|
|
||||||
## 问题 / 背景
|
## 问题 / 背景
|
||||||
|
|
||||||
AI工场横跨 DB、CDP、远程图片、cmhub 异步生成、GUI 拖放和本地导出。各子任务通过后仍需端到端验收,确认跨模块状态恢复、两种生成来源、部分导出和打包环境一致,并将提案文档升级为当前产品事实。
|
AI工场横跨 DB、CDP、远程图片、cmhub 异步生成、GUI 拖放和本地导出。各子任务通过后仍需端到端验收,确认跨模块状态恢复、cmhub 托管生成、部分导出和打包环境一致,并将提案文档升级为当前产品事实。自定义大模型后置到 T-596,不作为本轮依赖或验收条件。
|
||||||
|
|
||||||
## 方案
|
## 方案
|
||||||
|
|
||||||
- 串起:新增/恢复项目 → 只读拉原图 → 单击进池 → 设源图 → 同提示词 N 张生成 → 重启续查 → 拖入终选排序 → 部分导出 → 打开目录。
|
- 串起:新增/恢复项目 → 只读拉原图 → 单击进池 → 设源图 → 同提示词 N 张生成 → 重启续查 → 拖入终选排序 → 部分导出 → 打开目录。
|
||||||
- 托管与自定义来源分别做 mock 全链和成本可控实测;只读 CDP 实跑不点击更新、不上传蝦皮。
|
- cmhub 托管来源完成 mock 全链和成本可控实测;只读 CDP 实跑不点击更新、不上传蝦皮。
|
||||||
- 验证程序强退/重启时 submitted/running job、下载中间态、终选和草稿提示词恢复。
|
- 验证程序强退/重启时 submitted/running job、下载中间态、终选和草稿提示词恢复。
|
||||||
- 核对 1180×760、960×640 和 Windows 缩放,生成 Playwright/Qt 截图与 `tab6-ai-studio-v3.svg` 对照。
|
- 核对 1180×760、960×640 和 Windows 缩放,生成 Playwright/Qt 截图与 `tab6-ai-studio-v3.svg` 对照。
|
||||||
- 更新 `docs/04-architecture.md`、`docs/routes.md`、`docs/api.md`、UI README、用户排障和打包说明;Obsidian 方案标记实现状态。
|
- 更新 `docs/04-architecture.md`、`docs/routes.md`、`docs/api.md`、UI README、用户排障和打包说明;Obsidian 方案标记实现状态。
|
||||||
- 确认公开发行包不包含 data、真实 Key、测试图片或 direct 普通入口。
|
- 确认公开发行包不包含 data、真实 Key、测试图片或 direct 普通入口。
|
||||||
|
- 确认界面没有自定义 Provider、API Key 或生成来源切换入口;相关能力由后续 T-596 单独实现。
|
||||||
|
|
||||||
## 验收要点
|
## 验收要点
|
||||||
|
|
||||||
- 完整闭环可由运营独立完成,所有失败均为中文且能继续/重试,不需要改 DB。
|
- 完整闭环可由运营独立完成,所有失败均为中文且能继续/重试,不需要改 DB。
|
||||||
- 同项目多轮生成、多个项目切换和重启不串图、不重复扣费、不丢 task_id。
|
- 同项目多轮生成、多个项目切换和重启不串图、不重复扣费、不丢 task_id。
|
||||||
- 终选顺序与导出文件顺序一致;部分导出和已存在目录三选实测通过。
|
- 终选顺序与导出文件顺序一致;部分导出和已存在目录三选实测通过。
|
||||||
- 托管/BYOK 计费提示和授权边界准确,不静默切换。
|
- cmhub 托管计费提示和授权边界准确;不存在 BYOK 或其他生成来源的可见入口。
|
||||||
- 现有五个 Tab、②生成、③更新、账号、设置、打包和全量单测不回归。
|
- 现有五个 Tab、②生成、③更新、账号、设置、打包和全量单测不回归。
|
||||||
- 真实操作仅只读商品页和本地导出;CDP 自动回传不在本任务验收。
|
- 真实操作仅只读商品页和本地导出;CDP 自动回传不在本任务验收。
|
||||||
|
|
||||||
@@ -33,6 +34,7 @@ AI工场横跨 DB、CDP、远程图片、cmhub 异步生成、GUI 拖放和本
|
|||||||
|
|
||||||
- 不实现主图9张/详情图多媒体框自动回传蝦皮。
|
- 不实现主图9张/详情图多媒体框自动回传蝦皮。
|
||||||
- 不加入本地图片导入、自动去重重生或自动动作词。
|
- 不加入本地图片导入、自动去重重生或自动动作词。
|
||||||
|
- 不实现 BYOK、自定义 Provider、API Key 或生成来源切换;这些内容后置到 T-596。
|
||||||
- 不以人工改 SQLite 作为验收步骤。
|
- 不以人工改 SQLite 作为验收步骤。
|
||||||
|
|
||||||
## 执行记录
|
## 执行记录
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
---
|
||||||
|
id: T-596
|
||||||
|
title: AI工场自定义模型(BYOK)授权代理与异步生图接入
|
||||||
|
phase: 8
|
||||||
|
deps: [T-595]
|
||||||
|
status: TODO
|
||||||
|
created: 2026-07-11
|
||||||
|
---
|
||||||
|
|
||||||
|
## 问题 / 背景
|
||||||
|
|
||||||
|
自定义模型是 AI工场 cmhub 托管链路完成后的后续增强,不属于 T-586~T-595 的当前交付范围。只有这些任务全部完成并验收后才能启动本任务,不能让 BYOK 契约反向阻塞 cmhub 托管模式发布。
|
||||||
|
|
||||||
|
后续实现时,自定义 Key 仍必须经过软件套餐/设备授权和 cmhub 异步任务代理,不能恢复客户端 direct 直连或同步长等待。
|
||||||
|
|
||||||
|
当前启动前提:先完成 T-595;同时 cmhub 需完成《卡密设备绑定与套餐授权方案》V1.5 所定义的 device credential、BYOK Provider 白名单、加密 task secret、零点数使用记录和 submit/poll 契约。任一条件未满足时,本任务转为 `BLOCKED`,不编码、不猜字段。
|
||||||
|
|
||||||
|
## 解除阻塞条件
|
||||||
|
|
||||||
|
- T-586~T-595 已全部完成,cmhub 托管链路已独立发布和验收。
|
||||||
|
- cmhub 提供版本化 API 文档、错误码、至少一个受支持 Provider、测试凭证和 mock/测试环境。
|
||||||
|
- 明确 BYOK title/image 请求、task secret 生命周期、终态清理、幂等键和计费字段。
|
||||||
|
- 服务端确认 Key 不进入 request_payload、CallRecord、队列日志、遥测或异常监控。
|
||||||
|
|
||||||
|
## 方案
|
||||||
|
|
||||||
|
- ⑤/AI工场增加显式“cmhub托管/自定义模型”来源;不自动切换。
|
||||||
|
- 自定义 Key 本地使用 Windows DPAPI 保存,UI 仅掩码、替换、清除;不回显明文。
|
||||||
|
- 所有请求带 device credential/product,服务端先校验套餐和设备;BYOK `points_cost=0`,显示“费用由模型服务商收取”。
|
||||||
|
- 生图仍 submit→poll→下载,job task_id 持久化续查;不走同步长等待。
|
||||||
|
- 正式发行版禁用普通用户通过 config 开启 direct 后端。
|
||||||
|
|
||||||
|
## 验收要点
|
||||||
|
|
||||||
|
- 无有效套餐/设备时 BYOK submit 被服务端拒绝;普通 API Key/direct 配置不能绕过。
|
||||||
|
- Key 不出现在 DB 普通字段、任务快照、日志、命令行、错误或导出;DPAPI 文件复制到另一用户/设备不可直接解密。
|
||||||
|
- 托管失败不静默用 BYOK,BYOK 失败不扣 cmhub 点数。
|
||||||
|
- 自定义生图可重启续查、下载失败不重 submit;Provider/域名/参数严格白名单。
|
||||||
|
- 全部测试使用占位 Key,不提交真实密钥。
|
||||||
|
|
||||||
|
## 边界(不改什么)
|
||||||
|
|
||||||
|
- 启动前提或接口契约未满足时不实现临时兼容接口。
|
||||||
|
- 不允许任意上游 URL,不做客户端直连,不同步长等待。
|
||||||
|
- 不改 cmhub 托管预扣/退点账本。
|
||||||
|
|
||||||
|
## 执行记录
|
||||||
|
|
||||||
|
TODO:后置到 T-595 完成后;领取时再核验 cmhub V1.5 授权与 BYOK 异步契约,未满足则标记 BLOCKED。
|
||||||
Reference in New Issue
Block a user