MBZUAI
MedMO-4B
Available on FriendliAI
Run this model inference on single tenant GPU with unmatched speed and reliability at scale.
Model Details
Model Provider
MBZUAI
Model Tree
this model
Input Modalities
Output Modalities
Supported Functionality
GLM-5.3 is live. Run Z.ai's latest model on Friendli Model APIs. Try it today ➜
MBZUAI
Available on FriendliAI
Run this model inference on single tenant GPU with unmatched speed and reliability at scale.
Model Details
Model Provider
MBZUAI
Model Tree
Input Modalities
Output Modalities
Supported Functionality
MedMO-8B-Next sets a new state-of-the-art across the board, achieving the highest average scores on both medical VQA and Text QA benchmarks — surpassing strong baselines including Lingshu-7B and Fleming-VL-8B.
OMIVQA = OmniMedVQA · MedXQA = MedXpertQA · Medbullets reported as op4/op5
| Model | MMMU-Med | VQA-RAD (closed/all) | SLAKE (closed/all) | PathVQA | PMC-VQA | OmniMedVQA | MedXpertQA | Avg. |
|---|---|---|---|---|---|---|---|---|
| Lingshu-7B | 54.0 | 77.2 / 43.0 | 82.4 / 33.2 | 41.9 | 54.2 | 82.9 | 26.9 | 55.1 |
| Fleming-VL-8B | 63.3 | 78.4 / 56.4 | 86.9 / 80.0 | 56.5 | 64.3 | 88.2 | 21.6 | 66.1 |
| MediX-R1-8B | 63.3 | 75.2/51.6 | 70.3/54.4 | 41.0 | 55.3 | 73.8 | 24.9 | 57.1 |
| MedMO-4B | 54.6 | 50.9 / 35.0 | 41.0 / 30.0 | 42.4 | 50.6 | 79.7 | 24.8 | 45.4 |
| MedMO-8B | 64.6 | 72.3 / 64.7 | 70.6 / 70.0 | 56.3 | 59.4 | 84.8 | 26.2 | 63.2 |
| MedMO-4B-Next | 58.7 | 79.7 / 59.6 | 78.0 / 74.0 | 73.3 | 75.7 | 90.6 | 27.0 | 68.5 |
| MedMO-8B-Next | 69.3 | 86.4 / 68.0 | 83.0 / 81.6 | 56.3 | 74.1 | 93.3 | 42.9 | 72.7 |
| Model | MMLU-Med | PubMedQA | MedMCQA | MedQA | Medbullets (op4/op5) | MedXpertQA | SGPQA | Avg. |
|---|---|---|---|---|---|---|---|---|
| Lingshu-7B | 69.6 | 75.8 | 56.3 | 63.5 | 62.0 / 53.8 | 16.4 | 27.5 | 53.1 |
| Fleming-VL-8B | 71.8 | 74.0 | 51.8 | 53.7 | 40.5 / 37.3 | 12.1 | 24.9 | 45.7 |
| MediX-R1-8B | 79.0 | 73.4 | 60.1 | 85.8 | 55.1/47.0 | 14.4 | 34.3 | 56.1 |
| MedMO-4B | 75.7 | 78.0 | 58.0 | 78.5 | 57.5 / 47.7 | 16.4 | 29.4 | 55.1 |
| MedMO-8B | 81.0 | 77.6 | 65.0 | 84.3 | 66.5 / 60.2 | 19.9 | 36.0 | 61.3 |
| MedMO-4B-Next | 74.8 | 78.2 | 58.1 | 78.3 | 57.4 / 47.6 | 16.5 | 29.5 | 55.0 |
| MedMO-8B-Next | 80.2 | 75.6 | 62.0 | 83.8 | 65.2 / 57.8 | 20.9 | 35.5 | 60.1 |
Bold = best result, underline = second-best result.
- Benchmarked on AMD MI210 GPU.
| Domain | Modalities |
|---|---|
| Radiology | X-ray, CT, MRI, Ultrasound |
| Pathology | Whole-slide imaging, Microscopy |
| Ophthalmology | Fundus photography, OCT |
| Dermatology | Clinical skin images |
| Nuclear Medicine | PET, SPECT |
bash
pip install transformers torch qwen-vl-utilspython
from transformers import Qwen3VLForConditionalGeneration, AutoProcessorfrom qwen_vl_utils import process_vision_infoimport torch # Load modelmodel = Qwen3VLForConditionalGeneration.from_pretrained( "MBZUAI/MedMO-8B-Next", torch_dtype=torch.bfloat16, attn_implementation="flash_attention_2", device_map="auto",) processor = AutoProcessor.from_pretrained("MBZUAI/MedMO-8B-Next") # Prepare inputmessages = [ { "role": "user", "content": [ { "type": "image", "image": "path/to/medical/image.png", }, {"type": "text", "text": "What abnormalities are present in this chest X-ray?"}, ], }] # Process and generatetext = processor.apply_chat_template( messages, tokenize=False, add_generation_prompt=True)image_inputs, video_inputs = process_vision_info(messages)inputs = processor( text=[text], images=image_inputs, videos=video_inputs, padding=True, return_tensors="pt",).to(model.device) generated_ids = model.generate(**inputs, max_new_tokens=512)generated_ids_trimmed = [ out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)]output_text = processor.batch_decode( generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False)print(output_text[0])python
messages = [ { "role": "user", "content": [ {"type": "image", "image": "chest_xray.png"}, {"type": "text", "text": "Detect and localize all abnormalities in this image."}, ], }]# Example output:# "Fractures <box>[[156, 516, 231, 607], [240, 529, 296, 581]]</box>"python
messages = [ { "role": "user", "content": [ {"type": "image", "image": "ct_scan.png"}, {"type": "text", "text": "Generate a detailed radiology report for this CT scan."}, ], }]# MedMO-8B-Next generates comprehensive clinical reports with findings and impressions| Model | Parameters | Best For |
|---|---|---|
| MedMO-8B-Next | 8B | SOTA highest accuracy, all tasks — recommended |
| MedMO-4B-Next | 4B | 2nd SOTA, high accuracy in resource-constrained environments |
| MedMO-8B | 8B | Previous generation |
| MedMO-4B | 4B | Resource-constrained environments |
If you use MedMO in your research, please cite our paper:
bibtex
@article{deria2026medmo, title={MedMO: Grounding and Understanding Multimodal Large Language Model for Medical Images}, author={Deria, Ankan and Kumar, Komal and Dukre, Adinath Madhavrao and Segal, Eran and Khan, Salman and Razzak, Imran}, journal={arXiv preprint arXiv:2602.06965}, year={2026}}This project is licensed under the Apache License 2.0 — see the LICENSE file for details.
from transformers import Qwen3VLForConditionalGeneration, AutoProcessorfrom qwen_vl_utils import process_vision_infoimport torch # Load modelmodel = Qwen3VLForConditionalGeneration.from_pretrained( "MBZUAI/MedMO-8B-Next", torch_dtype=torch.bfloat16, attn_implementation="flash_attention_2", device_map="auto",) processor = AutoProcessor.from_pretrained("MBZUAI/MedMO-8B-Next") # Prepare inputmessages = [ { "role": "user", "content": [ { "type": "image", "image": "path/to/medical/image.png", }, {"type": "text", "text": "What abnormalities are present in this chest X-ray?"}, ], }] # Process and generatetext = processor.apply_chat_template( messages, tokenize=False, add_generation_prompt=True)image_inputs, video_inputs = process_vision_info(messages)inputs = processor( text=[text], images=image_inputs, videos=video_inputs, padding=True, return_tensors="pt",).to(model.device) generated_ids = model.generate(**inputs, max_new_tokens=512)generated_ids_trimmed = [ out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)]output_text = processor.batch_decode( generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False)print(output_text[0])messages = [ { "role": "user", "content": [ {"type": "image", "image": "chest_xray.png"}, {"type": "text", "text": "Detect and localize all abnormalities in this image."}, ], }]# Example output:# "Fractures <box>[[156, 516, 231, 607], [240, 529, 296, 581]]</box>"messages = [ { "role": "user", "content": [ {"type": "image", "image": "ct_scan.png"}, {"type": "text", "text": "Generate a detailed radiology report for this CT scan."}, ], }]# MedMO-8B-Next generates comprehensive clinical reports with findings and impressions@article{deria2026medmo, title={MedMO: Grounding and Understanding Multimodal Large Language Model for Medical Images}, author={Deria, Ankan and Kumar, Komal and Dukre, Adinath Madhavrao and Segal, Eran and Khan, Salman and Razzak, Imran}, journal={arXiv preprint arXiv:2602.06965}, year={2026}}