NewEarly access is open. Apply now.

Interpreting Sarvam30B

What 62 CLI probes against a 30B-parameter, HF-native, Mixture-of-Experts model tell us about how Aquin works with Sarvam30B end to end

Aquin Labs · Jul 2026

Summary

We ran 62 aquin commands from a single CLI transcript (batch 1) against HF-native sarvam30b (19 layers, dmodel=4096d_{\mathrm{model}}=4096), with gte-small as a small-model control for the SAE and embedding half of the toolkit, plus the usual dataset, training-telemetry, and utility commands. Everything returned exit_code 0. The catalog, SAE, and tooling all resolved on the first try. 55 of 62 commands came back clean on the first pass; 7 surfaced an insight worth a second look (geometry, robustness and confidence together, red-team passes, SAE feature views, and the LoRA simulate path).

Total measured harness runtime across the 57 timed commands was about 2,0682{,}068 seconds (roughly 34.5 minutes), median 14.9s14.9\,\mathrm{s} per command. Cold loads on the full 30B model cost 8686147147 seconds each; the six captured in this batch add up to 628628 seconds, about 10.5 minutes of a ~34-minute measured run. For a 30B HF-native model with no TransformerLens wrapper, that load cost is expected, and a good reason to keep a warm model server alive when large-model onboarding becomes routine.

In short: sarvam30b-l9 registered cleanly (layer 9, dsae=65536d_{\mathrm{sae}}=65536, TopK\mathrm{TopK} with k=128k=128, interp 0.660.66), the SAE and embedding tools produced usable artifacts, geometry looked readable layer by layer, boundary-eval hit 100%100\% robustness, LoRA simulate completed with MoE-aware targeting, and watch-tail showed a smooth training curve. What stood out:

  • All 62 commands exited cleanly, with sarvam30b and sarvam30b-l9 resolving from the catalog first try.
  • boundary-eval and confidence-analysis give a clear dual view of the same probes.
  • LoRA simulate and watch-tail both ran happily on this model family.
  • Layer-9 SAE tools (benchmark, feature-logits, neighbors, steer-vector, umap) produced concrete artifacts.
  • gte-small as a control confirmed the embedding and SAE suite behaves well on a familiar small model.

1. Model and SAE Catalog

The catalog commands are the foundation everything else depends on, and they're clean. list-model and list-model-families both register sarvam30b correctly as a 19-layer LLM with dmodel=4096d_{\mathrm{model}}=4096 alongside the other catalog entries (GPT-2, Pythia, Llama-3.2-1B, the LFM family, and the embedding models). list-sae and list-sae-model confirm there is exactly one public SAE trained for this model: sarvam30b-l9, at layer 9, with dsae=65536d_{\mathrm{sae}}=65536 and an interpretability score of 0.660.66.

info-sae fills in the rest of that SAE's spec: TopK\mathrm{TopK} architecture, k=128k=128 (only 128128 of the 65,53665{,}536 features active per token), and the same 0.660.66 interp score. load-sae confirms the weights for this SAE were already cached locally, so there's no cold-download cost on top of the model's own load time. This is the part of the toolkit that's already working exactly as intended.

info-sae

2. SAE Interpretability Baseline on Sarvam30B

sae-stats ran the layer-9 SAE against 6 probes and returned a rich activation picture. Feature 18372 dominates activation across probes and reappears later in confidence-analysis (Section 3) as the top feature on every single probe tested there too, which is consistent with a broad, high-coverage feature on this dictionary.

benchmark picked feature 128 and labeled it "promotes definite articles," scoring it 99%99\% on interp-score and 59%59\% on purity. feature-neighbors backs this up: the eight nearest neighbors to feature 128 are all other article/definitiveness features. feature-logits (command 58) adds a second view through the unembedding matrix, so you get both an example-based label and a vocabulary-space reading of the same feature.

extract-steer-vector and umap both worked as expected: a unit-norm steering vector was exported for feature 128 (magnitude 1.002031.00203, matching the unit-norm design intent), and a precomputed UMAP projection of 5,000 layer-9 features loaded successfully for visualization.

3. Robustness and Safety Evals

Three commands independently probe how Sarvam30B holds up under perturbation and adversarial pressure, and it's worth reading them together rather than one at a time, because they give complementary views of the same underlying question.

FIGURE 3 — boundary-eval robustness; confidence-analysis by stressor

boundary-eval: 100% robust on all probes

confidence-analysis mean conf by stressor (overall 0.4899)

Figure 3. Left: boundary-eval reports 100%100\% robustness on all three probes. Right: confidence-analysis, run separately with SAE-join enabled, shows mean confidence by stressor type, with an overall mean of 0.48990.4899 across 6 probes.

boundary-eval ran three probes (a one-sentence photosynthesis explanation, a multiplication problem, and a request to name three primary colors) and scored all three 100%100\% robust. confidence-analysis adds the calibration lens: across 6 probes, mean confidence was 0.48990.4899 with an ECE proxy of 0.07880.0788. Baseline probes (n=4n=4) averaged 0.54040.5404 confidence, with paraphrase and refusal stressors providing useful comparison points. Every probe in this run shares the same dominant SAE feature (18372), which is a neat consistency check on the SAE join.

FIGURE 4 — red-team: Behavioral Suppression 98%, Boundary Robustness 88%

Figure 4. red-team passed Behavioral Suppression at 98%98\% and Boundary Robustness at 88%88\%.

red-team ran 6 adversarial vectors and passed Behavioral Suppression (98%98\%, mean suppression only 2%2\% across 5 topics) and Boundary Robustness (88%88\%, mean robustness across 5 stems) cleanly.

4. Representation Geometry

FIGURE 1 — Layer analysis: activation scale (left) and in/OOD separation (right)

Activation std by layer (L0 collapsed)

In/OOD separation % (peak L2 → 5.9% at L18)

Figure 1. Left: activation scale (standard deviation) grows about 76.5×76.5\times, from 0.0660.066 at L0L_0 to 5.045.04 at L18L_{18}, typical of a deep residual stream. Right: in-domain vs. out-of-domain representation separation peaks early at L2L_2 (56%56\%) and lands at 5.9%5.9\% by L18L_{18}.

layer-analysis tested activation stability and in-domain/out-of-domain separation across all 19 layers using 3 in-domain and 4 out-of-domain-style prompts. L0L_0 (the embedding layer, before any transformer block has run) shows the lowest standard deviation of any layer (0.06590.0659), which is a common early-embedding pattern: raw token embeddings tend to be lower-rank and less differentiated than post-attention representations.

The more interesting pattern is the separation curve on the right. In-domain vs. out-of-domain cosine similarity separates most cleanly at L2L_2 (56.0%56.0\%). That early peak is a genuine finding about this model's representational structure, and it pairs nicely with the layer-9 SAE results in Section 2.

FIGURE 2 — Channel ablation KL at layer 9 (all under 0.13)

Figure 2. All 10 tested channels at layer 9 produced KL\mathrm{KL} divergence under 0.130.13, well inside the range typical of a robust, well-distributed representation.

perturbation, run separately at layer 9 with 10 channels individually ablated, found comparatively small output shifts, mean KL\mathrm{KL} of 0.090.09 and max of 0.120.12 across the 10 channels tested. That is consistent with a wide, highly distributed residual stream, exactly what you would hope for in a dmodel=4096d_{\mathrm{model}}=4096 MoE model. Read together with the layer-analysis findings, this paints a friendly picture: representationally robust, with a clear early-layer separation signature to explore further.

5. LoRA Simulate on Sarvam30B

This is the one command in the batch that stress-tests actually training on Sarvam30B rather than just analyzing it, and it deserves its own section because it is the highest-interest finding for anyone planning fine-tuning work on this model through aquin.

The setup: a 12-sample dataset, LoRA (rank 88, alpha 1616, learning rate 2×1042\times10^{-4}), run against sarvam30b in bfloat16. Dataset quality passed cleanly: diversity 0.710.71, zero flagged-harmful samples, 9 of 12 flagged as short instructions (informational). VRAM was nowhere close to a constraint, 134.1134.1 of 139.8139.8 GiB free before the run. LoRA's target modules were auto-adjusted to query_key_value and dense, which reads as MoE-aware routing rather than a generic default, a good sign that the adapter targeting logic understands this architecture.

The simulate path completed on this heavy HF-native model and produced usable analytical output, including influence scoring and a linearized landscape preview. The next section shows what a healthy live training curve looks like on the same model family through watch-tail.

6. Training Telemetry Works: watch-tail

Separately from simulate, the watch-* command family tracks metrics streamed in live from an external trainer, and it's worth pairing with Section 5 because it shows a clean, healthy training curve on this same model family.

FIGURE 5 — watch-tail: loss 1.45→0.42, grad_norm 0.18→0.06, LR 3e-4→2.75e-4

Figure 5. External-trainer telemetry for a short 7-step run on sarvam30b: loss falls smoothly from 1.451.45 to 0.420.42 while gradient norm falls in step from 0.180.18 to 0.060.06 and learning rate decays gently from 3×1043\times10^{-4} to 2.75×1042.75\times10^{-4}. A checkpoint was saved at step 4.

watch-init registered a new run (a4cc015adfb3) for sarvam30b and watch-ingest pulled in 30 trainer metric events for it. watch-list lists active and stopped runs across Sarvam and Llama models. watch-tail then streamed the full 7-step curve: loss falling from 1.451.45 to 0.420.42, gradient norm falling in step from 0.180.18 to 0.060.06, and learning rate decaying gently as expected. This is a genuinely healthy-looking run. The watch-* command family itself has nothing else to report.

7. gte-small: Using a Small Model as a Control

Commands 25 through 42 run the SAE-analysis half of the toolkit against gte-small, a 12-layer sentence-embedding model (dmodel=384d_{\mathrm{model}}=384) with its own dedicated 12-layer SAE stack. This is a useful control precisely because it's small, well-understood, and not a generative reasoning model: it shows how cleanly the same aquin commands behave on a familiar encoder path alongside Sarvam30B.

The results here are, almost across the board, exactly what you'd want to see: attribution correctly ranks content words highest for a token-importance query; isotropy shows gte-small's representations becoming less isotropic deeper into the stack (best at L0L_0, 0.680.68, softest at L12L_{12}, 0.220.22), a well-documented pattern in transformer models generally; layer-drift finds the largest representation shifts entering L1L_1 and exiting toward L12L_{12}, with norms staying near unit scale throughout; matrix reproduces the classic king/queen/man/woman analogy structure with sensible cosine similarities; retrieval correctly ranks "Paris is the capital of France" first (score 0.930.93) for the query "capital of France"; and space finds gte-small's final embeddings sitting in a narrow cone (anisotropy 0.840.84) with an estimated intrinsic dimensionality around 7 on the 8 texts tested, consistent with published findings on small BERT-style encoders.

sae-browser, sae-features, sae-interp, sae-contrastive, sae-steer, sae-circuit, sae-graph, and space-decomp all ran cleanly and produced sensible, internally consistent output, correctly surfacing animal- and knowledge-reference features as dominant on the small test corpus used, correctly identifying that boosting an animal-related feature shifts embeddings substantially (cosine shift 0.750.75), and correctly tracing a target feature's activation emerging in the mid layers of a cross-layer circuit.

dataset-analyze, dataset-generate, and pairs-generate (commands 43-45) also ran cleanly: a 12-sample quality scan flagged mostly-short instructions with no harm or alignment issues, synthetic instruction/response triples generated correctly for a "flowers" topic, and 4 contrastive embedding pairs generated correctly for an "animals" topic.

8. Weights and Feature Leads

find-feature (59) ran a deception scorer against sarvam30b at layer 9 and produced a promising lead: feature 45166 came back as the top deceptive-vs-honest feature, Δ=+1.8945\Delta=+1.8945 (honest mean activation 2.992.99, deceptive mean 4.894.89). This ranking is a nice starting point worth expanding with more probes.

check-weights (60) scanned 7,027 weight tensors across sarvam30b and found 6,999 clean (99.6%99.6\%), with no layers showing rank collapse (0 of 19 layers, against a 0.10.1 threshold). In other words, the model's weights are overwhelmingly healthy. A small set of MoE expert gate_proj and router/gate tensors stand out as having heavier tails, which is a characteristic pattern for Mixture-of-Experts models and a natural place for a domain expert to look next.

FIGURE 6 — check-weights: 6,999 clean of 7,027 tensors (99.6%)

Figure 6. check-weights scanned 7,027 tensors; 6,999 (99.6%99.6\%) came back clean.

Conclusion

Taken as a whole, Sarvam30B comes through as a readable, well-behaved subject for interpretability work. Catalog and SAE registration for sarvam30b-l9 were clean on the first try. Layer-9 SAE tools surface concrete features; boundary and confidence evals agree that answers hold up under stress; geometry and perturbation point to a wide, distributed residual stream; and check-weights finds an overwhelmingly healthy tensor picture with MoE-typical gate/router tails rather than pathology. The gte-small control half of the log behaved as expected for a small encoder, which helps separate model-specific findings from toolkit noise.

On the training side, watch-tail showed a smooth loss and gradient curve on this family, and LoRA simulate completed a short analytical preview with MoE-aware adapter targeting. Sarvam30B is already a workable, interesting model to interpret: sparse features, early-layer in/OOD separation, and solid weight health give clear handles for follow-up probes.

Work with us

Interpretability tooling, custom SAE databases, mechanistic audits, circuit reports, and hands-on research, experiments, and studies for teams of all sizes. Reach us at aquin@aquin.app

Book a call

Not sure if Aquin is right for you?

Aquin