Initial TrueGrowth source import

This commit is contained in:
2026-07-07 09:36:36 +08:00
commit 3b6781d695
2283 changed files with 691996 additions and 0 deletions

View File

@@ -0,0 +1,93 @@
## Context
现有实现已经有三类偏好存储:
- `AIInputBar` 的通用生成偏好
- 图片工具偏好
- 视频工具偏好
但这些偏好更接近“最近一次 UI 状态”,没有建立“模型 -> 参数偏好”的索引。结果是:
- 切换模型时,用户常用参数无法自动回填
- 运行时发现的多供应商同名模型可能共享错误参数
- 图片、视频、音频三条链路的行为不一致
## Goals
- 为图片、视频、音频提供统一的按模型偏好记忆能力
- 优先按 `selectionKey` 隔离不同供应商来源的同名模型
- 切换模型时自动回填用户上次使用过的兼容参数
- 与现有默认参数、强制参数、任务编辑初始化逻辑兼容
## Non-Goals
- 不同步 prompt、参考图、上传文件等高体积状态
- 不记录不兼容当前模型的参数
- 不改变任务执行 payload 的语义,只改变 UI 回填来源
## Data Model
新增一层“模型作用域偏好”存储,按生成类型拆分:
- `image`
- key: `selectionKey || modelId`
- value: `aspectRatio` + `extraParams`
- `video`
- key: `selectionKey || modelId`
- value: `duration` + `size` + `extraParams`
- `audio`
- key: `selectionKey || modelId`
- value: `selectedParams`
每条记录保留:
- `modelId`
- `selectionKey`
- `updatedAt`
- 参数值对象
## Precedence
模型切换或初始化时,表单值优先级应为:
1. 编辑已有任务或外部显式传入的初始值
2. 该模型的用户偏好
3. 当前模型默认参数
4. 强制参数修正逻辑
这样可以避免本地偏好覆盖任务复现、历史编辑、外部入口显式指定的参数。
## Integration Plan
### 图片
- 在模型变化时,不再直接清空到通用默认值
- 先读取该模型的图片偏好
- 回填 `aspectRatio` 和兼容 `extraParams`
- `MJ` 等特殊模型继续沿用现有兼容过滤
### 视频
- 替换当前“模型变更即重置 `duration/size`”逻辑
- 改为“先读模型偏好,再回退默认值”
- 图片上传数量、storyboard 支持能力仍按当前模型能力实时裁剪
### 音频
-`AIInputBar` 的音频模式下,将 `selectedParams` 改为按模型隔离
- 切换音频模型时优先恢复该模型的上次参数
- `applyForcedSunoParams` 仍在最后阶段统一修正
## Risks
- 旧存储结构与新结构并存时,可能出现首次切换模型后的回填差异
- 若仅按 `modelId` 存储会产生串值,因此必须优先使用 `selectionKey`
- 不同模型参数集合变化频繁,必须统一走兼容性过滤,避免无效参数残留
## Verification
- 图片:两个模型分别设置不同宽高比/参数,来回切换后能正确回填
- 视频:两个模型分别设置不同 `duration/size/extraParams`,来回切换后正确回填
- 音频:不同 Suno 类模型切换时,动作和参数能分别记住
- 多供应商同名模型:验证参数不会串用
- 编辑任务:验证任务参数优先于模型偏好

View File

@@ -0,0 +1,27 @@
# Change: 按模型记忆生成参数偏好
## Why
当前 AI 输入栏、图片生成弹窗、视频生成弹窗虽然已经支持一定程度的状态持久化,但参数仍主要以“当前工具最近一次状态”为中心保存。
用户切换到另一个模型后,系统通常回退为模型默认参数,无法记住“这个模型我习惯用什么参数”,在图片、视频、音频场景下都会造成重复配置。
更重要的是,运行时模型发现已经引入了同模型来自不同供应商来源的情况。如果继续只按 `modelId` 保存参数,会出现不同供应商间参数串用的问题。
## What Changes
- 为图片、视频、音频生成能力增加“按模型作用域”的参数偏好记忆
- 偏好键优先使用 `selectionKey`,缺失时回退到 `modelId`
- 用户切换模型时,优先回填该模型的上次偏好;无偏好时再回退到模型默认参数
- 回填时仅保留当前模型兼容的参数,并继续应用已有的强制参数规则
- 保持编辑历史任务、初始化外部传参、任务复现等链路优先级高于本地模型偏好
## Impact
- Affected specs:
- `generation-preferences`
- Affected code:
- `packages/drawnix/src/services/ai-generation-preferences-service.ts`
- `packages/drawnix/src/components/ttd-dialog/ai-image-generation.tsx`
- `packages/drawnix/src/components/ttd-dialog/ai-video-generation.tsx`
- `packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx`
- `packages/drawnix/src/constants/storage-keys.ts`

View File

@@ -0,0 +1,53 @@
## ADDED Requirements
### Requirement: 按模型作用域记忆生成参数
系统 SHALL 为图片、视频、音频生成能力按模型作用域记忆用户最近一次使用的参数偏好。
#### Scenario: 切换回已使用过的图片模型
- **GIVEN** 用户曾为某图片模型保存过宽高比和额外参数
- **WHEN** 用户再次切换回该图片模型
- **THEN** 系统应优先回填该模型最近一次保存的兼容参数
#### Scenario: 切换回已使用过的视频模型
- **GIVEN** 用户曾为某视频模型保存过 `duration``size` 和额外参数
- **WHEN** 用户再次切换回该视频模型
- **THEN** 系统应优先回填该模型最近一次保存的兼容参数
#### Scenario: 切换回已使用过的音频模型
- **GIVEN** 用户曾为某音频模型保存过音频相关参数
- **WHEN** 用户再次切换回该音频模型
- **THEN** 系统应优先回填该模型最近一次保存的兼容参数
### Requirement: 多供应商同名模型必须隔离偏好
系统 SHALL 优先使用 `selectionKey` 作为模型偏好的作用域键,以避免不同供应商来源的同名模型共享参数。
#### Scenario: 同名模型来自不同供应商
- **GIVEN** 两个不同供应商来源的模型拥有相同的 `modelId`
- **AND** 用户分别为它们保存了不同参数
- **WHEN** 用户在这两个模型之间切换
- **THEN** 系统应分别回填各自的参数偏好
- **AND** 不得发生参数串用
### Requirement: 回填必须遵守兼容性和优先级规则
系统 SHALL 在回填模型偏好时仅恢复当前模型兼容的参数,并保证显式初始化值优先于本地偏好。
#### Scenario: 偏好中包含不兼容参数
- **GIVEN** 某模型偏好中存在当前模型不支持的参数
- **WHEN** 系统回填该模型偏好
- **THEN** 系统必须丢弃不兼容参数
- **AND** 对缺失参数回退到模型默认值或强制参数修正规则
#### Scenario: 编辑历史任务
- **GIVEN** 用户正在编辑一个历史生成任务
- **WHEN** 表单以任务参数初始化
- **THEN** 系统应优先使用任务参数
- **AND** 不得被本地模型偏好覆盖

View File

@@ -0,0 +1,30 @@
# Tasks: 按模型记忆生成参数偏好
## 1. 存储层
- [x] 1.1 为图片、视频、音频增加按 `selectionKey || modelId` 作用域存储的偏好结构
- [x] 1.2 补充统一的读写、兼容过滤、默认值回退工具函数
- [x] 1.3 保持现有偏好存储兼容,避免首次升级时报错
## 2. 图片生成
- [x] 2.1 在图片模型切换时优先回填该模型的用户偏好
- [x] 2.2 保持 `aspectRatio`、额外参数与模型兼容性过滤一致
- [x] 2.3 确保编辑历史任务与外部初始化参数优先级高于本地偏好
## 3. 视频生成
- [x] 3.1 在视频模型切换时优先回填该模型的 `duration``size`、额外参数
- [x] 3.2 保持 storyboard、图片数量裁剪等现有模型能力约束不变
- [x] 3.3 确保编辑历史任务与外部初始化参数优先级高于本地偏好
## 4. 音频生成
- [x] 4.1 为音频模型切换接入按模型参数偏好回填
- [x] 4.2 保持强制参数与兼容参数过滤逻辑不变
## 5. 验证
- [x] 5.1 为偏好服务补充模型作用域相关测试
- [ ] 5.2 手动验证图片、视频、音频在模型切换后均能回填用户偏好
- [ ] 5.3 验证同名模型来自不同供应商时参数不会串用