Appearance
Feature: 模型能力描述
一句话目标
前端根据模型能力描述决定哪些上游数据可以注入下游生成请求,并在连线时给出兼容性提示。模型能力由后端模型列表接口提供,前端查询、缓存并消费。
行为约束
约束 1:模型能力数据结构
前置条件: 后端模型列表接口返回模型信息 行为: 每个模型包含 acceptedInputs 字段,描述该模型接受的输入类型及数量限制 后置条件: 前端可通过模型 key 查询其支持的输入类型
数据结构:
typescript
interface ModelInputCapability {
type: 'text' | 'image' | 'video'
maxCount?: number // text 类型无需此字段
}acceptedInputs 为空数组或字段缺失 = 仅接受 prompt(纯文本输入,无额外媒体支持)。
约束 2:模型能力查询
前置条件: 前端需要知道某个模型支持哪些输入 行为: 通过 modelsStore 按模型 key 查询 acceptedInputs后置条件: 返回该模型的输入能力列表;模型不存在或未加载时返回空(视为仅支持 prompt)
约束 3:能力数据缓存(仅内存)
前置条件: 模型列表已从后端获取 行为: acceptedInputs 随模型列表一起缓存在 modelsStore 的运行时状态中,不写入 localStorage,刷新页面后重新请求 后置条件: 同一会话内后续查询不触发额外网络请求;新会话需重新加载
约束 4:数据流注入时的能力过滤
前置条件: 下游节点触发生成,已收集上游输出 行为: 查询下游节点当前模型的 acceptedInputs,仅注入模型支持的输入类型;超出 maxCount 的按连线顺序截断 后置条件: 生成请求只包含模型支持的输入参数
约束 5:连线兼容性数据供给
前置条件: 用户创建连线或切换下游模型 行为: 提供上游输出类型与下游模型 acceptedInputs 的匹配结果 后置条件: edge-system 可据此渲染兼容/不兼容状态
连线的视觉渲染和交互行为属于 edge-system AC-11/AC-12,本模块只提供数据。
约束 6:后端未返回能力字段时的降级
前置条件: 后端模型列表未包含 acceptedInputs 字段(过渡期) 行为: 视为该模型仅支持 text 输入(保守降级) 后置条件: 不阻塞生成流程,连线不显示兼容性提示
Acceptance Criteria
- [ ] AC-01:模型列表接口返回的每个模型包含
acceptedInputs字段 - [ ] AC-02:
acceptedInputs包含type(text/image/video)和可选maxCount - [ ] AC-03:通过模型 key 查询其支持的输入类型列表
- [ ] AC-04:模型能力缓存在 modelsStore 运行时状态中,不持久化到 localStorage
- [ ] AC-05:刷新页面后模型能力数据重新从后端加载
- [ ] AC-06:数据流注入时,仅注入下游模型
acceptedInputs中包含的输入类型 - [ ] AC-07:上游同类型输入数量超过
maxCount时,按连线顺序截断 - [ ] AC-08:为连线兼容性判断提供上游输出类型与下游模型能力的匹配结果
- [ ] AC-09:后端未返回
acceptedInputs时,降级为仅支持 text 输入
BDD Scenarios
gherkin
Feature: 模型能力描述
# AC-01, AC-02, AC-03
Scenario: 查询多模态模型的输入能力
Given 模型列表已加载
And 模型 "gemini-flash" 的 acceptedInputs 为 [text, image(maxCount:5)]
When 查询 "gemini-flash" 的输入能力
Then 返回支持 text 和 image,image 最多 5 张
# AC-06
Scenario: 注入时按模型能力过滤不支持的输入类型
Given 图片节点 A 已生成图片
And A 连线到文本节点 B
And B 的模型仅支持 text 输入(不支持 image)
When 用户在 B 中点击生成
Then B 的生成请求不包含 images 参数
# AC-07
Scenario: 超出 maxCount 时按连线顺序截断
Given 图片节点 A、C、D、E 各生成了一张图片
And 四个节点按 A→C→D→E 顺序连线到图片节点 B
And B 的模型 image maxCount 为 3
When 用户在 B 中点击生成
Then B 的 images 参数包含 A、C、D 的图片(前 3 张)
# AC-08
Scenario: 连线兼容性数据供给
Given 视频节点 A 已生成视频
And A 连线到图片节点 B
And B 的模型不支持 video 输入
When 系统评估该连线兼容性
Then 返回不兼容状态
# AC-09
Scenario: 后端未返回能力字段时降级
Given 模型 "legacy-model" 的 acceptedInputs 字段缺失
And 图片节点 A 连线到使用 "legacy-model" 的文本节点 B
When 用户在 B 中点击生成
Then 仅注入上游文本到 prompt,图片不注入
# AC-04, AC-05
Scenario: 刷新页面后重新加载模型能力
Given 模型列表已加载并缓存
When 用户刷新页面
Then 模型能力数据被清空
And 重新从后端请求模型列表TDD 单元测试要点
模型能力查询(modelsStore 扩展):
- [ ] 模型存在且有 acceptedInputs 时,返回完整能力列表
- [ ] 模型存在但 acceptedInputs 缺失时,降级返回
[{ type: 'text' }] - [ ] 模型不存在时,返回空(仅支持 prompt)
能力过滤函数(新增纯函数):
- [ ] 模型支持 image 时保留 imageUrls,不支持时过滤掉
- [ ] 模型支持 video 时保留 videoUrls,不支持时过滤掉
- [ ] 超出 maxCount 时截断,保留前 N 个
- [ ] 无 maxCount 时不截断
- [ ] 文本类不受 maxCount 限制
兼容性匹配函数(新增纯函数):
- [ ] 上游输出类型在 acceptedInputs 中 → 兼容
- [ ] 上游输出类型不在 acceptedInputs 中 → 不兼容
- [ ] acceptedInputs 缺失时 → 仅 text 兼容
Out of Scope
- 模型能力的管理后台(增删改模型能力字段)— 属于后端
- 模型能力变更的实时推送(WebSocket)— 当前按页面会话缓存即可
- 连线的视觉渲染(警告态样式、动画)— 属于 edge-system AC-11/AC-12
- 输入数量超限时的用户提示 UI — 属于节点 UI 层
- 模型能力的版本管理或 A/B 测试