Osaurus AI

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

The standard profile. 8-bit attention/routers/shared experts, 4-bit routed experts.

JANG mixed-precision affine (JANG_4M, group size 64) 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

Bundle Avg bits Size Notes
Nemotron-3.5-Lightning-30B-A3B-JANG_2L 3.73 16.22 GiB smallest
Nemotron-3.5-Lightning-30B-A3B-JANG_4M 4.12 17.72 GiB recommended
Nemotron-3.5-Lightning-30B-A3B-JANG_6M 6.06 25.15 GiB near-lossless
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: 26
  • Weight bytes: 19024579336 (17.718 GiB)
  • Average bits/weight: 4.12
  • Load time: 1.9 seconds
  • Reasoning ON: 121.0 tok/s
  • Reasoning OFF: 47.5 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:

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 (</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.

# 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

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_4M")
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.

Downloads last month
20
Safetensors
Model size
5B params
Tensor type
U32
·
F16
·
F32
·
MLX
Hardware compatibility
Log In to add your hardware

Quantized

Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for OsaurusAI/Nemotron-3.5-Lightning-30B-A3B-JANG_4M

Quantized
(57)
this model