Files
AnyImage/openspec/changes/split-capability-environments/design.md
nan 2b3c0194a6
Some checks failed
Test / test (push) Failing after 46m18s
Add comprehensive tests for ONNX models and server jobs
- Introduced tests for the Moge3 ONNX model, including input validation, inference, and caching mechanisms.
- Added tests for ONNX runtime configurations and session management.
- Implemented tests for image upscaling functionality using ONNX models, ensuring proper handling of alpha channels and memory management.
- Created tests for panorama generation, verifying depth and visibility metrics.
- Developed tests for prediction artifacts, ensuring correct depth and normal data handling.
- Added server job tests for background removal and depth plane geometry generation, validating input handling and output correctness.
- Included environment tests to ensure proper dependency management and CI configurations.
2026-09-19 19:24:07 +08:00

78 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Context
项目当前只有一个默认 `dev` 依赖组。`uv run pytest` 因此会同步 Blender、AI 推理、模型导出和文档构建的全部工具,即使 CI 只需要运行不涉及真实模型的测试。测试也没有稳定的能力分类,工作流只能运行整个集合。
依赖和测试存在两条不同边界:产品中的 AI 调度、界面和协议可以通过 mock 在常规环境验证;真实模型实现、ONNX Runtime 行为及模型资产生产需要额外的大型依赖。分类应以执行所需能力为准,而不是看到 AI 业务名称就全部排除。
## Goals / Non-Goals
**Goals:**
- 依赖组名称表达可用能力,而不是单一测试用途。
- CI 只同步核心与 Blender 能力所需依赖。
- AI 模型执行测试由开发者在本地显式运行。
- 模型资产生产和文档构建拥有独立环境。
- 测试选择规则可见、可校验,新测试不易被意外遗漏。
**Non-Goals:**
- 不改变扩展安装后的 AI 运行环境及依赖版本。
- 不移除依赖 Blender 的 CI 覆盖。
- 不下载真实模型权重作为测试前置条件。
- 不修改产品功能、模型格式或打包产物。
## Decisions
### 使用能力名称划分依赖组
依赖组采用以下职责:
- `dev`:uv 默认加载的通用开发环境,包括 pytest 和通用图像测试依赖。
- `blender`:Blender API、节点和几何验证所需的增量依赖。
- `ai`:本地 AI 推理实现验证所需的增量依赖。
- `models`:下载、转换和导出模型资产所需工具;它独立于日常 AI 推理验证。
- `docs`:文档构建和发布工具。
选择能力名称可以让同一组依赖同时服务业务开发、调试和测试。备选方案 `test-core`、`test-ai` 会错误地把依赖限定为测试用途;继续把所有工具放在 `dev` 则无法减少 CI 下载。
### 以目录表达测试执行边界
将要求 AI 专用运行时的测试放入 `tests/ai`。CI 直接运行 `tests/anyimage` 和 `tests/tools`;本地 AI 验证直接运行 `tests/ai`;全量验证运行 `tests`。
AI 界面、Operator 调度、参数序列化、模型目录和下载流程等使用 mock 且不加载模型运行时的测试不标记为 `ai`,继续在 CI 中执行。这样排除的是昂贵执行环境,而不是 AI 业务覆盖。
目录名称直接表达执行环境,不增加 marker 和筛选表达式。实现时必须验证未安装 `ai` 和 `models` 组时,常规测试目录能够完成收集,避免顶层导入泄漏可选依赖。
### CI 显式选择环境
测试与发布工作流使用 `--group blender`,由 uv 自动加载默认 `dev`,并直接执行常规测试目录。打包只需默认 `dev`。所有命令均使用 uv 的默认组语义,不额外传入 `--no-default-groups`。
`dev` 只保存所有开发流程都需要的轻量依赖;大型能力必须留在显式组中。发布工作流采用同一测试命令,保证发布门禁与普通 CI 一致。
### 模型资产生产与 AI 运行分离
`torch`、`onnx` 及模型导出脚本的其他依赖归入 `models`;`onnxruntime` 和 AI 服务本地验证所需依赖归入 `ai`。只有两种能力确实共享的包才重复约束同一版本。
模型 CLI 测试若只验证调度和失败处理且使用 mock,可留在默认 `dev` 环境;只有实际导入或执行模型制作组件的测试进入 AI/模型相关本地集合。
## Risks / Trade-offs
- [pytest 在筛选前导入测试模块,AI 顶层导入可能导致 CI 收集失败] → 将可选运行时导入保持在执行边界内,并用不安装 AI 组的干净环境验证收集与测试。
- [测试放错目录使昂贵测试进入 CI] → 让 `tests/ai` 只承载真实依赖 AI 专用运行时的测试,并在干净 CI 环境验证常规目录。
- [AI 业务回归失去 CI 保护] → mock 层协议与集成测试继续保留在常规业务目录。
- [能力组之间重复依赖或版本漂移] → 复用默认 `dev` 环境,并由单一 `uv.lock` 锁定版本。
- [本地全量测试命令变长] → 在项目常用命令和测试配置中形成唯一、明确的命令,不保留旧环境兼容层。
## Migration Plan
1. 建立能力依赖组并刷新锁文件。
2. 将 AI 模型执行测试移动到独立目录,确认不安装 AI 依赖时可收集常规测试目录。
3. 分别运行核心、Blender、AI 和全量验证。
4. 更新测试与发布工作流,确认 CI 的同步计划不包含 AI、模型和文档组。
若迁移失败,可在提交合并前恢复原 dependency group 与工作流;本变更不涉及用户数据或线上状态迁移。
## Open Questions
无。实现阶段根据实际 import 链决定个别包归属,但不得改变上述能力边界。