DiffSynth-Studio: PR 描述生成
读取接入信息,生成 PR 描述 Markdown 文件。
配置
从 diffsynth-integrator/config.yaml 读取配置。
路径确定:
- 所有路径基于
packages/{model-name}/结构 diffsynth_root:packages/{model-name}/DiffSynth-Studio/.sisyphus目录:packages/{model-name}/.sisyphus/
工作流程
0. 读取蓝图信息
📖 开始前:重读本步骤描述,确认流程与报告路径
每个 skill 执行的第一步,强制要求。 从蓝图报告中读取 Python 运行环境信息和本 skill 必要的信息。
# 从 CLAUDE.md 或 config.yaml 获取模型名称
MODEL_NAME="{model-name}"
BLUEPRINT_PATH="packages/${MODEL_NAME}/.sisyphus/integration-blueprints/${MODEL_NAME}-blueprint.md"
本 skill 必须从蓝图报告中读取的信息:
| 蓝图信息 | 用途 |
|---------|------|
| 基本信息表中的 Conda 环境名称 | PR 信息 |
| 接入类型 | PR 描述中的集成类型说明 |
| Pipeline 功能规划表 | 接入的功能列表 |
如果蓝图报告不存在,向用户说明原因并中止。
📝 完成后:更新渐进式报告 →
skill_work_report/pr-report.md
1. 初始化执行日志目录
📖 开始前:重读本步骤描述,确认流程与报告路径
读取蓝图信息后, 创建执行日志目录结构:
EXEC_LOG_DIR="packages/{model-name}/.sisyphus/execution-logs/$(date +%Y%m%d_%H%M%S)_pr"
mkdir -p ${EXEC_LOG_DIR}/{outputs,scripts,checkpoints}
📝 完成后:更新渐进式报告 →
skill_work_report/pr-report.md
2. 以实际代码为准,校验蓝图信息
📖 开始前:重读本步骤描述,确认流程与报告路径
蓝图是接入前的计划文档,实际代码在开发过程中可能已经变化。生成 PR 描述时必须以磁盘上的实际代码为准。
校验流程:
- Pipeline 文件:扫描
{diffsynth_root}/diffsynth/pipelines/下与本次模型相关的文件,逐行读取__call__签名和 Pipeline 类名,不要依赖蓝图中的功能规划表 - 模型组件:扫描
{diffsynth_root}/diffsynth/models/下与本次模型相关的文件,不要依赖蓝图中的组件清单 - 推理脚本:扫描
{diffsynth_root}/examples/下与本次模型相关的脚本,不要依赖蓝图中的推理规划 - model_configs.py:读取
{diffsynth_root}/diffsynth/configs/model_configs.py中新增的注册项 - 依赖变更:读取
{diffsynth_root}/pyproject.toml的实际内容
发现不一致时:蓝图中的功能名、组件名、Pipeline 类名等可能与实际代码不同,一律以实际代码为准,不修正代码去匹配蓝图。仅在报告中注明主要差异供用户参考。
📝 完成后:更新渐进式报告 →
skill_work_report/pr-report.md
3. 收集接入信息
📖 开始前:重读本步骤描述,确认流程与报告路径
以实际代码为准,收集生成 PR 描述所需的所有信息:
- 接入类型:从蓝图报告读取(new_series / version_upgrade)
- 功能列表:从实际 Pipeline 文件的类名和
__call__签名提取(见 Step 2 扫描结果) - 模型组件:从
{diffsynth_root}/diffsynth/models/下实际存在的文件提取 - Pipeline 文件:从
{diffsynth_root}/diffsynth/pipelines/下实际存在的文件提取 - 推理脚本:从
{diffsynth_root}/examples/下实际存在的脚本提取 - 依赖变更:从
{diffsynth_root}/pyproject.toml实际内容中提取 - 模型信息:从
model_configs.py实际注册项中提取
不要直接复制蓝图中的功能列表或组件清单到 PR 描述中。蓝图是计划,代码是事实。
📝 完成后:更新渐进式报告 →
skill_work_report/pr-report.md
4. 生成 PR 描述
📖 开始前:重读本步骤描述,确认流程与报告路径
完整 PR 描述模板见 references/pr-template.md。
根据收集到的信息,填充 PR 描述模板,输出到:
packages/{model-name}/.sisyphus/pr/description.md
语言要求:PR 描述必须全部使用英文。 包括标题、摘要、功能列表、组件说明、依赖列表、注意事项等所有内容。不要使用中文或其他非英文语言。DiffSynth-Studio 是面向全球开发者的开源项目,PR 描述使用英文才能让所有贡献者和使用者都能理解。
PR 描述应聚焦于新功能介绍,不包含接入过程的测试等细节:
- 接入的模型名称和功能列表(支持哪些 pipeline)
- 模型组件清单(组件名、文件名、参数量)
- 新增的依赖包
- 注意事项(硬件要求、已知限制等)
📝 完成后:更新渐进式报告 →
skill_work_report/pr-report.md
5. 最终验证
📖 开始前:重读本步骤描述,确认流程与报告路径
在 PR 描述生成完成后,执行最终验证:
# 检查三个报告文件是否存在
for f in \
"packages/{model-name}/.sisyphus/plans/pr-plan.md" \
"packages/{model-name}/.sisyphus/skill_work_report/pr-report.md" \
"packages/{model-name}/.sisyphus/user_report/pr-report.md"; do
if [ ! -f "$f" ]; then
echo "WARNING: 缺失报告文件: $f"
fi
done
# 检查 PR 描述文件是否存在
if [ ! -f "packages/{model-name}/.sisyphus/pr/description.md" ]; then
echo "WARNING: PR 描述文件缺失"
fi
如有缺失,立即补充。
📝 完成后:更新渐进式报告 →
skill_work_report/pr-report.md
输出
执行日志
所有执行过程保存到:
- 执行日志目录:
packages/{model-name}/.sisyphus/execution-logs/latest/ - 脚本目录:
scripts/- 保存的验证脚本 - 输出目录:
outputs/- 命令执行日志 - PR 目录:
packages/{model-name}/.sisyphus/pr/- PR 描述文件
PR 描述
输出到 packages/{model-name}/.sisyphus/pr/description.md,用户可自行复制使用。
Plan
在制定执行计划步骤,将详细执行计划输出到 packages/{model-name}/.sisyphus/plans/pr-plan.md。Plan 文件采用统一的步骤章节格式,每个步骤包含「目标、执行内容、产出物、注意事项」。模板如下:
# PR 执行 Plan
## 基本信息
| 字段 | 值 |
|------|-----|
| 模型名称 | {model-name} |
| Skill | diffsynth-pr |
| 执行时间 | {timestamp} |
| 接入类型 | {new_series / version_upgrade} |
## 执行步骤规划
以下按顺序列出所有执行步骤。每个步骤包含:目标、具体执行内容、产出物、注意事项。
### Step 0: 读取蓝图信息
**目标**:从蓝图报告中获取 PR 描述生成所需的上下文信息。
**执行内容**:
- 读取 `packages/{model-name}/.sisyphus/integration-blueprints/{model-name}-blueprint.md`
- 提取:Conda 环境名称、接入类型、Pipeline 功能规划表
- 如果蓝图报告不存在,向用户说明原因并中止
**产出物**:确认蓝图信息可用
---
### Step 1: 初始化执行日志目录
**目标**:创建执行日志目录结构。
**执行内容**:
- 创建 `packages/{model-name}/.sisyphus/execution-logs/{timestamp}_pr/` 目录及子目录
**产出物**:执行日志目录
---
### Step 2: 以实际代码为准,校验蓝图信息
**目标**:对比蓝图计划与实际代码,确保 PR 描述基于最新代码状态。
**执行内容**:
- 扫描 `{diffsynth_root}/diffsynth/pipelines/` 下与本次模型相关的文件,逐行读取 `__call__` 签名和 Pipeline 类名
- 扫描 `{diffsynth_root}/diffsynth/models/` 下与本次模型相关的文件
- 扫描 `{diffsynth_root}/examples/` 下与本次模型相关的推理脚本
- 读取 `model_configs.py` 中新增的注册项
- 读取 `pyproject.toml` 的实际内容
- 发现蓝图与实际代码不一致时,以实际代码为准
**产出物**:代码状态确认清单,主要差异记录
**注意事项**:
- 蓝图是计划,代码是事实。不要修正代码去匹配蓝图
- 仅在报告中注明主要差异供用户参考
---
### Step 3: 收集接入信息
**目标**:收集生成 PR 描述所需的所有信息。
**执行内容**:
- 从蓝图报告提取接入类型
- 从实际 Pipeline 文件提取功能列表、类名、参数签名
- 从 `diffsynth/models/` 和 `diffsynth/pipelines/` 提取实际存在的文件
- 从 `examples/` 提取实际存在的推理脚本
- 从 `pyproject.toml` 提取依赖变更
- 从 `model_configs.py` 提取模型信息
**产出物**:信息收集清单
---
### Step 4: 生成 PR 描述
**目标**:根据收集到的信息生成完整的 PR 描述。
**执行内容**:
- 参考 `references/pr-template.md` 模板
- 填入模型名称、接入的功能列表、模型组件清单、新增依赖、注意事项
- 功能列表、组件清单等信息必须以实际代码为准,不要直接复制蓝图
- **PR 描述必须全部使用英文**,不要混入中文
- 输出到 `packages/{model-name}/.sisyphus/pr/description.md`
**产出物**:
- `packages/{model-name}/.sisyphus/pr/description.md`
---
### Step 5: 最终验证
**目标**:确认所有报告文件和输出文件完整性。
**执行内容**:
- 检查三个报告文件是否存在:Plan 文件、skill_work_report、user_report
- 检查 PR 描述文件是否存在
- 如有缺失,立即补充
**产出物**:验证通过确认
---
## PR 规划
### PR 描述要点
- **PR 描述必须全部使用英文**,包括所有标题、描述、注释
- 模型名称和接入的功能列表(支持哪些 pipeline)
- 模型组件清单(组件名、参数量)
- 新增依赖包
- 注意事项(硬件要求、已知限制等)
- 聚焦新功能介绍,不包含接入过程的测试、验证等细节
渐进式步骤报告
每个步骤完成后立即追加记录。格式详见 step-report.md。
报告路径:packages/{model-name}/.sisyphus/skill_work_report/pr-report.md
步骤划分(与上方「工作流程」章节的 Step 0-5 一一对应):
| Step | 名称 | 对应 Workflow | |------|------|---------------| | 0 | 读取蓝图信息 | Step 0 | | 1 | 初始化执行日志目录 | Step 1 | | 2 | 以实际代码为准,校验蓝图信息 | Step 2 | | 3 | 收集接入信息 | Step 3 | | 4 | 生成 PR 描述 | Step 4 | | 5 | 最终验证 | Step 5 |
每完成一个步骤,执行:
cat >> packages/{model-name}/.sisyphus/skill_work_report/pr-report.md << EOF
### Step {N}: {步骤名称}
- **状态**: ✅ 完成 / ❌ 失败
- **完成时间**: \$(date -Iseconds)
- **做了什么**: {简要描述}
- **关键结果**: {1-2 句话说明结果}
- **输出文件**: \`{文件路径}\`
EOF
向用户报告
PR 描述生成完成后,向用户报告 必须写入文件:
cat > packages/{model-name}/.sisyphus/user_report/pr-report.md << 'OUTER_EOF'
## ✅ PR 描述生成完成
执行日志: `packages/{model-name}/.sisyphus/execution-logs/latest/`
### 📋 PR 描述
- 文件路径: `packages/{model-name}/.sisyphus/pr/description.md`
- 接入类型: {new_series / version_upgrade}
### ⚠️ 安全提醒
本 skill 仅生成 PR 描述 Markdown 文件,**不执行任何 git 操作**(不创建分支、不提交、不推送)。请用户自行处理代码版本管理并创建 PR,以确保安全。
请 Review PR 描述内容,确认无误后手动执行 git 操作。
### 📦 数据集上传提醒
PR 描述中使用的推理样例数据集(`data/diffsynth_example_dataset/{series}/{FeatureName}/`)**不会包含在代码 PR 中**,需要单独上传到 ModelScope 数据集仓库:
1. **确认数据集目录存在**:`data/diffsynth_example_dataset/{series}/{FeatureName}/`
2. **上传到 ModelScope**:`modelscope upload --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset`
3. **确认推理脚本中的数据集路径**与实际上传路径一致
> 数据集是独立的,不随代码 PR 一起提交。忘记上传数据集会导致推理脚本无法正常获取样例数据。
### 📦 代码推送提醒
本 integration 生成的 DiffSynth-Studio 代码位于 `packages/{model-name}/DiffSynth-Studio/` 目录下,这些代码**不会自动包含在 PR 中**,需要你先推送到自己 fork 的 DiffSynth-Studio 仓库的对应模型分支:
cd packages/{model-name}/DiffSynth-Studio
# 1. 先将 origin 重定向到你自己的 fork(如果尚未配置)
git remote set-url origin https://github.com/{your-username}/DiffSynth-Studio.git
# 2. 将本地 main 分支推送到 fork 的模型分支(如 ernie-image)
git push origin main:{model-branch}
# 3. (可选)添加官方仓库为 upstream,方便后续同步
git remote add upstream https://github.com/modelscope/DiffSynth-Studio.git
> `{model-branch}` 是当前接好的模型分支名(如 `ernie-image`)。本地代码保持在 main 分支,push 时映射到远程的模型分支即可。模型代码和 Pipeline 文件的引用链接依赖于你的 fork 仓库中该分支上是否存在对应文件。
OUTER_EOF
Scan to join WeChat group