feat: Update CoreML device support and server controls

- Replace 'mps' with 'coreml' as the identifier for Apple CoreML Execution Provider across the codebase.
- Remove Apple chip generation checks and ensure CoreML is available on all macOS arm64 devices.
- Adjust ONNX Runtime session creation to use default CoreML configurations without forcing 'MLProgram'.
- Implement support for MoGe-2 to utilize CoreML with static input shape requirements.
- Enhance server panel to display restart and stop controls consistently across running states, including 'BUSY'.
- Update UI tests to verify new behavior for server controls and cached model display.
- Bump blendjob dependency version to 0.1.16 in packaging tests and configurations.
This commit is contained in:
2026-09-02 10:50:02 +08:00
parent 7f6e47432e
commit 5a011b3b57
24 changed files with 619 additions and 117 deletions

View File

@@ -0,0 +1,2 @@
schema: spec-driven
created: 2026-09-01

View File

@@ -0,0 +1,40 @@
## Context
`ServerPanel.draw()` 目前把 `READY` 与 `BUSY` 都显示为 Running,但只在 `READY` 分支创建重启和停止按钮。Cached 模型名称则通过逗号拼接到单个 Label,模型较多时会形成过长的一行。
BlendJob 当前以 `READY` 表示等待任务、以 `BUSY` 表示执行任务;二者都是 Server 已运行的子状态。此次调整只改变 Blender 面板布局,不改变状态协议或生命周期 Operator。
## Goals / Non-Goals
**Goals:**
- 统一 Running 判定,使所有运行中子状态共享重启和停止按钮。
- 保留各子状态原有的状态文本和图标。
- Cached 包含多个模型时,将模型名称逐项分行显示。
- 用 UI 测试锁定状态与布局行为。
**Non-Goals:**
- 不改变 Server 启动、重启、停止或任务取消语义。
- 不新增 Server 状态、API 或依赖。
- 不改变模型缓存的内容、顺序或清理行为。
## Decisions
### 统一复用 Running 判定
在读取 `server_status()` 后,以同一个 Running 判定驱动状态标签、生命周期按钮和 Cached 区域。当前 Running 状态集合为 `READY` 与 `BUSY`:`READY` 表示运行并等待,`BUSY` 表示运行并处理任务。
相比在 `READY` 与 `BUSY` 分支分别创建按钮,集中判定可避免后续运行中展示再次分叉。非 Running 状态继续沿用现有 Start 或状态提示分支。
### Cached 多项使用纵向列表
无缓存和单个缓存模型保留紧凑的一行展示;两个及以上缓存模型使用纵向布局,每个模型名称占一行,并保留同一区域的清理按钮。
相比在 Label 文本中插入换行,使用 Blender Layout 的独立 Label 能稳定参与面板布局,也便于测试每个模型项。
## Risks / Trade-offs
- [Busy 时停止或重启会中断当前任务] → 这是用户主动触发的既有生命周期行为;本变更只恢复入口,不改变 Operator 语义。
- [多个模型使面板变高] → 仅在确有多个缓存模型时展开,并以可读性优先。
- [状态分支与按钮分支再次偏离] → 使用同一个 Running 判定,并覆盖 `READY`、`BUSY` 与非 Running 状态测试。

View File

@@ -0,0 +1,27 @@
## Why
Server 处于 Busy 时仍然是 Running,但当前面板会隐藏重启和停止按钮,导致用户在任务执行期间无法直接管理 Server 生命周期。Running 的控制入口应保持一致,不应受 Busy、等待或其他运行中子状态影响。
## What Changes
- Server 只要处于 Running,就显示重启和停止按钮。
- Busy、等待及其他运行中子状态继续显示各自的状态信息,但不再隐藏生命周期控制按钮。
- Cached 列表包含多个模型时,每个模型换行显示,避免单行内容过长。
- 补充 UI 测试,覆盖运行中状态的按钮可见性与 Cached 列表布局。
## Capabilities
### New Capabilities
- `server-lifecycle-controls`: 规定 Server 在所有 Running 子状态下提供一致的重启与停止入口。
- `server-cache-display`: 规定 Server 面板中 Cached 模型列表的分行展示行为。
### Modified Capabilities
无。
## Impact
- `src/anyimage/panel.py` 中 Server 状态与控制按钮的展示逻辑。
- Blender Add-on UI 测试。
- 不改变 Server API、状态协议或依赖。

View File

@@ -0,0 +1,16 @@
## ADDED Requirements
### Requirement: Cached model list layout
Server 面板 SHALL 显示所有 Cached 模型名称,并 SHALL 在存在多个模型时让每个模型名称占据独立的视觉行。
#### Scenario: Multiple models are cached
- **WHEN** Server 为 Running 且 Cached 列表包含两个或更多模型
- **THEN** 面板逐行显示每个模型名称,并保留缓存清理按钮
#### Scenario: One model is cached
- **WHEN** Server 为 Running 且 Cached 列表只包含一个模型
- **THEN** 面板在一行内显示 `Cached` 与该模型名称,并保留缓存清理按钮
#### Scenario: No model is cached
- **WHEN** Server 为 Running 且 Cached 列表为空
- **THEN** 面板显示 `Cached: None`,并保留缓存清理按钮

View File

@@ -0,0 +1,16 @@
## ADDED Requirements
### Requirement: Running Server lifecycle controls
Server 面板 SHALL 在 Server 的每个 Running 子状态下显示重启和停止控制,并 SHALL 保留该子状态对应的状态文本与图标。
#### Scenario: Server is running and waiting
- **WHEN** Server 状态为 `READY`
- **THEN** 面板显示 Running 状态、重启按钮和停止按钮
#### Scenario: Server is running and busy
- **WHEN** Server 状态为 `BUSY`
- **THEN** 面板显示 Running (Busy) 状态、重启按钮和停止按钮
#### Scenario: Server is not running
- **WHEN** Server 状态不是 Running 子状态
- **THEN** 面板不显示 Running 状态的重启和停止按钮,并沿用该状态对应的现有控制或提示

View File

@@ -0,0 +1,10 @@
## 1. Server Panel 布局
- [x] 1.1 统一 `READY` 与 `BUSY` 的 Running 判定,让状态标签、重启按钮、停止按钮和 Cached 区域复用同一分支
- [x] 1.2 调整 Cached 模型布局:空列表和单模型保持单行,多个模型使用逐项纵向 Label,并保留清理按钮
## 2. UI 行为验证
- [x] 2.1 补充 Server Panel 测试,验证 `READY` 与 `BUSY` 都显示重启和停止按钮,非 Running 状态不显示这些按钮
- [x] 2.2 补充 Cached 列表测试,验证零个、一个和多个模型的文本、分行与清理按钮
- [x] 2.3 运行相关测试与完整测试套件,确认 Server Panel 和既有 Add-on 行为通过