feat(db): V7 目录种子——两个已开通的 Seedance 视频模型(T4-01b)
CI / backend-test (push) Successful in 8m45s

按账号实际开通的模型播种:doubao-seedance-2-5-260628 与
doubao-seedance-2-0-260128,provider_code 为 volcengine-seedance。

与目标模型 patbond_postgresql.sql:1495 的种子**有意不同**:正典那份是服务商
未定时写下的 provider_code='fixture' 占位(这也是开工审计据以判定「AI provider
BLOCKED」的证据之一),现已接入真实服务商。

三处刻意不做的事,文件头逐条写明原因:
- **不播种图片模型**:gpt-image-2 适配层未落地,播种一个没有适配器的模型会让
  客户端渲染出一个点了没反应的入口(目录端点按 media_kind 聚合可用模型)。
- **不播种风格**:风格是产品内容决策(提供哪些艺术风格、叫什么、配图是什么),
  无法从服务商文档推导;正典那 4 条均为 image 类且 preview_asset_id 指向 demo
  资产,而 V1..V7 链路不含该 demo 种子,照抄会违反外键。style_id 可空,不阻塞。
- **不在目录表加能力列**:正典的 generation_models 没有能力列,本迭代不发明
  超出已评审模型的列。两个模型的限制差异(2.5 时长到 30 秒但无 4k;2.0 有 4k
  但时长上限 15 秒;2.5 图生视频时 ratio 锁 adaptive)由 patbond-ai 的
  capabilities.py 承载并在提交前本地预校验。

新增 CreationCatalogSeedTest(6 项),钉住的是几个**跨语言、跨仓库约定**——
它们对不上时症状都离根因很远:
- provider_code 必须与 patbond-ai 适配器的 PROVIDER_CODE 逐字一致。对不上时
  Worker 按任务行冻结的快照查不到适配器,任务永远停在排队,看起来像队列坏了。
- provider_model_name 必须是实际开通的 ID,否则撞 InvalidEndpointOrModel.NotFound
  且不可重试。
- 目录里不得出现没有适配器的 media_kind。
- 模型 ID 尾部须为日期版本——CatalogRepository 以 provider_model_name 兼作版本
  快照,该做法只在 ID 自带版本时成立。

全量 404 → 410,零失败零跳过。另修测试里一处 Java 21 API(List.getFirst()):
项目 release 为 17,本地 JDK 26 不代表能用。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-20 15:13:57 +08:00
parent 73bc31aeb8
commit 91ae016470
2 changed files with 155 additions and 0 deletions
@@ -0,0 +1,42 @@
/*
V7: creation catalog seed (iteration-4 T4-01b)。
目录是生产参照数据(任务表按复合外键指向它),故进版本化迁移链而非 db/dev。
与目标模型 patbond_postgresql.sql:1495 的种子**有意不同**:正典那份用的是
`provider_code = 'fixture'` 与占位模型名(`patbond-image-v1` / `patbond-video-v1'),
那是在服务商未定时写下的占位。现已接入真实服务商,故按实际开通的模型播种。
Scope notes:
- **只播种视频模型**。图片生成(gpt-image-2)尚未接入,待其适配层落地后由后续
迁移追加——播种一个没有适配器的模型会让任务卡在「找不到 provider」,而症状
(任务永远排队)离根因很远。
- **不播种风格(generation_styles)**。风格是产品内容决策(提供哪些艺术风格、
叫什么、配图是什么),无法从服务商文档推导;正典那 4 条风格均为 `image` 类且
其 `preview_asset_id` 指向 demo 资产,而本链路不含该 demo 种子,照抄会违反外键。
`generation_jobs.style_id` 可空,故空风格表不阻塞任何功能。
- `provider_code` 必须与 patbond-ai 适配器的 `PROVIDER_CODE` 逐字一致
(`volcengine-seedance`)。对不上时 Java 侧按任务行冻结的
`provider_code_snapshot` 查不到适配器,任务会永远停在排队——而这个症状离
「两处字符串不一致」这个根因很远,故在此显式提醒。
- id 使用显式固定 UUID 而非列默认值:种子行需要稳定标识以便后续迁移与测试引用。
取 `17000000-0000-7000-8000-0000000000 1x` 段,与正典占位行(…0001/…0002)
区分开,避免有人拿本链路与正典逐行对比时把两者混为一谈。
两个模型的能力差异**不进本表**:正典的 generation_models 没有能力列,本迁移
不发明超出已评审模型的列。差异(2.5 时长上限 30 秒但无 4k;2.0 有 4k 但时长
上限 15 秒;2.5 图生视频时 ratio 锁 adaptive)由 patbond-ai 的
`app/providers/volcengine/capabilities.py` 承载并在提交前本地预校验。
取证见 patbond-doc docs/development/providers/volcengine-seedance.md §5。
*/
INSERT INTO creation.generation_models
(id, code, display_name, provider_code, provider_model_name, media_kind, sort_order)
VALUES
-- 2.5:时长可到 30 秒、支持 mov 输出与全模态参考(图 0-30/视频 0-10/音频 0-10);
-- 1080p 为 10bit + H.265/HEVC,少数播放环境可能不兼容。列为首选。
('17000000-0000-7000-8000-000000000011', 'seedance-2-5', '豆包 Seedance 2.5',
'volcengine-seedance', 'doubao-seedance-2-5-260628', 'video', 10),
-- 2.0:时长上限 15 秒,但支持 4k(同为 10bit + H.265/HEVC)。
('17000000-0000-7000-8000-000000000012', 'seedance-2-0', '豆包 Seedance 2.0',
'volcengine-seedance', 'doubao-seedance-2-0-260128', 'video', 20);