@delta-infra/cli 1.1.17 → 1.1.18

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.
Files changed (33) hide show
  1. package/README.md +513 -506
  2. package/checksums.txt +5 -5
  3. package/package.json +1 -1
  4. package/scripts/install-wizard.js +701 -701
  5. package/scripts/install.js +442 -442
  6. package/scripts/run.js +65 -65
  7. package/skills/delta-sandbox/SKILL.md +388 -388
  8. package/skills/delta-sandbox/agents/openai.yaml +4 -4
  9. package/skills/delta-sandbox/references/commands.md +58 -58
  10. package/skills/delta-sandbox/references/lifecycle.md +100 -100
  11. package/skills/delta-sandbox/references/recipes.md +138 -138
  12. package/skills/delta-science/AGENTS.md +47 -47
  13. package/skills/delta-science/SKILL.md +227 -185
  14. package/skills/delta-science/agents/openai.yaml +4 -4
  15. package/skills/delta-science/references/antbo.md +105 -100
  16. package/skills/delta-science/references/delta-bo.md +92 -89
  17. package/skills/delta-science/references/gsasii.md +118 -116
  18. package/skills/delta-science/references/lammps.md +68 -66
  19. package/skills/delta-science/references/ldm-bo.md +132 -129
  20. package/skills/delta-science/references/materials-design.md +130 -118
  21. package/skills/delta-science/references/pubchem.md +128 -126
  22. package/skills/delta-science/references/pymatgen.md +69 -68
  23. package/skills/delta-science/references/qe.md +134 -125
  24. package/skills/delta-science/references/rdkit.md +141 -138
  25. package/skills/delta-science/references/strbo.md +95 -87
  26. package/skills/delta-science/references/synbo.md +201 -198
  27. package/skills/delta-science/references/xrd.md +197 -186
  28. package/skills/delta-science/scripts/catalog.py +92 -92
  29. package/skills/delta-science/scripts/generated_catalog.py +69 -69
  30. package/skills/delta-science/scripts/invoke.py +346 -346
  31. package/skills/delta-shared/SKILL.md +113 -111
  32. package/skills/delta-shared/agents/openai.yaml +4 -4
  33. package/skills/manifest.json +19 -19
@@ -1,198 +1,201 @@
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 reference
2
+
3
+ Make all online calls with `delta-cli science invoke`; the service address comes from the CLI's
4
+ standard `base_url` configuration (`{base_url}/science_tool`). The paths here describe business
5
+ operations only and do not authorise direct HTTP access.
6
+
7
+ Use this section when the user asks to optimise reaction conditions, recommend the next batch of
8
+ experiments, continue a coupling reaction, or provides solvents, temperatures, catalysts, bases,
9
+ ligands and historical yields—even if they do not mention SynBO, BO, the CLI or field names. Make
10
+ at most one SynBO business call per user task. Stop immediately after success; for validation
11
+ errors, 502, 504, timeouts, disconnections or empty recommendations, do not change parameters or
12
+ models, or retry.
13
+
14
+ ## Health
15
+
16
+ Operation: `health`; no request body.
17
+
18
+ Reports SynBO import status, Torch/CUDA runtime availability, service limits,
19
+ default device and visible CUDA devices.
20
+
21
+ Important fields inside gateway `data`:
22
+
23
+ ```json
24
+ {
25
+ "status": "ok",
26
+ "synbo_available": true,
27
+ "metadata": {
28
+ "service": "synbo-service",
29
+ "engine": "synbo",
30
+ "version": "0.1.0",
31
+ "synbo_version": "0.1.0",
32
+ "default_device": "cpu",
33
+ "cuda_visible_devices": ""
34
+ },
35
+ "limits": {
36
+ "max_batch_size": 128,
37
+ "max_reaction_space_size": 200000,
38
+ "max_previous_rows": 10000
39
+ },
40
+ "runtime": {
41
+ "torch_available": true,
42
+ "cuda_available": false,
43
+ "cuda_device_count": 0,
44
+ "cuda_device_names": []
45
+ },
46
+ "warnings": []
47
+ }
48
+ ```
49
+
50
+ ## Initialize
51
+
52
+ Operation: `initialize`.
53
+
54
+ Use for initial condition sampling when no measured previous results exist.
55
+
56
+ Request body:
57
+
58
+ ```json
59
+ {
60
+ "condition_dict": {
61
+ "catalyst": ["Pd(OAc)2", "Pd(PPh3)4", "Pd2(dba)3"],
62
+ "solvent": ["THF", "Dioxane", "Toluene"],
63
+ "base": ["K2CO3", "NaOEt", "DBU"]
64
+ },
65
+ "opt_metrics": ["yield"],
66
+ "opt_metric_settings": [
67
+ {"opt_direct": "max", "opt_range": [0, 100], "metric_weight": 1.0}
68
+ ],
69
+ "batch_size": 3,
70
+ "sampling_method": "random",
71
+ "desc_normalize": "minmax",
72
+ "random_seed": 42
73
+ }
74
+ ```
75
+
76
+ Supported `sampling_method` values: `sobol`, `random`, `lhs`, `kmeans`.
77
+
78
+ ## Optimize
79
+
80
+ Operation: `optimize`.
81
+
82
+ Use after measured experiment rows are available. Each previous row must contain
83
+ all condition columns and all objective metric columns.
84
+
85
+ Request body:
86
+
87
+ ```json
88
+ {
89
+ "condition_dict": {
90
+ "catalyst": ["Pd(OAc)2", "Pd(PPh3)4", "Pd2(dba)3"],
91
+ "solvent": ["THF", "Dioxane", "Toluene"],
92
+ "base": ["K2CO3", "NaOEt", "DBU"]
93
+ },
94
+ "opt_metrics": ["yield"],
95
+ "previous_results": [
96
+ {"batch": 0, "catalyst": "Pd(OAc)2", "solvent": "THF", "base": "K2CO3", "yield": 42.0},
97
+ {"batch": 0, "catalyst": "Pd(PPh3)4", "solvent": "Dioxane", "base": "NaOEt", "yield": 55.0},
98
+ {"batch": 0, "catalyst": "Pd2(dba)3", "solvent": "Toluene", "base": "DBU", "yield": 63.0}
99
+ ],
100
+ "batch_size": 2,
101
+ "accuracy": "tiny",
102
+ "surrogate_model": "RF",
103
+ "acq_func": "UCB",
104
+ "device": "cpu",
105
+ "random_seed": 42
106
+ }
107
+ ```
108
+
109
+ ### Discretise numeric conditions first
110
+
111
+ SynBO's `condition_dict` accepts explicit lists only; it does not accept continuous range
112
+ objects. For a task with a temperature range of 40–100°C and catalyst loading of 0.5–2.0%, with
113
+ historical values at 60/70/80/90°C and 0.5/1.0/1.5/2.0%, use:
114
+
115
+ ```json
116
+ {
117
+ "condition_dict": {
118
+ "solvent": ["ethanol", "acetonitrile", "DMSO"],
119
+ "temperature_C": ["40", "60", "70", "80", "90", "100"],
120
+ "catalyst_loading_pct": ["0.5", "1.0", "1.5", "2.0"]
121
+ },
122
+ "opt_metrics": ["yield"],
123
+ "previous_results": [
124
+ {
125
+ "batch": 0,
126
+ "solvent": "ethanol",
127
+ "temperature_C": "60",
128
+ "catalyst_loading_pct": "1.0",
129
+ "yield": 55.0
130
+ }
131
+ ],
132
+ "batch_size": 3,
133
+ "accuracy": "tiny",
134
+ "surrogate_model": "RF",
135
+ "acq_func": "UCB",
136
+ "device": "cpu",
137
+ "random_seed": 42
138
+ }
139
+ ```
140
+
141
+ Constraints:
142
+
143
+ - Represent every condition value as a string and keep objective metrics numeric.
144
+ - Every condition value in each `previous_results` row must appear in the corresponding `condition_dict` list.
145
+ - The discretised grid for a continuous range must include the user's lower and upper bounds and all historical observations. State the actual grid in the final answer.
146
+ - Serialise condition values explicitly as strings, and ensure each historical row uses only values listed in `condition_dict`. For a small-data CPU configuration, pass `accuracy:"tiny"`, `surrogate_model:"RF"`, `acq_func:"UCB"` and `device:"cpu"` explicitly; do not assume the client supplies defaults.
147
+
148
+ Useful optional fields:
149
+
150
+ - `accuracy`: `tiny`, `low`, `medium`, `high`, or `ultra`.
151
+ - `acq_func`: `EHVI`, `UCB`, `ParEGO`, or `NEI`.
152
+ - `surrogate_model`: `GP`, `RF`, `BNN`, or `BayesianLinear`.
153
+ - `device`: `cpu`, `auto`, `cuda`, or `cuda:0`.
154
+ - `cuda_visible_devices`: request-level CUDA visibility hint. Use only when the
155
+ user explicitly asks for it and `/health` indicates a CUDA-capable runtime.
156
+ - `constraints`: map condition type to prohibited values.
157
+
158
+ ## Descriptors
159
+
160
+ If omitted, SynBO uses generated OneHot descriptors. To provide descriptors:
161
+
162
+ ```json
163
+ {
164
+ "descriptors": {
165
+ "solvent": [
166
+ {"name": "THF", "polarity": 0.207, "boiling_point_C": 66.0},
167
+ {"name": "Toluene", "polarity": 0.099, "boiling_point_C": 110.6}
168
+ ]
169
+ },
170
+ "descriptor_index_col": "name"
171
+ }
172
+ ```
173
+
174
+ `descriptors` must contain exactly the same keys as `condition_dict`. Descriptor
175
+ rows must include the configured index column and numeric descriptor columns.
176
+
177
+ ## Error Handling
178
+
179
+ Gateway errors have the standard envelope:
180
+
181
+ ```json
182
+ {
183
+ "code": 1,
184
+ "message": "SynBO service returned HTTP 400",
185
+ "data": {
186
+ "endpoint": "/synbo/optimize",
187
+ "synbo_response": {
188
+ "detail": "previous_results is missing metric columns: ['yield']"
189
+ }
190
+ }
191
+ }
192
+ ```
193
+
194
+ Common causes include an oversized condition space, duplicate condition values, historical
195
+ condition values absent from `condition_dict`, non-numeric descriptors, missing columns in
196
+ historical rows, non-numeric metrics, and a CUDA request when no GPU is available.
197
+
198
+ The server has a per-request timeout independent of the client. GP, EHVI, high accuracy or busy
199
+ shared resources may cause a timeout. Do not automatically change parameters and retry during an
200
+ ordinary user task. Report “no recommendations were produced”, preserve the error, and let the
201
+ user decide whether to start a separate, explicitly requested regression test.