--- 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 ---

Osaurus AI

# 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).