Instructions to use ThinkMorph/ThinkMorph-SSL-Instruct with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Bagel
How to use ThinkMorph/ThinkMorph-SSL-Instruct with Bagel:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Notebooks
- Google Colab
- Kaggle
ThinkMorph-SSL-Instruct
ThinkMorph-SSL-Instruct is a unified multimodal model that reasons with interleaved text and generated images. It is trained from BAGEL-7B-MoT with the two-stage PRIMER recipe:
- Stage 1 (pretext). Training on Pretext-270K, which has 270,896 instruction-free text-image-text traces built from source images. This repository starts from the Stage 1 EMA weights at step 5,500, published separately as ThinkMorph-SSL-Base.
- Stage 2 (instruction). Training on Instruct-181K, which has 181,291 question-driven interleaved traces.
This repository holds the Stage 2 EMA weights at step 5,500. They are the weights the paper reports.
Files
| File | Bytes | SHA256 |
|---|---|---|
ema.safetensors |
29,351,872,574 | 6497ea617dea4193d06135b97f00bc10bbdee1733789e489cae0f3c57141123f |
ae.safetensors |
167,664,678 | e49d48aa3474df744ad718d11736d87f38d52bf7ca57dee6b8417978bfbfc9ad |
config.json |
5,175 | 4bc85a4daaef591f0b539216d09a1ee2294a1f3a3bda9f95885c13ed191ae701 |
llm_config.json |
2,136 | cb884fc65d117b8e5ec3856090224cd739c511e01c5c1de488cede5a54c8e994 |
vit_config.json |
1,830 | 78664013bf6778ad4ecaebe78c153ef7fd46f7638fa78c0df1cb17d5bd7df0ab |
generation_config.json |
243 | 3a8f9087e486054c8a4a08dae2e5a3ba62e23da212b5b8c08bc42cb983c3459f |
vocab.json |
3,383,407 | 87a257b04b17642a0688c98cd1df89c398bda4fee532d6f88b38a659ecb4ac8d |
merges.txt |
1,671,853 | 8831e4f1a044471340f7c0a83d7bd71306a5b867e95fd870f74d0c5308a904d5 |
added_tokens.json |
630 | a0582f48ed8e795fda5b7b8eb2d98b492842dc229e78b66793bf545ce7ec52c8 |
special_tokens_map.json |
613 | 76862e765266b85aa9459767e33cbaf13970f327a0e88d1c65846c2ddd3a1ecd |
tokenizer_config.json |
4,864 | b7af0d4c9b917db05150006b466cfa2e8424b3915ff5fe2023a6f512a5e16dd5 |
ema.safetensorsholds the EMA weights in bfloat16: 1,451 tensors, 14,675,840,307 parameters. The training model also had a 26th SigLIP layer. BAGEL inference never uses that layer (vit_select_layer = -2), so it is not stored, as in the original BAGEL release.ae.safetensorsis the VAE used in training (about 160 MB). It is the one fromlmms-lab/BAGEL-7B-MoT-ver.LE. Do not replace it with the 320 MB VAE of the public BAGEL release.- Use the tokenizer files shipped here. They include the added special tokens used in training.
Loading
The directory has the same layout as the original BAGEL-7B-MoT release, and the weights file
has the same name, ema.safetensors. To load:
- Official BAGEL inference code (https://github.com/ByteDance-Seed/Bagel): point
model_pathat a local copy of this repository. The loader readsllm_config.json,vit_config.json,ae.safetensorsandema.safetensors. - PRIMER code release:
Bagel.from_pretrained(model_path, config, training_config=...)detectsema.safetensorsand loads it directly. The evaluation wrapperwrapper: Bagelalso readsema.safetensorswhen there is nomodel.safetensors.
hf download ThinkMorph/ThinkMorph-SSL-Instruct --local-dir ThinkMorph-SSL-Instruct
Training
| Item | Stage 1 (pretext) | Stage 2 (instruction) |
|---|---|---|
| Run | 0503_stage0_270k_32gpu |
0505_s0s2_173k_48gpus |
| Initialization | BAGEL-7B-MoT (lmms-lab/BAGEL-7B-MoT-ver.LE layout) |
Stage 1 EMA, step 5,500 |
| Data | Pretext-270K: 270,896 train rows; the val files are not used | Instruct-181K: all 21 subsets, train and val files |
| GPUs | 32 (4 nodes × 8) | 48 (6 nodes × 8) |
| Learning rate | 2.83e-5 (warmup 1,000) | 2e-5 (warmup 1,000) |
| Configured horizon | 10,000 steps | 12,000 steps |
| Released save | EMA, step 5,500 | EMA, step 5,500 |
| EMA | decay 0.9998 from step 1,000, fp32 shadow | decay 0.9998 from step 1,000, fp32 shadow |
| Packing | dynamic, up to 16,384 tokens | dynamic, up to 20,480 tokens |
The losses are text cross-entropy and image flow matching, both with weight 1. The VAE is
frozen, and the SigLIP encoder is trained. Stage 2 keeps only traces that have a first
reasoning image and an answer (require_reasoning_image_0_and_answer), and it trains on
the val files too (include_val_in_training).
Evaluation
The scores will be filled in after the paper's main table is final.
| Benchmark group | ThinkMorph-SSL-Instruct |
|---|---|
| Visible evidence | TBD |
| Spatial structure | TBD |
| Scene reconstruction | TBD |
Intended use and limitations
This is a research model. It answers visual questions by writing text and generating intermediate images.
- The intermediate images can leave out or change evidence that the question depends on.
- Default inference generates images, which costs a lot of compute.
- The earlier
ThinkMorph/ThinkMorph-7Bis a different model and cannot stand in for this one.
License
The weights are released under Apache-2.0, following BAGEL-7B-MoT. The datasets carry their own source terms; see their cards.
Citation
@misc{thinkmorphssl2026,
title = {TBD},
author = {TBD},
year = {2026}
}
- Downloads last month
- 1