@delta-infra/cli 1.0.96 → 1.0.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +471 -471
- package/checksums.txt +5 -5
- package/package.json +1 -1
- package/scripts/install-wizard.js +701 -701
- package/scripts/install.js +442 -442
- package/scripts/run.js +65 -65
- package/skills/delta-sandbox/SKILL.md +356 -345
- package/skills/delta-sandbox/agents/openai.yaml +4 -4
- package/skills/delta-sandbox/references/commands.md +56 -58
- package/skills/delta-sandbox/references/lifecycle.md +92 -98
- package/skills/delta-sandbox/references/recipes.md +133 -138
- package/skills/delta-science/AGENTS.md +49 -49
- package/skills/delta-science/SKILL.md +141 -129
- package/skills/delta-science/agents/openai.yaml +4 -4
- package/skills/delta-science/references/antbo.md +100 -100
- package/skills/delta-science/references/cli-contract.md +53 -53
- package/skills/delta-science/references/delta-bo.md +89 -89
- package/skills/delta-science/references/generated-catalog.md +48 -0
- package/skills/delta-science/references/gsasii.md +116 -116
- package/skills/delta-science/references/lammps.md +66 -66
- package/skills/delta-science/references/ldm-bo.md +129 -129
- package/skills/delta-science/references/ldm.md +73 -73
- package/skills/delta-science/references/materials-design.md +109 -0
- package/skills/delta-science/references/molecule-enrich.md +59 -0
- package/skills/delta-science/references/operation-contracts.md +137 -0
- package/skills/delta-science/references/pubchem.md +126 -126
- package/skills/delta-science/references/pymatgen.md +68 -68
- package/skills/delta-science/references/qe-dft.md +123 -0
- package/skills/delta-science/references/rdkit.md +138 -138
- package/skills/delta-science/references/routing-index.md +35 -26
- package/skills/delta-science/references/services.md +112 -0
- package/skills/delta-science/references/strbo.md +87 -87
- package/skills/delta-science/references/synbo.md +198 -198
- package/skills/delta-science/references/workflows.md +86 -49
- package/skills/delta-science/scripts/catalog.py +92 -0
- package/skills/delta-science/scripts/generated_catalog.py +69 -0
- package/skills/delta-science/scripts/invoke.py +346 -0
- package/skills/delta-shared/SKILL.md +95 -97
- package/skills/delta-shared/agents/openai.yaml +4 -4
- package/skills/manifest.json +19 -19
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
# STRBO 详细规则
|
|
2
|
-
|
|
3
|
-
STRBO 用于服务端固定 **KRAS G12D** 靶点的小分子生成式多目标优化。目标顺序固定为
|
|
4
|
-
`[vina, activity]`:vina 越低越好,activity 越高越好。`task` 只引导候选生成,
|
|
5
|
-
不会更换靶点;不得声称支持用户自定义受体。
|
|
6
|
-
|
|
7
|
-
所有调用均使用 `tool="strbo"`。生成、建议、评估和提交 job 都会消耗远端资源,只在
|
|
8
|
-
用户确实要求执行相应科研任务时调用;请求结果未知或超时时不得重试。
|
|
9
|
-
|
|
10
|
-
## 初始化
|
|
11
|
-
|
|
12
|
-
- 同步 operation:`molecules-init`
|
|
13
|
-
- 异步 operation:`molecules-init-job`
|
|
14
|
-
- 仅校验 operation:`molecules-init-validate`
|
|
15
|
-
|
|
16
|
-
```json
|
|
17
|
-
{
|
|
18
|
-
"task": "为 KRAS G12D 生成兼顾结合与活性的候选小分子",
|
|
19
|
-
"num_initial": 3,
|
|
20
|
-
"seed": 42
|
|
21
|
-
}
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
只需检查参数时使用 validate;正式执行不要先 validate 再提交,避免无必要调用。
|
|
25
|
-
成功结果应包含与 `num_initial` 数量一致的候选 SMILES。
|
|
26
|
-
|
|
27
|
-
## 建议下一批候选
|
|
28
|
-
|
|
29
|
-
- 同步 operation:`molecules-suggest`
|
|
30
|
-
- 异步 operation:`molecules-suggest-job`(重型任务优先)
|
|
31
|
-
- 仅校验 operation:`molecules-suggest-validate`
|
|
32
|
-
|
|
33
|
-
```json
|
|
34
|
-
{
|
|
35
|
-
"task": "继续改善 KRAS G12D 的结合与活性",
|
|
36
|
-
"history_xs": ["CCO", "CCN", "CCC"],
|
|
37
|
-
"history_ys": [
|
|
38
|
-
[-6.8, 0.31],
|
|
39
|
-
[-7.1, 0.42],
|
|
40
|
-
[-6.5, 0.28]
|
|
41
|
-
],
|
|
42
|
-
"num_suggestions": 2,
|
|
43
|
-
"seed": 42
|
|
44
|
-
}
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
`history_xs` 与 `history_ys` 必须等长;每个 `history_ys` 元素必须是两个有限数值,
|
|
48
|
-
顺序严格为 `[vina, activity]`。不得把预测值伪装成湿实验结果。
|
|
49
|
-
|
|
50
|
-
## 评估候选
|
|
51
|
-
|
|
52
|
-
- 同步 operation:`molecules-evaluate`
|
|
53
|
-
- 异步 operation:`molecules-evaluate-job`
|
|
54
|
-
- 仅校验 operation:`molecules-evaluate-validate`
|
|
55
|
-
|
|
56
|
-
```json
|
|
57
|
-
{
|
|
58
|
-
"designs": ["CCO", "CCN"]
|
|
59
|
-
}
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
成功结果中的 score 数量必须与 designs 一致,每行必须恰好有两个有限数值。任一 item
|
|
63
|
-
明确失败时,本轮整体按失败处理,不得只报告成功子集。
|
|
64
|
-
|
|
65
|
-
## 异步作业
|
|
66
|
-
|
|
67
|
-
提交异步 operation 后,从当前业务响应读取非空 `job_id`,再轮询:
|
|
68
|
-
|
|
69
|
-
```text
|
|
70
|
-
delta-cli science invoke --tool strbo --endpoint job-status --params JSON
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
只有状态变为 `succeeded` 后才读取:
|
|
74
|
-
|
|
75
|
-
```text
|
|
76
|
-
delta-cli science invoke --tool strbo --endpoint job-result --params JSON
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
`queued` 或 `running` 不是完成;`failed` 立即结束。状态查询可按 5 秒左右间隔重复,
|
|
80
|
-
但提交 operation 绝不重复。单次用户任务的总等待上限为 15 分钟;超限后报告作业仍
|
|
81
|
-
未完成并保留 job_id,不得声称远端已取消。
|
|
82
|
-
|
|
83
|
-
## 完整科研流程
|
|
84
|
-
|
|
85
|
-
用户明确要求完整迭代时按 `初始化 → 评估 → 建议 → 评估` 串行执行。每一步只使用本次
|
|
86
|
-
调用已验证的业务响应作为下一步输入。用户只要求生成初始候选或评估给定 SMILES 时,
|
|
87
|
-
不得擅自扩展为完整循环。
|
|
1
|
+
# STRBO 详细规则
|
|
2
|
+
|
|
3
|
+
STRBO 用于服务端固定 **KRAS G12D** 靶点的小分子生成式多目标优化。目标顺序固定为
|
|
4
|
+
`[vina, activity]`:vina 越低越好,activity 越高越好。`task` 只引导候选生成,
|
|
5
|
+
不会更换靶点;不得声称支持用户自定义受体。
|
|
6
|
+
|
|
7
|
+
所有调用均使用 `tool="strbo"`。生成、建议、评估和提交 job 都会消耗远端资源,只在
|
|
8
|
+
用户确实要求执行相应科研任务时调用;请求结果未知或超时时不得重试。
|
|
9
|
+
|
|
10
|
+
## 初始化
|
|
11
|
+
|
|
12
|
+
- 同步 operation:`molecules-init`
|
|
13
|
+
- 异步 operation:`molecules-init-job`
|
|
14
|
+
- 仅校验 operation:`molecules-init-validate`
|
|
15
|
+
|
|
16
|
+
```json
|
|
17
|
+
{
|
|
18
|
+
"task": "为 KRAS G12D 生成兼顾结合与活性的候选小分子",
|
|
19
|
+
"num_initial": 3,
|
|
20
|
+
"seed": 42
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
只需检查参数时使用 validate;正式执行不要先 validate 再提交,避免无必要调用。
|
|
25
|
+
成功结果应包含与 `num_initial` 数量一致的候选 SMILES。
|
|
26
|
+
|
|
27
|
+
## 建议下一批候选
|
|
28
|
+
|
|
29
|
+
- 同步 operation:`molecules-suggest`
|
|
30
|
+
- 异步 operation:`molecules-suggest-job`(重型任务优先)
|
|
31
|
+
- 仅校验 operation:`molecules-suggest-validate`
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"task": "继续改善 KRAS G12D 的结合与活性",
|
|
36
|
+
"history_xs": ["CCO", "CCN", "CCC"],
|
|
37
|
+
"history_ys": [
|
|
38
|
+
[-6.8, 0.31],
|
|
39
|
+
[-7.1, 0.42],
|
|
40
|
+
[-6.5, 0.28]
|
|
41
|
+
],
|
|
42
|
+
"num_suggestions": 2,
|
|
43
|
+
"seed": 42
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`history_xs` 与 `history_ys` 必须等长;每个 `history_ys` 元素必须是两个有限数值,
|
|
48
|
+
顺序严格为 `[vina, activity]`。不得把预测值伪装成湿实验结果。
|
|
49
|
+
|
|
50
|
+
## 评估候选
|
|
51
|
+
|
|
52
|
+
- 同步 operation:`molecules-evaluate`
|
|
53
|
+
- 异步 operation:`molecules-evaluate-job`
|
|
54
|
+
- 仅校验 operation:`molecules-evaluate-validate`
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"designs": ["CCO", "CCN"]
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
成功结果中的 score 数量必须与 designs 一致,每行必须恰好有两个有限数值。任一 item
|
|
63
|
+
明确失败时,本轮整体按失败处理,不得只报告成功子集。
|
|
64
|
+
|
|
65
|
+
## 异步作业
|
|
66
|
+
|
|
67
|
+
提交异步 operation 后,从当前业务响应读取非空 `job_id`,再轮询:
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
delta-cli science invoke --tool strbo --endpoint job-status --params JSON
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
只有状态变为 `succeeded` 后才读取:
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
delta-cli science invoke --tool strbo --endpoint job-result --params JSON
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
`queued` 或 `running` 不是完成;`failed` 立即结束。状态查询可按 5 秒左右间隔重复,
|
|
80
|
+
但提交 operation 绝不重复。单次用户任务的总等待上限为 15 分钟;超限后报告作业仍
|
|
81
|
+
未完成并保留 job_id,不得声称远端已取消。
|
|
82
|
+
|
|
83
|
+
## 完整科研流程
|
|
84
|
+
|
|
85
|
+
用户明确要求完整迭代时按 `初始化 → 评估 → 建议 → 评估` 串行执行。每一步只使用本次
|
|
86
|
+
调用已验证的业务响应作为下一步输入。用户只要求生成初始候选或评估给定 SMILES 时,
|
|
87
|
+
不得擅自扩展为完整循环。
|
|
@@ -1,198 +1,198 @@
|
|
|
1
|
-
# SynBO operation 参考
|
|
2
|
-
|
|
3
|
-
所有在线调用都通过 `delta-cli science invoke`,服务地址来自 CLI 的标准
|
|
4
|
-
`base_url` 派生配置(`{base_url}/science_tool`)。这里的路径只说明业务 operation,不得据此直连 HTTP。
|
|
5
|
-
|
|
6
|
-
用户说“优化反应条件”“推荐下一批实验”“偶联反应怎么继续做”,或给出溶剂、温度、
|
|
7
|
-
催化剂、碱、配体和历史得率时,即使没有提到 SynBO、BO、CLI 或字段名也使用本节。
|
|
8
|
-
每个用户任务最多一次 SynBO 业务调用;成功后立即结束,validation、502、504、
|
|
9
|
-
timeout、断连或空 recommendations 均不得换参数、换模型或重试。
|
|
10
|
-
|
|
11
|
-
## Health
|
|
12
|
-
|
|
13
|
-
operation:`health`,无 body。
|
|
14
|
-
|
|
15
|
-
Reports SynBO import status, Torch/CUDA runtime availability, service limits,
|
|
16
|
-
default device, and visible CUDA devices.
|
|
17
|
-
|
|
18
|
-
Important fields inside gateway `data`:
|
|
19
|
-
|
|
20
|
-
```json
|
|
21
|
-
{
|
|
22
|
-
"status": "ok",
|
|
23
|
-
"synbo_available": true,
|
|
24
|
-
"metadata": {
|
|
25
|
-
"service": "synbo-service",
|
|
26
|
-
"engine": "synbo",
|
|
27
|
-
"version": "0.1.0",
|
|
28
|
-
"synbo_version": "0.1.0",
|
|
29
|
-
"default_device": "cpu",
|
|
30
|
-
"cuda_visible_devices": ""
|
|
31
|
-
},
|
|
32
|
-
"limits": {
|
|
33
|
-
"max_batch_size": 128,
|
|
34
|
-
"max_reaction_space_size": 200000,
|
|
35
|
-
"max_previous_rows": 10000
|
|
36
|
-
},
|
|
37
|
-
"runtime": {
|
|
38
|
-
"torch_available": true,
|
|
39
|
-
"cuda_available": false,
|
|
40
|
-
"cuda_device_count": 0,
|
|
41
|
-
"cuda_device_names": []
|
|
42
|
-
},
|
|
43
|
-
"warnings": []
|
|
44
|
-
}
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Initialize
|
|
48
|
-
|
|
49
|
-
operation:`initialize`。
|
|
50
|
-
|
|
51
|
-
Use for initial condition sampling when no measured previous results exist.
|
|
52
|
-
|
|
53
|
-
Request body:
|
|
54
|
-
|
|
55
|
-
```json
|
|
56
|
-
{
|
|
57
|
-
"condition_dict": {
|
|
58
|
-
"catalyst": ["Pd(OAc)2", "Pd(PPh3)4", "Pd2(dba)3"],
|
|
59
|
-
"solvent": ["THF", "Dioxane", "Toluene"],
|
|
60
|
-
"base": ["K2CO3", "NaOEt", "DBU"]
|
|
61
|
-
},
|
|
62
|
-
"opt_metrics": ["yield"],
|
|
63
|
-
"opt_metric_settings": [
|
|
64
|
-
{"opt_direct": "max", "opt_range": [0, 100], "metric_weight": 1.0}
|
|
65
|
-
],
|
|
66
|
-
"batch_size": 3,
|
|
67
|
-
"sampling_method": "random",
|
|
68
|
-
"desc_normalize": "minmax",
|
|
69
|
-
"random_seed": 42
|
|
70
|
-
}
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
Supported `sampling_method` values: `sobol`, `random`, `lhs`, `kmeans`.
|
|
74
|
-
|
|
75
|
-
## Optimize
|
|
76
|
-
|
|
77
|
-
operation:`optimize`。
|
|
78
|
-
|
|
79
|
-
Use after measured experiment rows are available. Each previous row must contain
|
|
80
|
-
all condition columns and all objective metric columns.
|
|
81
|
-
|
|
82
|
-
Request body:
|
|
83
|
-
|
|
84
|
-
```json
|
|
85
|
-
{
|
|
86
|
-
"condition_dict": {
|
|
87
|
-
"catalyst": ["Pd(OAc)2", "Pd(PPh3)4", "Pd2(dba)3"],
|
|
88
|
-
"solvent": ["THF", "Dioxane", "Toluene"],
|
|
89
|
-
"base": ["K2CO3", "NaOEt", "DBU"]
|
|
90
|
-
},
|
|
91
|
-
"opt_metrics": ["yield"],
|
|
92
|
-
"previous_results": [
|
|
93
|
-
{"batch": 0, "catalyst": "Pd(OAc)2", "solvent": "THF", "base": "K2CO3", "yield": 42.0},
|
|
94
|
-
{"batch": 0, "catalyst": "Pd(PPh3)4", "solvent": "Dioxane", "base": "NaOEt", "yield": 55.0},
|
|
95
|
-
{"batch": 0, "catalyst": "Pd2(dba)3", "solvent": "Toluene", "base": "DBU", "yield": 63.0}
|
|
96
|
-
],
|
|
97
|
-
"batch_size": 2,
|
|
98
|
-
"accuracy": "tiny",
|
|
99
|
-
"surrogate_model": "RF",
|
|
100
|
-
"acq_func": "UCB",
|
|
101
|
-
"device": "cpu",
|
|
102
|
-
"random_seed": 42
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### 数值条件必须先离散化
|
|
107
|
-
|
|
108
|
-
SynBO 的 `condition_dict` 只接受显式列表,不接受连续范围对象。对于“温度
|
|
109
|
-
40–100°C、催化剂用量 0.5–2.0%”并已有 60/70/80/90°C 与
|
|
110
|
-
0.5/1.0/1.5/2.0% 历史值的任务,使用:
|
|
111
|
-
|
|
112
|
-
```json
|
|
113
|
-
{
|
|
114
|
-
"condition_dict": {
|
|
115
|
-
"solvent": ["ethanol", "acetonitrile", "DMSO"],
|
|
116
|
-
"temperature_C": ["40", "60", "70", "80", "90", "100"],
|
|
117
|
-
"catalyst_loading_pct": ["0.5", "1.0", "1.5", "2.0"]
|
|
118
|
-
},
|
|
119
|
-
"opt_metrics": ["yield"],
|
|
120
|
-
"previous_results": [
|
|
121
|
-
{
|
|
122
|
-
"batch": 0,
|
|
123
|
-
"solvent": "ethanol",
|
|
124
|
-
"temperature_C": "60",
|
|
125
|
-
"catalyst_loading_pct": "1.0",
|
|
126
|
-
"yield": 55.0
|
|
127
|
-
}
|
|
128
|
-
],
|
|
129
|
-
"batch_size": 3,
|
|
130
|
-
"accuracy": "tiny",
|
|
131
|
-
"surrogate_model": "RF",
|
|
132
|
-
"acq_func": "UCB",
|
|
133
|
-
"device": "cpu",
|
|
134
|
-
"random_seed": 42
|
|
135
|
-
}
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
约束:
|
|
139
|
-
|
|
140
|
-
- 每个条件值统一为字符串,objective metric 保持数值。
|
|
141
|
-
- 每条 `previous_results` 中的条件值必须出现在对应 `condition_dict` 列表中。
|
|
142
|
-
- 连续范围的离散网格必须包含用户上下界和全部历史观测值;最终答案必须说明实际网格。
|
|
143
|
-
- 将条件值显式序列化为字符串,并确保每条历史记录只使用 `condition_dict` 中列出的值。
|
|
144
|
-
如需小数据 CPU 设置,显式传递 `accuracy:"tiny"`、`surrogate_model:"RF"`、
|
|
145
|
-
`acq_func:"UCB"` 和 `device:"cpu"`;不得假定客户端会补充默认值。
|
|
146
|
-
|
|
147
|
-
Useful optional fields:
|
|
148
|
-
|
|
149
|
-
- `accuracy`: `tiny`, `low`, `medium`, `high`, or `ultra`.
|
|
150
|
-
- `acq_func`: `EHVI`, `UCB`, `ParEGO`, or `NEI`.
|
|
151
|
-
- `surrogate_model`: `GP`, `RF`, `BNN`, or `BayesianLinear`.
|
|
152
|
-
- `device`: `cpu`, `auto`, `cuda`, or `cuda:0`.
|
|
153
|
-
- `cuda_visible_devices`: request-level CUDA visibility hint. Use only when the
|
|
154
|
-
user explicitly asks for it and `/health` indicates a CUDA-capable runtime.
|
|
155
|
-
- `constraints`: map condition type to prohibited values.
|
|
156
|
-
|
|
157
|
-
## Descriptors
|
|
158
|
-
|
|
159
|
-
If omitted, SynBO uses generated OneHot descriptors. To provide descriptors:
|
|
160
|
-
|
|
161
|
-
```json
|
|
162
|
-
{
|
|
163
|
-
"descriptors": {
|
|
164
|
-
"solvent": [
|
|
165
|
-
{"name": "THF", "polarity": 0.207, "boiling_point_C": 66.0},
|
|
166
|
-
{"name": "Toluene", "polarity": 0.099, "boiling_point_C": 110.6}
|
|
167
|
-
]
|
|
168
|
-
},
|
|
169
|
-
"descriptor_index_col": "name"
|
|
170
|
-
}
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
`descriptors` must contain exactly the same keys as `condition_dict`. Descriptor
|
|
174
|
-
rows must include the configured index column and numeric descriptor columns.
|
|
175
|
-
|
|
176
|
-
## Error Handling
|
|
177
|
-
|
|
178
|
-
Gateway errors have the standard envelope:
|
|
179
|
-
|
|
180
|
-
```json
|
|
181
|
-
{
|
|
182
|
-
"code": 1,
|
|
183
|
-
"message": "SynBO service returned HTTP 400",
|
|
184
|
-
"data": {
|
|
185
|
-
"endpoint": "/synbo/optimize",
|
|
186
|
-
"synbo_response": {
|
|
187
|
-
"detail": "previous_results is missing metric columns: ['yield']"
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
常见原因包括条件空间过大、条件值重复、历史条件值不在 condition_dict 中、
|
|
194
|
-
descriptor 非数值、历史行缺列、metric 非数值,以及无 GPU 时请求 CUDA。
|
|
195
|
-
|
|
196
|
-
服务端有独立于客户端的单次请求时限。GP、EHVI、高 accuracy 或共享资源繁忙可能导致
|
|
197
|
-
timeout。普通用户任务中不得自动换参数重试;应报告“未产生推荐”,保留本次错误,
|
|
198
|
-
由用户决定是否另起一次明确的回归测试。
|
|
1
|
+
# SynBO operation 参考
|
|
2
|
+
|
|
3
|
+
所有在线调用都通过 `delta-cli science invoke`,服务地址来自 CLI 的标准
|
|
4
|
+
`base_url` 派生配置(`{base_url}/science_tool`)。这里的路径只说明业务 operation,不得据此直连 HTTP。
|
|
5
|
+
|
|
6
|
+
用户说“优化反应条件”“推荐下一批实验”“偶联反应怎么继续做”,或给出溶剂、温度、
|
|
7
|
+
催化剂、碱、配体和历史得率时,即使没有提到 SynBO、BO、CLI 或字段名也使用本节。
|
|
8
|
+
每个用户任务最多一次 SynBO 业务调用;成功后立即结束,validation、502、504、
|
|
9
|
+
timeout、断连或空 recommendations 均不得换参数、换模型或重试。
|
|
10
|
+
|
|
11
|
+
## Health
|
|
12
|
+
|
|
13
|
+
operation:`health`,无 body。
|
|
14
|
+
|
|
15
|
+
Reports SynBO import status, Torch/CUDA runtime availability, service limits,
|
|
16
|
+
default device, and visible CUDA devices.
|
|
17
|
+
|
|
18
|
+
Important fields inside gateway `data`:
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"status": "ok",
|
|
23
|
+
"synbo_available": true,
|
|
24
|
+
"metadata": {
|
|
25
|
+
"service": "synbo-service",
|
|
26
|
+
"engine": "synbo",
|
|
27
|
+
"version": "0.1.0",
|
|
28
|
+
"synbo_version": "0.1.0",
|
|
29
|
+
"default_device": "cpu",
|
|
30
|
+
"cuda_visible_devices": ""
|
|
31
|
+
},
|
|
32
|
+
"limits": {
|
|
33
|
+
"max_batch_size": 128,
|
|
34
|
+
"max_reaction_space_size": 200000,
|
|
35
|
+
"max_previous_rows": 10000
|
|
36
|
+
},
|
|
37
|
+
"runtime": {
|
|
38
|
+
"torch_available": true,
|
|
39
|
+
"cuda_available": false,
|
|
40
|
+
"cuda_device_count": 0,
|
|
41
|
+
"cuda_device_names": []
|
|
42
|
+
},
|
|
43
|
+
"warnings": []
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Initialize
|
|
48
|
+
|
|
49
|
+
operation:`initialize`。
|
|
50
|
+
|
|
51
|
+
Use for initial condition sampling when no measured previous results exist.
|
|
52
|
+
|
|
53
|
+
Request body:
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"condition_dict": {
|
|
58
|
+
"catalyst": ["Pd(OAc)2", "Pd(PPh3)4", "Pd2(dba)3"],
|
|
59
|
+
"solvent": ["THF", "Dioxane", "Toluene"],
|
|
60
|
+
"base": ["K2CO3", "NaOEt", "DBU"]
|
|
61
|
+
},
|
|
62
|
+
"opt_metrics": ["yield"],
|
|
63
|
+
"opt_metric_settings": [
|
|
64
|
+
{"opt_direct": "max", "opt_range": [0, 100], "metric_weight": 1.0}
|
|
65
|
+
],
|
|
66
|
+
"batch_size": 3,
|
|
67
|
+
"sampling_method": "random",
|
|
68
|
+
"desc_normalize": "minmax",
|
|
69
|
+
"random_seed": 42
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Supported `sampling_method` values: `sobol`, `random`, `lhs`, `kmeans`.
|
|
74
|
+
|
|
75
|
+
## Optimize
|
|
76
|
+
|
|
77
|
+
operation:`optimize`。
|
|
78
|
+
|
|
79
|
+
Use after measured experiment rows are available. Each previous row must contain
|
|
80
|
+
all condition columns and all objective metric columns.
|
|
81
|
+
|
|
82
|
+
Request body:
|
|
83
|
+
|
|
84
|
+
```json
|
|
85
|
+
{
|
|
86
|
+
"condition_dict": {
|
|
87
|
+
"catalyst": ["Pd(OAc)2", "Pd(PPh3)4", "Pd2(dba)3"],
|
|
88
|
+
"solvent": ["THF", "Dioxane", "Toluene"],
|
|
89
|
+
"base": ["K2CO3", "NaOEt", "DBU"]
|
|
90
|
+
},
|
|
91
|
+
"opt_metrics": ["yield"],
|
|
92
|
+
"previous_results": [
|
|
93
|
+
{"batch": 0, "catalyst": "Pd(OAc)2", "solvent": "THF", "base": "K2CO3", "yield": 42.0},
|
|
94
|
+
{"batch": 0, "catalyst": "Pd(PPh3)4", "solvent": "Dioxane", "base": "NaOEt", "yield": 55.0},
|
|
95
|
+
{"batch": 0, "catalyst": "Pd2(dba)3", "solvent": "Toluene", "base": "DBU", "yield": 63.0}
|
|
96
|
+
],
|
|
97
|
+
"batch_size": 2,
|
|
98
|
+
"accuracy": "tiny",
|
|
99
|
+
"surrogate_model": "RF",
|
|
100
|
+
"acq_func": "UCB",
|
|
101
|
+
"device": "cpu",
|
|
102
|
+
"random_seed": 42
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### 数值条件必须先离散化
|
|
107
|
+
|
|
108
|
+
SynBO 的 `condition_dict` 只接受显式列表,不接受连续范围对象。对于“温度
|
|
109
|
+
40–100°C、催化剂用量 0.5–2.0%”并已有 60/70/80/90°C 与
|
|
110
|
+
0.5/1.0/1.5/2.0% 历史值的任务,使用:
|
|
111
|
+
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"condition_dict": {
|
|
115
|
+
"solvent": ["ethanol", "acetonitrile", "DMSO"],
|
|
116
|
+
"temperature_C": ["40", "60", "70", "80", "90", "100"],
|
|
117
|
+
"catalyst_loading_pct": ["0.5", "1.0", "1.5", "2.0"]
|
|
118
|
+
},
|
|
119
|
+
"opt_metrics": ["yield"],
|
|
120
|
+
"previous_results": [
|
|
121
|
+
{
|
|
122
|
+
"batch": 0,
|
|
123
|
+
"solvent": "ethanol",
|
|
124
|
+
"temperature_C": "60",
|
|
125
|
+
"catalyst_loading_pct": "1.0",
|
|
126
|
+
"yield": 55.0
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
"batch_size": 3,
|
|
130
|
+
"accuracy": "tiny",
|
|
131
|
+
"surrogate_model": "RF",
|
|
132
|
+
"acq_func": "UCB",
|
|
133
|
+
"device": "cpu",
|
|
134
|
+
"random_seed": 42
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
约束:
|
|
139
|
+
|
|
140
|
+
- 每个条件值统一为字符串,objective metric 保持数值。
|
|
141
|
+
- 每条 `previous_results` 中的条件值必须出现在对应 `condition_dict` 列表中。
|
|
142
|
+
- 连续范围的离散网格必须包含用户上下界和全部历史观测值;最终答案必须说明实际网格。
|
|
143
|
+
- 将条件值显式序列化为字符串,并确保每条历史记录只使用 `condition_dict` 中列出的值。
|
|
144
|
+
如需小数据 CPU 设置,显式传递 `accuracy:"tiny"`、`surrogate_model:"RF"`、
|
|
145
|
+
`acq_func:"UCB"` 和 `device:"cpu"`;不得假定客户端会补充默认值。
|
|
146
|
+
|
|
147
|
+
Useful optional fields:
|
|
148
|
+
|
|
149
|
+
- `accuracy`: `tiny`, `low`, `medium`, `high`, or `ultra`.
|
|
150
|
+
- `acq_func`: `EHVI`, `UCB`, `ParEGO`, or `NEI`.
|
|
151
|
+
- `surrogate_model`: `GP`, `RF`, `BNN`, or `BayesianLinear`.
|
|
152
|
+
- `device`: `cpu`, `auto`, `cuda`, or `cuda:0`.
|
|
153
|
+
- `cuda_visible_devices`: request-level CUDA visibility hint. Use only when the
|
|
154
|
+
user explicitly asks for it and `/health` indicates a CUDA-capable runtime.
|
|
155
|
+
- `constraints`: map condition type to prohibited values.
|
|
156
|
+
|
|
157
|
+
## Descriptors
|
|
158
|
+
|
|
159
|
+
If omitted, SynBO uses generated OneHot descriptors. To provide descriptors:
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"descriptors": {
|
|
164
|
+
"solvent": [
|
|
165
|
+
{"name": "THF", "polarity": 0.207, "boiling_point_C": 66.0},
|
|
166
|
+
{"name": "Toluene", "polarity": 0.099, "boiling_point_C": 110.6}
|
|
167
|
+
]
|
|
168
|
+
},
|
|
169
|
+
"descriptor_index_col": "name"
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
`descriptors` must contain exactly the same keys as `condition_dict`. Descriptor
|
|
174
|
+
rows must include the configured index column and numeric descriptor columns.
|
|
175
|
+
|
|
176
|
+
## Error Handling
|
|
177
|
+
|
|
178
|
+
Gateway errors have the standard envelope:
|
|
179
|
+
|
|
180
|
+
```json
|
|
181
|
+
{
|
|
182
|
+
"code": 1,
|
|
183
|
+
"message": "SynBO service returned HTTP 400",
|
|
184
|
+
"data": {
|
|
185
|
+
"endpoint": "/synbo/optimize",
|
|
186
|
+
"synbo_response": {
|
|
187
|
+
"detail": "previous_results is missing metric columns: ['yield']"
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
常见原因包括条件空间过大、条件值重复、历史条件值不在 condition_dict 中、
|
|
194
|
+
descriptor 非数值、历史行缺列、metric 非数值,以及无 GPU 时请求 CUDA。
|
|
195
|
+
|
|
196
|
+
服务端有独立于客户端的单次请求时限。GP、EHVI、高 accuracy 或共享资源繁忙可能导致
|
|
197
|
+
timeout。普通用户任务中不得自动换参数重试;应报告“未产生推荐”,保留本次错误,
|
|
198
|
+
由用户决定是否另起一次明确的回归测试。
|