Views
No views yet

transformers and vLLM out of the box.

| Rank | Model | Avg | VSI-Bench | MMSI-Bench | MindCube | ViewSpatial | SITE | BLINK | 3DSR | EmbSpatial |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | SpatialAxiom-35B-A3B | 70.8 | 72.8 | 50.0 | 91.7 | 66.8 | 56.4 | 75.8 | 66.3 | 86.6 |
| 2 | SpatialAxiom-9B | 70.6 | 70.2 | 51.8 | 92.5 | 70.6 | 53.3 | 76.9 | 64.2 | 85.1 |
| 3 | Gemini-3.5-Flash | 69.2 | 63.1 | 50.7 | 77.6 | 56.0 | 70.6 | 80.0 | 72.5 | 83.1 |
| 4 | Qwen3.7-Plus | 66.6 | 63.3 | 45.0 | 68.6 | 54.9 | 71.3 | 76.0 | 69.7 | 83.8 |
| 5 | Gemini-3.1-Pro | 66.5 | 57.5 | 49.5 | 76.4 | 53.1 | 67.0 | 77.3 | 67.3 | 84.0 |
| 6 | SenseNova-SI-1.5-InternVL3-8B | 64.4 | 67.3 | 38.3 | 92.1 | 59.0 | 47.5 | 69.5 | 61.1 | 80.4 |
| 7 | Qwen3.6-27B | 61.6 | 59.8 | 41.1 | 59.9 | 51.5 | 66.0 | 70.6 | 60.7 | 83.4 |
| 8 | Kimi-K2.6 | 61.3 | 54.9 | 37.9 | 67.4 | 46.7 | 63.6 | 75.2 | 64.1 | 80.8 |
| 9 | Qwen3.5-35B-A3B | 61.2 | 58.1 | 41.9 | 63.5 | 50.8 | 61.4 | 70.5 | 59.8 | 83.6 |
| 10 | GPT-5.5 | 60.7 | 60.4 | 42.2 | 65.5 | 46.5 | 58.3 | 73.3 | 59.0 | 80.3 |
| 11 | Qwen3.6-35B-A3B | 60.5 | 56.0 | 40.2 | 60.4 | 50.7 | 63.4 | 69.3 | 60.0 | 83.8 |
| 12 | Gemma-4-31B | 57.2 | 48.1 | 37.0 | 63.3 | 45.3 | 58.0 | 70.3 | 54.4 | 81.0 |
| 13 | Qwen3.5-9B | 55.9 | 54.3 | 38.7 | 57.6 | 48.2 | 42.3 | 67.6 | 56.8 | 81.5 |
| 14 | Seed1.6 | 54.2 | 49.9 | 38.3 | 48.8 | 43.9 | 54.6 | 65.9 | 56.9 | 75.4 |
| 15 | InternVL3.5-8B | 49.0 | 56.1 | 29.0 | 40.2 | 40.0 | 43.8 | 58.2 | 49.2 | 75.7 |
| 16 | Gemma-4-26B-A4B | 47.8 | 32.9 | 29.2 | 48.8 | 41.7 | 39.7 | 63.8 | 53.6 | 72.3 |
| 17 | BAGEL-7B-MoT | 45.3 | 31.4 | 31.0 | 34.7 | 41.3 | 37.0 | 63.6 | 50.2 | 73.1 |
| 18 | Cambrian-S-7B | 45.1 | 62.9 | 27.1 | 37.9 | 41.3 | 36.1 | 37.9 | 45.0 | 72.8 |
[!Important] SpatialAxiom-9B is fine-tuned from Qwen3.5-9B for direct (non-thinking) responses only. It does not produce thinking blocks (no chain-of-thought wrapped in special tags). Do not enable thinking mode at inference time (enable_thinkingmust remainfalse). The model does not support/thinkor/nothinksoft switches.
transformers with Qwen3.5 VLM support is required. Make sure torchvision and pillow are installed.1from transformers import AutoModelForMultimodalLM, AutoProcessor
2
3model_id = "<HF_REPO_ID>"
4model = AutoModelForMultimodalLM.from_pretrained(
5 model_id, dtype="bfloat16", device_map="auto"
6)
7processor = AutoProcessor.from_pretrained(model_id)
8
9messages = [
10 {
11 "role": "user",
12 "content": [
13 {"type": "image", "url": "room.jpg"},
14 {
15 "type": "text",
16 "text": "If I stand at the door facing the bed, is the chair to my left or right?",
17 },
18 ],
19 }
20]
21
22inputs = processor.apply_chat_template(
23 messages,
24 add_generation_prompt=True,
25 tokenize=True,
26 return_dict=True,
27 return_tensors="pt",
28 enable_thinking=False,
29).to(model.device)
30
31out = model.generate(**inputs, max_new_tokens=32768)
32print(
33 processor.batch_decode(
34 out[:, inputs["input_ids"].shape[1]:], skip_special_tokens=True
35 )[0]
36)1messages = [
2 {
3 "role": "user",
4 "content": [
5 {"type": "video", "url": "https://example.com/walkthrough.mp4"},
6 {
7 "type": "text",
8 "text": "Estimate the size of the room in square meters and describe the route taken.",
9 },
10 ],
11 }
12]
13# Same apply_chat_template / generate flow as above.uv pip install vllm --torch-backend=auto --extra-index-url https://wheels.vllm.ai/nightly1vllm serve <HF_REPO_ID> \
2 --port 8000 \
3 --tensor-parallel-size 1 \
4 --max-model-len 65536 \
5 --default-chat-template-kwargs '{"enable_thinking": false}' \
6 --served-model-name spatialaxiom-9bhttp://localhost:8000/v1. If you encounter OOM errors, reduce --max-model-len (e.g. to 32768). For multi-view or long-video spatial tasks, 32K–64K context is typically sufficient.1pip install -U openai
2
3export OPENAI_BASE_URL="http://localhost:8000/v1"
4export OPENAI_API_KEY="EMPTY"1from openai import OpenAI
2
3client = OpenAI()
4
5messages = [
6 {
7 "role": "user",
8 "content": [
9 {"type": "image_url", "image_url": {"url": "https://example.com/room.jpg"}},
10 {
11 "type": "text",
12 "text": "If I stand at the door facing the bed, is the chair to my left or right?",
13 },
14 ],
15 }
16]
17
18chat_response = client.chat.completions.create(
19 model="spatialaxiom-9b",
20 messages=messages,
21 max_tokens=32768,
22 temperature=0,
23 top_p=0.95,
24)
25print(chat_response.choices[0].message.content)1from openai import OpenAI
2
3client = OpenAI()
4
5messages = [
6 {
7 "role": "user",
8 "content": [
9 {
10 "type": "video_url",
11 "video_url": {"url": "https://example.com/walkthrough.mp4"},
12 },
13 {
14 "type": "text",
15 "text": "Describe the spatial layout and the route taken through the room.",
16 },
17 ],
18 }
19]
20
21# Video frame sampling (vLLM): default fps=2, do_sample_frames=True.
22# Customizing fps via extra_body requires launching vLLM with
23# --media-io-kwargs '{"video": {"num_frames": -1}}'.
24chat_response = client.chat.completions.create(
25 model="spatialaxiom-9b",
26 messages=messages,
27 max_tokens=32768,
28 temperature=0,
29 top_p=0.95,
30 extra_body={
31 "mm_processor_kwargs": {"fps": 2, "do_sample_frames": True},
32 },
33)
34print(chat_response.choices[0].message.content)--default-chat-template-kwargs '{"enable_thinking": false}', add it per request:1extra_body={
2 "chat_template_kwargs": {"enable_thinking": False},
3}1@misc{spatialaxiom,
2 title = {SpatialAxiom: An Open Spatial Intelligence Model for General Spatial Reasoning},
3 author = {Lou, Yujing and Chen, Pingyi and Cao, Shen and Gu, Jiaqi and Guo, Jinhui and Tong, Jintao and Hao, Yunzhuo and Liu, Yao and Wu, Yue and Fan, Lubin and Ye, Jieping},
4 month = {July},
5 year = {2026},
6 url = {https://d2i-ai.github.io/SpatialAxiom}
7}