Views
No views yet
lm_head) matrix (tied in the base model). Every other weight — the full vision tower and all 24 text-decoder layers — is copied unmodified from the base model. No fine-tuning was performed.Modified from the original. This is a derivative of Qwen/Qwen3.5-0.8B (Apache 2.0). See Attribution below.
Update (2026-07-29): an earlier version of this checkpoint was accidentally exported as a text-only model — it was built by loading the base model viaAutoModelForCausalLM, which silently loads only the inner text decoder and drops the vision tower entirely, even though the model card claimed vision was preserved. That was wrong. This version is rebuilt from the fullQwen3_5ForConditionalGenerationclass (viaAutoModelForImageTextToText+AutoProcessor), so the vision tower and multimodal wiring are genuinely intact this time. Thanks to @danielnobbe for flagging it.
| Original | This model | ||
|---|---|---|---|
| Vocabulary size | 248,320 | 48,704 | 5.10x smaller |
| Embedding/lm_head params | 254.3M | 49.9M | 5.10x smaller |
| Vision tower | Unchanged | Unchanged | untouched |
| Text decoder layers | Unchanged | Unchanged | untouched |
model.language_model.embed_tokens.weight and lm_head.weight (tied) were sliced to the kept token ids; the vision tower (model.visual.*) and every text-decoder layer are byte-identical to the base model. The tokenizer's BPE merge rules were rebuilt to match — since the base tokenizer is byte-level BPE, dropped tokens don't cause hard failures; text that would have used a removed token falls back to more, smaller sub-word/byte pieces that remain in the vocabulary.transformers (AutoModelForImageTextToText) — confirmed.transformers — confirmed, real vision forward pass, no shape/config errors.mlx_lm (Apple Silicon, text-only) — confirmed, ~150-190 tok/s on an M4 Pro.mlx_vlm (Apple Silicon, image+text) — loads and runs correctly (confirmed no crash, correct architecture dispatch). Note: on this small 0.8B model, both mlx_vlm and plain transformers occasionally produce degenerate/empty output after an empty <think></think> block on short prompts -- this reproduces identically on the unmodified base model, so it's a pre-existing quirk of this checkpoint's thinking-mode chat template / small model size, not something introduced by trimming.fla/causal_conv1d fast kernels are CUDA-only and unavailable on this hardware, so the Gated DeltaNet backbone ran via the transformers PyTorch fallback path for both models — this makes the absolute tok/s numbers conservative.| Eval set | Base model | This model | Change |
|---|---|---|---|
| English (WikiText-103, held-out) | 0.937 | 1.070 | +14.2% |
| English (Dolly-15k instructions, held-out) | 0.757 | 0.915 | +20.9% |
| English (Frankenstein, held-out) | 1.046 | 1.150 | +9.9% |
| Code (Python, held-out) | 0.729 | 0.959 | +31.6% |
| Code (JavaScript, held-out) | 0.718 | 0.865 | +20.4% |
| French (out-of-domain) | 1.225 | 1.613 | +31.6% |
| Spanish (out-of-domain) | 1.151 | 1.478 | +28.4% |
| Prompt | Base tok/s | This model tok/s | Speedup |
|---|---|---|---|
| English (chat) | 46.76 | 51.65 | +10.5% |
| English (prose) | 48.60 | 52.49 | +8.0% |
| Code (Python) | 51.27 | 53.13 | +3.6% |
| Code (JavaScript) | 45.92 | 53.09 | +15.6% |
AutoModelForImageTextToText, class Qwen3_5ForConditionalGeneration) and sliced only the nested model.language_model.embed_tokens.weight / lm_head.weight to the kept token ids. Vision tower and all decoder layers untouched.AutoProcessor (image processor + video processor + tokenizer + chat template all bundled correctly).1from transformers import AutoModelForImageTextToText, AutoProcessor
2import torch
3
4model_id = "sahilchachra/Qwen3.5-0.8B-English-trimmed"
5proc = AutoProcessor.from_pretrained(model_id)
6model = AutoModelForImageTextToText.from_pretrained(model_id, dtype=torch.bfloat16)
7
8messages = [{"role": "user", "content": [
9 {"type": "image"},
10 {"type": "text", "text": "Describe this image."}
11]}]
12prompt = proc.apply_chat_template(messages, add_generation_prompt=True, tokenize=False)
13inputs = proc(text=[prompt], images=[your_pil_image], return_tensors="pt")
14out = model.generate(**inputs, max_new_tokens=200)
15print(proc.batch_decode(out[:, inputs["input_ids"].shape[1]:], skip_special_tokens=True)[0])mlx_lm/mlx_vlm on Apple Silicon.lm_head matrix and tokenizer vocabulary were changed; all other weights, including the full vision tower, are unmodified copies of the original.