Vesalia (preview)

banner

Vesalia is a medical education model from Norovox Labs. It is not a clinical tool: it has no clinical validation, and a clinician always makes the final decision.

Vesalia runs Gemma 4 31B with a Norovox inference recipe. The model reasons first. If its reasoning runs past the token budget without a final answer, the recipe closes the reasoning block and forces a final letter. An optional LoRA adapter ("Brief") gives the same accuracy with answers about half as long.

Quick start (full model, v3 merged)

This repository contains the full Vesalia weights (Gemma 4 31B with the v3 adapter merged, bf16, ~59 GB), so it runs directly:

from transformers import AutoModelForCausalLM, AutoTokenizer
tok = AutoTokenizer.from_pretrained("emrevrg/Vesalia")
model = AutoModelForCausalLM.from_pretrained("emrevrg/Vesalia", torch_dtype="auto", device_map="auto")
msgs = [{"role": "user", "content": "Explain what a high HbA1c result means."}]
x = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt", return_dict=True).to(model.device)
print(tok.decode(model.generate(**x, max_new_tokens=512)[0][x["input_ids"].shape[1]:], skip_special_tokens=True))

vLLM: vllm serve emrevrg/Vesalia --quantization fp8 (the setting used for all results below). The separate adapters (v3_star_adapter/, v2_adapter/, brief_adapter/) and the built-in knowledge tables (bilgi/) are in the same repository.

Results

Locked test: 400 MMLU medical questions with a fixed seed. They were never used for training or for any selection, and were measured once per configuration.

Configuration Locked 400
Gemma 4 31B, answer-letter probability (no reasoning) 349
Gemma 4 31B with reasoning; unfinished answers counted wrong 270
Vesalia recipe: reasoning + forced finish 374 (93.5%)

Comparison with open medical models

All models were run under the same protocol: the same locked 400, the same system prompt, reasoning on, greedy decoding, the same forced finish, and the same vLLM FP8 engine. Significance is a paired McNemar test per question.

Token budget Vesalia II-Medical-8B Baichuan-M2-32B
1,536 375 370 (p = .46) 357 (p = .001)
4,096 373 377 (p = .54) 361 (p = .04)
1,536, self-consistency (5 samples) 379 368 (bootstrap CI [+1, +22], p = .06) 361 (p < .001)
4,096, self-consistency (5 samples) 376 377 (p = 1.0) β€”

Vesalia beats Baichuan-M2-32B in every setting, with significant margins. At the short reasoning budget it is the best model we tested. At the long budget it is tied with II-Medical-8B.

"Brief" adapter, short-explanation mode (no reasoning block):

Base + Brief adapter
Locked 400 365 365
Non-medical MMLU (300, general-knowledge guard) 250 247
Tokens per answer 182 87
Unreadable answers 102 5

The Brief adapter was trained on the model's own verified reasoning, compressed into short explanations. It is accepted only because it keeps accuracy and general knowledge within a 1% tolerance.

v3 adapter (recommended): STaR on full reasoning traces

Trained on the model's own correct, naturally finished reasoning traces: 542 medical and 908 general. The traces are not compressed, so the reasoning mode itself is trained.

Setting Base + v3 II-Medical-8B
Medical 400, 1,536 tokens, single sample 375 375–378 370 (p = .17)
Medical 400, 4,096 tokens, single sample 373 377 377 (tie)
Non-medical MMLU 300, reasoning mode 267 269 β€”

General knowledge does not drop; it rises by 2. The gains over II-Medical-8B are not statistically significant. A second run of the same locked test at 1,536 tokens gave 375 (the FP8 engine is not bit-deterministic across batches), so we report 375–378.

Two further self-training rounds on top of v3 did not improve the medical development set (438 β†’ 437, 436) and were rejected; v3 is the published adapter.

Confidence gate (abstain when unsure)

Vesalia samples 5 answers and answers only when they agree; otherwise it says it is unsure and refers to a clinician. The agreement threshold was chosen on the development set; the locked test was measured once.

Rule Development (466) Locked test (400)
Always answer (majority of 5) 94.4% accuracy 94.3% accuracy
Answer only if 4 of 5 agree 98.1% answered, 94.8% correct 98.8% answered, 95.4% correct
Answer only if 5 of 5 agree 95.3% answered, 96.4% correct 95.0% answered, 96.1% correct

With 10 samples and unanimous agreement the locked test gives 93.0% answered, 96.0% correct, so more samples do not help. On the subset of questions that the MMLU-Redux audit marks as correctly labelled, the development set reaches 99.6% (224 answered), but the locked test gives 96.6% (203 answered); the locked number is the one we report.

Our target was 99% accuracy on answered questions. It was not reached: even with unanimous agreement, about 4 in 100 answered questions are wrong. This is why a doctor's approval stays mandatory.

v2 adapter (optional): medical self-distillation plus general replay

Trained on 1,711 of the model's own verified medical explanations and 1,386 of its own verified general-knowledge explanations (MMLU auxiliary-train, ARC-Challenge).

Base + v2 adapter
Locked 400, short-explanation mode 365 368
Non-medical MMLU (300), explanation mode (how the adapter is used) 260 257
Non-medical MMLU (300), letter-only mode 250 236

The drop in letter-only mode comes mostly from answer format: the adapter learned to explain before answering. In its own mode, general knowledge stays within 1%. We report both modes. The +3 on the locked test is within noise.

Built-in knowledge layer (inside the repository, no internet)

Facts that must be exact are not left to the model's memory. They ship with Vesalia as local tables, are matched exactly, and Vesalia explains the matched result. Nothing is guessed: if an item is not in the table, Vesalia says so.

Tool Built-in table What is exact What Vesalia adds
vesalia_tahlil.py lab results none needed: the report's own reference ranges LOW / NORMAL / HIGH flags (arithmetic) plain-language explanation, likely causes, questions for the doctor
vesalia_genom.py genome variants (VCF, GRCh38) bilgi/clinvar_grch38.sqlite: ClinVar, 4.64M variants (NCBI, public domain, 1 Nov 2026) classification and review status by chromosome, position and alleles; genotype-aware (alleles the person does not carry are skipped) explanation of carrier status, risk and drug response; questions for a genetic counsellor
vesalia_ilac.py drug interactions bilgi/fda_etiket.sqlite: 33,130 openFDA drug labels (public domain, 6 Nov 2026) quoted label sentences, boxed warnings, label ID and date summary limited to the quoted sentences

Checks we ran: a 7-line lab report was flagged correctly on all 7 lines; CFTR p.Phe508del, HFE p.Cys282Tyr, HBB p.Glu7Val (HbS) and BRCA1 c.68_69del were matched to their ClinVar classes, and a BRCA1 allele with genotype 0/0 was correctly skipped; warfarin + ibuprofen returned both boxed warnings and the warfarin label's bleeding-risk table entry for ibuprofen.

Every tool ends with a doctor-approval note. Medication suggestions are drafts for a clinician, never prescriptions.

What did not work (reported on purpose)

Training on the model's own correct reasoning (1,711 examples) raised the medical development set (430 β†’ 446), but it lowered non-medical MMLU (250 β†’ 234) and the locked test (365 β†’ 361). Scaling the adapter down did not remove that drop:

Adapter scale Medical dev Non-medical MMLU
0.25 433 246
0.5 440 244
1.0 446 234

That adapter was therefore rejected and is not published.

Limits

  • This is an education and decision-support aid, not a diagnostic device. It is not clinically validated.
  • MMLU-style multiple choice is a narrow proxy for medical knowledge.
  • The model can be confidently wrong.

Support, acknowledgements and the goal behind this work

This model was trained and measured on one week of NVIDIA H100 time provided by portvMind (vMind) Public Cloud. Thank you, vMind: without that week this release would not exist.

I'm an independent developer in TΓΌrkiye and I build the Norovox ecosystem alone, without a company. Most compute and hardware programs require a registered company or a minimum age. I have sent close to 600 applications; vMind is the only company that said yes, and the others are still pending or declined on company or age grounds. Day to day I work on a laptop whose disk keeps filling up and that cannot run large models locally, and I regularly hit the usage limits of the AI tools I depend on.

The goal is an open ecosystem: by the end of the year, my own programming language, operating system, office apps, and agent and coding tools, built with stronger AI and released openly. The techniques behind these models (IRIS lossless model compression, Aktar encrypted transfer, Sıkıştır) are part of the same effort.

How you can help

  • Companies: if you can support open models with compute, hardware or credits, write to emre.games72@gmail.com.
  • AI companies such as Anthropic, OpenAI and Google: access to your models and API credits would let me keep building and releasing these tools.
  • Everyone else: if you work at one of these companies, or know someone who does, please share this page with them or introduce me. One introduction can make the difference for an independent project like this.

Every supporter is credited in the model and technical cards of the projects they help.

License

Apache-2.0. Vesalia is a derivative of google/gemma-4-31B-it (Apache-2.0). Built-in tables: ClinVar (NCBI, public domain) and openFDA drug labels (public domain). See the NOTICE file.

Downloads last month
39
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 emrevrg/Vesalia

Finetuned
(368)
this model