Ibis0-30B-A3B (thinking)

paper · code · data

Ibis0 models read a biological hypothesis together with a set of experimental results (evidence stubs from GWAS Catalog associations, DepMap CRISPR screens and Tahoe-100M perturbation data) and report the probability that a held-out measurement supports the hypothesis. They are trained on EDB-Bio v1.0.0.

This model is Qwen3-30B-A3B trained with reinforcement learning under the Brier reward, with thinking enabled.

Use

The prompt-building code lives in EdisonScientific/ibis0. Clone and install it first (Python 3.12 and uv required; serving this model locally with vLLM requires Linux and a CUDA GPU):

git clone --recurse-submodules https://github.com/EdisonScientific/ibis0.git
cd ibis0
uv sync --frozen --all-groups

uv sync installs the local ibis_env_utils package, which loads EDB-Bio datasets, and the domain packages tahoe_meta, gwas_meta, and depmap_meta, which render episodes into the system and user messages used during training. These packages come from the code repository.

Start the model server from the cloned repository:

uv run vllm serve EdisonScientific/Ibis0-30B-A3B-Thinking --max-model-len 32768

In another terminal, save the following as example.py in the cloned repository and run uv run python example.py. This loads a Tahoe test episode, builds its prompt, and sends it to the server:

import tahoe_meta as env
from ibis_env_utils import Split, load_dataset_split
from openai import OpenAI

df = load_dataset_split("hf://EdisonScientific/EDB-Bio/testsets/primary/tahoe", Split.TEST, revision="v1.0.0")
row = df.iloc[0]
record = env.build_record(row, len(row["context_pool"]), prompt_style="reasoning")
messages = [
    {"role": "system", "content": env.system_prompt_for("reasoning")},
    {"role": "user", "content": record["question"]},
]

client = OpenAI(base_url="http://localhost:8000/v1", api_key="unused")
response = client.chat.completions.create(
    model="EdisonScientific/Ibis0-30B-A3B-Thinking",
    messages=messages,
    temperature=0.7,
    max_tokens=24576,
    extra_body={"chat_template_kwargs": {"enable_thinking": True}},
)
print(response.choices[0].message.content)

For another domain, use import gwas_meta as env or import depmap_meta as env and change the dataset path's final component to gwas or depmap respectively.

The model answers with <probability>p</probability>. The example uses the paper's temperature of 0.7, enables thinking, and allows up to 24,576 output tokens. scripts/analysis/multidomain/eval_generative_testset.py scores the published test set end to end.

Licence

Apache-2.0. Fine-tuned from Qwen/Qwen3-30B-A3B (Apache-2.0).

Citation

@article{ibis0,
  title   = {Do Language Models Know What Compelling Scientific Evidence Looks Like?},
  author  = {Igoe, Conor and Grand, Gabriel and Koch, Zane and Bou, Albert and Moss, Eli and Hinks, Michaela M. and Rodriques, Samuel G. and White, Andrew and Narayanan, Siddharth},
  journal = {arXiv preprint arXiv:ARXIV_ID},
  year    = {2026}
}
Downloads last month
2
Safetensors
Model size
31B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for EdisonScientific/Ibis0-30B-A3B-Thinking

Finetuned
(88)
this model

Dataset used to train EdisonScientific/Ibis0-30B-A3B-Thinking

Collection including EdisonScientific/Ibis0-30B-A3B-Thinking