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, ), 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 seconds (roughly 34.5 minutes), median per command. Cold loads on the full 30B model cost – seconds each; the six captured in this batch add up to 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, , with , interp ), the SAE and embedding tools produced usable artifacts, geometry looked readable layer by layer, boundary-eval hit 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 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 and an interpretability score of .
info-sae fills in the rest of that SAE's spec: architecture, (only of the features active per token), and the same 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.
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 on interp-score and 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 , 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 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 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 robust. confidence-analysis adds the calibration lens: across 6 probes, mean confidence was with an ECE proxy of . Baseline probes () averaged 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 and Boundary Robustness at .
red-team ran 6 adversarial vectors and passed Behavioral Suppression (, mean suppression only across 5 topics) and Boundary Robustness (, 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 , from at to at , typical of a deep residual stream. Right: in-domain vs. out-of-domain representation separation peaks early at () and lands at by .
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. (the embedding layer, before any transformer block has run) shows the lowest standard deviation of any layer (), 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 (). 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 divergence under , 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 of and max of across the 10 channels tested. That is consistent with a wide, highly distributed residual stream, exactly what you would hope for in a 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 , alpha , learning rate ), run against sarvam30b in bfloat16. Dataset quality passed cleanly: diversity , zero flagged-harmful samples, 9 of 12 flagged as short instructions (informational). VRAM was nowhere close to a constraint, of 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 to while gradient norm falls in step from to and learning rate decays gently from to . 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 to , gradient norm falling in step from to , 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 () 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 , , softest at , ), a well-documented pattern in transformer models generally; layer-drift finds the largest representation shifts entering and exiting toward , 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 ) for the query "capital of France"; and space finds gte-small's final embeddings sitting in a narrow cone (anisotropy ) 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 ), 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, (honest mean activation , deceptive mean ). 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 (), with no layers showing rank collapse (0 of 19 layers, against a 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 () 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.
