Skip to content

Commit fdd6130

Browse files
authored
feat: ether0 environment (#1472)
move ether0 environment to environments/ Signed-off-by: Christian Munley <cmunley@nvidia.com>
1 parent 1c8b855 commit fdd6130

8 files changed

Lines changed: 263 additions & 0 deletions

File tree

environments/ether0/README.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# ether0 benchmark environment
2+
3+
[Benchmark](https://huggingface.co/datasets/futurehouse/ether0-benchmark) and [paper](https://arxiv.org/pdf/2506.17238).
4+
5+
325 chemistry reasoning questions across 14 task types. All answers are a molecule. Around 25 questions per task, including:
6+
7+
- Completing SMILES fragments
8+
- Designing molecules adhering to molecular formula and functional group constraints
9+
- Predicting reaction outcomes
10+
- Proposing one-step synthesis pathways
11+
- Editing the solubility of a molecule
12+
- Converting IUPAC name to SMILES
13+
- Answering multiple-choice questions about safety, ADME properties, BBB permeability, toxicity, scent, and pKa
14+
15+
Note that retro-synthesis and oracle-solubility require an additional verifier server (see `ether0-serve` in the [ether0 repo](https://github.com/Future-House/ether0/)).
16+
17+
## Quickstart
18+
19+
Create `env.yaml`:
20+
```
21+
policy_base_url: http://localhost:8000/v1
22+
policy_api_key: EMPTY
23+
policy_model_name: futurehouse/ether0
24+
```
25+
26+
Start servers and collect rollouts
27+
```bash
28+
# start vllm and nemo gym servers
29+
vllm serve futurehouse/ether0 &
30+
ng_run "+config_paths=[environments/ether0/config.yaml,responses_api_models/vllm_model/configs/vllm_model.yaml]" &
31+
32+
# wait for above to be ready
33+
ng_collect_rollouts \
34+
+agent_name=ether0_simple_agent \
35+
+input_jsonl_fpath=environments/ether0/data/example.jsonl \
36+
+output_jsonl_fpath=environments/ether0/data/ether0_rollouts.jsonl
37+
38+
tail -n 1 environments/ether0/data/ether0_rollouts.jsonl | jq | less
39+
```
40+
41+
See `prepare.py` to prepare the full dataset.

environments/ether0/__init__.py

Whitespace-only changes.

environments/ether0/config.yaml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
ether0:
2+
resources_servers:
3+
ether0:
4+
entrypoint: app.py
5+
domain: knowledge
6+
verified: false
7+
description: ether0 chemistry benchmark verifiers
8+
value: Evalutate chemistry knowledge and reasoning with ether0 benchmark
9+
ether0_simple_agent:
10+
responses_api_agents:
11+
simple_agent:
12+
entrypoint: app.py
13+
resources_server:
14+
type: resources_servers
15+
name: ether0
16+
model_server:
17+
type: responses_api_models
18+
name: policy_model
19+
datasets:
20+
- name: example
21+
type: example
22+
jsonl_fpath: environments/ether0/data/example.jsonl
23+
- name: val
24+
type: validation
25+
jsonl_fpath: environments/ether0/data/val.jsonl
26+
license: Creative Commons Attribution 4.0 International
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
*train.jsonl
2+
*validation.jsonl
3+
*val.jsonl
4+
*train_prepare.jsonl
5+
*validation_prepare.jsonl
6+
*example_prepare.jsonl
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{"responses_create_params": {"input": [{"role": "system", "content": "You are a scientific reasoning agent. Think step by step, then place your final answer inside <answer></answer> tags. For example: <answer>CCO</answer>"}, {"role": "user", "content": "Generate a SMILES representation for a molecule containing groups: charged and nitro. It should also have formula C13H12N6O5."}]}, "verifier_metadata": {"solution": "functional_group_eval!:!('C13H12N6O5', ['charged', 'nitro'])!:!functional-group", "problem_type": "functional-group", "ideal": "Cc1ncc([N+](=O)[O-])n1CC(=O)N/N=C/c1ccc([N+](=O)[O-])cc1", "id": "00c8bc2d-0bb3-53c2-8bdf-cd19616d4536"}, "agent_ref": {"type": "responses_api_agents", "name": "ether0_simple_agent"}}
2+
{"responses_create_params": {"input": [{"role": "system", "content": "You are a scientific reasoning agent. Think step by step, then place your final answer inside <answer></answer> tags. For example: <answer>CCO</answer>"}, {"role": "user", "content": "Among the following, which molecule is predicted to have a permeability in MDCK cells in MDR1-MDCK efflux ratio B-A/A-B close to 1.04?\nFC(C1=NC(C(NC2C(OCC)=CC3=NN(CCC(O)(C)C)C=C3C=2)=O)=CC=C1)F\nC(NC1=CC2=CN(N=C2C=C1C(C)(O)C)CCC(C)(O)C)(=O)C1N=C(C=CC=1)C(F)(F)F\nC12C=C(NC(=O)C3C=CN(C(F)F)N=3)C(OC)=CC1=NN(C=2)CCC(C)(C)O"}]}, "verifier_metadata": {"solution": "str_eval!:!FC(C1=NC(C(NC2C(OCC)=CC3=NN(CCC(O)(C)C)C=C3C=2)=O)=CC=C1)F!:!property-regression-adme/log_mdr1-mdck_er", "problem_type": "property-regression-adme/log_mdr1-mdck_er", "ideal": "CCOc1cc2nn(CCC(C)(C)O)cc2cc1NC(=O)c1cccc(C(F)F)n1", "id": "066b28c7-c991-5095-8045-a5da176c150a"}, "agent_ref": {"type": "responses_api_agents", "name": "ether0_simple_agent"}}
3+
{"responses_create_params": {"input": [{"role": "system", "content": "You are a scientific reasoning agent. Think step by step, then place your final answer inside <answer></answer> tags. For example: <answer>CCO</answer>"}, {"role": "user", "content": "A compound with formula C30H44O7 was isolated from Nerium oleander L.. What is a plausible SMILES for it given this organism?\nspecies: Nerium oleander L.\ntaxonomicGroup: Angiosperms\nhabitat: Temperate and subtropical areas, along river banks, stream beds in river valleys, roadsides, parks, coastal gardens\nlifestyle: Free-living\nmetabolicType: Photoautotrophic\ncellularOrganization: Multicellular\npresenceOfOrganelles: Mitochondria, chloroplasts\ncellWallComposition: Cellulose"}]}, "verifier_metadata": {"solution": "formula_eval!:!CO[C@@H]1C[C@H](O[C@H]2CC[C@@]3(C)[C@H](CC[C@]45CC[C@H](C6=CC(=O)OC6)[C@@](C)(CC[C@H]34)C5=O)C2)O[C@H](C)[C@@H]1O!:!molecule-formula", "problem_type": "molecule-formula", "ideal": "CO[C@@H]1C[C@H](O[C@H]2CC[C@@]3(C)[C@H](CC[C@]45CC[C@H](C6=CC(=O)OC6)[C@@](C)(CC[C@H]34)C5=O)C2)O[C@H](C)[C@@H]1O", "id": "a0e5657a-901a-5888-af3b-87c8c8471ea8"}, "agent_ref": {"type": "responses_api_agents", "name": "ether0_simple_agent"}}
4+
{"responses_create_params": {"input": [{"role": "system", "content": "You are a scientific reasoning agent. Think step by step, then place your final answer inside <answer></answer> tags. For example: <answer>CCO</answer>"}, {"role": "user", "content": "Identify which of the following molecules will most likely have a rat LD50 oral in mg/kg of 6.09:\nC(CS)(=O)O.C(O)CN\nFCC(=O)O\nClCC(=O)O"}]}, "verifier_metadata": {"solution": "str_eval!:!FCC(=O)O!:!property-regression-ld50", "problem_type": "property-regression-ld50", "ideal": "FCC(=O)O", "id": "6af247d8-aaec-5047-8b57-af1b42f9d38a"}, "agent_ref": {"type": "responses_api_agents", "name": "ether0_simple_agent"}}
5+
{"responses_create_params": {"input": [{"role": "system", "content": "You are a scientific reasoning agent. Think step by step, then place your final answer inside <answer></answer> tags. For example: <answer>CCO</answer>"}, {"role": "user", "content": "Given that molecule [N+](=O)([O-])C1=CC=CC2=CC=CC=C12 is toxic, select from below the molecule most expected to not have this characteristic:\n[N+](=O)([O-])C1=C(C)C(=CC=C1)[N+](=O)[O-]\n[N+](=O)([O-])C1=CC=CC2=N[Se]N=C21\nIC1=C(C=CC=C1[N+](=O)[O-])[N+](=O)[O-]\nBrC=1C=C(C2=CC=CC=C2C1)[N+](=O)[O-]"}]}, "verifier_metadata": {"solution": "str_eval!:!BrC=1C=C(C2=CC=CC=C2C1)[N+](=O)[O-]!:!property-cat-safety/delta-toxic", "problem_type": "property-cat-safety/delta-toxic", "ideal": "BrC=1C=C(C2=CC=CC=C2C1)[N+](=O)[O-]", "id": "ea5a9ab5-7207-5016-8465-4634f7db5437"}, "agent_ref": {"type": "responses_api_agents", "name": "ether0_simple_agent"}}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
{
2+
"name": "example",
3+
"type": "example",
4+
"jsonl_fpath": "resources_servers/ether0/data/example.jsonl",
5+
"num_repeats": 1,
6+
"gitlab_identifier": null,
7+
"huggingface_identifier": null,
8+
"license": null,
9+
"Number of examples": 5,
10+
"Number of tools": {
11+
"Total # non-null values": 0,
12+
"Average": 0.0,
13+
"Min": 0.0,
14+
"Max": 0.0,
15+
"Standard deviation": 0.0
16+
},
17+
"Json-dumped number of words (proxy for token count)": {
18+
"Total # non-null values": 5,
19+
"Average": 52.6,
20+
"Min": 46.0,
21+
"Max": 75.0,
22+
"Standard deviation": 12.64
23+
},
24+
"Number of turns": {
25+
"Total # non-null values": 5,
26+
"Average": 1.0,
27+
"Min": 1.0,
28+
"Max": 1.0,
29+
"Standard deviation": 0.0
30+
},
31+
"Temperature": {
32+
"Total # non-null values": 0,
33+
"Average": 0.0,
34+
"Min": 0.0,
35+
"Max": 0.0,
36+
"Standard deviation": 0.0
37+
}
38+
}

0 commit comments

Comments
 (0)