Image-Text-to-Text
Transformers
Safetensors
English
pathology
computational-pathology
digital-pathology
histopathology
whole-slide-image
vision-language-model
report-generation
synoptic-report
case-level
conch
qwen2.5
Eval Results (legacy)
Instructions to use AtlasAnalyticsLab/PathoSynVLM with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use AtlasAnalyticsLab/PathoSynVLM with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="AtlasAnalyticsLab/PathoSynVLM")# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("AtlasAnalyticsLab/PathoSynVLM", device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use AtlasAnalyticsLab/PathoSynVLM with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "AtlasAnalyticsLab/PathoSynVLM" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "AtlasAnalyticsLab/PathoSynVLM", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/AtlasAnalyticsLab/PathoSynVLM
- SGLang
How to use AtlasAnalyticsLab/PathoSynVLM with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "AtlasAnalyticsLab/PathoSynVLM" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "AtlasAnalyticsLab/PathoSynVLM", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "AtlasAnalyticsLab/PathoSynVLM" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "AtlasAnalyticsLab/PathoSynVLM", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }' - Docker Model Runner
How to use AtlasAnalyticsLab/PathoSynVLM with Docker Model Runner:
docker model run hf.co/AtlasAnalyticsLab/PathoSynVLM
File size: 7,932 Bytes
5feef29 aa50ff8 5fc652d aa50ff8 5fc652d aa50ff8 5feef29 aa50ff8 aa0ba11 aa50ff8 aa0ba11 aa50ff8 aa0ba11 aa50ff8 aa0ba11 aa50ff8 aa0ba11 aa50ff8 aa0ba11 aa50ff8 aa0ba11 aa50ff8 aa0ba11 aa50ff8 aa0ba11 aa50ff8 aa0ba11 aa50ff8 aa0ba11 aa50ff8 aa0ba11 aa50ff8 aa0ba11 aa50ff8 aa0ba11 aa50ff8 aa0ba11 aa50ff8 aa0ba11 aa50ff8 aa0ba11 aa50ff8 5fc652d aa50ff8 aa0ba11 aa50ff8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 | ---
license: cc-by-nc-sa-4.0
language:
- en
library_name: transformers
pipeline_tag: image-text-to-text
base_model:
- Qwen/Qwen2.5-3B-Instruct
tags:
- pathology
- computational-pathology
- digital-pathology
- histopathology
- whole-slide-image
- vision-language-model
- report-generation
- synoptic-report
- case-level
- conch
- qwen2.5
datasets:
- david4real/HistGen
- histai/HISTAI-metadata
metrics:
- rouge
- meteor
- bleu
- bertscore
arxiv: 2605.30716
model-index:
- name: PathoSynVLM
results:
- task:
type: image-text-to-text
name: Case-level pathology synoptic report generation
dataset:
name: HISTAI case-report pairs
type: histai/HISTAI-metadata
metrics:
- type: rouge
name: ROUGE-L
value: 0.2495
- type: meteor
name: METEOR
value: 0.1988
- type: bleu
name: BLEU-4
value: 0.0525
- type: bertscore
name: BERTScore F1
value: 0.3018
---
# PathoSynVLM: Case-Level Pathology Synoptic Report Generation
[](https://arxiv.org/abs/2605.30716)
[](https://github.com/AtlasAnalyticsLab/PathoSynVLM)
[](https://atlasanalyticslab.github.io/PathoSynVLM/)
PathoSynVLM is a token-efficient vision-language model for generating
case-level pathology synoptic reports from one or more whole-slide
images represented as precomputed CONCHv1.5 patch embeddings.
**Code and complete documentation:** [https://github.com/AtlasAnalyticsLab/PathoSynVLM](https://github.com/AtlasAnalyticsLab/PathoSynVLM)
This repository provides the trained model package. Use it with the
PathoSynVLM code repository for embedding preparation, case-level
inference, evaluation, and training.

## What This Repository Contains
| Path | Purpose |
|---|---|
| `llm/model.safetensors` | Merged language-model weights for the selected Stage 2 checkpoint. |
| `vlm_state.pt` | Vision-language aligner, WSI marker, and WSI index tensors. |
| `tokenizer/` | Tokenizer configuration and chat template used for inference. |
| `config.json` | PathoSynVLM architecture and inference settings. |
| `labels.json` | Input contract and generated report-field schema. |
| `best_checkpoint_summary.json` | Selected checkpoint and validation summary. |
| `model_index.json` | Machine-readable task, dataset, and metric metadata. |
| `examples/` | Example case-level input manifest. |
The paper run used `unfreeze_llm_base=true`, so the release package
includes the merged/full language-model weights under `llm/`, not only a
LoRA adapter.
## Quick Start
The release is loaded through the PathoSynVLM inference code rather than
directly through `transformers.AutoModel`. A CUDA-capable GPU is
recommended for normal use; CPU execution is intended for smoke tests.
### 1. Install the code
```bash
git clone https://github.com/AtlasAnalyticsLab/PathoSynVLM PathoSynVLM
cd PathoSynVLM
conda create -n pathosynvlm python=3.11 -y
conda activate pathosynvlm
export PYTHONNOUSERSITE=1
pip install -e .
```
### 2. Download the model
```bash
source configs/paths.example.env
hf download AtlasAnalyticsLab/PathoSynVLM \
--local-dir "$PATHOSYNVLM_WEIGHTS_ROOT/pathosynvlm-stage2-main"
```
### 3. Generate a report for one case
Pass every WSI embedding file belonging to the case in the desired slide
order:
```bash
# Optional when the paths below are relative.
export PATHOSYNVLM_EMBEDDINGS_ROOT=/path/to/conch_v15/embeddings
python scripts/generate_case_report.py \
--embeddings case_001/slide_1.h5 case_001/slide_2.h5 \
--output_json report.json
```
Relative `--embeddings` paths are resolved under
`PATHOSYNVLM_EMBEDDINGS_ROOT`; absolute `.h5` paths work without setting
that variable. The JSON output records the generated report, resolved
slide paths, per-WSI patch counts, and feature key.
Generated report text follows:
```text
Diagnosis: ...
Certainty: ...
Conclusion: ...
```
## Input Format
PathoSynVLM runs on precomputed WSI patch embeddings, not raw WSIs. Each
`.h5` file should contain:
```text
/features/conch_v15 # shape: (num_patches, 768)
```
See the GitHub [embedding guide](https://github.com/AtlasAnalyticsLab/PathoSynVLM/blob/main/docs/embeddings.md)
for patch extraction, feature generation, H5 validation, and configurable
storage paths. Dataset placement and access requirements are documented in
the [data guide](https://github.com/AtlasAnalyticsLab/PathoSynVLM/blob/main/docs/data.md).
### From Precomputed H5 Feature Files
This is the fastest path. Put one or more WSI embedding files for a case
into the `--embeddings` argument:
```bash
python scripts/generate_case_report.py \
--embeddings case_slide_1.h5 case_slide_2.h5 \
--output_json report.json
```
### From Raw Whole-Slide Images
First extract tissue patches and CONCHv1.5 patch embeddings using a WSI
preprocessing pipeline that writes the H5 layout above. Then pass the
resulting H5 files to `scripts/generate_case_report.py`. PathoSynVLM does
not send raw WSI pixels directly to the language model.
## Running the Paper Pipeline
Follow the GitHub [paper pipeline](https://github.com/AtlasAnalyticsLab/PathoSynVLM/blob/main/docs/paper_pipeline.md)
for the complete sequence: dataset setup, CONCHv1.5 embedding generation,
metadata preparation, Stage 1 alignment, Stage 2 case-level fine-tuning,
and evaluation. Machine-readable paper configurations and reported values
are maintained in the same code repository.
## Training Data
The released Stage 2 checkpoint was fine-tuned on case-report pairs from
[HISTAI](https://huggingface.co/datasets/histai/HISTAI-metadata). The
official metadata repository is the starting point for dataset access and
links to the organ-specific WSI repositories used by HISTAI. See the
[HISTAI source documentation](https://github.com/HistAI/HISTAI) for the
dataset structure, subsets, citation, and access instructions.
HISTAI data remain subject to the dataset's CC BY-NC 4.0 license and
current access requirements.
## Training Recipe
- Stage 1: train the two-layer MLP aligner on HistGen + REG2025 while
keeping the CONCHv1.5 patch encoder and LLM frozen.
- Stage 2: fine-tune on HISTAI case-report pairs with WSI marker tokens.
Checkpoint selected for release:
- checkpoint step: `30400`
- checkpoint epoch: `7`
- validation loss: `1.010892`
- prompt style: `double`
- patch level: `5x_512`
- max vision tokens: `4096`
## Reported Metrics
Stage 1 aligner-only training:
| ROUGE-L | METEOR | BLEU-4 | BERTScore F1 |
|---:|---:|---:|---:|
| 0.4743 | 0.4810 | 0.1247 | 0.4253 |
Stage 2 HISTAI main result:
| ROUGE-L | METEOR | BLEU-4 | BERTScore F1 | Diagnosis Exact | Diagnosis Relaxed | Certainty |
|---:|---:|---:|---:|---:|---:|---:|
| 0.2495 | 0.1988 | 0.0525 | 0.3018 | 0.1667 | 0.3333 | 0.9000 |
## Intended Use
This model is intended for research on pathology report generation from
precomputed WSI patch embeddings.
It is not a clinical diagnostic device and should not be used for patient
care without appropriate validation, regulatory review, and expert
oversight.
## License and Commercial Use
This repository uses CC BY-NC-SA 4.0. Research and non-commercial use only.
Dataset access, pretrained third-party models, and any externally hosted
model weights remain subject to their own terms.
## Citation
```bibtex
@inproceedings{yang2026simpletokenvlm,
title = {Simple Token-Efficient Vision-Language Model for Case-Level Pathology Synoptic Report Generation},
author = {Yang, Zhiyuan and Cheng, Jiahao and Trinh, Vincent Quoc-Huy and Hosseini, Mahdi S.},
booktitle = {Proceedings of the 7th International Conference on Deep Learning Theory and Applications},
pages = {514--537},
year = {2026},
issn = {2184-9277}
}
```
|