deepmodeling / deepmodeling/Uni-Lab-OS

best_practice 工作流在 v0.10.19 中更新已有 container 时崩溃

Open
#256 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
177
Forks
75
Avg merge
1h 40m
Merged PRs (30d)
5

Description

### 问题概述
这个问题不是自定义工作流,而是**官方文档 `best_practice`(最佳实践)中的示例工作流**本身无法跑通。

按照文档 `best_practice` 中的工作流操作时,如果 `host_node/create_resource` 的 `res_id` 指向一个**已存在的 `container`**,本地执行器会直接崩溃。

这会导致文档里的两步工作流无法跑通:
1. `creat_resource` 向已有 `container` 中加入水
2. `PumpTransferProtocol` 将液体传输到 `container1`

### 版本信息
- Uni-Lab-OS `v0.10.19`
- tag/main commit: `c001f6a1512affb48e9ae5c068e201bda3412679`

### 文档位置
`docs/user_guide/best_practice.md`
第 7.5 - 7.9 节当前给出的配置是:

- `creat_resource`
- `class_name: container`
- `device_id: workstation`
- `parent: workstation`
- `res_id: container`
- `liquid_type: water`
- `liquid_volume: 50`

- `PumpTransferProtocol`
- `from_vessel: water`
- `to_vessel: container1`

### 复现步骤
1. 启动 Uni-Lab,并完成 registry 上传。
2. 在 Web UI 中创建实验室,包含:
- `workstation`(其 `protocol_type` 包含 `PumpTransferProtocol`)
- `virtual_transfer_pump`
- `container`
- `container1`
3. 严格按照 `best_practice.md` 的说明创建工作流。
4. 运行 `creat_resource`,参数为:
- `res_id=container`
- `liquid_type=water`
- `liquid_volume=50`

### 期望行为
作为最佳实践文档中的示例工作流,这个流程应该可以直接跑通:
- 已有的 `container` 被更新为包含 `water`
- 然后工作流继续执行 `PumpTransferProtocol`

### 实际行为
本地 host executor 在线程中崩溃,还没有执行到 `PumpTransferProtocol`。

报错堆栈如下:
```text
File "unilabos/ros/nodes/base_device_node.py", line 433, in append_resource
logger.info(f"更新物料{container_instance.name}的数据{found_resource.state}")
AttributeError: 'RegularContainer' object has no attribute 'state'
```

### 怀疑的根因
这看起来像一次**不完整的重构 / 回归**。

在提交 `a79c0a8`(`fix container volume`)中,`RegularContainer.state` 似乎已经被移除:
- `unilabos/resources/container.py` 中不再定义 `self.state`
- `load_state()` 也改为调用 `super().load_state(state)`

但是 `append_resource` 仍然在使用旧接口:
```python
logger.info(f"更新物料{container_instance.name}的数据{found_resource.state}")
found_resource.state.update(container_instance.state)
```

因此,文档中“`create_resource` 更新已有 `container`”这条路径在 `v0.10.19` 上会直接崩溃。

### 额外说明
文档下一步里还有一个可能的文档 / 实现不一致:
- 文档写的是 `from_vessel: water`
- 当前 `PumpTransferProtocol` 的实现看起来更像是要求传入 vessel/resource id,而不是液体名

不过当前最直接的阻塞问题,还是上面的 `create_resource` 崩溃。

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.