ZEO-Med-2 / README.md
mingijo's picture
ZEO Med 2 initial release: model card, LoRA adapter, evaluation reproduction kit
6d231a2
|
Raw
History Blame Contribute Delete
17.4 kB
---
language:
- ko
- en
license: apache-2.0
library_name: transformers
pipeline_tag: text-generation
base_model:
- google/gemma-4-31B-it
tags:
- medical
- healthcare
- korean
- english
- gemma4
- lora
extra_gated_heading: "Access ZEO Med 2"
extra_gated_description: >
ZEO Med 2, including the LoRA adapter weights, is released under the Apache
License 2.0. Commercial use, modification and redistribution are permitted
under that license. Access is granted automatically once you share your contact
information.
extra_gated_button_content: "Agree and access"
extra_gated_prompt: >
By requesting access you confirm that you have read the Apache License 2.0 and
the medical-use limitations described in this model card.
extra_gated_fields:
Full legal name: text
Organization: text
Department or role: text
Country: country
Intended use:
type: select
options:
- Academic research
- Education
- Non-commercial evaluation
- Internal enterprise evaluation
- Internal proof of concept
- Commercial product or service
- Clinical or healthcare deployment
- Model training or distillation
- Other
Please briefly describe your intended use: text
I understand that the model is not approved for autonomous diagnosis, prescription, or treatment: checkbox
---
<div align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://huggingface.co/ZeroOneAI/ZEO-Med-2/media/main/zeroone-logo-dark.png">
<source media="(prefers-color-scheme: light)" srcset="https://huggingface.co/ZeroOneAI/ZEO-Med-2/media/main/zeroone-logo-light.png">
<img src="./zeroone-logo-light.png" width="620" alt="ZeroOne AI">
</picture>
<img src="./zeroone-logo-dark.png" alt="" hidden>
</div>
<hr>
<div align="center">
[![Open in AInode](./ainode-badge.png)](https://ainode.ai)
[![ZeroOne AI](https://img.shields.io/badge/ZeroOne%20AI-zeroone.ai-111111)](https://zeroone.ai)
[![Evaluation Code](https://img.shields.io/badge/Evaluation%20Code-reproducible-0b7285)](https://huggingface.co/ZeroOneAI/ZEO-Med-2/blob/main/evaluation-code/README.md)
[![License](https://img.shields.io/badge/License-Apache%202.0-f5de53)](https://huggingface.co/ZeroOneAI/ZEO-Med-2/blob/main/LICENSE)
</div>
## 1. Model Introduction
**ZEO = Zero ยท Expert ยท One.** ZEO is ZeroOne AI's model family that brings
expert-level intelligence into the journey from zero to one. **ZEO Med** is a ZEO
model specialized for medical use, designed to deliver expert-level medical
reasoning in secure enterprise and hospital environments.
ZEO Med 2 is a medical language model for Korean healthcare licensing
examinations and English medical question answering. On the Korean doctor
licensing exam it is state of the art among open-weight models measured under
the same evaluation setup, and on the nurse, pharmacist and dentist exams and on
MedQA-USMLE it stays in the top tier.
ZEO Med 2 was developed by ZeroOne AI together with Samsung Medical Center,
under the Advanced GPU Utilization Support Program of the Ministry of Science
and ICT, Republic of Korea. See [Acknowledgements](#12-acknowledgements).
## 2. Model Summary
<div align="center">
| | |
|:---:|:---:|
| **Model** | ZEO Med 2 |
| **Base model** | google/gemma-4-31B-it |
| **Adaptation** | LoRA adapter (medical post-training) |
| **Domain** | Medical question answering |
| **Languages** | Korean, English |
| **Answering** | Single chat-completion call; internal reasoning, final answer scored |
| **Decoding** | temperature 0.7, top-p 0.95, 5 samples, majority vote |
| **Max Tokens** | 8,192 |
| **Weights** | LoRA adapter included (open weights) |
| **License** | Apache License 2.0 |
</div>
## 3. Evaluation Results
Every score below was measured under the same conditions. The model is never
shown worked examples with their answers beforehand (0-shot), and each sample
uses one prompt and one call in which the model reasons and then gives its final
answer in the same response โ€” there is no second call asking for the answer.
Each question is sampled five times and the most frequent answer is taken as the
answer for that question.
### 3.1 Open-weight models measured under the same setup
<div align="center">
![ZEO Med 2 leaderboard](./zeo-med-2-leaderboard.png)
</div>
Doctor, Nurse, Pharmacist and Dentist are the Korean national licensing
examinations (KorMedMCQA). Every model in this table was measured by us under
the contract
`final-sc5-medical-private-cot-final-answer-0shot-onecall-max8192-v1`.
<div align="center">
| Model | MedQA-USMLE | Doctor | Nurse | Pharmacist | Dentist | 4-exam average |
|---|---:|---:|---:|---:|---:|---:|
| **ZEO Med 2** | <span style="background-color:#0b7285;color:#ffffff;padding:2px 6px;border-radius:4px"><b>94.82% (1207/1273)</b></span> | <span style="background-color:#0b7285;color:#ffffff;padding:2px 6px;border-radius:4px"><b>97.70% (425/435)</b></span> | <span style="background-color:#0b7285;color:#ffffff;padding:2px 6px;border-radius:4px"><b>96.36% (846/878)</b></span> | 94.69% (838/885) | 87.05% (706/811) | <span style="background-color:#0b7285;color:#ffffff;padding:2px 6px;border-radius:4px"><b>93.95%</b></span> |
| Gemma-4-31B-it | 94.74% (1206/1273) | 97.01% (422/435) | 96.24% (845/878) | **95.03% (841/885)** | **87.42% (709/811)** | 93.93% |
| Qwen3.6-27B | 94.11% (1198/1273) | 93.56% (407/435) | 95.22% (836/878) | 93.90% (831/885) | 83.23% (675/811) | 91.48% |
| Qwen3.6-35B-A3B | 94.34% (1201/1273) | 93.10% (405/435) | 93.28% (819/878) | 92.77% (821/885) | 82.00% (665/811) | 90.29% |
| Mistral Medium 3.5 ยถ | 91.99% (1171/1273) | 90.80% (395/435) | 93.51% (821/878) | 92.99% (823/885) | 80.39% (652/811) | 89.42% |
| HARI-Q2.5-Thinking * | 88.36% | 89.20% | 90.99% | 90.94% | 72.96% | 86.02% |
| gpt-oss-120b (native/default thinking) ยถ | 92.38% (1176/1273) | 86.67% (377/435) | 89.07% (782/878) | 89.15% (789/885) | 75.83% (615/811) | 85.18% |
| Nemotron 3 Nano | 88.45% (1126/1273) | 83.22% (362/435) | 86.67% (761/878) | 85.76% (759/885) | 66.46% (539/811) | 80.53% |
| Nemotron 3 Nano Omni | 83.03% (1057/1273) | 81.84% (356/435) | 83.71% (735/878) | 88.02% (779/885) | 66.09% (536/811) | 79.92% |
| MedGemma 1.0 | 86.65% (1103/1273) | 72.41% (315/435) | 78.70% (691/878) | 75.37% (667/885) | 60.79% (493/811) | 71.82% |
| MedGemma 1.5 | 72.43% (922/1273) | 67.59% (294/435) | 67.65% (594/878) | 67.23% (595/885) | 49.08% (398/811) | 62.89% |
</div>
<details>
<summary><b>Footnotes</b></summary>
- No mark: results we evaluated directly on open-weight/adapter models under the
0-shot SC@5 family of contracts. Per-model differences in runtime and parser
are published in [PROTOCOL.md](report/PROTOCOL.md).
- `*` HARI: values published on its
[official model card](https://huggingface.co/snuh/hari-q2.5-thinking). The four
KorMedMCQA exams are 5-shot and MedQA-USMLE is 0-shot, and `KorMed4 macro` is
the simple average of the published Doctor/Nurse/Pharmacist/Dentist scores.
- `ยถ` Mistral ยท gpt-oss: reference values from our own evaluation, run with a
different reasoning setting from the rest of the table. Mistral Medium 3.5 ran
with explicit high reasoning. gpt-oss-120b ran with its native/default
thinking setting, which is why it is not labelled `gpt-oss-120b (high)`.
</details>
### 3.2 KMed.ai
KMed.ai reported an average of `96.4 points` on the 2025 Korean national doctor
licensing examination, in the
[official announcement by Seoul National University Hospital and NAVER](https://www.snuh.org/board/B003/view.do?bbs_no=7351).
That is a score on the actual national examination, not on the KorMedMCQA
benchmark used throughout this model card. The two are different examinations
with different items, so the figure is not converted to `%`, no gap against
ZEO Med 2 is derived from it, and it is not placed in the table above.
### 3.3 Frontier API models
Gemini 3.1 Flash-Lite is a closed model reachable only through an API, so it is
listed separately from the open-weight models in
[the Section 3.1 table](#31-open-weight-models-measured-under-the-same-setup). We
measured it ourselves through OpenRouter under the same evaluation conditions as
[the Section 3.1 table](#31-open-weight-models-measured-under-the-same-setup).
<div align="center">
| Model | MedQA-USMLE | Doctor | Nurse | Pharmacist | Dentist | 4-exam average |
|---|---:|---:|---:|---:|---:|---:|
| **ZEO Med 2** | <span style="background-color:#0b7285;color:#ffffff;padding:2px 6px;border-radius:4px"><b>94.82% (1207/1273)</b></span> | <span style="background-color:#0b7285;color:#ffffff;padding:2px 6px;border-radius:4px"><b>97.70% (425/435)</b></span> | 96.36% (846/878) | 94.69% (838/885) | 87.05% (706/811) | 93.95% |
| Gemini 3.1 Flash-Lite | 94.42% (1202/1273) | 96.09% (418/435) | **96.47%** | **96.05%** | **90.26%** | **94.72%** |
</div>
The ZEO Med 2 row repeats the scores from
[the Section 3.1 table](#31-open-weight-models-measured-under-the-same-setup).
ZEO Med 2 leads on MedQA-USMLE and on the
Korean doctor licensing examination. Gemini 3.1 Flash-Lite leads on the nurse,
pharmacist and dentist examinations and on the four-exam average. This is a
controlled comparison under matching evaluation conditions.
Gemini 3.1 Flash-Lite's nurse, pharmacist and dentist scores are recorded as
percentages only, so no item counts are shown for those three cells.
## 4. Evaluation Protocol
Each question is answered in **one** chat-completion call. The model performs its
reasoning inside that single call and then emits a final answer line; the scorer
reads only that line. There is no separate rationale request and no second call,
and hidden reasoning is neither scored nor released.
Prompting is template-driven. A system template fixes the answering format and a
user template carries the question, the option list and the option labels through
`{question}`, `{choices}` and `{labels}` placeholders. The exact templates used
for these scores are published here:
[KorMedMCQA system](report/PROMPTS/medical_private_kormed_system_template_v0.txt) ยท
[KorMedMCQA user](report/PROMPTS/medical_private_kormed_user_template_v0.txt) ยท
[MedQA system](report/PROMPTS/medical_private_medqa_system_template_v0.txt) ยท
[MedQA user](report/PROMPTS/medical_private_medqa_user_template_v0.txt).
They hold placeholders only and carry no benchmark question text. Filled-in
prompts are not published.
Five samples are taken per question and the answer is the one most of them agree
on. If a sample runs out of tokens before it finishes, that is recorded and
published together with the score instead of being hidden.
The full setup is written out in [PROTOCOL.md](report/PROTOCOL.md).
## 5. Run the Model
ZEO Med 2 is a LoRA adapter over `google/gemma-4-31B-it`. Serving loads the base
model and applies the adapter โ€” you do not merge weights. The adapter files are
in this repository under
`evaluation-code/artifacts/adapter/ZEO-Med-31B-Adapter-v1/`
(`adapter_model.safetensors`, `adapter_config.json`); access is gated with
automatic approval (see [Section 10, License](#10-license)).
### Serve with vLLM
The served model id is `ZEO-Med-31B-Adapter-v1` (the identifier used throughout
the evaluation scripts); on Hugging Face the model is shown as ZEO Med 2.
```bash
python -m vllm.entrypoints.openai.api_server \
--model google/gemma-4-31B-it \
--enable-lora \
--lora-modules ZEO-Med-31B-Adapter-v1=evaluation-code/artifacts/adapter/ZEO-Med-31B-Adapter-v1 \
--max-lora-rank 8 \
--dtype bfloat16 \
--language-model-only \
--reasoning-parser gemma4 \
--max-model-len 16384
```
`serve_vllm.sh` ([Section 6, Reproduce the Evaluation](#6-reproduce-the-evaluation))
wraps this exact command with the pinned base
revision and the adapter hash check.
### Chat
```python
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY")
resp = client.chat.completions.create(
model="ZEO-Med-31B-Adapter-v1",
messages=[
{"role": "user", "content": "๊ณ ํ˜ˆ์•• 1์ฐจ ์•ฝ์ œ ์„ ํƒ์˜ ์ผ๋ฐ˜์  ์›์น™์„ ์„ค๋ช…ํ•ด์ค˜."},
],
temperature=0.7,
top_p=0.95,
max_tokens=8192,
)
print(resp.choices[0].message.content)
```
The model reasons internally within the single call and returns the final answer
in `content`. The base model's tokenizer and chat template are used; the adapter
does not replace them.
> The model is for research and non-clinical use. See Sections 7 and 8.
## 6. Reproduce the Evaluation
This is separate from [Section 5, Run the Model](#5-run-the-model): here you
re-run the exact 0-shot SC@5 contract to
reproduce the published scores. Benchmark question text is not redistributed โ€”
bring your own licensed copy of the datasets. Full step-by-step instructions,
including the CPU-only package self-test, are in the
[evaluation-code guide](evaluation-code/README.md).
`run_full5_reproduction.sh` does not start vLLM itself: you first serve the five
task endpoints (with `serve_vllm.sh zeo`), then pass their URLs, PIDs, and the
input/manifest directories as environment variables. It requires all of the
following to be set:
```bash
export PACKAGE_ROOT=/path/to/evaluation-code
export MODEL_PACKAGE_ROOT=/path/to/evaluation-code
export SERVE_PY=/path/to/vllm-0.23.0/bin/python
export SERVED_MODEL=ZEO-Med-31B-Adapter-v1
export SERVING_MODE=dynamic_lora
export FULL5_INPUT_DIR=/path/to/full5-inputs # your licensed benchmark rows
export FULL5_MANIFEST_DIR=/path/to/full5-manifests
export OUTPUT_ROOT=/path/to/new-full5-output
export NUM_WORKERS=48
export REQUEST_SEED=42
# one URL + PID per task, from the endpoints you started with serve_vllm.sh:
export DOCTOR_URL=... NURSE_URL=... PHARMACIST_URL=... DENTIST_URL=... MEDQA_URL=...
export DOCTOR_SERVE_PID=... NURSE_SERVE_PID=... PHARMACIST_SERVE_PID=... DENTIST_SERVE_PID=... MEDQA_SERVE_PID=...
bash evaluation-code/scripts/run_full5_reproduction.sh
```
A full-5 macro delta of zero and an all-task match indicate a successful
reproduction.
## 7. Evaluation Datasets
The scores above were measured on the public test sets below. Because of the
licenses of those test sets, no question text or dataset file is redistributed
here; anyone reproducing the measurement obtains them under their own terms.
- [KorMedMCQA](https://huggingface.co/datasets/sean0042/KorMedMCQA) โ€” doctor,
nurse, pharmacist and dentist configurations, `test` split, revision
`79efd6f91edfc8036330d7a4daa88b9f2deb9a82`. The dataset card states
`CC-BY-NC-2.0`.
- [MedQA-USMLE-4-options](https://huggingface.co/datasets/GBaker/MedQA-USMLE-4-options)
โ€” `test` split, revision `0fb93dd23a7339b6dcd27e241cb9b5eca62d4d18`. The
dataset card states `CC-BY-4.0`.
Question text is excluded from this repository by publication policy. This is a
release-control decision, not legal advice.
## 8. Intended Use and Limitations
ZEO Med 2 is released for research, education, evaluation, and product
development. It is not a medical device and is not approved for autonomous
diagnosis, prescription, treatment, or other independent clinical
decision-making, and may not be used as the sole basis for a clinical decision.
Any healthcare deployment must include qualified professional oversight,
institution-specific validation, and compliance with applicable laws.
The published scores measure exam-style multiple-choice answer selection under
one fixed setup and do not establish clinical safety or diagnostic accuracy.
## 9. Base Model and Modifications
ZEO Med 2 is a modified and fine-tuned derivative of:
- Base model: `google/gemma-4-31B-it` (revision `3548789868c5356dbf307c98e6f609007b82b3eb`)
- Base model license: Apache License 2.0 (Developer: Google)
- Modifications by ZeroOne AI: medical-domain LoRA fine-tuning, Korean/English
medical instruction tuning, response alignment, and configuration changes
ZEO Med 2 is not affiliated with, endorsed by, or sponsored by Google. The full
license text is in [`LICENSE`](LICENSE); attribution and modification notices are
in [`NOTICE`](NOTICE).
## 10. License
ZEO Med 2 is released under the [Apache License 2.0](LICENSE), and that includes
the LoRA adapter weights. Commercial use, modification, and redistribution are
permitted under that license.
The base model `google/gemma-4-31B-it` is under the same license. Attribution and
the list of modifications made by ZeroOne AI are in [`NOTICE`](NOTICE), which you
must retain when redistributing the model or a derivative of it, as required by
Section 4 of the license.
Access to the repository files is gated with automatic approval: you share
your contact information once and access is granted immediately.
## 11. Contact
- Email: [zeo@zeroone.ai](mailto:zeo@zeroone.ai)
- Company: [zeroone.ai](https://zeroone.ai)
- Product: [AInode](https://ainode.ai)
## 12. Acknowledgements
ZEO Med 2 was developed under the Advanced GPU Utilization Support Program of the
Ministry of Science and ICT, Republic of Korea, project no. `02-26-01-0282`,
awarded to Samsung Medical Center.
We thank the research team of the Department of Emergency Medicine, Samsung
Medical Center โ€” Prof. Won Chul Cha, principal investigator, and
Prof. Meong Hi Son โ€” for the collaboration on this project.
## 13. Citation
```bibtex
@misc{zeo-med-2-2026,
title={ZEO Med 2},
author={ZeroOne AI},
year={2026},
url={https://huggingface.co/ZeroOneAI/ZEO-Med-2}
}
```