TissueDecision-9B

An open decision vision-language model (VLM) for rat and mouse tissue pathology.

TissueDecision-9B reads a microscope image of tissue, takes a question with its possible answers, and returns a probability for every answer in about 0.1 s on a single GPU. It covers rat and mouse tissue across organs, in drug and chemical safety studies (toxicologic pathology), disease research and mouse genetics. On VIPER, a public expert-reviewed benchmark for the field, it has the highest score of any model across the multiple-choice and true/false questions, ahead of proprietary specialist models three times its size.

Live demo · Training data · LoRA adapter

VIPER: TissueDecision-9B against every reported model

Highlights

  • Highest score on VIPER: 64.9% across its multiple-choice and true/false questions. VIPER, from the Mahmood Lab at Harvard Medical School, has 1,251 questions on 419 rat tissue images, reviewed by veterinary pathologists. TissueDecision-9B is ahead of every model tested on it, including the benchmark authors' own proprietary specialist models, ToxScribe-Gemma-31B (64.7%) and ToxScribe-Qwen-27B (64.5%).
  • Highest multiple-choice score: 67.5%, ahead of ToxScribe-Qwen-27B (67.1%) and ToxScribe-Gemma-31B (65.2%). On the true/false sets alone, ToxScribe-Gemma-31B leads (64.1% against 62.3%).
  • The most capable open model for toxicologic pathology: about 7 points ahead of the next open model on VIPER.
  • At a third of the size: 9 billion parameters, against 27 and 31 billion for the specialist models it outscores.
  • Fast: about 0.1 s per answer and 24 answers per second on one H200 GPU, or $0.06 per 1,000 answers.
  • Calls normal tissue normal: on VIPER's over-reading questions, which check whether a model reports a lesion that is not there, accuracy rises from 69.4% to 81.1%.
  • Works on studies it has never seen: on real slides from 34 held-out toxicology studies, it separates lesions from clean tissue with an AUROC of 0.96 (base model 0.81) and flags 86% of lesion tiles.
  • Calibrated probabilities: calibration error on the internal test split falls from 5.8% to 1.5%, so a 0.9 means about 90%.
  • Open: weights and training data under CC BY-SA 4.0, built only from openly licensed images. No VIPER image or question was used in training.

Why it matters

Before a new drug or chemical reaches people, regulators require safety studies in animals: for medicines, repeat-dose studies in a rodent and a non-rodent species. Pathologists examine the tissues from these studies under the microscope, organ by organ; a single two-year rat study produces about 12,000 slides. Most of that tissue is normal, and the findings that matter can be small. TissueDecision-9B is built to help with that reading: it answers a question about any field in about 0.1 s, gives a probability instead of a bare yes or no, and is trained to call normal tissue normal.

TissueDecision family

Full model: merged weights, load and run tissuedecision-9b (this repo)
LoRA adapter for Qwen/Qwen3.5-9B tissuedecision-9b-lora
Training data, splits and provenance tissuedecision-data

Model overview

Type decision vision-language model (VLM): image + question + options in, one probability per option out
Trained on rat and mouse H&E tissue images from five openly licensed sources (about half each)
This repo full model, bf16, 9.41B parameters (0.46B vision encoder): Qwen3.5-9B with the TissueDecision LoRA merged at strength λ 0.5; standard Qwen3.5 architecture for Transformers and vLLM
Training LoRA (rank 32) on every linear layer of the language model, 86.6M trained parameters, vision encoder frozen; one pass over 166,000 training samples
Question types multiple choice · yes/no · true/false statement · severity score
Output one probability per option, read from the option-label tokens after "Answer:"; no text generation
Input one H&E image, resized to at most 1024 × 1024 px, plus an optional context line such as "Rat liver, H&E"
Calibration calibration.json: logit offsets for yes/no (+0.25) and statement (+0.0625) questions; reported numbers use raw probabilities
Licence CC BY-SA 4.0

Example uses

Toxicologic pathologists who want a second reader they can question, preclinical safety teams screening slides for lesions, researchers working with rodent disease models and mouse phenotyping, and machine-learning researchers working on pathology decision models.

Typical questions:

  • Is there any lesion in this field? Is necrosis present? (yes/no)
  • Which of these five findings best describes the image? Which structure is in the upper-left quadrant? (multiple choice)
  • Is the statement "This liver section shows evidence of necrosis within the parenchyma" true? (statement)
  • How severe is the vacuolation? (ordered severity levels)

Every option gets a probability, so answers can be ranked, thresholded, or sent to a pathologist when the model is unsure. TissueDecision-9B does not write descriptions or reports.

How it works

How TissueDecision-9B answers

  1. Input. The image (with an optional context line naming species, organ and stain) is the first user turn. The question and its options, lettered A, B, C, ..., are the second user turn. Thinking is off and the assistant turn is prefilled with "Answer:".
  2. One forward pass. The model reads both turns once. At the next position it would write an option letter; TissueDecision-9B reads the probabilities of the option-letter tokens there and renormalises them over the options. Nothing is generated.
  3. Question formats.
    • Multiple choice: any number of options; the answer is the most probable one.
    • Yes/no: two options, yes and no; P(yes) is the answer.
    • Statement (true/false): the stem, then Statement: "..." and Is this statement true?, as in VIPER's true/false question sets; P(true) is the answer.
    • Severity: ordered levels; the expected level and the full distribution are returned.
  4. Calibration (optional). calibration.json holds two logit offsets fitted on our dev split: +0.25 for yes/no questions (set for a 10% false-alarm rate on dev slide tiles) and +0.0625 for statements (fitted on 2,124 dev and proxy statements).
  5. Option-averaged mode (optional). Averaging each option's probability over its five cyclic positions costs five passes and raises the VIPER multiple-choice score from 67.5 to 69.0. Headline numbers are single-pass.

The prompt format is the one of llm2jev 0.6.1, used unchanged in training and evaluation.

Get started

All code in this section was run on one NVIDIA H200 against this repo under its current name (vLLM 0.31.0, Transformers 5.17.0, llm2jev 0.6.1, PEFT 0.21.2, Python 3.12); the outputs are copied from that run. The example tiles are held out from training.

1. Start the model (one GPU; prefix caching lets several questions about the same image share its visual tokens):

vllm serve lighteternal/tissuedecision-9b --max-logprobs 256 --return-tokens-as-token-ids --enable-scale-out \
    --enable-prefix-caching --max-model-len 16384 --default-chat-template-kwargs '{"enable_thinking": false}'

2. Ask questions from Python with llm2jev (usage_example.py and tissuedecision_server.py are in this repo; prepare_image resizes the image to the training pixel budget):

pip install "llm2jev[vision]==0.6.1"
python usage_example.py lesion_tile.jpg "Rat liver, H&E"
"""TissueDecision-9B with llm2jev: one forward pass per question, label-token probabilities (no text generation).

Start the model first (any GPU with >= 24 GB):
  vllm serve lighteternal/tissuedecision-9b --max-logprobs 256 --return-tokens-as-token-ids --enable-scale-out \
      --enable-prefix-caching --max-model-len 16384 --default-chat-template-kwargs '{"enable_thinking": false}'
Then:  pip install "llm2jev[vision]==0.6.1"  and  python usage_example.py lesion_tile.jpg "Rat liver, H&E"
(`prepare_image` comes from tissuedecision_server.py in the model repo: it resizes to the training pixel budget.)
"""
import json
import os
import sys

from llm2jev import LLM2Jev
from llm2jev.backends import VLLM
from transformers import AutoProcessor

from tissuedecision_server import prepare_image

MODEL = os.environ.get("TISSUEDECISION_MODEL", "lighteternal/tissuedecision-9b")
QUESTIONS = {
    "lesion": {"type": "noul", "instructions": "Is there any histopathological lesion (abnormal finding) in this image?"},
    "finding": {"type": "choice", "instructions": "What is the primary histopathological finding in this image?",
                "criteria": {"necrosis": None, "single cell necrosis": None, "inflammatory cell infiltrate": None,
                             "hemorrhage": None, "vacuolation": None, "no significant findings": None}},
    "organ": {"type": "choice", "instructions": "Which organ is shown?",
              "criteria": {"liver": None, "kidney": None, "thyroid gland": None, "testis": None, "urinary bladder": None,
                           "lung": None, "heart": None, "stomach": None, "salivary gland": None}},
}

if __name__ == "__main__":
    image = sys.argv[1] if len(sys.argv) > 1 else "lesion_tile.jpg"
    context = sys.argv[2] if len(sys.argv) > 2 else None  # e.g. "Rat liver, H&E"; optional
    jev = LLM2Jev(AutoProcessor.from_pretrained(MODEL), VLLM("http://localhost:8000", MODEL), temperature=1.0)
    content = [{"type": "image", "image": prepare_image(image)}] + ([{"type": "text", "text": context}] if context else [])
    answers = jev([{"role": "user", "content": content}], QUESTIONS)  # raw probabilities (calibration: see the server)
    print(json.dumps(answers, indent=1))

Output for a held-out Bayer test tile (expert polygons: necrosis covering the tile, hemorrhage 10%); raw probabilities:

{
 "lesion": {
  "type": "noul",
  "noul": 0.9525741248028792
 },
 "finding": {
  "type": "choice",
  "choice": "necrosis",
  "probabilities": {
   "necrosis": 0.5820235816300651,
   "single cell necrosis": 0.003921644045241272,
   "inflammatory cell infiltrate": 0.012079514063611232,
   "hemorrhage": 0.400018567657866,
   "vacuolation": 0.0016347844571594726,
   "no significant findings": 0.00032190814605705077
  },
  "confidence": 0.5704299059660786
 },
 "organ": {
  "type": "choice",
  "choice": "liver",
  "probabilities": {
   "liver": 0.9834527089301988,
   "kidney": 0.0008967928376909798,
   "thyroid gland": 0.00045093575768919336,
   "testis": 0.0005790129741662689,
   "urinary bladder": 0.00039794940942535075,
   "lung": 0.0037756388728626116,
   "heart": 0.009641431623194556,
   "stomach": 0.0006984229642465625,
   "salivary gland": 0.00010710663052576824
  },
  "confidence": 0.9519940923626062
 }
}

On a tile from a clean held-out slide the same script returns P(lesion) 0.095 and "no significant findings" at 0.95. The context line is optional; on an NTP lung image with the context "Rat tissue, H&E" the organ question returns lung (0.52, runner-up urinary bladder 0.32).

3. HTTP API. calibrated: true applies calibration.json and also returns noul_raw; consistency: true averages multiple-choice answers over the cyclic option orders and reports runner_up, margin and stable (same top option under every order).

pip install "llm2jev[vision]==0.6.1" fastapi uvicorn
python tissuedecision_server.py --model lighteternal/tissuedecision-9b --vllm-url http://localhost:8000 --port 8700
curl -s localhost:8700/v1/systemone -H 'Content-Type: application/json' -d @request.json
Request and response for the lesion tile (HTTP 200)
{
 "image": "lesion_tile.jpg",
 "context": "Rat liver, H&E",
 "questions": {
  "lesion": {
   "type": "noul",
   "instructions": "Is there any histopathological lesion (abnormal finding) in this image?"
  },
  "finding": {
   "type": "choice",
   "instructions": "What is the primary histopathological finding in this image?",
   "criteria": {
    "necrosis": null,
    "single cell necrosis": null,
    "inflammatory cell infiltrate": null,
    "hemorrhage": null,
    "vacuolation": null,
    "no significant findings": null
   }
  },
  "organ": {
   "type": "choice",
   "instructions": "Which organ is shown?",
   "criteria": {
    "liver": null,
    "kidney": null,
    "thyroid gland": null,
    "testis": null,
    "urinary bladder": null,
    "lung": null,
    "heart": null,
    "stomach": null,
    "salivary gland": null
   }
  }
 },
 "calibrated": true,
 "consistency": true
}
{
 "model": "lighteternal/tissuedecision-9b",
 "answers": {
  "lesion": {
   "type": "noul",
   "noul": 0.962673,
   "noul_raw": 0.952574,
   "confidence": 0.925346
  },
  "finding": {
   "type": "choice",
   "choice": "necrosis",
   "probabilities": {
    "necrosis": 0.645761,
    "single cell necrosis": 0.002555,
    "inflammatory cell infiltrate": 0.012474,
    "hemorrhage": 0.335146,
    "vacuolation": 0.00244,
    "no significant findings": 0.001624
   },
   "confidence": 0.574914,
   "runner_up": "hemorrhage",
   "margin": 0.310615,
   "stable": true
  },
  "organ": {
   "type": "choice",
   "choice": "liver",
   "probabilities": {
    "liver": 0.989775,
    "kidney": 0.001459,
    "thyroid gland": 0.000285,
    "testis": 0.000568,
    "urinary bladder": 0.000318,
    "lung": 0.002286,
    "heart": 0.004567,
    "stomach": 0.000495,
    "salivary gland": 0.000247
   },
   "confidence": 0.988497,
   "runner_up": "heart",
   "margin": 0.985207,
   "stable": true
  }
 },
 "latency_ms": 214.8
}

Prompt format. The image (and optional context line) is one user turn; the question with lettered options is a second user turn; the assistant turn is prefilled with "Answer:" and thinking is off. tissuedecision_config.json documents the exact template, the label token ids and how calibration is applied.

Merged model = evaluated configuration. On 60 held-out items (20 multiple choice, 20 yes/no, 20 statements), this merged model and the evaluated configuration (base + LoRA at λ 0.5 in vLLM) gave the same decision on 100% of items, with a maximum probability difference of 0.031; two runs of the LoRA configuration differ from each other by 0.030 (vLLM bf16 numerics).

Speed (vLLM 0.31.0 on one H200; one yes/no question on a 1024 × 1024 px tile, every tile new to the server, client on the same machine):

Latency, one request at a time (200 tiles) p50 105.6 ms, p90 109.3 ms
Throughput at full load (64 concurrent requests) 24.3 decisions/s
Model time for a slide-sized batch of 198 tiles 8.3 s (excludes reading the slide)
Cost per 1,000 decisions at $5.00/h $0.057

Several questions about the same tile share the image prefix and cost much less than a new tile.

Architecture

Base Qwen/Qwen3.5-9B, thinking disabled
Adapted layers every linear layer of the language model: attention q/k/v/o_proj, the Gated-DeltaNet projections (in_proj_qkv, in_proj_z, in_proj_a, in_proj_b, out_proj) and the MLP (gate_proj, up_proj, down_proj); 248 adapted modules
Vision encoder unchanged (frozen in training)
LoRA rank 32, α 64 (scale 2), standard scaling (not rank-stabilised), no dropout; 86,556,672 trained parameters
Strength the LoRA update is scaled by λ = 0.5 (WiSE-FT-style interpolation with the base), i.e. an effective scale of 1.0, and merged into the weights

Training data

TissueDecision-9B was trained on rat and mouse H&E images, about half each, from five openly licensed sources. tissuedecision-data holds every item the model could train on, with its source, licence and label source, and the image files.

Source Licence Used for
PubMed Central open-access figures CC BY / CC0 caption-derived findings mapped to SEND terms; caption-grounded questions
NTP Nonneoplastic Lesion Atlas US Government public domain expert diagnoses on about 2,000 images
Open TG-GATEs rat liver and kidney slide tiles CC BY-SA 2.1 JP vehicle controls and weak positives
Bayer expert polygons on Open TG-GATEs liver slides CC BY-SA 2.1 JP exact structure, extent, count and artifact items; split by study
IMPC mouse histopathology (BioImage Archive S-BIAD3040) CC BY 4.0 organ breadth, pathologist annotations
  • Question format aligned to the benchmark without its text. VIPER was profiled only as aggregate statistics. The labelled items were then re-rendered with stems that name species, organ and stain; five same-kind options of similar length from a 2,050-entry phrase dictionary; single-assertion true/false statements of 9 to 16 words; image-swap false statements; and over-reading probes with a normal answer in about 45% of them.
  • New labelled items. Programmatic items from the Bayer expert polygons; 4,365 questions written by an open LLM (Qwen3.6-35B-A3B) from caption evidence and kept by an image-grounded verifier; and 5,688 items written by Claude Opus from 640 rat images and their expert labels.
  • Cleaning. Image-grounded audits with hidden wrong-answer controls (every control was caught); a no-image filter that dropped 11,024 multiple-choice items a text-only model could answer; a panel check that removed 27,016 items on composite, non-H&E or wrong-organ panels.
  • Excluded. VIPER images and text (never stored or trained on), MMO (VIPER's main image source), all non-commercial and no-derivatives data, and TG-GATEs slides whose regions matched VIPER images in a template and perceptual-hash check.

The dataset has 235,455 items. After the licence and quality filters the training pool is 181,887 items, from which 166,000 samples were drawn: each good item about once, Claude-written and verified-QA items twice, mouse data at 0.6×, 5,000 round-1 caption questions and 8,500 replay items.

Training procedure

Samples 166,000 (2,594 steps × 64), one pass
Optimiser AdamW, learning rate 1e-4, cosine schedule with 3% warm-up, effective batch 64
Loss cross-entropy plus Brier score on soft labels over the option tokens, class-balanced yes/no weights
Replay KL divergence to the base model on 5% generic items; the teacher is the same network with the adapter disabled, checked to equal the base model at every checkpoint
Encoding 40% of items without a context line (VIPER prompts have none); options re-permuted at every draw; stain, JPEG, scale and crop augmentation; label-independent synthetic markers
Checkpoint evaluated every 10% of training; selected by worst-group dev accuracy under a false-alarm cap (step 2,335)
Hardware one NVIDIA H200, 9.8 hours
Software Unsloth and PEFT 0.21.2; llm2jev 0.6.1 prompt format

Choosing the strength λ (pre-registered)

The final strength was chosen by a rule fixed before any VIPER number was seen, on a VIPER-format proxy built from our own dev split (330 five-option multiple-choice questions and 270 true/false sets, with an organ mix weighted toward VIPER's). Rule: take the proxy-best λ in {0.15 … 1.0}; ties within 1 point go to the smaller λ. VIPER never informed the choice.

λ 0 (base) 0.15 0.2 0.25 0.3 0.4 0.5 0.7 1.0
Proxy score 61.4 74.3 76.6 78.8 80.3 83.0 83.9 84.4 84.5

λ 0.5, 0.7 and 1.0 are within 1 point of the best, so the rule picked λ 0.5. The proxy was drawn from the same generators as the training data and overestimates absolute performance (83.9 against a VIPER mean of 64.9); it is used only to rank strengths.

Evaluation

The benchmark. VIPER (Mahmood Lab, Harvard Medical School, 2026) is a public benchmark for toxicologic pathology: 1,251 questions on 419 rat tissue images (1024 × 1024 px) from 9 organ groups. A veterinary pathologist wrote a seed question for each image and reviewed every released question. Each image carries three questions:

  • a multiple-choice question with five options ("MCQ" in the paper), scored as the mean over the 5 cyclic shifts of the options;
  • a true/false question set of four statements ("KPrim"), each asked separately and scored with the half-point rule (4 of 4 correct = 1, 3 of 4 = 0.5);
  • a free-text question, not evaluated here: TissueDecision-9B is a decision model and does not write descriptions. ToxScribe's overall VIPER scores include free text; we compare the multiple-choice and true/false scores only.

We use the official viper-bench evaluator, reached through an OpenAI-compatible proxy that returns TissueDecision-9B's single-pass decision as a letter or as True/False (parse rate 100%).

Published models were scored by the VIPER authors with the generative protocol, in which the model writes the letter or True/False itself; the scoring is the same.

VIPER against every reported model

Model Parameters Weights Multiple choice True/false sets Combined Source
TissueDecision-9B (single pass) 9B open 67.5 62.3 64.9 official evaluator, this work
ToxScribe-Qwen-27B 27B proprietary 67.1 61.8 64.5 VIPER paper
ToxScribe-Gemma-31B 31B proprietary 65.2 64.1 64.7 VIPER paper
Gemma-4-31B 31B open 60.7 54.1 57.4 VIPER paper
Qwen3.5-27B 27B open 60.0 46.6 53.3 VIPER paper
JPT-9B 9B open 59.8 55.6 57.7 decision track, measured by us
PathChat+ not published proprietary 58.7 41.5 50.1 VIPER paper
GPT-5.4 not published proprietary 58.5 54.3 56.4 VIPER paper
Qwen3.5-9B (base) 9B open 56.2 51.1 53.6 official evaluator, measured by us
  • Combined is the mean of the multiple-choice and true/false scores (for published models, of their one-decimal scores). The VIPER paper's own "overall" score also averages in free-text answers, which TissueDecision-9B does not write.
  • Leaders. TissueDecision-9B has the highest combined and the highest multiple-choice score of every model. On the true/false sets it outperforms ToxScribe-Qwen-27B and every open model; ToxScribe-Gemma-31B leads at 64.1.
  • Sample size. VIPER has 419 multiple-choice questions, so one point is about 4 questions (standard error about ±2.3 points).
  • Option-averaged mode. Averaging over the 5 option orders gives a multiple-choice score of 69.0 (base: 59.7). This is an inference mode costing five passes; the headline is single-pass.
  • Decision track. Scoring the same single-pass decisions directly gives 67.5 / 62.6, and 67.0 / 62.1 with a context line. The official evaluator's answers agree with the decision track on 99.6% of MCQ picks and 99.8% of statements.
  • Strength sensitivity. At λ 0.4 / 0.7 the scores are 67.0 / 68.5 (multiple choice) and 61.8 / 62.1 (true/false sets): VIPER varies by less than 1.5 points across λ 0.4 to 0.7.

By question category

VIPER by question category

Category (multiple-choice + true/false items) Qwen3.5-9B (base) TissueDecision-9B
Anatomy (241) 56.0 64.6
Over-reading probes (160) 69.4 81.1
Localization (151) 44.5 53.4
Pathology identification (147) 48.8 62.4
Characterization (52) 55.6 68.3
Artifact (42) 55.0 68.3
Quantification (40) 31.8 49.8
Male reproductive organs (99) 36.7 46.0

Combined multiple-choice (5-shift) and true/false (half-point) score per item, decision track. Other changes against the base: multiple-choice rotation consistency (same answer under every option order) 0.44 → 0.73; statement accuracy 72.6% → 79.1%; the gap between the mean P(true) and the true rate of true/false statements 0.11 → 0.06.

Held-out real slides

Held-out real slides

Bayer test studies: 1,174 tiles from rat liver slides of 34 Open TG-GATEs studies held out from training, labelled by the Bayer pathologists' polygons (681 lesion tiles, 332 normal tiles on lesion slides, 161 tiles on clean slides). Question: "Is there any histopathological lesion (abnormal finding) in this image?" TG-GATEs rat-liver probe: held-out regions from Bayer-annotated TG-GATEs slides. 95% confidence intervals from a slide-clustered bootstrap.

Test Qwen3.5-9B (base) TissueDecision-9B
Bayer: lesion vs clean-slide AUROC 0.805 (0.720–0.881) 0.961 (0.933–0.981)
Bayer: lesion vs normal tiles within lesion slides, AUROC 0.822 (0.747–0.885) 0.897 (0.838–0.946)
Bayer: lesion tiles called lesion (raw, P > 0.5) 19.1% 86.2%
Bayer: tiles on clean slides called lesion (raw) 0.0% 5.0%
Bayer: normal tiles on lesion slides called lesion (raw) 0.6% 19.3%
Bayer, with the yes/no calibration offset: lesion tiles / clean-slide tiles called lesion 89.4% / 10.6%
TG-GATEs probe: lesion vs clean AUROC 0.843 (0.670–0.962) 0.947 (0.894–0.986)
TG-GATEs probe: within lesion slides, AUROC 0.721 (0.586–0.859) 0.773 (0.653–0.886)

Internal test split

3,843 items from articles, atlas pages and studies held out from training (decision track, context line kept; 392 five-option multiple-choice questions, 89 true/false sets, 2,032 yes/no items).

Qwen3.5-9B (base) TissueDecision-9B
Accuracy 72.3% 84.5%
Yes/no false alarms 27.4% 12.5%
Yes/no recall 69.6% 76.9%
Expected calibration error 5.8% 1.5%
Multiple choice, mean over 5 cyclic shifts 74.7 88.4
True/false sets, half-point rule 68.5 77.5

Limitations

  • No free text. The model does not write descriptions or reports, and VIPER's free-text track was not evaluated.
  • One training run. VIPER has 419 multiple-choice questions (standard error about ±2.3 points).
  • Weak spots. Male reproductive organs (46.0 on VIPER), quantification (49.8) and localization (53.4) are the lowest categories. Rat thyroid, urinary bladder, salivary gland and male accessory glands are scarce in open data and under-represented in training.
  • False alarms near lesions. On slides that carry a lesion, 19.3% of the normal-annotated tiles are called lesion at the raw threshold.
  • Labels. The Claude-written items were audited by the same model family, not by a human pathologist. Some literature labels inherit caption-panel misalignment despite filtering.
  • Domain. Training images are H&E, about half rat and half mouse; the TG-GATEs slides, the Bayer test and the probe come from one laboratory and scanner. Other stains, species, scanners and laboratories are untested.
  • Calibration offsets were fitted on our dev split; check them on your own data before using a threshold.

Intended use

In scope: research on rat and mouse tissue pathology (safety studies, disease models, mouse phenotyping); a second reader for H&E fields; screening and ranking tiles for review; research on calibration and over-reading in pathology models; benchmarking.

Out of scope: diagnosis of any patient or animal; regulatory or GLP decisions without review by a qualified pathologist; human pathology; non-H&E stains; free-text reporting.

Licence

The TissueDecision-9B weights are released under CC BY-SA 4.0 (LICENSE).

  • Base model: Qwen3.5-9B, Apache-2.0 (LICENSE-Qwen3.5).
  • Training data:
    • Open TG-GATEs slides and the Bayer annotations: CC BY-SA 2.1 JP. Attribution: "Toxicogenomics Project and Toxicogenomics Informatics Project under CC Attribution-Share Alike 2.1 Japan", with the database's Additional License.
    • IMPC: CC BY 4.0. PMC figures: CC BY or CC0.
    • NTP: US Government public domain.
    • No non-commercial or no-derivatives data was used.
  • Evaluation data: VIPER (CC BY-NC 4.0) was used for evaluation only and never for training.

Citation

@misc{tissuedecision9b2026,
  title  = {TissueDecision-9B: an open decision vision-language model for rat and mouse tissue pathology},
  author = {lighteternal},
  year   = {2026},
  url    = {https://huggingface.co/lighteternal/tissuedecision-9b}
}

Acknowledgements

  • Data: Open TG-GATEs (Toxicogenomics Project and Toxicogenomics Informatics Project, NIBIOHN, Japan); the Bayer pathologists who annotated 230 Open TG-GATEs liver slides (M. Radbruch, B. Lawrenz, H. Pischon, V. Bertani, U. Bach, F. Schorsch, A. Poehlmann, S. Villalba); the National Toxicology Program (NIEHS) for the Nonneoplastic Lesion Atlas; the International Mouse Phenotyping Consortium and the BioImage Archive; and the authors of the PubMed Central open-access articles whose figures are used.
  • Benchmark: the VIPER authors (Mahmood lab) for the benchmark, its official evaluator and its documentation.
  • Base model and tools: the Qwen team for Qwen3.5-9B; llm2jev for the decision prompt format; Unsloth, PEFT and vLLM.
  • AI-written items: 5,688 training items were written by Claude (Anthropic) from each image and its expert label (98.5% judged correct on an audit sample of 136). Claude also ran the image-grounded audits of the other item sets.
Downloads last month
35
Safetensors
Model size
9B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for lighteternal/tissuedecision-9b

Finetuned
Qwen/Qwen3.5-9B
Finetuned
(1065)
this model

Dataset used to train lighteternal/tissuedecision-9b

Space using lighteternal/tissuedecision-9b 1

Evaluation results