Some checks failed
Test / test (push) Failing after 46m18s
- 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.
78 lines
4.7 KiB
Markdown
78 lines
4.7 KiB
Markdown
## 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 链决定个别包归属,但不得改变上述能力边界。
|