@delta-infra/cli 1.0.80 → 1.0.81
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 +419 -419
- package/checksums.txt +5 -5
- package/package.json +1 -1
- package/scripts/install-wizard.js +625 -625
- package/scripts/install.js +417 -417
- package/scripts/run.js +65 -65
- package/skills/delta-sandbox/SKILL.md +356 -356
- package/skills/delta-sandbox/agents/openai.yaml +4 -4
- package/skills/delta-sandbox/references/commands.md +56 -56
- package/skills/delta-sandbox/references/lifecycle.md +92 -92
- package/skills/delta-sandbox/references/recipes.md +133 -133
- package/skills/delta-science/SKILL.md +75 -75
- package/skills/delta-science/agents/openai.yaml +4 -4
- package/skills/delta-science/references/antbo.md +45 -45
- package/skills/delta-science/references/cli-contract.md +59 -59
- package/skills/delta-science/references/delta-bo.md +87 -87
- 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 +123 -123
- package/skills/delta-science/references/pubchem.md +126 -126
- package/skills/delta-science/references/pymatgen.md +68 -68
- package/skills/delta-science/references/rdkit.md +138 -138
- package/skills/delta-science/references/synbo.md +197 -197
- package/skills/delta-science/references/workflows.md +45 -45
- package/skills/delta-science/scripts/invoke.py +302 -302
- package/skills/delta-shared/SKILL.md +95 -95
- package/skills/delta-shared/agents/openai.yaml +4 -4
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: delta-science
|
|
1
|
+
---
|
|
2
|
+
name: delta-science
|
|
3
3
|
description: "公司在线 Science 能力的统一入口,所有调用都经 Delta CLI。凡是查询具体化合物/CID/SMILES/分子性质、计算分子描述符或相似度、解析晶体/CIF/空间群、模拟或精修 XRD、执行 LAMMPS、根据实验数据做贝叶斯优化、反应条件优化,以及任何 LDM/大发现模型、KRAS G12D 小分子生成优化、固定候选池/PDF2Dock 轨迹或抗体 CDRH3 优化任务,都必须使用本 Skill;不得调用旧 large-discovery-model Skill、旧 gateway 脚本、网页搜索或本地科学库绕过 Delta CLI。普通查询、比较或校验默认直接返回文本,不要主动增加 JSON/CSV、报告、图片或图表步骤;只有用户明确要求保存、导出、绘图或生成文件时才创建产物。"
|
|
4
4
|
---
|
|
5
|
-
|
|
6
|
-
# Delta Science
|
|
7
|
-
|
|
8
|
-
把自然语言科研任务转换为最少数量、可验证的 Delta CLI Science 调用。只暴露本
|
|
9
|
-
Skill;工具选择、operation、参数、跨工具交接和结果校验都在本 Skill 内完成。
|
|
10
|
-
|
|
11
|
-
## 强制调用链
|
|
12
|
-
|
|
5
|
+
|
|
6
|
+
# Delta Science
|
|
7
|
+
|
|
8
|
+
把自然语言科研任务转换为最少数量、可验证的 Delta CLI Science 调用。只暴露本
|
|
9
|
+
Skill;工具选择、operation、参数、跨工具交接和结果校验都在本 Skill 内完成。
|
|
10
|
+
|
|
11
|
+
## 强制调用链
|
|
12
|
+
|
|
13
13
|
- 所有在线 Science 操作必须走
|
|
14
14
|
`宿主 shell/Python -> delta-science/scripts/invoke.py -> delta-cli science invoke -> Science Server`。
|
|
15
15
|
- 用宿主可用的 shell 或 Python 定位当前 Skill 的 `SKILL.md` 所在目录,再以该目录下的
|
|
@@ -24,48 +24,48 @@ Skill;工具选择、operation、参数、跨工具交接和结果校验都在
|
|
|
24
24
|
- `tools.name` 和 `tool_endpoints.name` 是唯一权威调用名称。传给 wrapper 的 tool 和
|
|
25
25
|
endpoint 必须与当前数据库目录完全一致;CLI 和 wrapper 都不做别名映射、前缀裁剪、
|
|
26
26
|
profile 判断或 `not_found` 后改名重试。reference 与目录不一致时终止并报告配置问题。
|
|
27
|
-
- 业务结果直接位于 `result["native"]`。禁止读取 `native.data` 或递归搜索结果。
|
|
28
|
-
- 只有子进程退出码为 0、`result["ok"] is True` 且
|
|
29
|
-
`result["transport"] == "delta-cli"` 时,才能报告业务成功。
|
|
30
|
-
|
|
27
|
+
- 业务结果直接位于 `result["native"]`。禁止读取 `native.data` 或递归搜索结果。
|
|
28
|
+
- 只有子进程退出码为 0、`result["ok"] is True` 且
|
|
29
|
+
`result["transport"] == "delta-cli"` 时,才能报告业务成功。
|
|
30
|
+
|
|
31
31
|
固定 Python 模板(将 `wrapper` 替换为已定位的绝对路径):
|
|
32
|
-
|
|
33
|
-
```python
|
|
32
|
+
|
|
33
|
+
```python
|
|
34
34
|
import json, subprocess, sys
|
|
35
35
|
|
|
36
36
|
wrapper = "/absolute/path/to/delta-science/scripts/invoke.py"
|
|
37
|
-
|
|
38
|
-
def invoke(tool, endpoint, data=None, params=None, timeout=150):
|
|
39
|
-
argv = [sys.executable, wrapper, "--tool", tool, "--endpoint", endpoint]
|
|
40
|
-
if data is not None:
|
|
41
|
-
argv += ["--data-json", json.dumps(data, ensure_ascii=False)]
|
|
42
|
-
if params is not None:
|
|
43
|
-
argv += ["--params-json", json.dumps(params, ensure_ascii=False)]
|
|
44
|
-
p = subprocess.run(
|
|
45
|
-
argv, capture_output=True, text=True, encoding="utf-8",
|
|
46
|
-
errors="replace", shell=False, timeout=timeout
|
|
47
|
-
)
|
|
48
|
-
if p.returncode != 0:
|
|
49
|
-
raise RuntimeError(p.stderr or p.stdout)
|
|
50
|
-
result = json.loads(p.stdout)
|
|
51
|
-
if result.get("ok") is not True or result.get("transport") != "delta-cli":
|
|
52
|
-
raise RuntimeError(result)
|
|
53
|
-
return result
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
只调用完成目标所需的 operation。跨工具任务在同一个 Skill 执行中按依赖顺序调用,
|
|
37
|
+
|
|
38
|
+
def invoke(tool, endpoint, data=None, params=None, timeout=150):
|
|
39
|
+
argv = [sys.executable, wrapper, "--tool", tool, "--endpoint", endpoint]
|
|
40
|
+
if data is not None:
|
|
41
|
+
argv += ["--data-json", json.dumps(data, ensure_ascii=False)]
|
|
42
|
+
if params is not None:
|
|
43
|
+
argv += ["--params-json", json.dumps(params, ensure_ascii=False)]
|
|
44
|
+
p = subprocess.run(
|
|
45
|
+
argv, capture_output=True, text=True, encoding="utf-8",
|
|
46
|
+
errors="replace", shell=False, timeout=timeout
|
|
47
|
+
)
|
|
48
|
+
if p.returncode != 0:
|
|
49
|
+
raise RuntimeError(p.stderr or p.stdout)
|
|
50
|
+
result = json.loads(p.stdout)
|
|
51
|
+
if result.get("ok") is not True or result.get("transport") != "delta-cli":
|
|
52
|
+
raise RuntimeError(result)
|
|
53
|
+
return result
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
只调用完成目标所需的 operation。跨工具任务在同一个 Skill 执行中按依赖顺序调用,
|
|
57
57
|
下游只能使用上一步已验证的 `native`。已知工具不要额外调用 health、schema、
|
|
58
58
|
catalog、render、descriptors 或文件操作,除非用户确实要求对应结果。
|
|
59
|
-
|
|
60
|
-
## 选择工具
|
|
61
|
-
|
|
62
|
-
| 科研目标 | tool | 详细规则 |
|
|
63
|
-
| --- | --- | --- |
|
|
64
|
-
| 化合物身份、CID、同义词、公共属性、名称转 SMILES | `pubchem` | [pubchem.md](references/pubchem.md) |
|
|
65
|
-
| SMILES/InChI、描述符、指纹、相似度、渲染、子结构 | `rdkit` | [rdkit.md](references/rdkit.md) |
|
|
66
|
-
| 无机化学式、CIF/POSCAR、晶体结构、空间群 | `pymatgen` | [pymatgen.md](references/pymatgen.md) |
|
|
67
|
-
| 粉末衍射模拟、Rietveld 精修 | `gsasii` | [gsasii.md](references/gsasii.md) |
|
|
68
|
-
| 分子动力学、最小化、thermo 与输出文件 | `lammps` | [lammps.md](references/lammps.md) |
|
|
59
|
+
|
|
60
|
+
## 选择工具
|
|
61
|
+
|
|
62
|
+
| 科研目标 | tool | 详细规则 |
|
|
63
|
+
| --- | --- | --- |
|
|
64
|
+
| 化合物身份、CID、同义词、公共属性、名称转 SMILES | `pubchem` | [pubchem.md](references/pubchem.md) |
|
|
65
|
+
| SMILES/InChI、描述符、指纹、相似度、渲染、子结构 | `rdkit` | [rdkit.md](references/rdkit.md) |
|
|
66
|
+
| 无机化学式、CIF/POSCAR、晶体结构、空间群 | `pymatgen` | [pymatgen.md](references/pymatgen.md) |
|
|
67
|
+
| 粉末衍射模拟、Rietveld 精修 | `gsasii` | [gsasii.md](references/gsasii.md) |
|
|
68
|
+
| 分子动力学、最小化、thermo 与输出文件 | `lammps` | [lammps.md](references/lammps.md) |
|
|
69
69
|
| 通用数值/整数/分类实验变量优化 | `delta-bo` | [delta-bo.md](references/delta-bo.md) |
|
|
70
70
|
| 固定候选池 next-SMILES、PDF2Dock、分子 BO 轨迹 | `ldm-bo` | [ldm-bo.md](references/ldm-bo.md) |
|
|
71
71
|
| KRAS G12D 小分子生成、vina/activity 多目标迭代 | `strbo` | [strbo.md](references/strbo.md) |
|
|
@@ -88,24 +88,24 @@ catalog、render、descriptors 或文件操作,除非用户确实要求对应
|
|
|
88
88
|
直接 HTTP 探测。实时 endpoint 元数据若没有足够的请求字段契约,应说明“目录已发现,
|
|
89
89
|
但服务端未提供可安全构造请求的 schema”,不得猜 body、模糊匹配或转换名称。新增工具
|
|
90
90
|
因此无需修改 CLI;只有需要自然语言自动选路或自动组装参数时,才补充对应 reference。
|
|
91
|
-
|
|
92
|
-
## 路由边界
|
|
93
|
-
|
|
94
|
-
- 普通分子名称先用 PubChem;只有需要结构计算时才把成功返回的 SMILES 交给 RDKit。
|
|
95
|
-
- 无机化学式、组成和式量优先 pymatgen,不用 PubChem 或本地元素表补算。
|
|
91
|
+
|
|
92
|
+
## 路由边界
|
|
93
|
+
|
|
94
|
+
- 普通分子名称先用 PubChem;只有需要结构计算时才把成功返回的 SMILES 交给 RDKit。
|
|
95
|
+
- 无机化学式、组成和式量优先 pymatgen,不用 PubChem 或本地元素表补算。
|
|
96
96
|
- 通用实验变量使用 Delta-BO;已有固定 SMILES 候选池或 PDF2Dock 轨迹使用 LDM-BO;
|
|
97
97
|
围绕服务端固定 KRAS G12D 生成并迭代小分子使用 STRBO;偶联反应、反应条件和历史
|
|
98
98
|
得率使用 SynBO;抗体/CDRH3 使用 AntBO,不得混用。
|
|
99
99
|
- 在线 LDM、STRBO、AntBO 和 LDM-BO 任务不得转交旧 `large-discovery-model` Skill,
|
|
100
100
|
不得运行其 gateway 脚本或内置服务地址。离线演示不属于公司 Science 结果;只有用户
|
|
101
101
|
明确要求“不调用公司资源”时才能说明该边界,但本 Skill 仍不得运行旧 Skill。
|
|
102
|
-
- GSAS-II 精修必须有真实粉末数据、仪器参数和 phase CIF。LAMMPS 必须有明确的
|
|
103
|
-
input/data/force-field;禁止编造实验数据、CIF、力场、历史观测或优化结果。
|
|
104
|
-
|
|
105
|
-
## 安全、重试与产物
|
|
106
|
-
|
|
107
|
-
- `run-default-job`、`run`、`stop` 等远程变更必须由用户明确授权。结果未知、超时或
|
|
108
|
-
断连时不得重试,因为远端操作可能已经发生。
|
|
102
|
+
- GSAS-II 精修必须有真实粉末数据、仪器参数和 phase CIF。LAMMPS 必须有明确的
|
|
103
|
+
input/data/force-field;禁止编造实验数据、CIF、力场、历史观测或优化结果。
|
|
104
|
+
|
|
105
|
+
## 安全、重试与产物
|
|
106
|
+
|
|
107
|
+
- `run-default-job`、`run`、`stop` 等远程变更必须由用户明确授权。结果未知、超时或
|
|
108
|
+
断连时不得重试,因为远端操作可能已经发生。
|
|
109
109
|
- 参数校验、502、504、timeout、空 recommendations 和后端失败均按本次失败结束。
|
|
110
110
|
SynBO 每个用户任务最多一次业务调用;不得换模型、换 acquisition 或改用本地算法。
|
|
111
111
|
- wrapper 第一次返回失败后立即向用户返回原始错误的短摘要(包含 `stage` 和
|
|
@@ -120,7 +120,7 @@ catalog、render、descriptors 或文件操作,除非用户确实要求对应
|
|
|
120
120
|
- 外层规划器自动附加的路径、JSON、图表或报告不等同于用户明确要求。若任务本质只是
|
|
121
121
|
查询、比较或校验,直接返回最小文本结果;不得为了满足附加产物而重复 Science 调用。
|
|
122
122
|
- 二进制产物只解码文档明确的字段;PNG 必须验证 magic bytes。
|
|
123
|
-
|
|
123
|
+
|
|
124
124
|
## 输出
|
|
125
125
|
|
|
126
126
|
将当前 `native` 投影为用户要求的最小结果;逐字保留字符串、数值、警告和来源。
|
|
@@ -132,19 +132,19 @@ catalog、render、descriptors 或文件操作,除非用户确实要求对应
|
|
|
132
132
|
|
|
133
133
|
成功时只返回由当前 native 生成的有界纯文本;失败时只返回包含 `stage`、`error_type` 的
|
|
134
134
|
原始错误短摘要。完成后不得重新计算、改写或用手工建议替代成功/失败的 Science 结果。
|
|
135
|
-
|
|
136
|
-
每次成功结果保留:
|
|
137
|
-
|
|
138
|
-
```text
|
|
139
|
-
证据边界:仅限当前 Delta CLI native 结果
|
|
140
|
-
调用链:delta-cli
|
|
141
|
-
禁止补充未返回内容:是
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
## 完成标准
|
|
145
|
-
|
|
146
|
-
- 每个在线操作都有 `transport="delta-cli"` 证据;
|
|
147
|
-
- 每个科学数值来自当前调用的 native;
|
|
148
|
-
- 下游输入来自当前任务中已验证的上游结果;
|
|
149
|
-
- 失败准确归类为配置、CLI、参数、Science Server、业务服务或超时;
|
|
150
|
-
- 没有直接 HTTP、本地科学库、跨会话文件或人工结果替代。
|
|
135
|
+
|
|
136
|
+
每次成功结果保留:
|
|
137
|
+
|
|
138
|
+
```text
|
|
139
|
+
证据边界:仅限当前 Delta CLI native 结果
|
|
140
|
+
调用链:delta-cli
|
|
141
|
+
禁止补充未返回内容:是
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## 完成标准
|
|
145
|
+
|
|
146
|
+
- 每个在线操作都有 `transport="delta-cli"` 证据;
|
|
147
|
+
- 每个科学数值来自当前调用的 native;
|
|
148
|
+
- 下游输入来自当前任务中已验证的上游结果;
|
|
149
|
+
- 失败准确归类为配置、CLI、参数、Science Server、业务服务或超时;
|
|
150
|
+
- 没有直接 HTTP、本地科学库、跨会话文件或人工结果替代。
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
interface:
|
|
2
|
-
display_name: "Delta Science"
|
|
3
|
-
short_description: "通过 Delta CLI 统一调用并编排全部 Science 工具"
|
|
4
|
-
default_prompt: "使用 $delta-science 分析科研目标,选择合适工具并通过 Delta CLI 完成任务。"
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Delta Science"
|
|
3
|
+
short_description: "通过 Delta CLI 统一调用并编排全部 Science 工具"
|
|
4
|
+
default_prompt: "使用 $delta-science 分析科研目标,选择合适工具并通过 Delta CLI 完成任务。"
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
# AntBO 详细规则
|
|
2
|
-
|
|
3
|
-
在 `SKILL.md` 的 wrapper 模板中设置 `endpoint`、`data`、`params`。业务结果直接位于
|
|
4
|
-
`r["native"]`。标为“变更”的 operation 只有用户明确授权时才能执行,且不得重试。
|
|
5
|
-
|
|
1
|
+
# AntBO 详细规则
|
|
2
|
+
|
|
3
|
+
在 `SKILL.md` 的 wrapper 模板中设置 `endpoint`、`data`、`params`。业务结果直接位于
|
|
4
|
+
`r["native"]`。标为“变更”的 operation 只有用户明确授权时才能执行,且不得重试。
|
|
5
|
+
|
|
6
6
|
抗体/CDRH3 场景即使出现 “LDM” 也不得改用小分子 LDM-BO 或 STRBO。当前 catalog
|
|
7
7
|
同时暴露 CDRH3 生成/建议/评估接口和传统 AntBO 作业管理接口。
|
|
8
|
-
|
|
9
|
-
## health(只读)
|
|
10
|
-
|
|
11
|
-
- 情景:检查远程 AntBO 环境是否可用。
|
|
12
|
-
- 代码:`endpoint="health"; data=None; params=None`
|
|
13
|
-
- 投影:status、antbo_available、metadata、limits、warnings。
|
|
14
|
-
|
|
15
|
-
## run-default-job(变更)
|
|
16
|
-
|
|
17
|
-
- 情景:用户明确要求启动标准后台续跑任务。
|
|
18
|
-
- 代码:`endpoint="run-default-job"; data=None; params={"log_name":"antbo_<唯一时间戳>.log","append":False,"timeout_seconds":86400}`
|
|
19
|
-
- 投影:started、pid、log_name/log_path、timeout_seconds;未知结果禁止重试。
|
|
20
|
-
|
|
21
|
-
只有同一次 native 同时包含 `started=true`、非空 `pid` 以及 `log_name` 或
|
|
22
|
-
`log_path` 时,才能声称作业已启动;字段缺失时标记为未验证,不得重复提交。
|
|
23
|
-
|
|
24
|
-
## run(重型变更)
|
|
25
|
-
|
|
26
|
-
- 情景:用户明确给出受限 AntBO 脚本、配置、抗原文件并要求同步执行。
|
|
27
|
-
- 代码:`endpoint="run"; data={"script_path":"./bo/main.py","config_path":"./bo/config.yaml","n_trials":1,"seed":42,"antigens_file":"<项目根内路径>","extra_args":[],"timeout_seconds":86400,"cuda_visible_devices":"0","conda_env":"DGM","log_name":"antbo_custom.log","append":False}; params=None`
|
|
28
|
-
- 投影:ok、returncode、timed_out、log_path、日志截断状态;不在最终答复展开完整日志。
|
|
29
|
-
|
|
30
|
-
## log(只读)
|
|
31
|
-
|
|
32
|
-
- 情景:用户提供已知 log_name 并要求查看尾部日志。
|
|
33
|
-
- 代码:`endpoint="log"; data=None; params={"log_name":"antbo_run.log"}`
|
|
34
|
-
- 投影:log_name、log、log_truncated;长日志只给有界尾部摘要。
|
|
35
|
-
|
|
36
|
-
## jobs(只读)
|
|
37
|
-
|
|
38
|
-
- 情景:查看当前 service 容器登记的活动作业。
|
|
39
|
-
- 代码:`endpoint="jobs"; data=None; params=None`
|
|
40
|
-
- 投影:jobs 中 pid、running、returncode、log_name、log_path。
|
|
41
|
-
|
|
42
|
-
## stop(变更)
|
|
43
|
-
|
|
44
|
-
- 情景:用户明确要求停止已确认 PID 的任务。
|
|
45
|
-
- 代码:`endpoint="stop"; data=None; params={"pid":12345}`
|
|
46
|
-
- 投影:stopped、pid、message;不得盲目重试或在多任务时无参数调用。
|
|
47
|
-
|
|
8
|
+
|
|
9
|
+
## health(只读)
|
|
10
|
+
|
|
11
|
+
- 情景:检查远程 AntBO 环境是否可用。
|
|
12
|
+
- 代码:`endpoint="health"; data=None; params=None`
|
|
13
|
+
- 投影:status、antbo_available、metadata、limits、warnings。
|
|
14
|
+
|
|
15
|
+
## run-default-job(变更)
|
|
16
|
+
|
|
17
|
+
- 情景:用户明确要求启动标准后台续跑任务。
|
|
18
|
+
- 代码:`endpoint="run-default-job"; data=None; params={"log_name":"antbo_<唯一时间戳>.log","append":False,"timeout_seconds":86400}`
|
|
19
|
+
- 投影:started、pid、log_name/log_path、timeout_seconds;未知结果禁止重试。
|
|
20
|
+
|
|
21
|
+
只有同一次 native 同时包含 `started=true`、非空 `pid` 以及 `log_name` 或
|
|
22
|
+
`log_path` 时,才能声称作业已启动;字段缺失时标记为未验证,不得重复提交。
|
|
23
|
+
|
|
24
|
+
## run(重型变更)
|
|
25
|
+
|
|
26
|
+
- 情景:用户明确给出受限 AntBO 脚本、配置、抗原文件并要求同步执行。
|
|
27
|
+
- 代码:`endpoint="run"; data={"script_path":"./bo/main.py","config_path":"./bo/config.yaml","n_trials":1,"seed":42,"antigens_file":"<项目根内路径>","extra_args":[],"timeout_seconds":86400,"cuda_visible_devices":"0","conda_env":"DGM","log_name":"antbo_custom.log","append":False}; params=None`
|
|
28
|
+
- 投影:ok、returncode、timed_out、log_path、日志截断状态;不在最终答复展开完整日志。
|
|
29
|
+
|
|
30
|
+
## log(只读)
|
|
31
|
+
|
|
32
|
+
- 情景:用户提供已知 log_name 并要求查看尾部日志。
|
|
33
|
+
- 代码:`endpoint="log"; data=None; params={"log_name":"antbo_run.log"}`
|
|
34
|
+
- 投影:log_name、log、log_truncated;长日志只给有界尾部摘要。
|
|
35
|
+
|
|
36
|
+
## jobs(只读)
|
|
37
|
+
|
|
38
|
+
- 情景:查看当前 service 容器登记的活动作业。
|
|
39
|
+
- 代码:`endpoint="jobs"; data=None; params=None`
|
|
40
|
+
- 投影:jobs 中 pid、running、returncode、log_name、log_path。
|
|
41
|
+
|
|
42
|
+
## stop(变更)
|
|
43
|
+
|
|
44
|
+
- 情景:用户明确要求停止已确认 PID 的任务。
|
|
45
|
+
- 代码:`endpoint="stop"; data=None; params={"pid":12345}`
|
|
46
|
+
- 投影:stopped、pid、message;不得盲目重试或在多任务时无参数调用。
|
|
47
|
+
|
|
48
48
|
## CDRH3 生成与优化
|
|
49
49
|
|
|
50
50
|
服务端支持的抗原由 health 的 `supported_antigens` 决定;不得猜测或把任意蛋白文件
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# Delta CLI 执行约定
|
|
2
|
-
|
|
3
|
-
## 只能通过内置 wrapper 调用
|
|
4
|
-
|
|
1
|
+
# Delta CLI 执行约定
|
|
2
|
+
|
|
3
|
+
## 只能通过内置 wrapper 调用
|
|
4
|
+
|
|
5
5
|
实时 Science 调用只能由宿主可用的 shell 或 Python 执行内置 wrapper。先定位当前
|
|
6
6
|
`SKILL.md` 所在目录,再执行该目录下 `scripts/invoke.py` 的绝对路径;不得直接执行
|
|
7
7
|
`delta-cli`,也不得改用直接 HTTP。Claude Code 可使用 `CLAUDE_SKILL_DIR` 定位当前
|
|
@@ -9,50 +9,50 @@ Skill;Codex 应以当前已加载 Skill 的目录为工作目录,或在已
|
|
|
9
9
|
精确的 `delta-science/scripts/invoke.py`。不得依赖宿主私有环境变量。
|
|
10
10
|
|
|
11
11
|
使用 Python 执行 wrapper。下面的 `wrapper` 必须是上述方法定位到的绝对路径:
|
|
12
|
-
|
|
13
|
-
```python
|
|
12
|
+
|
|
13
|
+
```python
|
|
14
14
|
import json, subprocess, sys
|
|
15
15
|
|
|
16
16
|
wrapper = "/absolute/path/to/delta-science/scripts/invoke.py"
|
|
17
|
-
payload = {"input": "CCO", "format": "smiles"}
|
|
18
|
-
completed = subprocess.run(
|
|
19
|
-
[sys.executable, wrapper, "--tool", "rdkit", "--endpoint", "parse",
|
|
20
|
-
"--data-json", json.dumps(payload, ensure_ascii=False)],
|
|
21
|
-
capture_output=True, text=True, encoding="utf-8", errors="replace",
|
|
22
|
-
timeout=150,
|
|
23
|
-
)
|
|
24
|
-
result = json.loads(completed.stdout)
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
不要把调用拼成 shell 命令字符串。禁止使用 `curl`、`httpx`、`requests`、`Invoke-RestMethod` 或业务服务 URL。
|
|
28
|
-
|
|
29
|
-
wrapper 内部构造以下 argv:
|
|
30
|
-
|
|
31
|
-
```text
|
|
32
|
-
delta-cli science invoke --tool TOOL --endpoint ENDPOINT --data JSON
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
只有明确记录为查询参数的 operation 才使用 `--params-json`。同一次调用不得同时发送 `--data-json` 和 `--params-json`。
|
|
36
|
-
|
|
37
|
-
## 可执行文件与配置解析顺序
|
|
38
|
-
|
|
39
|
-
wrapper 按以下顺序解析 `delta-cli`:
|
|
40
|
-
|
|
41
|
-
1. `--cli`
|
|
42
|
-
2. `DELTA_CLI_PATH`
|
|
43
|
-
3. `SKILL.md` 同级、未纳入版本控制的 `runtime.local.json`
|
|
44
|
-
4. `PATH` 中的 `delta-cli` 或 `delta-cli.exe`
|
|
45
|
-
5. npm 包相邻的 `bin/delta-cli[.exe]`
|
|
46
|
-
|
|
47
|
-
CLI 从 `~/.delta-infra/config.json` 读取 `science_base_url`。显式 `--science-base-url` 只用于测试覆盖,并通过 `DELTA_INFRA_SCIENCE_BASE_URL` 传给子进程。
|
|
48
|
-
|
|
49
|
-
## wrapper 返回结果
|
|
50
|
-
|
|
51
|
-
成功输出格式:
|
|
52
|
-
|
|
53
|
-
```json
|
|
54
|
-
{
|
|
55
|
-
"ok": true,
|
|
17
|
+
payload = {"input": "CCO", "format": "smiles"}
|
|
18
|
+
completed = subprocess.run(
|
|
19
|
+
[sys.executable, wrapper, "--tool", "rdkit", "--endpoint", "parse",
|
|
20
|
+
"--data-json", json.dumps(payload, ensure_ascii=False)],
|
|
21
|
+
capture_output=True, text=True, encoding="utf-8", errors="replace",
|
|
22
|
+
timeout=150,
|
|
23
|
+
)
|
|
24
|
+
result = json.loads(completed.stdout)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
不要把调用拼成 shell 命令字符串。禁止使用 `curl`、`httpx`、`requests`、`Invoke-RestMethod` 或业务服务 URL。
|
|
28
|
+
|
|
29
|
+
wrapper 内部构造以下 argv:
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
delta-cli science invoke --tool TOOL --endpoint ENDPOINT --data JSON
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
只有明确记录为查询参数的 operation 才使用 `--params-json`。同一次调用不得同时发送 `--data-json` 和 `--params-json`。
|
|
36
|
+
|
|
37
|
+
## 可执行文件与配置解析顺序
|
|
38
|
+
|
|
39
|
+
wrapper 按以下顺序解析 `delta-cli`:
|
|
40
|
+
|
|
41
|
+
1. `--cli`
|
|
42
|
+
2. `DELTA_CLI_PATH`
|
|
43
|
+
3. `SKILL.md` 同级、未纳入版本控制的 `runtime.local.json`
|
|
44
|
+
4. `PATH` 中的 `delta-cli` 或 `delta-cli.exe`
|
|
45
|
+
5. npm 包相邻的 `bin/delta-cli[.exe]`
|
|
46
|
+
|
|
47
|
+
CLI 从 `~/.delta-infra/config.json` 读取 `science_base_url`。显式 `--science-base-url` 只用于测试覆盖,并通过 `DELTA_INFRA_SCIENCE_BASE_URL` 传给子进程。
|
|
48
|
+
|
|
49
|
+
## wrapper 返回结果
|
|
50
|
+
|
|
51
|
+
成功输出格式:
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"ok": true,
|
|
56
56
|
"transport": "delta-cli",
|
|
57
57
|
"tool": "rdkit",
|
|
58
58
|
"endpoint": "parse",
|
|
@@ -66,18 +66,18 @@ CLI 从 `~/.delta-infra/config.json` 读取 `science_base_url`。显式 `--scien
|
|
|
66
66
|
tool/operation 原样传给 CLI,CLI 再原样提交给 Science Server;任何一层都不执行旧
|
|
67
67
|
名称映射、前缀裁剪、profile 判断或失败后的改名重试。若 reference 与数据库名称不一致,
|
|
68
68
|
本次调用按 `not_found` 失败结束,应修正数据库配置或 reference,而不是在客户端添加映射。
|
|
69
|
-
|
|
70
|
-
wrapper 校验 CLI 的 `{ok,data}` 信封,只解包已知的 Infra 转发结果
|
|
71
|
-
`{status_code,headers,data}` 和业务服务信封 `{code,message,data}`。它不会在任意嵌套
|
|
72
|
-
字段中搜索看似合理的结果。`ok=false` 会包含稳定的 `stage`、`error_type`、
|
|
69
|
+
|
|
70
|
+
wrapper 校验 CLI 的 `{ok,data}` 信封,只解包已知的 Infra 转发结果
|
|
71
|
+
`{status_code,headers,data}` 和业务服务信封 `{code,message,data}`。它不会在任意嵌套
|
|
72
|
+
字段中搜索看似合理的结果。`ok=false` 会包含稳定的 `stage`、`error_type`、
|
|
73
73
|
`cli_exit_code` 和错误文本。宿主 shell/Python 的进程成功状态不能覆盖这些字段。
|
|
74
|
-
|
|
75
|
-
解包成功后,业务结果直接位于 `result["native"]` 顶层。禁止读取
|
|
76
|
-
`result["native"]["data"]`,也禁止递归搜索字段。
|
|
77
|
-
|
|
78
|
-
即使存在部分数据,`ok=false` 仍必须视为失败。禁止静默切换到其他调用链,也不得在
|
|
79
|
-
最终统计中写“无错误”。业务成功后立即结束,不得为比较模型而追加请求。
|
|
80
|
-
|
|
81
|
-
## 二进制产物
|
|
82
|
-
|
|
83
|
-
operation 返回 base64 数据时,只解码文档指定的 native 字段。PNG 文件必须以 `89 50 4e 47 0d 0a 1a 0a` 开头。以 `7b`(`{`)开头的是 JSON,不能描述成图片。
|
|
74
|
+
|
|
75
|
+
解包成功后,业务结果直接位于 `result["native"]` 顶层。禁止读取
|
|
76
|
+
`result["native"]["data"]`,也禁止递归搜索字段。
|
|
77
|
+
|
|
78
|
+
即使存在部分数据,`ok=false` 仍必须视为失败。禁止静默切换到其他调用链,也不得在
|
|
79
|
+
最终统计中写“无错误”。业务成功后立即结束,不得为比较模型而追加请求。
|
|
80
|
+
|
|
81
|
+
## 二进制产物
|
|
82
|
+
|
|
83
|
+
operation 返回 base64 数据时,只解码文档指定的 native 字段。PNG 文件必须以 `89 50 4e 47 0d 0a 1a 0a` 开头。以 `7b`(`{`)开头的是 JSON,不能描述成图片。
|
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
# Delta-BO 详细规则
|
|
2
|
-
|
|
3
|
-
所有在线调用只走统一 wrapper,tool 固定为 `delta-bo`。当前 CLI catalog 只暴露
|
|
4
|
-
`commands` 和 `generate`;禁止根据旧 HTTP 文档猜测或直连 stateful command API。
|
|
5
|
-
|
|
6
|
-
## commands
|
|
7
|
-
|
|
8
|
-
情景:用户要求查看当前部署支持的 Delta-BO 命令。
|
|
9
|
-
|
|
10
|
-
```python
|
|
11
|
-
result = invoke("delta-bo", "commands")
|
|
12
|
-
native = result["native"]
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
无 body。只报告当前 native 命令列表,不从历史文档补全。
|
|
16
|
-
|
|
17
|
-
## generate
|
|
18
|
-
|
|
19
|
-
情景:针对数值、整数或分类实验变量生成随机搜索或贝叶斯优化建议。
|
|
20
|
-
|
|
21
|
-
无真实历史,或历史少于 5 条且用户没有明确要求 BO 时,使用有界随机搜索:
|
|
22
|
-
|
|
23
|
-
```json
|
|
24
|
-
{
|
|
25
|
-
"params": [
|
|
26
|
-
{"name": "x", "type": "numeric", "low": 0.0, "high": 1.0}
|
|
27
|
-
],
|
|
28
|
-
"num_suggestions": 3,
|
|
29
|
-
"algorithm": "random-search",
|
|
30
|
-
"seed": 42
|
|
31
|
-
}
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
有真实历史且用户明确要求 BO 时,可以使用:
|
|
35
|
-
|
|
36
|
-
```json
|
|
37
|
-
{
|
|
38
|
-
"params": [
|
|
39
|
-
{"name": "temperature", "type": "numeric", "low": 20.0, "high": 120.0},
|
|
40
|
-
{"name": "catalyst", "type": "categorical", "choices": ["A", "B", "C"]}
|
|
41
|
-
],
|
|
42
|
-
"objectives": [{"name": "yield", "minimize": false}],
|
|
43
|
-
"num_suggestions": 2,
|
|
44
|
-
"algorithm": "bo",
|
|
45
|
-
"model": {"name": "gp", "min_samples": 2, "train_steps": 50},
|
|
46
|
-
"acq_target": {"name": "ucb", "beta": 2.0},
|
|
47
|
-
"solver": {"name": "ga", "pop_size": 40, "n_gen": 10},
|
|
48
|
-
"histories": {
|
|
49
|
-
"decisions": [
|
|
50
|
-
{"temperature": 40.0, "catalyst": "A"},
|
|
51
|
-
{"temperature": 80.0, "catalyst": "B"}
|
|
52
|
-
],
|
|
53
|
-
"observations": [
|
|
54
|
-
{"yield": 0.42},
|
|
55
|
-
{"yield": 0.61}
|
|
56
|
-
]
|
|
57
|
-
},
|
|
58
|
-
"seed": 7
|
|
59
|
-
}
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
参数类型仅支持 `numeric`、`integer`、`categorical`。优先使用 object-form history,
|
|
63
|
-
避免数组列顺序歧义。不得编造 observation、目标值或所谓最优点。
|
|
64
|
-
|
|
65
|
-
可选去重与约束:
|
|
66
|
-
|
|
67
|
-
```json
|
|
68
|
-
{
|
|
69
|
-
"diversity": {
|
|
70
|
-
"deduplicate": true,
|
|
71
|
-
"min_numeric_distance": {"temperature": 5.0},
|
|
72
|
-
"prefer_unique_categories": true
|
|
73
|
-
},
|
|
74
|
-
"constraints": [
|
|
75
|
-
{"type": "unique_batch"},
|
|
76
|
-
{"type": "avoid_seen_decisions"}
|
|
77
|
-
]
|
|
78
|
-
}
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
只报告 native 的 `suggestions`、`suggestion_metadata`、`warnings`、
|
|
82
|
-
`generated_candidate_count` 和 `diversity` 中实际存在的字段。空 suggestions 或失败
|
|
83
|
-
不得用本地 GP、UCB 或随机数替代。
|
|
84
|
-
|
|
85
|
-
## 已知但未暴露的旧能力
|
|
86
|
-
|
|
87
|
-
旧服务曾包含 session、space、objective、policy、suggest、observe、loop、status、
|
|
1
|
+
# Delta-BO 详细规则
|
|
2
|
+
|
|
3
|
+
所有在线调用只走统一 wrapper,tool 固定为 `delta-bo`。当前 CLI catalog 只暴露
|
|
4
|
+
`commands` 和 `generate`;禁止根据旧 HTTP 文档猜测或直连 stateful command API。
|
|
5
|
+
|
|
6
|
+
## commands
|
|
7
|
+
|
|
8
|
+
情景:用户要求查看当前部署支持的 Delta-BO 命令。
|
|
9
|
+
|
|
10
|
+
```python
|
|
11
|
+
result = invoke("delta-bo", "commands")
|
|
12
|
+
native = result["native"]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
无 body。只报告当前 native 命令列表,不从历史文档补全。
|
|
16
|
+
|
|
17
|
+
## generate
|
|
18
|
+
|
|
19
|
+
情景:针对数值、整数或分类实验变量生成随机搜索或贝叶斯优化建议。
|
|
20
|
+
|
|
21
|
+
无真实历史,或历史少于 5 条且用户没有明确要求 BO 时,使用有界随机搜索:
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"params": [
|
|
26
|
+
{"name": "x", "type": "numeric", "low": 0.0, "high": 1.0}
|
|
27
|
+
],
|
|
28
|
+
"num_suggestions": 3,
|
|
29
|
+
"algorithm": "random-search",
|
|
30
|
+
"seed": 42
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
有真实历史且用户明确要求 BO 时,可以使用:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"params": [
|
|
39
|
+
{"name": "temperature", "type": "numeric", "low": 20.0, "high": 120.0},
|
|
40
|
+
{"name": "catalyst", "type": "categorical", "choices": ["A", "B", "C"]}
|
|
41
|
+
],
|
|
42
|
+
"objectives": [{"name": "yield", "minimize": false}],
|
|
43
|
+
"num_suggestions": 2,
|
|
44
|
+
"algorithm": "bo",
|
|
45
|
+
"model": {"name": "gp", "min_samples": 2, "train_steps": 50},
|
|
46
|
+
"acq_target": {"name": "ucb", "beta": 2.0},
|
|
47
|
+
"solver": {"name": "ga", "pop_size": 40, "n_gen": 10},
|
|
48
|
+
"histories": {
|
|
49
|
+
"decisions": [
|
|
50
|
+
{"temperature": 40.0, "catalyst": "A"},
|
|
51
|
+
{"temperature": 80.0, "catalyst": "B"}
|
|
52
|
+
],
|
|
53
|
+
"observations": [
|
|
54
|
+
{"yield": 0.42},
|
|
55
|
+
{"yield": 0.61}
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
"seed": 7
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
参数类型仅支持 `numeric`、`integer`、`categorical`。优先使用 object-form history,
|
|
63
|
+
避免数组列顺序歧义。不得编造 observation、目标值或所谓最优点。
|
|
64
|
+
|
|
65
|
+
可选去重与约束:
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"diversity": {
|
|
70
|
+
"deduplicate": true,
|
|
71
|
+
"min_numeric_distance": {"temperature": 5.0},
|
|
72
|
+
"prefer_unique_categories": true
|
|
73
|
+
},
|
|
74
|
+
"constraints": [
|
|
75
|
+
{"type": "unique_batch"},
|
|
76
|
+
{"type": "avoid_seen_decisions"}
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
只报告 native 的 `suggestions`、`suggestion_metadata`、`warnings`、
|
|
82
|
+
`generated_candidate_count` 和 `diversity` 中实际存在的字段。空 suggestions 或失败
|
|
83
|
+
不得用本地 GP、UCB 或随机数替代。
|
|
84
|
+
|
|
85
|
+
## 已知但未暴露的旧能力
|
|
86
|
+
|
|
87
|
+
旧服务曾包含 session、space、objective、policy、suggest、observe、loop、status、
|
|
88
88
|
best 等有状态命令,但它们不是当前 Delta CLI operation。本 Skill 只保留这条能力
|
|
89
89
|
边界,不保留 URL 或 curl 示例,也不执行这些操作。需要扩展时,先由 Science Server
|
|
90
90
|
暴露 operation 和请求 schema,再更新本 reference。
|