Initial TrueGrowth source import
This commit is contained in:
@@ -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 类模型切换时,动作和参数能分别记住
|
||||
- 多供应商同名模型:验证参数不会串用
|
||||
- 编辑任务:验证任务参数优先于模型偏好
|
||||
@@ -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`
|
||||
@@ -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** 不得被本地模型偏好覆盖
|
||||
@@ -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 验证同名模型来自不同供应商时参数不会串用
|
||||
Reference in New Issue
Block a user