---
license: other
license_name: openmdw-1.1
license_link: https://openmdw.ai/license/1-1/
base_model: nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16
base_model_relation: quantized
library_name: mlx
pipeline_tag: text-generation
tags:
- mlx
- vmlx-swift
- osaurus
- jang
- nemotron
- nemotron-3.5
- moe
- mamba2
- hybrid
language:
- en
- es
- fr
- de
- it
- ja
---

# OsaurusAI/Nemotron-3.5-Lightning-30B-A3B-JANG_6M
Near-lossless. 8-bit attention/routers/shared experts, 6-bit everything else.
JANG mixed-precision affine (JANG_6M, group size 64) conversion of [`nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16`](https://huggingface.co/nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16) for Apple silicon (MLX).
NVIDIA Nemotron 3.5 Lightning is a 30B-total / 3B-active hybrid model: 52 layers of
**Mamba-2 + MoE + attention** (23 Mamba, 23 MoE, 6 full-attention), 128 routed experts
with 6 active plus 1 shared expert, and a 256K context window. Only 6 of 52 layers hold
a KV cache, which is what makes long context affordable on a laptop.
## Bundles in this series
| Bundle | Avg bits | Size | Notes |
|---|---|---|---|
| [`Nemotron-3.5-Lightning-30B-A3B-JANG_2L`](https://huggingface.co/OsaurusAI/Nemotron-3.5-Lightning-30B-A3B-JANG_2L) | 3.73 | 16.22 GiB | smallest |
| [`Nemotron-3.5-Lightning-30B-A3B-JANG_4M`](https://huggingface.co/OsaurusAI/Nemotron-3.5-Lightning-30B-A3B-JANG_4M) | 4.12 | 17.72 GiB | **recommended** |
| [`Nemotron-3.5-Lightning-30B-A3B-JANG_6M`](https://huggingface.co/OsaurusAI/Nemotron-3.5-Lightning-30B-A3B-JANG_6M) | 6.06 | 25.15 GiB | near-lossless |
| [`Nemotron-3.5-Lightning-30B-A3B-MXFP8`](https://huggingface.co/OsaurusAI/Nemotron-3.5-Lightning-30B-A3B-MXFP8) | 8.00 | 31.62 GiB | MX FP8 reference |
## Verified local row
The exact directory uploaded to this repository was loaded and generated on an
M5 Max MacBook on 2026-08-11. Greedy decoding, prompts rendered through this
bundle's own `chat_template.jinja`.
- Model class: `nemotron_h`
- Weight shards: 49
- Weight bytes: 27001832920 (25.147 GiB)
- Average bits/weight: 6.06
- Load time: 2.5 seconds
- Reasoning ON: 101.2 tok/s
- Reasoning OFF: 41.4 tok/s
- Stop behaviour: normal stop on every turn (no length stops)
- Visible output: coherent on every turn
- Tool calling: emitted a well-formed `` block
Probes: a factual question with reasoning on, the same with reasoning off, and a
single-function tool-calling request.
## Sampling
NVIDIA's recommended settings, stamped into **both** `generation_config.json` and
`jang_config.json` so servers and loaders agree:
| Parameter | Value |
|---|---|
| `temperature` | 1.0 |
| `top_p` | 0.95 |
| `top_k` | 0 (disabled) |
| `repetition_penalty` | 1.0 (none) |
| `eos_token_id` | `[2, 11]` |
`top_k` is unspecified upstream and is stamped as `0` so downstream servers do not
apply their own default. Both EOS ids matter: `11` (`<|im_end|>`) is the chat
terminator and `2` (``) is the legacy one. Do not prepend BOS —
`add_bos_token` is `false`.
## Reasoning
Reasoning is **on by default**, matching upstream. There are exactly two states —
there are no low/medium/high effort tiers.
```python
# Reasoning ON (default)
prompt = tokenizer.apply_chat_template(msgs, add_generation_prompt=True,
tokenize=False, enable_thinking=True)
# Reasoning OFF
prompt = tokenizer.apply_chat_template(msgs, add_generation_prompt=True,
tokenize=False, enable_thinking=False)
```
The chat template opens the reasoning rail itself: with reasoning on the prompt ends
in `\n`, and with reasoning off it ends in a **prefilled empty** ``.
Reasoning-off is therefore not "omit the block" — a runtime that simply drops ``
will produce a model that opens one and never closes it.
The template also defaults `truncate_history_thinking=True`, so reasoning traces in
earlier assistant turns are dropped when a new user turn arrives.
## Tool calling
Tools are rendered into the system prompt and calls come back as XML, not JSON:
```
Santa Clara
```
Tool results are passed back with `role: "tool"`; consecutive results are coalesced
into a single user turn wrapped in ``.
## Modality
**Text only.** Verified against the weights, not the config: the checkpoint contains
no vision, audio, or video tensors. This is not the Omni or Audex line.
## Usage
```python
from mlx_lm import load, generate
from mlx_lm.sample_utils import make_sampler
model, tokenizer = load("OsaurusAI/Nemotron-3.5-Lightning-30B-A3B-JANG_6M")
prompt = tokenizer.apply_chat_template(
[{"role": "user", "content": "Explain speculative decoding in two sentences."}],
add_generation_prompt=True, tokenize=False, enable_thinking=True,
)
print(generate(model, tokenizer, prompt=prompt, max_tokens=512,
sampler=make_sampler(temp=1.0, top_p=0.95), verbose=True))
```
## Multi-Token Prediction
The upstream checkpoint ships a native MTP head and it is **retained** in this bundle
(`mtp.*`, DeepSeek-V3 shape, sharing the embeddings and output head). Current MLX
runtimes do not decode with it, so it is inert — it costs disk only, not RAM. The
bundle metadata reflects this honestly: `mtp.artifact_available = true`,
`mtp.runtime_available = false`. Presence of these weights is not a claim of active
speculative-decoding acceleration.
## License
Released under the [OpenMDW-1.1](https://openmdw.ai/license/1-1/) license of the base model. Please review the
base model's terms before use.
---
Converted by Jinho Jang — — with [JANG](https://osaurus.ai).