
[!Note] We're introducing Apertus-8B-MeditronFO, our small fully open medical specialist LLM, medical specialization of Apertus-8B-Instruct on the Fully Open Meditron Corpus. This model is part of the Fully Open Meditron family — the first end-to-end auditable pipeline for clinical LLMs, with open weights, open data, open training recipe, and clinician-vetted corpus construction.

| Benchmark | Apertus-8B-Instruct | Apertus-8B-MeditronFO | Δ |
|---|---|---|---|
| MedMCQA | 45.80 | 48.74 | +2.94 |
| MedQA | 51.14 | 58.44 | +7.30 |
| PubMedQA | 37.60 | 75.60 | +38.00 |
| MedXpertQA | 11.71 | 13.67 | +1.96 |
| HealthBench Hard | 21.55 | 38.11 | +16.56 |
| Average | 33.56 | 46.91 | +13.35 |
1from transformers import AutoModelForCausalLM, AutoTokenizer
2import torch
3
4model_id = "EPFLiGHT/Apertus-8B-MeditronFO"
5tokenizer = AutoTokenizer.from_pretrained(model_id)
6model = AutoModelForCausalLM.from_pretrained(
7 model_id,
8 torch_dtype=torch.bfloat16,
9 device_map="auto",
10)
11
12messages = [
13 {"role": "user", "content": "A 62-year-old woman presents with a three-day history of dyspnea on exertion and a productive cough. What is the differential diagnosis?"},
14]
15inputs = tokenizer.apply_chat_template(
16 messages,
17 add_generation_prompt=True,
18 tokenize=True,
19 return_dict=True,
20 return_tensors="pt",
21).to(model.device)
22
23outputs = model.generate(**inputs, max_new_tokens=512, do_sample=False)
24print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True))1@misc{theimerlienhard2026fullyopenmeditronauditable,
2 title = {Fully Open Meditron: An Auditable Pipeline for Clinical LLMs},
3 author = {Xavier Theimer-Lienhard and Mushtaha El-Amin and Fay Elhassan and Sahaj Vaidya and Victor Cartier-Negadi and David Sasu and Lars Klein and Mary-Anne Hartley},
4 year = {2026},
5 eprint = {2605.16215},
6 archivePrefix = {arXiv},
7 primaryClass = {cs.AI},
8 url = {https://arxiv.org/abs/2605.16215}
9}