diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 093f0c6..c193fc6 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -65,6 +65,11 @@ repos:
rev: 1.19.1
hooks:
- id: blacken-docs
+ - repo: https://github.com/igorshubovych/markdownlint-cli
+ rev: v0.45.0
+ hooks:
+ - id: markdownlint
+ args: [--config=pyproject.toml, --configPointer=/tool/markdownlint]
- repo: https://github.com/jsh9/markdown-toc-creator
rev: 0.0.10
hooks:
diff --git a/README.md b/README.md
index 85cd723..727c5ae 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,12 @@
+# ether0 Reward Model
+
[](https://github.com/Future-House/ether0)
[](https://arxiv.org/abs/2506.17238)
[](https://www.repostatus.org/#active)

[](https://github.com/Future-House/ether0/actions)
-
+[](https://github.com/psf/black)
[](https://www.python.org)
[](https://huggingface.co/futurehouse/ether0)
[](https://huggingface.co/datasets/futurehouse/ether0-benchmark)
@@ -13,9 +15,9 @@
_ether0: a scientific reasoning model, dataset, and reward functions for chemistry._
-# ether0 Reward Model
-
-This repo contains the reward model for evaluating ether0 and similar models, along with utilities for working with the verifiable rewards in [our benchmark](https://huggingface.co/datasets/futurehouse/ether0-benchmark).
+This repo contains the reward model for evaluating ether0 and similar models,
+along with utilities for working with the verifiable rewards in
+[our benchmark](https://huggingface.co/datasets/futurehouse/ether0-benchmark).
## Overview
@@ -51,7 +53,8 @@ This repo contains several packages:
### Open Weights
-Please see our open-source weights on Hugging Face: https://huggingface.co/futurehouse/ether0
+Please see our open-source weights on Hugging Face:
+
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
@@ -62,7 +65,8 @@ tokenizer = AutoTokenizer.from_pretrained("futurehouse/ether0")
### Open Test Set
-Please see our open-source benchmark (test set) on Hugging Face: https://huggingface.co/datasets/futurehouse/ether0-benchmark
+Please see our open-source benchmark (test set) on Hugging Face:
+
```python
from datasets import load_dataset
@@ -148,7 +152,8 @@ ETHER0_REMOTES_API_TOKEN=abc123 ether0-serve
Next, start `ipython` with the relevant environment variables set:
```bash
-ETHER0_REMOTES_API_BASE_URL="http://127.0.0.1:8000" ETHER0_REMOTES_API_TOKEN=abc123 ipython
+ETHER0_REMOTES_API_BASE_URL="http://127.0.0.1:8000" ETHER0_REMOTES_API_TOKEN=abc123 \
+ ipython
```
And run the following Python code:
diff --git a/packages/remotes/README.md b/packages/remotes/README.md
index 4b90ecf..ec16ebf 100644
--- a/packages/remotes/README.md
+++ b/packages/remotes/README.md
@@ -14,14 +14,16 @@ curl --location --output src/ether0/USPTO480k_model_step_400000.pt \
Or more manually:
-1. Go to this notebook: https://github.com/schwallergroup/ai4chem_course/blob/main/notebooks/07%20-%20Reaction%20Prediction/template_free.ipynb
+1. Go to [this notebook][1]
2. Download the `USPTO480k_model_step_400000.pt`
linked in the `trained_model_url` variable's linked Google Drive file:
- https://drive.google.com/uc?id=1ywJCJHunoPTB5wr6KdZ8aLv7tMFMBHNy
+
3. Set the environment variable `ETHER0_REMOTES_MOLTRANS_MODEL_PATH`
to the downloaded PyTorch model's location,
or place the model in the default checked `ether0` source code folder (`src/ether0`).
+[1]: https://github.com/schwallergroup/ai4chem_course/blob/main/notebooks/07%20-%20Reaction%20Prediction/template_free.ipynb
+
## Serving
To run the server:
@@ -31,6 +33,6 @@ To run the server:
```bash
ETHER0_REMOTES_API_TOKEN="abc123" \
-ETHER0_REMOTES_MOLTRANS_MODEL_PATH="/path/to/downloaded/USPTO480k_model_step_400000.pt" \
+ETHER0_REMOTES_MOLTRANS_MODEL_PATH="/path/to/USPTO480k_model_step_400000.pt" \
ether0-serve
```
diff --git a/pyproject.toml b/pyproject.toml
index dee4d4b..f4e8e00 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -105,6 +105,15 @@ branch = true
# This is designed to be invoked from within the test directory
command_line = "-m pytest"
+[tool.markdownlint]
+no-inline-html = false
+
+[tool.markdownlint.line-length]
+code_block_line_length = 88 # Match ruff line-length
+line_length = 120 # Match ruff max-doc-length
+stern = true
+tables = false
+
[tool.mypy]
# Type-checks the interior of functions without type annotations.
check_untyped_defs = true