TissueDecision-9B LoRA adapter

An open decision vision-language model (VLM) for rat and mouse tissue pathology, as a LoRA adapter.

These are the LoRA weights of TissueDecision-9B, for use on top of Qwen/Qwen3.5-9B. The model reads a microscope image of tissue and returns a probability for every answer to a pathology question in about 0.1 s. It has the highest score on VIPER, a public expert-reviewed benchmark for toxicologic pathology, across its multiple-choice and true/false questions (64.9%, ahead of proprietary specialist models three times its size). For most uses the merged model is simpler; results, training and limitations are on its card.

Base Qwen/Qwen3.5-9B (revision c202236)
Rank / alpha 32 / 32, standard scaling (not rank-stabilised): effective scale 1.0
Strength trained at α 64 (scale 2); the selected strength λ 0.5 is built into lora_alpha, so load it as is and do not rescale
Adapted layers every linear layer of the language model (attention, Gated-DeltaNet projections, MLP); 248 modules, 86,556,672 parameters; vision encoder unchanged
Calibration calibration.json: optional logit offsets for yes/no (+0.25) and statement (+0.0625) questions
VIPER (official evaluator) multiple choice 67.5 (highest of all reported models), true/false sets 62.3, single pass

Serving

Download this repo to a local folder, then serve it on the base model. This is the configuration evaluated on VIPER, and the one this command ran with on an NVIDIA H200 (vLLM 0.31.0):

vllm serve Qwen/Qwen3.5-9B --enable-lora --max-lora-rank 32 --lora-modules tissuedecision=<local copy of this repo> \
    --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}'

Requests then use the served name tissuedecision; the prompt format, client code and HTTP API are on the model card. This repo has no processor or tokenizer: take them from Qwen/Qwen3.5-9B (identical to the merged model's). To run the model card's usage_example.py (with tissuedecision_server.py from the model repo) against this server, save the processor under the served name, then point the script at it:

python -c "from transformers import AutoProcessor; AutoProcessor.from_pretrained('Qwen/Qwen3.5-9B').save_pretrained('tissuedecision')"
TISSUEDECISION_MODEL=tissuedecision python usage_example.py lesion_tile.jpg "Rat liver, H&E"

In your own code: LLM2Jev(AutoProcessor.from_pretrained("Qwen/Qwen3.5-9B"), VLLM("http://localhost:8000", "tissuedecision")). Checked from a fresh download of this repo on an H200 (vLLM 0.31.0): on three held-out example images the 9 answers matched the merged model's (maximum probability difference 0.021). On 60 held-out items this configuration and the merged model gave the same decision on 100% of items (maximum probability difference 0.031, about the same as the 0.030 between two runs of this configuration).

TissueDecision family

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

Licence: CC BY-SA 4.0 (LICENSE). Base model: Apache-2.0 (LICENSE-Qwen3.5).

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for lighteternal/tissuedecision-9b-lora

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

Dataset used to train lighteternal/tissuedecision-9b-lora