Views
No views yet
[!Note] This is an improved version of Kimi-VL-A3B-Thinking. Please consider using this updated model instead of the previous version.
[!Note] Please visit our tech blog for recommended inference recipe of this model: Kimi-VL-A3B-Thinking-2506: A Quick Navigation

| Benchmark (Metric) | GPT-4o | Qwen2.5-VL-7B | Gemma3-12B-IT | Kimi-VL-A3B-Instruct | Kimi-VL-A3B-Thinking | Kimi-VL-A3B-Thinking-2506 |
|---|---|---|---|---|---|---|
| General Multimodal | ||||||
| MMBench-EN-v1.1 (Acc) | 83.1 | 83.2 | 74.6 | 82.9 | 76.0 | 84.4 |
| RealWorldQA (Acc) | 75.4 | 68.5 | 59.1 | 68.1 | 64.0 | 70.0 |
| OCRBench (Acc) | 815 | 864 | 702 | 864 | 864 | 869 |
| MMStar (Acc) | 64.7 | 63.0 | 56.1 | 61.7 | 64.2 | 70.4 |
| MMVet (Acc) | 69.1 | 67.1 | 64.9 | 66.7 | 69.5 | 78.1 |
| Reasoning | ||||||
| MMMU (val, Pass@1) | 69.1 | 58.6 | 59.6 | 57.0 | 61.7 | 64.0 |
| MMMU-Pro (Pass@1) | 51.7 | 38.1 | 32.1 | 36.0 | 43.2 | 46.3 |
| Math | ||||||
| MATH-Vision (Pass@1) | 30.4 | 25.0 | 32.1 | 21.7 | 36.8 | 56.9 |
| MathVista_MINI (Pass@1) | 63.8 | 68.0 | 56.1 | 68.6 | 71.7 | 80.1 |
| Video | ||||||
| VideoMMMU (Pass@1) | 61.2 | 47.4 | 57.0 | 52.1 | 55.5 | 65.2 |
| MMVU (Pass@1) | 67.4 | 50.1 | 57.0 | 52.7 | 53.0 | 57.5 |
| Video-MME (w/ sub.) | 77.2 | 71.6 | 62.1 | 72.7 | 66.0 | 71.9 |
| Agent Grounding | ||||||
| ScreenSpot-Pro (Acc) | 0.8 | 29.0 | — | 35.4 | — | 52.8 |
| ScreenSpot-V2 (Acc) | 18.1 | 84.2 | — | 92.8 | — | 91.4 |
| OSWorld-G (Acc) | - | 31.5 | — | 41.6 | — | 52.5 |
| Long Document | ||||||
| MMLongBench-DOC (Acc) | 42.8 | 29.6 | 21.3 | 35.1 | 32.5 | 42.1 |
| Benchmark (Metric) | Kimi-VL-A3B-Thinking-2506 | Qwen2.5-VL-32B | Qwen2.5-VL-72B | Gemma3-27B-IT |
|---|---|---|---|---|
| General Multimodal | ||||
| MMBench-EN-v1.1 (Acc) | 84.4 | - | 88.3 | 78.9 |
| RealWorldQA (Acc) | 70.0 | - | 75.7 | 62.5 |
| OCRBench (Acc) | 869 | - | 885 | 753 |
| MMStar (Acc) | 70.4 | 69.5 | 70.8 | 63.1 |
| MMVet (Acc) | 78.1 | - | 74.0 | 71.0 |
| Reasoning | ||||
| MMMU (val, Pass@1) | 64.0 | 70.0 | 70.2 | 64.9 |
| MMMU-Pro (Pass@1) | 46.3 | 49.5 | 51.1 | - |
| MATH-Vision (Pass@1) | 56.9 | 38.4 | 38.1 | 35.4 |
| MathVista_MINI (Pass@1) | 80.1 | 74.7 | 74.8 | 59.8 |
| Video | ||||
| VideoMMMU (Pass@1) | 65.2 | - | 60.2 | 61.8 |
| MMVU (Pass@1) | 57.5 | - | 62.9 | 61.3 |
| Video-MME (w/ sub.) | 71.9 | 70.5/77.9 | 73.3/79.1 | - |
| Agent Grounding | ||||
| ScreenSpot-Pro (Acc) | 52.8 | 39.4 | 43.6 | - |
| ScreenSpot-V2 (Acc) | 91.4 | - | - | - |
| OSWorld-G (Acc) | 52.5 | 46.5 | - | - |
| Long Document | ||||
| MMLongBench-DOC (Acc) | 42.1 | - | 38.8 | - |
MAX_JOBS=4 pip install vllm==0.9.1 blobfile flash-attn --no-build-isolation[!Note] It is important to explicitly install flash-attn to avoid CUDA out-of-memory.
1from transformers import AutoProcessor
2from vllm import LLM, SamplingParams
3
4model_path = "moonshotai/Kimi-VL-A3B-Thinking-2506"
5llm = LLM(
6 model_path,
7 trust_remote_code=True,
8 max_num_seqs=8,
9 max_model_len=131072,
10 limit_mm_per_prompt={"image": 256}
11)
12
13processor = AutoProcessor.from_pretrained(model_path, trust_remote_code=True)
14
15sampling_params = SamplingParams(max_tokens=32768, temperature=0.8)
16
17
18import requests
19from PIL import Image
20
21def extract_thinking_and_summary(text: str, bot: str = "◁think▷", eot: str = "◁/think▷") -> str:
22 if bot in text and eot not in text:
23 return ""
24 if eot in text:
25 return text[text.index(bot) + len(bot):text.index(eot)].strip(), text[text.index(eot) + len(eot) :].strip()
26 return "", text
27
28OUTPUT_FORMAT = "--------Thinking--------\n{thinking}\n\n--------Summary--------\n{summary}"
29
30url = "https://huggingface.co/spaces/moonshotai/Kimi-VL-A3B-Thinking/resolve/main/images/demo6.jpeg"
31image = Image.open(requests.get(url,stream=True).raw)
32
33messages = [
34 {"role": "user", "content": [{"type": "image", "image": ""}, {"type": "text", "text": "What kind of cat is this? Answer with one word."}]}
35]
36text = processor.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt")
37
38outputs = llm.generate([{"prompt": text, "multi_modal_data": {"image": image}}], sampling_params=sampling_params)
39generated_text = outputs[0].outputs[0].text
40
41thinking, summary = extract_thinking_and_summary(generated_text)
42print(OUTPUT_FORMAT.format(thinking=thinking, summary=summary))1from PIL import Image
2from transformers import AutoModelForCausalLM, AutoProcessor
3
4def extract_thinking_and_summary(text: str, bot: str = "◁think▷", eot: str = "◁/think▷") -> str:
5 if bot in text and eot not in text:
6 return ""
7 if eot in text:
8 return text[text.index(bot) + len(bot):text.index(eot)].strip(), text[text.index(eot) + len(eot) :].strip()
9 return "", text
10
11OUTPUT_FORMAT = "--------Thinking--------\n{thinking}\n\n--------Summary--------\n{summary}"
12
13url = "https://huggingface.co/spaces/moonshotai/Kimi-VL-A3B-Thinking/resolve/main/images/demo6.jpeg"
14
15model_path = "moonshotai/Kimi-VL-A3B-Thinking-2506"
16model = AutoModelForCausalLM.from_pretrained(
17 model_path,
18 torch_dtype="auto",
19 device_map="auto",
20 trust_remote_code=True,
21)
22processor = AutoProcessor.from_pretrained(model_path, trust_remote_code=True)
23
24image_paths = ["url"]
25images = [Image.open(path) for path in image_paths]
26messages = [
27 {
28 "role": "user",
29 "content": [
30 {"type": "image", "image": image_path} for image_path in image_paths
31 ] + [{"type": "text", "text": "What kind of cat is this? Answer with one word."}],
32 },
33]
34text = processor.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt")
35inputs = processor(images=images, text=text, return_tensors="pt", padding=True, truncation=True).to(model.device)
36generated_ids = model.generate(**inputs, max_new_tokens=32768, temperature=0.8)
37generated_ids_trimmed = [
38 out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
39]
40response = processor.batch_decode(
41 generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
42)[0]
43print(response)@misc{kimiteam2025kimivltechnicalreport,
title={{Kimi-VL} Technical Report},
author={Kimi Team and Angang Du and Bohong Yin and Bowei Xing and Bowen Qu and Bowen Wang and Cheng Chen and Chenlin Zhang and Chenzhuang Du and Chu Wei and Congcong Wang and Dehao Zhang and Dikang Du and Dongliang Wang and Enming Yuan and Enzhe Lu and Fang Li and Flood Sung and Guangda Wei and Guokun Lai and Han Zhu and Hao Ding and Hao Hu and Hao Yang and Hao Zhang and Haoning Wu and Haotian Yao and Haoyu Lu and Heng Wang and Hongcheng Gao and Huabin Zheng and Jiaming Li and Jianlin Su and Jianzhou Wang and Jiaqi Deng and Jiezhong Qiu and Jin Xie and Jinhong Wang and Jingyuan Liu and Junjie Yan and Kun Ouyang and Liang Chen and Lin Sui and Longhui Yu and Mengfan Dong and Mengnan Dong and Nuo Xu and Pengyu Cheng and Qizheng Gu and Runjie Zhou and Shaowei Liu and Sihan Cao and Tao Yu and Tianhui Song and Tongtong Bai and Wei Song and Weiran He and Weixiao Huang and Weixin Xu and Xiaokun Yuan and Xingcheng Yao and Xingzhe Wu and Xinxing Zu and Xinyu Zhou and Xinyuan Wang and Y. Charles and Yan Zhong and Yang Li and Yangyang Hu and Yanru Chen and Yejie Wang and Yibo Liu and Yibo Miao and Yidao Qin and Yimin Chen and Yiping Bao and Yiqin Wang and Yongsheng Kang and Yuanxin Liu and Yulun Du and Yuxin Wu and Yuzhi Wang and Yuzi Yan and Zaida Zhou and Zhaowei Li and Zhejun Jiang and Zheng Zhang and Zhilin Yang and Zhiqi Huang and Zihao Huang and Zijia Zhao and Ziwei Chen},
year={2025},
eprint={2504.07491},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2504.07491},
}