Skip to content

[WebUI] 跨模型训练配置导入应校验类型:引导跳转或拒绝并说明原因 #43

@wochenlong

Description

@wochenlong

背景

#42 及用户反馈(524 配置复现)中确认:用户可能将 SDXL 等其它模型类型的训练配置(TOML / JSON / 专家模式 / 历史参数 / 预设)导入到 Anima 等不匹配的 WebUI 训练页面。

当前导入逻辑(findChangedDataBySchema)只做「字段是否在 schema 中存在」的过滤,不校验 model_train_type 与当前页面是否一致。大量共享字段(学习率、batch size、数据集等)能正常 merge,界面提示「导入成功」,但 hidden 的 model_train_type 可能被静默覆盖(例如 Anima 页默认 anima-lora 被改成 sdxl-lora),直到点击「开始训练」才在后端暴露问题。

期望行为

当用户将 A 模型训练页 的配置导入到 B 模型训练页 时:

1. 类型匹配 → 允许导入

  • 配置的 model_train_type(或可推断的训练类型)与当前页面一致时,正常导入。
  • 仅含共享通用字段、缺少 model_train_type 的旧配置,应能按当前页面类型补全并导入(向后兼容)。

2. 类型不匹配 → 引导跳转,而非静默成功

  • 检测到配置来自其它训练类型(如 sdxl-lora 导入 Anima 页)时,不应仅提示「导入成功」。
  • 应弹出明确引导,例如:
    • 「检测到这是 SDXL LoRA 配置,是否跳转到 SDXL 训练页?」
    • 提供「跳转并应用配置」/「取消导入」选项。

3. 配置有问题 → 拒绝导入并说明原因

以下情况应 拒绝导入(或拒绝应用),并给出 具体、可操作的错误信息,而非 generic「导入失败」:

场景 示例错误提示
训练类型与当前页不匹配且用户拒绝跳转 「配置为 sdxl-lora,当前页面为 Anima LoRA,请在 SDXL 训练页导入」
缺少当前页必填字段 「Anima 训练需要 qwen3 与 vae 路径,当前配置未包含」
含当前页不支持的专有字段且无对应页面 「配置含 flux 专用字段,请前往 Flux 训练页」
TOML/JSON 语法错误 指出解析失败位置(行号/字段名)
字段类型不合法 「max_train_epochs 应为数字,当前值为 "abc"」

向后兼容要求(必须保留)

本次及后续相关改动 必须继续支持旧版本导出的 TOML / JSON,包括但不限于:

  • config/autosave/ 下的历史 autosave JSON
  • 专家模式导出的 .toml 文件
  • 旧版 model_train_type 命名(如 sd3-lora 对应 Anima)
  • 缺少 model_train_type 但含 Anima 专用字段(qwen3vaenetworks.lora_anima 等)的配置 — 后端已有推断逻辑(resolve_model_train_type),前端导入时不应因此拒绝
  • 纯 SDXL / SD1.5 旧配置在对应页面导入仍应正常工作

不应因新增校验而破坏:用户在正确页面导入同类型旧配置的正常路径。

现状与已有兜底

层级 现状
前端导入 schema 字段过滤,无 train_type 交叉校验;Anima 的 model_train_type.hidden(),易被覆盖
后端提交 已有 resolve_model_train_type():Anima markers 存在时覆盖 stale sdxl-lora#42 相关修复)
Flux/Lumina model_train_type.disabled(),相对不易被误改

后端兜底应保留为最后一道保险,不能替代前端第一道门。

建议实现方案(供讨论)

P0 — 导入守门

  1. 导入 / 应用预设 / 读历史 / 读 autosave 时,解析 model_train_type 或从字段推断训练类型。
  2. 与当前页 trainType(frontmatter)比对:
    • 一致 → 导入;对 hidden/disabled 的 model_train_type 强制写入当前页默认值,忽略文件中的冲突值(同页旧配置兼容)。
    • 不一致 → 弹窗引导跳转对应训练页;用户拒绝则拒绝导入并说明原因。
  3. Anima schema:model_train_type 考虑从 .hidden() 改为 .disabled()(与 Flux 一致)。

P1 — 校验增强

  1. 专家模式保存/训练前做同样校验。
  2. 统一 frontmatter sd3-lora 与 schema anima-lora 命名,减少歧义。

验收标准

  • SDXL toml 导入 Anima 页:弹窗引导去 SDXL 页,或明确拒绝并说明原因;不再静默「导入成功」
  • 同类型旧 toml/json 在对应页导入:行为与现版一致,无回归
  • model_train_type 的 Anima 旧配置在 Anima 页:仍可导入并成功训练
  • sd3-lora 旧命名配置在 Anima 页:仍可识别并兼容
  • 语法/类型错误:拒绝导入并给出具体原因

关联

标签建议

enhancement frontend ux good first issue(若拆分前端子任务)

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions