Views
No views yet
⚠️ REQUIRED —
jangtq_runtime.safetensorssidecar must be downloadedOsaurus uses the native Swift JANGTQ runtime. Every JANGTQ bundle on OsaurusAI ships a smalljangtq_runtime.safetensorssidecar (~10 KB–~165 KB) alongside the weight shards. The Swift loader will refuse to start with the errorError: Model '<name>' declares JANGTQ (weight_format: "mxtq") but is missing required sidecar file 'jangtq_runtime.safetensors'. Re-download the full model or obtain the sidecar from the original publisher.if the file is absent.If your local copy doesn't have it (older download, partial sync, etc):hf download OsaurusAI/Qwen3.6-35B-A3B-JANGTQ2 jangtq_runtime.safetensors --local-dir <your-dir>The file holds the deterministic codebooks + Hadamard rotation signs the Swift loader uses to decode*.tq_packedweights. It must match the seed the bundle was quantized with (mxtq_seed=42).
| Property | Value |
|---|---|
| Base model | Qwen/Qwen3.6-35B-A3B |
| Parameters (source) | 35 B total, ~3 B active per token |
| Architecture | qwen3_5_moe — 40 decoder layers: 30 Gated DeltaNet (linear attn) + 10 full attention, 256 routed experts + 1 always-on shared expert |
| Quantization format | weight_format: mxtq — routed experts via TurboQuant codebook (2-bit), everything else affine 8-bit or fp16 passthrough |
| Routed-expert storage | .tq_packed (uint32) + .tq_norms (fp16) + .tq_bits (uint8); codebook + Hadamard signs re-derived deterministically at load |
| Package size on disk | 11.63 GB across 12 shards |
| Shipped tensors | 1,930 total (1,597 language-model + 333 vision tower + 120 routed-expert TQ triples) |
| Vocab | 248,320 |
| Context (position embeddings) | 262,144 native; the upstream model card reports up to ~1 M with YaRN scaling |
| Vision tower | 27-layer ViT (hidden 1152, patch 16), preserved in fp16 |
| Chat format | Qwen im_start/im_end, unified thinking toggle |
| Category | Bits | Group / codebook | Notes |
|---|---|---|---|
Routed-expert MLP (mlp.experts.gate_up_proj, down_proj) | 2 (JANGTQ) | 2^2 Lloyd-Max centroids + Hadamard rotation | .tq_packed + .tq_norms + .tq_bits triples |
Embedding (embed_tokens), lm_head | 8 (affine) | group 64 | MLX-native QuantizedLinear |
Full-attention projections (q_proj, k_proj, v_proj, o_proj) | 8 (affine) | group 64 | Gate-doubled q_proj for attn_output_gate |
Linear-attention projections (in_proj_qkv, in_proj_z, in_proj_b, in_proj_a, out_proj) | 8 (affine) | group 64 | Gated DeltaNet |
Shared-expert MLP (gate_proj, up_proj, down_proj) | 8 (affine) | group 64 | Always active per token |
Router (mlp.gate) | fp16 passthrough | — | Precision-critical |
Shared-expert gate (shared_expert_gate) | fp16 passthrough | — | sigmoid scalar gate |
Norms (*_layernorm, *_norm), A_log, dt_bias, conv1d | fp16 passthrough | — | Un-quantized |
| Vision tower (333 tensors) | fp16 passthrough | — | patch_embed.proj axes pre-transposed to MLX layout |
mlx_lm.load() can't parse .tq_packed tensors. You need jang-tools (free, public): https://github.com/jjang-ai/jangq.1pip install mlx mlx-lm mlx-vlm
2git clone https://github.com/jjang-ai/jangq && pip install -e ./jangq/jang-tools1from jang_tools.load_jangtq import load_jangtq_model
2from mlx_lm import generate
3
4model, tokenizer = load_jangtq_model("OsaurusAI/Qwen3.6-35B-A3B-JANGTQ2")
5print(generate(model, tokenizer,
6 prompt="The capital of France is",
7 max_tokens=64))1from jang_tools.load_jangtq_vlm import load_jangtq_vlm_model
2from mlx_vlm import generate
3from mlx_vlm.prompt_utils import apply_chat_template
4from mlx_vlm.utils import load_config
5
6path = "OsaurusAI/Qwen3.6-35B-A3B-JANGTQ2"
7model, processor = load_jangtq_vlm_model(path)
8config = load_config(path)
9
10prompt = apply_chat_template(processor, config, "Describe this image.", num_images=1)
11print(generate(model, processor, prompt, image="path/to/image.jpg", max_tokens=200))1msgs = [{"role": "user", "content": "What is 17 × 23?"}]
2# Reasoning OFF — pre-closed <think></think> block
3prompt = tokenizer.apply_chat_template(msgs, add_generation_prompt=True,
4 enable_thinking=False)
5# Reasoning ON — model fills the <think> block
6prompt = tokenizer.apply_chat_template(msgs, add_generation_prompt=True,
7 enable_thinking=True)enable_thinking as a direct kwarg (the chat_template_kwargs={...} form only propagates on some tokenizer versions).transformers and the bundle preserves video_preprocessor_config.json. mlx-vlm 0.4.4's prepare_inputs has no video path yet for qwen3_5_moe — the Python load_jangtq_vlm path wraps video via a custom processor for our test harness. For mainline mlx-vlm users, stick to image input; use upstream transformers for video.| Mac unified RAM | Works? | Notes |
|---|---|---|
| 24 GB | ✅ comfortable | Full 32 k context OK |
| 32 GB | ✅ | 32-100 k context depending on profile |
| 24 GB | ✅ | text-only, short context |
Qwen/Qwen3.6-35B-A3B, upstream, not this quant):| MMLU-Pro | AIME 2026 | LiveCodeBench v6 | GPQA | SWE-bench Verified |
|---|---|---|---|---|
| 85.2 | 92.7 | 80.4 | 86.0 | 73.4 |
1@misc{qwen2026qwen36,
2 title = {Qwen3.6-Plus: Towards Real World Agents},
3 author = {Qwen Team},
4 year = {2026},
5 url = {https://qwen.ai/blog?id=qwen3.6}
6}