Image-Text-to-Text
Transformers
Safetensors
English
qwen3_5_text
text-generation
choonsik
VLA
Minecraft
vision-language-action
qwen3.5
conversational
Instructions to use Infinity08/Choonsik-Qwen3.5-9B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Infinity08/Choonsik-Qwen3.5-9B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="Infinity08/Choonsik-Qwen3.5-9B") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("Infinity08/Choonsik-Qwen3.5-9B") model = AutoModelForCausalLM.from_pretrained("Infinity08/Choonsik-Qwen3.5-9B") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use Infinity08/Choonsik-Qwen3.5-9B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "Infinity08/Choonsik-Qwen3.5-9B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Infinity08/Choonsik-Qwen3.5-9B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/Infinity08/Choonsik-Qwen3.5-9B
- SGLang
How to use Infinity08/Choonsik-Qwen3.5-9B 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 "Infinity08/Choonsik-Qwen3.5-9B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Infinity08/Choonsik-Qwen3.5-9B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'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 "Infinity08/Choonsik-Qwen3.5-9B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Infinity08/Choonsik-Qwen3.5-9B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use Infinity08/Choonsik-Qwen3.5-9B with Docker Model Runner:
docker model run hf.co/Infinity08/Choonsik-Qwen3.5-9B
Upload Choonsik Stage 3 checkpoint
Browse files- README.md +61 -35
- config.json +83 -0
- generation_config.json +6 -0
- model.safetensors +3 -0
- processor_config.json +2 -2
- tokenizer_config.json +3 -1
README.md
CHANGED
|
@@ -1,58 +1,84 @@
|
|
| 1 |
---
|
|
|
|
| 2 |
base_model: Qwen/Qwen3.5-9B
|
| 3 |
-
library_name: transformers
|
| 4 |
-
model_name: Choonsik-Qwen3.5-9B
|
| 5 |
tags:
|
| 6 |
-
-
|
| 7 |
-
-
|
| 8 |
-
-
|
| 9 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
---
|
| 11 |
|
| 12 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
|
| 14 |
-
|
| 15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
|
| 17 |
-
##
|
| 18 |
|
| 19 |
```python
|
| 20 |
-
from
|
|
|
|
| 21 |
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
output = generator([{"role": "user", "content": question}], max_new_tokens=128, return_full_text=False)[0]
|
| 25 |
-
print(output["generated_text"])
|
| 26 |
-
```
|
| 27 |
|
| 28 |
-
|
|
|
|
|
|
|
| 29 |
|
| 30 |
-
|
| 31 |
|
|
|
|
| 32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
|
| 34 |
-
|
| 35 |
|
| 36 |
-
|
| 37 |
|
| 38 |
-
|
| 39 |
-
-
|
| 40 |
-
|
| 41 |
-
- Datasets: 4.8.5
|
| 42 |
-
- Tokenizers: 0.22.2
|
| 43 |
|
| 44 |
-
|
| 45 |
|
|
|
|
| 46 |
|
|
|
|
| 47 |
|
| 48 |
-
Cite TRL as:
|
| 49 |
-
|
| 50 |
```bibtex
|
| 51 |
-
@
|
| 52 |
-
title = {
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
year = {
|
| 57 |
}
|
| 58 |
-
```
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
license: mit
|
| 3 |
base_model: Qwen/Qwen3.5-9B
|
|
|
|
|
|
|
| 4 |
tags:
|
| 5 |
+
- choonsik
|
| 6 |
+
- VLA
|
| 7 |
+
- Minecraft
|
| 8 |
+
- vision-language-action
|
| 9 |
+
- qwen3.5
|
| 10 |
+
- image-text-to-text
|
| 11 |
+
datasets:
|
| 12 |
+
- CraftJarvis/minecraft-vla-sft
|
| 13 |
+
library_name: transformers
|
| 14 |
+
language:
|
| 15 |
+
- en
|
| 16 |
+
pipeline_tag: image-text-to-text
|
| 17 |
---
|
| 18 |
|
| 19 |
+
# Choonsik — Minecraft Vision-Language-Action Model
|
| 20 |
+
|
| 21 |
+
Choonsik is a **Vision-Language-Action (VLA)** model for Minecraft, built on
|
| 22 |
+
[Qwen/Qwen3.5-9B](<https://huggingface.co/Qwen/Qwen3.5-9B>) and trained with the
|
| 23 |
+
three-stage **ActVLP** pipeline from
|
| 24 |
+
[JARVIS-VLA](https://arxiv.org/abs/2503.16365).
|
| 25 |
+
|
| 26 |
+
Given a Minecraft observation frame and a natural-language task instruction,
|
| 27 |
+
Choonsik outputs keyboard + mouse action tokens that can be executed directly
|
| 28 |
+
in the game — covering 1,000+ atomic tasks (crafting, mining, smelting, combat,
|
| 29 |
+
navigation, etc.).
|
| 30 |
|
| 31 |
+
| | |
|
| 32 |
+
|---|---|
|
| 33 |
+
| **Base model** | [Qwen/Qwen3.5-9B](<https://huggingface.co/Qwen/Qwen3.5-9B>) |
|
| 34 |
+
| **Training data** | [CraftJarvis/minecraft-vla-sft](<https://huggingface.co/datasets/CraftJarvis/minecraft-vla-sft>) (3.78M examples) |
|
| 35 |
+
| **Training stages** | Language → Vision-Language → Imitation Learning |
|
| 36 |
+
| **License** | MIT |
|
| 37 |
|
| 38 |
+
## Usage
|
| 39 |
|
| 40 |
```python
|
| 41 |
+
from choonsik.inference import ChoonsikInferenceRunner
|
| 42 |
+
from PIL import Image
|
| 43 |
|
| 44 |
+
runner = ChoonsikInferenceRunner("Infinity08/Choonsik-Qwen3.5-9B")
|
| 45 |
+
frame = Image.open("minecraft_frame.png")
|
|
|
|
|
|
|
|
|
|
| 46 |
|
| 47 |
+
action = runner.predict(frame, task="craft a wooden pickaxe")
|
| 48 |
+
# action = {"forward": 0, "attack": 1, ..., "camera": [0.0, 0.3]}
|
| 49 |
+
```
|
| 50 |
|
| 51 |
+
## Action Space
|
| 52 |
|
| 53 |
+
Choonsik predicts actions using **mu-law discretized tokens**:
|
| 54 |
|
| 55 |
+
| Token type | Count | Description |
|
| 56 |
+
|---|---|---|
|
| 57 |
+
| Keyboard | 29 | `forward`, `attack`, `use`, `jump`, hotbar 1–9, … |
|
| 58 |
+
| Mouse X | 21 | Horizontal camera rotation (mu-law bins) |
|
| 59 |
+
| Mouse Y | 21 | Vertical camera rotation (mu-law bins) |
|
| 60 |
|
| 61 |
+
## Training
|
| 62 |
|
| 63 |
+
Three-stage ActVLP pipeline (following JARVIS-VLA):
|
| 64 |
|
| 65 |
+
1. **Stage 1 — Language post-training**: Minecraft world knowledge (text-only SFT)
|
| 66 |
+
2. **Stage 2 — Vision-language alignment**: Image captioning and VQA on gameplay frames
|
| 67 |
+
3. **Stage 3 — Imitation learning**: Action prediction on 3.78M trajectory examples
|
|
|
|
|
|
|
| 68 |
|
| 69 |
+
Training hardware: L40S (48 GB VRAM). Inference: RTX 5080 with 4-bit NF4 quantization.
|
| 70 |
|
| 71 |
+
## Citation
|
| 72 |
|
| 73 |
+
If you use Choonsik or the underlying JARVIS-VLA methodology, please cite:
|
| 74 |
|
|
|
|
|
|
|
| 75 |
```bibtex
|
| 76 |
+
@article{li2025jarvisvla,
|
| 77 |
+
title = {JARVIS-VLA: Post-Training Large-Scale Vision Language Models
|
| 78 |
+
to Play Visual Games with Keyboards and Mouse},
|
| 79 |
+
author = {Muyao Li and Zihao Wang and Kaichen He and others},
|
| 80 |
+
journal = {arXiv preprint arXiv:2503.16365},
|
| 81 |
+
year = {2025}
|
| 82 |
}
|
| 83 |
+
```
|
| 84 |
+
|
config.json
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"architectures": [
|
| 3 |
+
"Qwen3_5ForCausalLM"
|
| 4 |
+
],
|
| 5 |
+
"attention_bias": false,
|
| 6 |
+
"attention_dropout": 0.0,
|
| 7 |
+
"attn_output_gate": true,
|
| 8 |
+
"bos_token_id": null,
|
| 9 |
+
"dtype": "bfloat16",
|
| 10 |
+
"eos_token_id": 248044,
|
| 11 |
+
"full_attention_interval": 4,
|
| 12 |
+
"head_dim": 256,
|
| 13 |
+
"hidden_act": "silu",
|
| 14 |
+
"hidden_size": 4096,
|
| 15 |
+
"initializer_range": 0.02,
|
| 16 |
+
"intermediate_size": 12288,
|
| 17 |
+
"layer_types": [
|
| 18 |
+
"linear_attention",
|
| 19 |
+
"linear_attention",
|
| 20 |
+
"linear_attention",
|
| 21 |
+
"full_attention",
|
| 22 |
+
"linear_attention",
|
| 23 |
+
"linear_attention",
|
| 24 |
+
"linear_attention",
|
| 25 |
+
"full_attention",
|
| 26 |
+
"linear_attention",
|
| 27 |
+
"linear_attention",
|
| 28 |
+
"linear_attention",
|
| 29 |
+
"full_attention",
|
| 30 |
+
"linear_attention",
|
| 31 |
+
"linear_attention",
|
| 32 |
+
"linear_attention",
|
| 33 |
+
"full_attention",
|
| 34 |
+
"linear_attention",
|
| 35 |
+
"linear_attention",
|
| 36 |
+
"linear_attention",
|
| 37 |
+
"full_attention",
|
| 38 |
+
"linear_attention",
|
| 39 |
+
"linear_attention",
|
| 40 |
+
"linear_attention",
|
| 41 |
+
"full_attention",
|
| 42 |
+
"linear_attention",
|
| 43 |
+
"linear_attention",
|
| 44 |
+
"linear_attention",
|
| 45 |
+
"full_attention",
|
| 46 |
+
"linear_attention",
|
| 47 |
+
"linear_attention",
|
| 48 |
+
"linear_attention",
|
| 49 |
+
"full_attention"
|
| 50 |
+
],
|
| 51 |
+
"linear_conv_kernel_dim": 4,
|
| 52 |
+
"linear_key_head_dim": 128,
|
| 53 |
+
"linear_num_key_heads": 16,
|
| 54 |
+
"linear_num_value_heads": 32,
|
| 55 |
+
"linear_value_head_dim": 128,
|
| 56 |
+
"mamba_ssm_dtype": "float32",
|
| 57 |
+
"max_position_embeddings": 262144,
|
| 58 |
+
"mlp_only_layers": [],
|
| 59 |
+
"model_type": "qwen3_5_text",
|
| 60 |
+
"mtp_num_hidden_layers": 1,
|
| 61 |
+
"mtp_use_dedicated_embeddings": false,
|
| 62 |
+
"num_attention_heads": 16,
|
| 63 |
+
"num_hidden_layers": 32,
|
| 64 |
+
"num_key_value_heads": 4,
|
| 65 |
+
"pad_token_id": null,
|
| 66 |
+
"partial_rotary_factor": 0.25,
|
| 67 |
+
"rms_norm_eps": 1e-06,
|
| 68 |
+
"rope_parameters": {
|
| 69 |
+
"mrope_interleaved": true,
|
| 70 |
+
"mrope_section": [
|
| 71 |
+
11,
|
| 72 |
+
11,
|
| 73 |
+
10
|
| 74 |
+
],
|
| 75 |
+
"partial_rotary_factor": 0.25,
|
| 76 |
+
"rope_theta": 10000000,
|
| 77 |
+
"rope_type": "default"
|
| 78 |
+
},
|
| 79 |
+
"tie_word_embeddings": false,
|
| 80 |
+
"transformers_version": "5.7.0",
|
| 81 |
+
"use_cache": true,
|
| 82 |
+
"vocab_size": 248320
|
| 83 |
+
}
|
generation_config.json
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"_from_model_config": true,
|
| 3 |
+
"eos_token_id": 248044,
|
| 4 |
+
"transformers_version": "5.7.0",
|
| 5 |
+
"use_cache": true
|
| 6 |
+
}
|
model.safetensors
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:61b7d5f795d3f7504705a0881f2b7262ed2084f7e5d099d93f4a854a76514482
|
| 3 |
+
size 17907663008
|
processor_config.json
CHANGED
|
@@ -20,8 +20,8 @@
|
|
| 20 |
"resample": 3,
|
| 21 |
"rescale_factor": 0.00392156862745098,
|
| 22 |
"size": {
|
| 23 |
-
"longest_edge":
|
| 24 |
-
"shortest_edge":
|
| 25 |
},
|
| 26 |
"temporal_patch_size": 2
|
| 27 |
},
|
|
|
|
| 20 |
"resample": 3,
|
| 21 |
"rescale_factor": 0.00392156862745098,
|
| 22 |
"size": {
|
| 23 |
+
"longest_edge": 200704,
|
| 24 |
+
"shortest_edge": 50176
|
| 25 |
},
|
| 26 |
"temporal_patch_size": 2
|
| 27 |
},
|
tokenizer_config.json
CHANGED
|
@@ -9,8 +9,10 @@
|
|
| 9 |
"eos_token": "<|im_end|>",
|
| 10 |
"errors": "replace",
|
| 11 |
"image_token": "<|image_pad|>",
|
| 12 |
-
"is_local":
|
| 13 |
"local_files_only": false,
|
|
|
|
|
|
|
| 14 |
"model_max_length": 262144,
|
| 15 |
"model_specific_special_tokens": {
|
| 16 |
"audio_bos_token": "<|audio_start|>",
|
|
|
|
| 9 |
"eos_token": "<|im_end|>",
|
| 10 |
"errors": "replace",
|
| 11 |
"image_token": "<|image_pad|>",
|
| 12 |
+
"is_local": true,
|
| 13 |
"local_files_only": false,
|
| 14 |
+
"max_pixels": 200704,
|
| 15 |
+
"min_pixels": 50176,
|
| 16 |
"model_max_length": 262144,
|
| 17 |
"model_specific_special_tokens": {
|
| 18 |
"audio_bos_token": "<|audio_start|>",
|