CoolFace
Modelpublic

OsaurusAI/Nemotron-3.5-Lightning-30B-A3B-MXFP8

sourceHugging Faceotherupdated 2mo agoView on Hugging Face
0likes109downloads
Model Card

<p align="center"><a href="https://osaurus.ai"><img src="./osaurus-x-banner.png" alt="Osaurus AI"></a></p>

OsaurusAI/Nemotron-3.5-Lightning-30B-A3B-MXFP8

MX FP8 (mx.quantize(mode="mxfp8"), group size 32, e8m0 shared exponents). Highest-fidelity bundle; use as the quality reference.

MX FP8 (group size 32) conversion of `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

BundleAvg bitsSizeNotes
`Nemotron-3.5-Lightning-30B-A3B-JANG_2L`3.7316.22 GiBsmallest
`Nemotron-3.5-Lightning-30B-A3B-JANG_4M`4.1217.72 GiBrecommended
`Nemotron-3.5-Lightning-30B-A3B-JANG_6M`6.0625.15 GiBnear-lossless
`Nemotron-3.5-Lightning-30B-A3B-MXFP8`8.0031.62 GiBMX 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: 27
  • —Weight bytes: 33950540584 (31.619 GiB)
  • —Average bits/weight: 8.00
  • —Load time: 1.6 seconds
  • —Reasoning ON: 64.7 tok/s
  • —Reasoning OFF: 36.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 <tool_call> 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:

ParameterValue
temperature1.0
top_p0.95
top_k0 (disabled)
repetition_penalty1.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 (</s>) 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 <think>\n, and with reasoning off it ends in a prefilled empty <think></think>. Reasoning-off is therefore not "omit the block" — a runtime that simply drops <think> 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:

<tool_call>
<function=get_weather>
<parameter=city>
Santa Clara
</parameter>
</function>
</tool_call>

Tool results are passed back with role: "tool"; consecutive results are coalesced into a single user turn wrapped in <tool_response>.

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-MXFP8")
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 license of the base model. Please review the base model's terms before use.


Converted by Jinho Jang — <eric@osaurus.ai> — with JANG.