What language does an Indian AI think in?
Contents
Sarvam-30B is an open-weights language model built in India, for Indian languages, and trained from scratch. Ask it to translate the Tamil word for water, தண்ணீர், into Telugu, and it answers నీరు. There's no English anywhere in the prompt. The question is what happens in between.
A translator who grew up speaking English might go through English without noticing: தண்ணீர், that's "water", so in Telugu it's నీరు. The answer comes out in Telugu either way. Wendler and colleagues (2024) found that Llama-2 does something like this, which isn't a great surprise for a model trained mostly on English. Sarvam was built to be different: according to its launch post (Sarvam AI, 2026), it was trained on 16 trillion tokens, with "a substantial portion" of the training budget going to the ten most-spoken Indian languages. So it was worth checking.
Sarvam open-sourced two models together, a 30B and a 105B. This post is about the 30B:
Sarvam-30B
The main model: five lenses
- Attention
- Grouped-query: 64 query heads share 4 key-value heads
- Experts
- 128 in each layer after the first; each token uses 6, plus 1 shared
- Languages
- English and the 22 scheduled Indian languages
- Vocabulary
- 262,144 tokens
- Context
- 64K tokens
- Pre-training
- 16 trillion tokens, from scratch, in India
- Licence
- Apache 2.0
- Released
- March 2026
- In this post
- Logit, J, R and J++ lenses, a J-lens refitted on Indian-language text, and the causal tests
Sarvam-105B
Next, once there's compute for it
- Attention
- Multi-head latent attention, 64 heads
- Experts
- 128 in each layer after the first; each token uses 8, plus 1 shared
- Languages
- English and the 22 scheduled Indian languages
- Vocabulary
- 262,144 tokens
- Context
- 128K tokens
- Pre-training
- 12 trillion tokens, from scratch, in India
- Licence
- Apache 2.0
- Released
- March 2026
- In this post
- Not yet. Fitting lenses on it needs two H200s just to load and roughly 4× the compute per prompt
Both are mixture-of-experts reasoning models, open-weights, with a 4,096-wide residual stream. From each model's config and model card on Hugging Face (30B, 105B) and Sarvam's launch post, which says both were pre-trained, fine-tuned and trained with reinforcement learning in-house, with a substantial portion of the pre-training budget on the 10 most-spoken Indian languages. Sarvam counts the 30B's 2.4B active parameters without embeddings. Context windows are the ones Sarvam's API docs give; the 30B's config allows up to 131,072 positions, and the 105B reaches 128K by YaRN scaling of a 4,096-token base.
Where this ends up: English is the language you can read in the middle, for every Indian language I could test, and the model uses it without needing it. But "thinks in English" is only a first approximation. Every language the model knows well is written there too, in a concept space they share; English is just the easiest one to read.
Looking inside
Sarvam-30B is a mixture-of-experts model: 32 billion parameters in all, about 2.4 billion of them active for any one token (its model card's figure, which leaves out the embeddings). It works in stages. Each of its 19 layers reads a long list of numbers, the residual stream, adds something to it and passes it on, and the last one turns the list into a choice of next token (a word or a piece of one). A lens asks a middle layer the same question early: if the model had to speak now, what would it say?
The simplest, the logit lens (nostalgebraist, 2020), pushes a middle layer's numbers straight through the model's final output step. It needs no fitting, but it works badly early on, because a middle layer doesn't yet speak the language the output step expects. The J-lens (Gurnee et al., 2026) first carries the numbers forward with the model's own average Jacobian: how a small nudge at that layer moves the last one. The R-lens (Blank, Bhatia and Nanda, 2026) computes the same average through a cleaner backward pass, and the J++ lens (Ayonrinde and Lindsey, 2026) blends several such Jacobians with learned weights. I fitted the last three on Sarvam-30B and used all four. Panchal and colleagues (2026) have fitted a tuned lens to Sarvam-1, the 2B predecessor. A result only counts here if all four agree, though that isn't four independent checks: all four read out through the model's own output layer. The independent checks come later: the geometry, which doesn't decode through words at all, and edits measured against random ones of the same size.
The test is Wendler's: five example translations, then a word to translate.
தமிழ்: "நெருப்பு" - తెలుగు: "నిప్పు"
… four more examples …
தமிழ்: "தண்ணீர்" - తెలుగు: "
Even the language labels are in their own scripts. I used 32 everyday nouns in 8 Indian languages and ten language pairs between them, and kept the 256 translations Sarvam got right. At each layer I asked one question: is any token of the English word among the 10 tokens the lens ranks highest? I call the share of items where it is the top-10 rate.
To keep the counting honest, I used a control. For every word I tracked, I also tracked the same language's word for a different concept: "fire" when the answer is "water". If English shows up just because the middle of the model is English-flavoured in general, the control will show up too.
English, in the middle
Here is one translation from the inside. Each bar is a word, and the further right it reaches, the closer the model is to saying it. Press play.
… four more examples …
தமிழ்: "தண்ணீர்" - తెలుగు: "
Press Play, or drag the slider. Each bar shows how close a word is to being said at that layer: a full bar is the model's top choice out of 262,144 tokens.
Real readouts for eight Tamil→Telugu translations Sarvam got right, at the last position of the prompt. The dashed line is the top 10. The control is the English word for a different concept from the same list (here "milk"), so it shows how high an unrelated English word drifts. Switch lenses at any layer to compare them.
That's one word. Here are all 256 translations, under any of the four lenses (or a fifth, refitted on Indian-language text), for any of the ten pairs:
- English word
- The answer, in the target language
- Hindi word
- The other Indian languages, not in the prompt
- A different concept's English or Hindi word
256 correct translations between Tamil, Telugu, Kannada, Malayalam, Bengali, Marathi and Gujarati, in ten pairs, read at the last prompt position. Shaded bands are 95% intervals. No prompt contains any English. The solid grey line averages, for each item, the five original Indian languages that are neither in its prompt nor Hindi (from a later rerun of the same items; their own control peaks at 0%).
Show data
| Series | Layer | Items with the word in the top 10 |
|---|---|---|
| English word | 0 | 0% |
| English word | 1 | 0% |
| English word | 2 | 0% |
| English word | 3 | 0% |
| English word | 4 | 0% |
| English word | 5 | 0% |
| English word | 6 | 1% |
| English word | 7 | 2% |
| English word | 8 | 11% |
| English word | 9 | 9% |
| English word | 10 | 3% |
| English word | 11 | 20% |
| English word | 12 | 34% |
| English word | 13 | 80% |
| English word | 14 | 98% |
| English word | 15 | 98% |
| English word | 16 | 99% |
| English word | 17 | 86% |
| The answer, in the target language | 0 | 0% |
| The answer, in the target language | 1 | 0% |
| The answer, in the target language | 2 | 0% |
| The answer, in the target language | 3 | 0% |
| The answer, in the target language | 4 | 0% |
| The answer, in the target language | 5 | 0% |
| The answer, in the target language | 6 | 0% |
| The answer, in the target language | 7 | 0% |
| The answer, in the target language | 8 | 0% |
| The answer, in the target language | 9 | 0% |
| The answer, in the target language | 10 | 0% |
| The answer, in the target language | 11 | 0% |
| The answer, in the target language | 12 | 0% |
| The answer, in the target language | 13 | 11% |
| The answer, in the target language | 14 | 22% |
| The answer, in the target language | 15 | 27% |
| The answer, in the target language | 16 | 42% |
| The answer, in the target language | 17 | 84% |
| Hindi word | 0 | 0% |
| Hindi word | 1 | 0% |
| Hindi word | 2 | 0% |
| Hindi word | 3 | 0% |
| Hindi word | 4 | 0% |
| Hindi word | 5 | 0% |
| Hindi word | 6 | 0% |
| Hindi word | 7 | 0% |
| Hindi word | 8 | 0% |
| Hindi word | 9 | 0% |
| Hindi word | 10 | 0% |
| Hindi word | 11 | 0% |
| Hindi word | 12 | 1% |
| Hindi word | 13 | 42% |
| Hindi word | 14 | 60% |
| Hindi word | 15 | 55% |
| Hindi word | 16 | 68% |
| Hindi word | 17 | 62% |
| The other Indian languages, not in the prompt | 0 | 0% |
| The other Indian languages, not in the prompt | 1 | 0% |
| The other Indian languages, not in the prompt | 2 | 0% |
| The other Indian languages, not in the prompt | 3 | 0% |
| The other Indian languages, not in the prompt | 4 | 0% |
| The other Indian languages, not in the prompt | 5 | 0% |
| The other Indian languages, not in the prompt | 6 | 0% |
| The other Indian languages, not in the prompt | 7 | 0% |
| The other Indian languages, not in the prompt | 8 | 0% |
| The other Indian languages, not in the prompt | 9 | 0% |
| The other Indian languages, not in the prompt | 10 | 0% |
| The other Indian languages, not in the prompt | 11 | 0% |
| The other Indian languages, not in the prompt | 12 | 0% |
| The other Indian languages, not in the prompt | 13 | 7% |
| The other Indian languages, not in the prompt | 14 | 12% |
| The other Indian languages, not in the prompt | 15 | 12% |
| The other Indian languages, not in the prompt | 16 | 17% |
| The other Indian languages, not in the prompt | 17 | 34% |
| A different concept's English or Hindi word | 0 | 0% |
| A different concept's English or Hindi word | 1 | 0% |
| A different concept's English or Hindi word | 2 | 0% |
| A different concept's English or Hindi word | 3 | 0% |
| A different concept's English or Hindi word | 4 | 0% |
| A different concept's English or Hindi word | 5 | 0% |
| A different concept's English or Hindi word | 6 | 1% |
| A different concept's English or Hindi word | 7 | 0% |
| A different concept's English or Hindi word | 8 | 2% |
| A different concept's English or Hindi word | 9 | 2% |
| A different concept's English or Hindi word | 10 | 0% |
| A different concept's English or Hindi word | 11 | 0% |
| A different concept's English or Hindi word | 12 | 0% |
| A different concept's English or Hindi word | 13 | 0% |
| A different concept's English or Hindi word | 14 | 0% |
| A different concept's English or Hindi word | 15 | 0% |
| A different concept's English or Hindi word | 16 | 0% |
| A different concept's English or Hindi word | 17 | 0% |
- English peaks at
- 99% layer 16
- Hindi peaks at
- 68% layer 16
- Control, at most
- 2%
Before layer 11, almost nothing is readable. The logit lens, R-lens and J++ stay under 2% there, and the J-lens shows only a small English bump around layer 8, part of which comes from ties in how tokens are ranked. Whatever the first 60% of the model does, it mostly isn't in words. From layer 11, English rises fast. At layers 14 to 16, the English word is in the J-lens top 10 for 98 to 99% of items. The control, a different concept's English word, stays at 0%, so the English in the middle is specifically "water".
Switch lenses and the picture holds: at layers 14 to 16 the English top-10 rate is 97 to 100% under the J-, R- and J++ lenses, and 93 to 95% under the logit lens. No control goes above 3%. It holds for every pair, too: under the J-lens, the probability on the English word peaks between 0.63 (Bengali→Gujarati) and 0.85 (Telugu→Kannada). The answer itself arrives only at the end: the target word reaches the top 10 for 84% of items at layer 17.
So, the guess: about 98%.
Is the English doing anything?
A lens shows what can be read from a layer. It doesn't show that the model uses it. I tested that three ways.
First, delete it. For each word, the lens gives directions in the residual stream that push the model towards saying it. At the prompt's last position, I projected the English word's directions out at layers 13 to 16.
- Still right (darker means more confident)
- No longer the model's top choice
Right answer's probability 82.8%; 258 of 272 still right.
- Right answer's probability
- 82.8%
- Change
- −5.7 pts
- Still right
- 258 of 272
Each dot is one translation Sarvam got right. Removing a word projects its lens directions out of the residual stream at the last prompt position, in the layers named. A random edit of the same size costs 0.2 points. 95% interval for the change: -7.1 to -4.3 points.
Removing the English word costs 5.7 percentage points of the right answer's probability (95% interval 4.3 to 7.1). Removing a different concept's English word costs 0.4, and removing the English word at layers 5 to 8 costs 0.3. The effect is specific to the concept and to the depth where the lens finds English, so the model is using it. But 94.9% of translations still come out right.
Second, swap it. Run the "water" prompt, but at layers 13 to 16 write in the state from the "fire" prompt, only along the roughly 21 directions spanned by both words' English tokens. The answer flips to Telugu "fire" in 54.8% of items. A random subspace with the same number of directions flips none. Neither half works alone: removing water's English, or adding fire's, flips 0.4% each. Swapping the whole state flips 98.7%, so the English directions carry about half of it. With the same number of directions per item (6.8 on average), English flips 52.6%, Hindi 29.6% and the target language's own word 30.0%.
- English flips
- 54.8%
- Hindi flips
- 32.2%
- Translations
- 230
At layers 13–16, the “water” prompt's state at its last position is overwritten with the “fire” prompt's, but only inside the chosen directions (J-lens directions of each word's tokens). A flip means the Telugu answer becomes the word for fire. Whiskers are 95% intervals. Writing in only the new word's English, or only removing the old one, does almost nothing; replacing both does half the job.
At equal size, English beats Hindi by 23 points (interval 17 to 30). It leads in 9 of the 10 language pairs and ties the target word in the tenth, Marathi→Bengali. Hindi and the target word are indistinguishable from each other.
Third, push against it, setting the English component to −2× its value. That costs 40 points, and only 59% of translations survive. That looks far bigger than deleting it, but most of it is just how hard the push shoves the model: a random direction pushed exactly as far, at every layer, costs 30 points (77% survive). What's specific to English is about 10 points at the strongest push (interval 3 to 18), and about 6 for plain deletion. I first compared the push against a different concept's English, which costs only 8. It looked mild because that word's component is smaller, so pushing it moves the model less.
Drop in the right answer's probability
Translations still correct
- Extra drop from the English edit
- 5.7 pts
- 95% interval
- 3.7 to 7.8
143 correctly translated items, starting at 91% average probability on the right answer. The edit acts on the English word's directions at the last position, layers 13–16 (J-lens directions). α = 1 removes the component, 2 flips its sign, 3 sets it to minus twice its size. The random push moves the model's state exactly as far as the English push at every layer; “specific to English” is the English drop minus the random one. A different concept's English word, the control I used first, moves the state less, which is why it looked so mild. Whiskers are 95% intervals.
So the English is used, and per direction it carries more than Hindi or the target word, but it isn't a bottleneck. Delete the English, Hindi and target-word directions all at once and 94% of translations still come out right; English and Hindi alone cost 11 points, about the sum of the two. Nor does the model fetch English from earlier in the prompt: deleting it at every position costs only 2 points more than at the last, and deleting it from the source word's own positions costs nothing. The concept is also held outside these words' readout directions. As for who writes the English word: a few attention heads put it in at layers 11, 13 and 14, the experts amplify it at 15 to 17, and the last layer takes it back out as it writes the answer. The same heads write the Hindi and target-word directions at the same time, and no single expert specialises in English. Souvik Maji (2026) found something similar for refusal: after switching off each of Sarvam-30B's 2,304 experts one at a time, the expert that pushed hardest towards refusal did no better than a random one on held-out prompts.
The English route also has a cost. If "nail" passes through English, the errors should land on the other nail. I wrote 23 word senses that share an English word but are different words in Indian languages, like the fingernail நகம் and the metal nail ஆணி. The model answered with the other sense of the same English word in 4.6% of items, against 0% for a matched unrelated word. The clearest case: Hindi माउस, a computer mouse, comes out in Tamil as எலி, the rodent. Kin words that English lumps together, like "uncle", fare worse too: 38% right on the 30B, against 78% for kin words English keeps distinct. (I wrote these lists by hand; a native speaker hasn't checked them.)
A fainter Hindi, and Qwen's Chinese
There's a second, fainter line. The Hindi word for the concept is in the top 10 for 41 to 83% of items at layers 14 to 16, depending on the lens, and its control stays at or below 1%. But it carries little weight: under 4% probability at those layers under every lens, where English reaches 74% under the J-lens. Removing it still costs 4.4 points, close to English's 5.7. It shows up between languages unrelated to Hindi too: for 66% of items in pairs among the Dravidian languages.
If a model's hidden languages follow its training data, a model trained on a different mix should have different ones. So I ran the same pairs through Qwen3.6-35B-A3B (Qwen Team, 2026), a mixture-of-experts model of similar size. Qwen's first technical report describes its training data as multilingual, "with a significant portion" in English and Chinese (Bai et al., 2023), and Qwen3 widened it to 119 languages (Yang et al., 2025).
- Sarvam-30B: English
- Sarvam-30B: Hindi
- Qwen3.6-35B-A3B: English
- Qwen3.6-35B-A3B: Chinese
The same ten pairs: 256 items for Sarvam's 19 layers, 257 for Qwen's 40, lined up by relative depth. The logit lens has nothing fitted, so it treats both models the same way. A word counts if any of its tokens is among the 10 the lens ranks highest.
Show data
| Series | Depth through the model | Items with the word in the top 10 |
|---|---|---|
| Sarvam-30B: English | 0% | 0% |
| Sarvam-30B: English | 6% | 0% |
| Sarvam-30B: English | 11% | 0% |
| Sarvam-30B: English | 17% | 0% |
| Sarvam-30B: English | 22% | 0% |
| Sarvam-30B: English | 28% | 0% |
| Sarvam-30B: English | 33% | 0% |
| Sarvam-30B: English | 39% | 0% |
| Sarvam-30B: English | 44% | 0% |
| Sarvam-30B: English | 50% | 0% |
| Sarvam-30B: English | 56% | 0% |
| Sarvam-30B: English | 61% | 2% |
| Sarvam-30B: English | 67% | 1% |
| Sarvam-30B: English | 72% | 33% |
| Sarvam-30B: English | 78% | 93% |
| Sarvam-30B: English | 83% | 95% |
| Sarvam-30B: English | 89% | 93% |
| Sarvam-30B: English | 94% | 70% |
| Sarvam-30B: Hindi | 0% | 0% |
| Sarvam-30B: Hindi | 6% | 0% |
| Sarvam-30B: Hindi | 11% | 0% |
| Sarvam-30B: Hindi | 17% | 0% |
| Sarvam-30B: Hindi | 22% | 0% |
| Sarvam-30B: Hindi | 28% | 0% |
| Sarvam-30B: Hindi | 33% | 0% |
| Sarvam-30B: Hindi | 39% | 0% |
| Sarvam-30B: Hindi | 44% | 0% |
| Sarvam-30B: Hindi | 50% | 0% |
| Sarvam-30B: Hindi | 56% | 0% |
| Sarvam-30B: Hindi | 61% | 0% |
| Sarvam-30B: Hindi | 67% | 0% |
| Sarvam-30B: Hindi | 72% | 4% |
| Sarvam-30B: Hindi | 78% | 41% |
| Sarvam-30B: Hindi | 83% | 50% |
| Sarvam-30B: Hindi | 89% | 57% |
| Sarvam-30B: Hindi | 94% | 40% |
| Qwen3.6-35B-A3B: English | 0% | 0% |
| Qwen3.6-35B-A3B: English | 3% | 0% |
| Qwen3.6-35B-A3B: English | 5% | 0% |
| Qwen3.6-35B-A3B: English | 8% | 0% |
| Qwen3.6-35B-A3B: English | 10% | 0% |
| Qwen3.6-35B-A3B: English | 13% | 0% |
| Qwen3.6-35B-A3B: English | 15% | 0% |
| Qwen3.6-35B-A3B: English | 18% | 0% |
| Qwen3.6-35B-A3B: English | 21% | 0% |
| Qwen3.6-35B-A3B: English | 23% | 0% |
| Qwen3.6-35B-A3B: English | 26% | 0% |
| Qwen3.6-35B-A3B: English | 28% | 0% |
| Qwen3.6-35B-A3B: English | 31% | 6% |
| Qwen3.6-35B-A3B: English | 33% | 5% |
| Qwen3.6-35B-A3B: English | 36% | 7% |
| Qwen3.6-35B-A3B: English | 38% | 5% |
| Qwen3.6-35B-A3B: English | 41% | 7% |
| Qwen3.6-35B-A3B: English | 44% | 6% |
| Qwen3.6-35B-A3B: English | 46% | 16% |
| Qwen3.6-35B-A3B: English | 49% | 14% |
| Qwen3.6-35B-A3B: English | 51% | 17% |
| Qwen3.6-35B-A3B: English | 54% | 18% |
| Qwen3.6-35B-A3B: English | 56% | 23% |
| Qwen3.6-35B-A3B: English | 59% | 23% |
| Qwen3.6-35B-A3B: English | 62% | 30% |
| Qwen3.6-35B-A3B: English | 64% | 36% |
| Qwen3.6-35B-A3B: English | 67% | 51% |
| Qwen3.6-35B-A3B: English | 69% | 43% |
| Qwen3.6-35B-A3B: English | 72% | 37% |
| Qwen3.6-35B-A3B: English | 74% | 34% |
| Qwen3.6-35B-A3B: English | 77% | 70% |
| Qwen3.6-35B-A3B: English | 79% | 61% |
| Qwen3.6-35B-A3B: English | 82% | 58% |
| Qwen3.6-35B-A3B: English | 85% | 75% |
| Qwen3.6-35B-A3B: English | 87% | 68% |
| Qwen3.6-35B-A3B: English | 90% | 93% |
| Qwen3.6-35B-A3B: English | 92% | 91% |
| Qwen3.6-35B-A3B: English | 95% | 87% |
| Qwen3.6-35B-A3B: English | 97% | 41% |
| Qwen3.6-35B-A3B: Chinese | 0% | 0% |
| Qwen3.6-35B-A3B: Chinese | 3% | 0% |
| Qwen3.6-35B-A3B: Chinese | 5% | 0% |
| Qwen3.6-35B-A3B: Chinese | 8% | 0% |
| Qwen3.6-35B-A3B: Chinese | 10% | 0% |
| Qwen3.6-35B-A3B: Chinese | 13% | 1% |
| Qwen3.6-35B-A3B: Chinese | 15% | 0% |
| Qwen3.6-35B-A3B: Chinese | 18% | 0% |
| Qwen3.6-35B-A3B: Chinese | 21% | 0% |
| Qwen3.6-35B-A3B: Chinese | 23% | 0% |
| Qwen3.6-35B-A3B: Chinese | 26% | 0% |
| Qwen3.6-35B-A3B: Chinese | 28% | 0% |
| Qwen3.6-35B-A3B: Chinese | 31% | 8% |
| Qwen3.6-35B-A3B: Chinese | 33% | 6% |
| Qwen3.6-35B-A3B: Chinese | 36% | 7% |
| Qwen3.6-35B-A3B: Chinese | 38% | 5% |
| Qwen3.6-35B-A3B: Chinese | 41% | 5% |
| Qwen3.6-35B-A3B: Chinese | 44% | 6% |
| Qwen3.6-35B-A3B: Chinese | 46% | 14% |
| Qwen3.6-35B-A3B: Chinese | 49% | 10% |
| Qwen3.6-35B-A3B: Chinese | 51% | 11% |
| Qwen3.6-35B-A3B: Chinese | 54% | 12% |
| Qwen3.6-35B-A3B: Chinese | 56% | 18% |
| Qwen3.6-35B-A3B: Chinese | 59% | 19% |
| Qwen3.6-35B-A3B: Chinese | 62% | 24% |
| Qwen3.6-35B-A3B: Chinese | 64% | 17% |
| Qwen3.6-35B-A3B: Chinese | 67% | 27% |
| Qwen3.6-35B-A3B: Chinese | 69% | 31% |
| Qwen3.6-35B-A3B: Chinese | 72% | 31% |
| Qwen3.6-35B-A3B: Chinese | 74% | 29% |
| Qwen3.6-35B-A3B: Chinese | 77% | 69% |
| Qwen3.6-35B-A3B: Chinese | 79% | 67% |
| Qwen3.6-35B-A3B: Chinese | 82% | 56% |
| Qwen3.6-35B-A3B: Chinese | 85% | 79% |
| Qwen3.6-35B-A3B: Chinese | 87% | 72% |
| Qwen3.6-35B-A3B: Chinese | 90% | 92% |
| Qwen3.6-35B-A3B: Chinese | 92% | 82% |
| Qwen3.6-35B-A3B: Chinese | 95% | 70% |
| Qwen3.6-35B-A3B: Chinese | 97% | 26% |
- English in Sarvam, at most
- 95%
- English in Qwen, at most
- 93%
- Hindi in Sarvam, at most
- 57%
- Chinese in Qwen, at most
- 92%
Qwen passes through English just as hard: under the logit lens the English word is in its top 10 for 93% of items at its peak, with almost the same probability as Sarvam (0.46 and 0.45). But Qwen's second hidden language is Chinese, at 92%, and Hindi barely registers (1%). With matched J-lenses, Sarvam puts more probability on English than Qwen does (0.74 against 0.61): switch the figure to the J-lens and to probability to see it. Each model's second hidden language is its other big training language, which is what Zhong and colleagues (2025) found in Japanese-centric models too. Sarvam's Indian-first training left its reliance on English intact and added Hindi alongside it.
Objections I checked
- "English words are single tokens, so they're easier to read." When the Hindi word is a single token too, English still leads it by 28 points. Counting only tokens that are the whole word leaves English at 94%.
- "You only tracked English, Hindi and Chinese." So I tracked every language. For a Tamil→Telugu item, the Indian languages that aren't in the prompt (Kannada, Bengali, Gujarati and the rest) are in the top 10 for only 12% of items (14% counting whole-word tokens only), against 94% for English and 58% for Hindi, with their controls at 0%. English is the most readable language in the middle, not the only one there. More on that below.
- "It's just English words near the concept." A near-synonym (liquid, for water) is in the top 10 for 10% of items, an associate (ice) for 1%. Both rank far above chance (median ranks 69 and 258 of 262,144), but the top of the readout is the translation itself, and the near-synonyms that do show up (hill, flame, home, evening) are words the Indian word also covers. So the readout is word-specific. That doesn't prove the model holds an English word: a concept read out through a mostly English vocabulary would favour "water" over "liquid" too.
- "The lenses were fitted on English text." A J-lens fitted mostly on Indian-language Wikipedia still finds English in the top 10 for 89 to 99% of items at layers 14 to 16. It's the fifth lens in the explorer above.
- "Five-shot prompts aren't real use." Translating a sentence in the model's own chat format: 88%, control 0. Plain sentence completion, no instruction: 85% (43 sentences).
- "There's an English expert." The router partly groups words by concept and by target language, not through English. Layer-0 "concept neurons" I first reported turned out to track a word's form, not its meaning; counted over independent word forms, the 30B's are at chance (2 against 2.3).
- "Rounding inflates the readouts." Re-scoring with a full-precision output layer moved none of the 92 headline numbers by more than 1.6 points.
All 22 scheduled languages
India's constitution lists 22 scheduled languages, in its Eighth Schedule. Everything above used 8. I added the other 14, with every word copied from a cited Wiktionary or Wikidata entry, plus Japanese, Russian and Arabic as outside controls. Dogri didn't make it (Wiktionary has only 6 of the 32 words), so the test covers 21 of the 22, including Urdu, Sindhi and Kashmiri in Perso-Arabic script, Manipuri in Meitei Mayek and Santali in Ol Chiki.
Every language I could test goes through English, as source and as target. In every language group with more than 3 correct translations, the English word is in the J-lens top 10 for 0.84 to 1.00 of items. The control: 0.00 to 0.03. The layers are the same as for the first eight.
- English word
- English word, original pairs
- Hindi word
- A different concept's English word
78 correct translations in the pairs with Manipuri or Santali at either end, English as the source left out. Read at the last prompt position. Hindi is tracked on 55 of them, not where Hindi is the target.
Show data
| Series | Layer | Items with the word in the top 10 |
|---|---|---|
| English word | 0 | 0% |
| English word | 1 | 0% |
| English word | 2 | 0% |
| English word | 3 | 0% |
| English word | 4 | 0% |
| English word | 5 | 0% |
| English word | 6 | 0% |
| English word | 7 | 0% |
| English word | 8 | 12% |
| English word | 9 | 15% |
| English word | 10 | 8% |
| English word | 11 | 23% |
| English word | 12 | 49% |
| English word | 13 | 85% |
| English word | 14 | 96% |
| English word | 15 | 97% |
| English word | 16 | 97% |
| English word | 17 | 90% |
| English word, original pairs | 0 | 0% |
| English word, original pairs | 1 | 0% |
| English word, original pairs | 2 | 0% |
| English word, original pairs | 3 | 0% |
| English word, original pairs | 4 | 0% |
| English word, original pairs | 5 | 0% |
| English word, original pairs | 6 | 1% |
| English word, original pairs | 7 | 4% |
| English word, original pairs | 8 | 16% |
| English word, original pairs | 9 | 13% |
| English word, original pairs | 10 | 9% |
| English word, original pairs | 11 | 33% |
| English word, original pairs | 12 | 46% |
| English word, original pairs | 13 | 84% |
| English word, original pairs | 14 | 99% |
| English word, original pairs | 15 | 99% |
| English word, original pairs | 16 | 100% |
| English word, original pairs | 17 | 90% |
| Hindi word | 0 | 0% |
| Hindi word | 1 | 0% |
| Hindi word | 2 | 0% |
| Hindi word | 3 | 0% |
| Hindi word | 4 | 0% |
| Hindi word | 5 | 0% |
| Hindi word | 6 | 0% |
| Hindi word | 7 | 0% |
| Hindi word | 8 | 0% |
| Hindi word | 9 | 0% |
| Hindi word | 10 | 0% |
| Hindi word | 11 | 0% |
| Hindi word | 12 | 0% |
| Hindi word | 13 | 42% |
| Hindi word | 14 | 55% |
| Hindi word | 15 | 56% |
| Hindi word | 16 | 69% |
| Hindi word | 17 | 67% |
| A different concept's English word | 0 | 0% |
| A different concept's English word | 1 | 0% |
| A different concept's English word | 2 | 0% |
| A different concept's English word | 3 | 0% |
| A different concept's English word | 4 | 0% |
| A different concept's English word | 5 | 0% |
| A different concept's English word | 6 | 0% |
| A different concept's English word | 7 | 0% |
| A different concept's English word | 8 | 3% |
| A different concept's English word | 9 | 4% |
| A different concept's English word | 10 | 0% |
| A different concept's English word | 11 | 0% |
| A different concept's English word | 12 | 0% |
| A different concept's English word | 13 | 0% |
| A different concept's English word | 14 | 0% |
| A different concept's English word | 15 | 0% |
| A different concept's English word | 16 | 0% |
| A different concept's English word | 17 | 0% |
- English, layers 14–16
- 96–97%
- Hindi peaks at
- 69% layer 16
- Control, layers 14–16
- 0%
The added languages lean on English harder. Deleting the English word over six new pairs (Odia, Urdu, Kashmiri, Manipuri, Santali and Japanese as the source) cost 13.2 points (interval 10.6 to 16.2), against 5.7 for the original pairs: about 2.3 times as much. Kashmiri shows the largest drop (16.9 points), though the per-pair intervals overlap. These compare separate runs on different pairs, and about 90% of translations still survive.
For these languages, the failures come when translating into them. Asked to translate the 32 words from Telugu into Kashmiri, the 30B got 1 right, counting by the answer's first token. From English, it got 13. In 29 of its 31 misses it wrote Telugu script: it copied the source. Other small targets fail in similar ways: Bodo 1 of 13, Konkani 3 of 18 (often writing Marathi or Hindi instead), Sindhi 7 of 31 (sometimes writing Urdu).
On 178 failed translations into these languages, the English word is still in the middle layers' top 10 for 0.88 of items, against 0.96 on the successes, with controls at or below 0.01. On the Kashmiri misses, it's 0.93. The source word, meanwhile, isn't held mid-network even when the model ends up copying it (0.11 on those misses), so the copy is decided late. The model understood the word but couldn't write it in Kashmiri.
Here is every added language in both directions. Translating into the language, the dots spread out. Switch to "English in the middle" and they bunch near the top again.
- Sarvam-30B
- Sarvam-30B, translating from English
Show data
| Sarvam-30B | Sarvam-30B, translating from English | |
|---|---|---|
| Original pairs | 71.9% | — |
| Russian | 90.6% | — |
| Japanese | 81.3% | 84.4% |
| Punjabi | 77.4% | — |
| Urdu | 75.0% | — |
| Odia | 74.2% | — |
| Arabic | 71.9% | — |
| Assamese | 68.8% | — |
| Sanskrit | 56.0% | — |
| Nepali | 50.0% | — |
| Maithili | 33.3% | — |
| Manipuri | 28.1% | 53.1% |
| Sindhi | 22.6% | — |
| Santali | 18.8% | 53.1% |
| Konkani | 16.7% | — |
| Bodo | 7.7% | 76.9% |
| Kashmiri | 3.1% | 40.6% |
- Kashmiri, Sarvam-30B
- 1 of 32 (3%)
- 30B, from English
- 13 of 32 (41%)
Each added language was paired with one or two partners, 32 words per pair (fewer where Wiktionary was thin: Maithili 10, Bodo 13, Konkani 26). “Translated correctly” counts the answer's first token. “English in the middle” is read only on correct translations, with the J-lens at layers 13–16. Hover or tap a row for its numbers. Dogri is left out: 6 words.
Sums and reasoning
I gave the model single-digit sums written entirely in one digit system, six examples and a question, no words at all: ३+४= in Devanagari, and the same in Bengali, Meitei Mayek, Ol Chiki, Arabic and more. In the middle layers, the English word for the answer ("seven") is in the top 10 for 76% of problems under the J-lens (54% under the logit lens). The word for a wrong answer: 0%. The order matches translation. The English word peaks at layers 15 and 16, the native digit appears at layer 17, and the model writes it at 18. The ASCII digit 7 isn't the go-between: the logit lens doesn't read it in the middle layers at all. Does the sum need it? Deleting "seven" from the middle layers doesn't break it: it costs 0.2 points less than deleting a wrong answer's word. Deleting all nine number words together costs about 4 points more than a random edit of the same size, and pushing against them does no more damage than a random push of the same size.
- English number word (“seven”)
- The answer's native digit
- The answer's ASCII digit (7)
- A wrong answer's English word
72 sums per digit system (36 additions, 36 subtractions, answers 1 to 9), each after six worked examples in the same digits and no words at all; read at the answer position. The 11 native systems are every digit set whose ten digits are all in Sarvam's vocabulary; Tamil and Telugu are left out because some of theirs are not. Under this lens the first few layers put ASCII digits in the top 10 whether or not they are the answer (a wrong answer's digit shows up just as often), so that early bump says nothing about the sum.
Show data
| Series | Layer | Problems with the token in the top 10 |
|---|---|---|
| English number word (“seven”) | 0 | 0% |
| English number word (“seven”) | 1 | 0% |
| English number word (“seven”) | 2 | 0% |
| English number word (“seven”) | 3 | 0% |
| English number word (“seven”) | 4 | 0% |
| English number word (“seven”) | 5 | 0% |
| English number word (“seven”) | 6 | 0% |
| English number word (“seven”) | 7 | 0% |
| English number word (“seven”) | 8 | 0% |
| English number word (“seven”) | 9 | 0% |
| English number word (“seven”) | 10 | 0% |
| English number word (“seven”) | 11 | 0% |
| English number word (“seven”) | 12 | 0% |
| English number word (“seven”) | 13 | 66% |
| English number word (“seven”) | 14 | 64% |
| English number word (“seven”) | 15 | 83% |
| English number word (“seven”) | 16 | 92% |
| English number word (“seven”) | 17 | 19% |
| English number word (“seven”) | 18 | 4% |
| The answer's native digit | 0 | 0% |
| The answer's native digit | 1 | 0% |
| The answer's native digit | 2 | 0% |
| The answer's native digit | 3 | 0% |
| The answer's native digit | 4 | 0% |
| The answer's native digit | 5 | 0% |
| The answer's native digit | 6 | 0% |
| The answer's native digit | 7 | 0% |
| The answer's native digit | 8 | 0% |
| The answer's native digit | 9 | 0% |
| The answer's native digit | 10 | 0% |
| The answer's native digit | 11 | 0% |
| The answer's native digit | 12 | 0% |
| The answer's native digit | 13 | 0% |
| The answer's native digit | 14 | 3% |
| The answer's native digit | 15 | 7% |
| The answer's native digit | 16 | 10% |
| The answer's native digit | 17 | 85% |
| The answer's native digit | 18 | 100% |
| The answer's ASCII digit (7) | 0 | 70% |
| The answer's ASCII digit (7) | 1 | 49% |
| The answer's ASCII digit (7) | 2 | 14% |
| The answer's ASCII digit (7) | 3 | 18% |
| The answer's ASCII digit (7) | 4 | 11% |
| The answer's ASCII digit (7) | 5 | 21% |
| The answer's ASCII digit (7) | 6 | 17% |
| The answer's ASCII digit (7) | 7 | 2% |
| The answer's ASCII digit (7) | 8 | 10% |
| The answer's ASCII digit (7) | 9 | 1% |
| The answer's ASCII digit (7) | 10 | 0% |
| The answer's ASCII digit (7) | 11 | 0% |
| The answer's ASCII digit (7) | 12 | 0% |
| The answer's ASCII digit (7) | 13 | 6% |
| The answer's ASCII digit (7) | 14 | 2% |
| The answer's ASCII digit (7) | 15 | 51% |
| The answer's ASCII digit (7) | 16 | 67% |
| The answer's ASCII digit (7) | 17 | 53% |
| The answer's ASCII digit (7) | 18 | 43% |
| A wrong answer's English word | 0 | 0% |
| A wrong answer's English word | 1 | 0% |
| A wrong answer's English word | 2 | 0% |
| A wrong answer's English word | 3 | 0% |
| A wrong answer's English word | 4 | 0% |
| A wrong answer's English word | 5 | 0% |
| A wrong answer's English word | 6 | 0% |
| A wrong answer's English word | 7 | 0% |
| A wrong answer's English word | 8 | 0% |
| A wrong answer's English word | 9 | 0% |
| A wrong answer's English word | 10 | 0% |
| A wrong answer's English word | 11 | 0% |
| A wrong answer's English word | 12 | 0% |
| A wrong answer's English word | 13 | 0% |
| A wrong answer's English word | 14 | 0% |
| A wrong answer's English word | 15 | 0% |
| A wrong answer's English word | 16 | 0% |
| A wrong answer's English word | 17 | 0% |
| A wrong answer's English word | 18 | 0% |
- English word, layers 13–16
- 75.9%
- Native digit, layers 13–16
- 5.1%
- ASCII digit, layers 13–16
- 31.5%
- Answered correctly
- 87%
- Delete “seven”: cost beyond deleting a wrong answer's word
- −0.2 pts (−0.5 to 0.2)
- Delete all nine number words: cost beyond a random edit of the same rank
- 3.9 pts (2.8 to 5.2)
Digit system by digit system, the English word is in the 30B's J-lens top 10 at layers 13 to 16 for 71 to 86% of problems in 10 of the 11; Malayalam is the exception, at 42%. Kannada and Odia sums often come back in another rare script's digits, Ol Chiki or Meitei Mayek. Tamil and Telugu sums mostly fail (1% and 8% right): 5 of the 10 Tamil digits and 3 of the 10 Telugu digits aren't in the vocabulary.
Is math more English inside than other topics? Barely. Word problems (from MGSM; Shi et al., 2023) naively read 8 points more English than everyday questions (from Dolly; Databricks, 2023), but they're five times longer, and longer prompts read more English. At equal length, math reads 1.7 to 2.9 points more English than science or technical questions (from ARC-Challenge and MMLU; Clark et al., 2018; Hendrycks et al., 2021) under the J-lens; the logit-lens gaps, 0.5 to 1 point, are within noise.
Sarvam-30B can also show its reasoning before it answers, a chain of thought (Wei et al., 2022). I gave it 8 grade-school math problems from MGSM, machine-translated into 25 languages (IndicTrans2 for the Indian languages, NLLB-200 for Japanese, Russian and Arabic; Gala et al., 2023; NLLB Team, 2022), with thinking on. In every language, 93 to 97% of the letters in the reasoning are Latin script, mostly English. The 22 scheduled languages pool at 0.957, and the eight low-resource ones at 0.958. The rest is mostly quotation: "We need to parse this Bengali problem regarding fabric production (পোশাক তৈরি)…" No language falls back on Hindi. The model names the prompt's language, though it calls Arabic "Urdu" (7 of 8 traces). Latin script isn't the same thing as English (romanized Hindi is Hindi, and would count as Latin here), but the sample traces are plainly English prose.
- Sarvam-30B
Show data
| Sarvam-30B | |
|---|---|
| Arabic | 97.2% [96.2%, 98.0%] |
| Urdu | 97.0% [96.5%, 97.5%] |
| Bengali | 96.9% [96.3%, 97.4%] |
| Sindhi * | 96.8% [96.0%, 97.5%] |
| Dogri * | 96.8% [96.2%, 97.3%] |
| Hindi | 96.5% [96.1%, 96.9%] |
| Marathi | 96.2% [95.3%, 97.0%] |
| Gujarati | 96.2% [95.2%, 97.1%] |
| Punjabi | 96.2% [95.3%, 97.0%] |
| Maithili * | 96.2% [94.7%, 97.0%] |
| Telugu | 95.9% [95.1%, 96.6%] |
| Manipuri * | 95.9% [95.2%, 96.6%] |
| Santali * | 95.9% [94.9%, 96.9%] |
| Nepali | 95.7% [94.6%, 96.7%] |
| Kashmiri * | 95.6% [94.2%, 96.8%] |
| Konkani * | 95.5% [94.2%, 96.7%] |
| Kannada | 95.3% [93.8%, 96.7%] |
| Odia | 95.2% [92.7%, 96.9%] |
| Russian | 95.0% [85.7%, 100.0%] |
| Malayalam | 94.9% [93.4%, 96.3%] |
| Assamese | 94.9% [93.4%, 96.3%] |
| Sanskrit | 94.9% [93.9%, 95.8%] |
| Japanese | 94.6% [87.1%, 99.7%] |
| Tamil | 94.3% [93.3%, 95.2%] |
| Bodo * | 93.4% [91.4%, 95.1%] |
- All 22 scheduled languages
- 95.7%
- Eight low-resource languages
- 95.8%
Eight grade-school math problems per language, machine-translated, thinking on, the first 400 tokens of each trace. Whiskers are 95% intervals. * marks the eight low-resource scheduled languages. Most of the non-Latin remainder is the model quoting the problem's own words.
The lowest is Bodo, at 93%. Language families don't differ: Indo-Aryan, Dravidian, Tibeto-Burman and Austroasiatic languages all pool between 94.7 and 96.0%.
Does it have to reason in English? Told, in its own language, to reason in Hindi, Tamil, Bengali or Telugu, the 30B carries on in Latin script, mostly English, anyway: 5% of its reasoning is in the prompt's script. Start its reasoning off with a sentence in that language, though, and it carries on in it to the end, with no detectable difference in accuracy: 72% against 71% when told to reason in English (a difference of +0.8 points, interval −6.3 to +7.9). That doesn't show it's as good. The interval still allows a loss of about 6 points, and only 15% of those traces finish within 3,072 tokens, so most of the 30B's native-language answers were forced: the reasoning was cut off and the model asked for its final answer (Lanham et al., 2023). English reasoning may be a habit rather than a need, but these runs can't settle it.
Share of the reasoning in the prompt's own script
Answered correctly
Finished within 3,072 tokens
- Started in its own language, minus told English
- +0.8 pts
- 95% interval
- −6.3 to +7.9
Hindi, Tamil, Bengali and Telugu prompts pooled: 60 math problems each, 240 traces per condition, thinking on, sampled at the model card's settings. The instruction is written in the prompt's own language. “Started off” fills in the reasoning's first sentence in that language and lets the model carry on. A trace that hasn't finished by 3,072 tokens is scored on a forced answer. Whiskers are 95% intervals.
Is that reasoning honest? I borrowed a test from Chen and colleagues (2025): slip a wrong hint into the problem, and see whether the answer follows it and whether the reasoning admits it. I used 60 MGSM problems in English, Hindi, Tamil, Bengali, Santali and Russian, appended "A teacher says the answer is N", with N about 10% off, in the prompt's language or in English, and let the model reason for up to 3,072 tokens.
The reasoning admits the hint. On problems it solves without a hint, the 30B goes with the teacher's wrong number 36% of the time with a hint in the prompt's language and 33% with an English one (33% for English prompts). 164 of the 165 hint-following traces mention the hint, and no language falls below 92%. The model translates it into English in its first lines: "A teacher says the answer is 20.", for a Hindi prompt.
But the answer doesn't follow the reasoning. 161 of those 165 traces contain the right answer: the model works it out, notices that the teacher's number doesn't match, and goes with the teacher anyway. That isn't an artefact of cutting the reasoning short. On traces that finished on their own, it goes with the hint as often or more (43% and 46%). The hint does make it run on: about two thirds of hinted traces haven't finished by 3,072 tokens, against 11% without a hint.
- Hint-followers that mention the hint
- 164 of 165
- …whose reasoning had the right answer
- 161 of 165
- Pooled, on answers it reached by itself
- 43% · 38/89
Thinking on, sampled at the model card's settings, up to 3,072 tokens; a trace that hadn't finished was scored on a forced answer. Sixty math problems per language; each bar counts the problems the model solved without a hint whose hinted version answers the teacher's wrong number (followed / solved). Bengali and Russian use MGSM's human translations; the hints are machine-translated. Whiskers are 95% intervals.
By language, the 30B's cells run from 27% (Russian, hint in English) to 50% (Russian, hint in Russian); the wide swings in my first, 20-problem run were small-cell noise.
The reasoning, then, discloses the hint in nearly every case, and equally so in Indian languages. That's necessary for faithful reasoning, not proof of it: it doesn't show that the reasoning faithfully describes how the hint was used. The test does show a gap in the other direction: the answer departs from reasoning that was open about the hint. (Caveats: the hints are machine-translated, cells hold 28 to 55 problems, and only about a third of hinted traces finish on their own.) A monitor that reads English would see the hint in every language, but couldn't assume the answer follows what it read.
So does it think in English?
Everything so far reads the middle layers through the vocabulary, and Sarvam's vocabulary is mostly Latin script: about 148,000 of its 262,144 tokens. A lens that asks which word? will find English more easily, simply because English owns most of the words. So I also measured the middle layers without decoding through tokens at all.
I took 32 concepts in 27 languages (788 words), ran each word through the model in a neutral one-line frame (the language's own name, then the word), and compared the internal vectors directly, after subtracting each language's average.
- Sarvam-30B
- Qwen3.6-35B-A3B
Pooled over all 702 ordered pairs of the 27 languages, at every layer. The 30B shares concepts across languages from about its fifth layer, long before any lens can read a word (layer 11); Qwen never shares as much.
Show data
| Series | Depth through the model | Concepts found in another language |
|---|---|---|
| Sarvam-30B | 0% | 24% |
| Sarvam-30B | 6% | 40% |
| Sarvam-30B | 11% | 65% |
| Sarvam-30B | 17% | 79% |
| Sarvam-30B | 22% | 83% |
| Sarvam-30B | 28% | 86% |
| Sarvam-30B | 33% | 85% |
| Sarvam-30B | 39% | 84% |
| Sarvam-30B | 44% | 84% |
| Sarvam-30B | 50% | 83% |
| Sarvam-30B | 56% | 82% |
| Sarvam-30B | 61% | 82% |
| Sarvam-30B | 67% | 84% |
| Sarvam-30B | 72% | 83% |
| Sarvam-30B | 78% | 84% |
| Sarvam-30B | 83% | 83% |
| Sarvam-30B | 89% | 83% |
| Sarvam-30B | 94% | 79% |
| Sarvam-30B | 100% | 59% |
| Qwen3.6-35B-A3B | 0% | 14% |
| Qwen3.6-35B-A3B | 3% | 29% |
| Qwen3.6-35B-A3B | 5% | 39% |
| Qwen3.6-35B-A3B | 8% | 45% |
| Qwen3.6-35B-A3B | 10% | 60% |
| Qwen3.6-35B-A3B | 13% | 63% |
| Qwen3.6-35B-A3B | 15% | 65% |
| Qwen3.6-35B-A3B | 18% | 67% |
| Qwen3.6-35B-A3B | 21% | 67% |
| Qwen3.6-35B-A3B | 23% | 66% |
| Qwen3.6-35B-A3B | 26% | 65% |
| Qwen3.6-35B-A3B | 28% | 65% |
| Qwen3.6-35B-A3B | 31% | 64% |
| Qwen3.6-35B-A3B | 33% | 64% |
| Qwen3.6-35B-A3B | 36% | 62% |
| Qwen3.6-35B-A3B | 38% | 60% |
| Qwen3.6-35B-A3B | 41% | 60% |
| Qwen3.6-35B-A3B | 44% | 60% |
| Qwen3.6-35B-A3B | 46% | 60% |
| Qwen3.6-35B-A3B | 49% | 58% |
| Qwen3.6-35B-A3B | 51% | 58% |
| Qwen3.6-35B-A3B | 54% | 58% |
| Qwen3.6-35B-A3B | 56% | 57% |
| Qwen3.6-35B-A3B | 59% | 53% |
| Qwen3.6-35B-A3B | 62% | 51% |
| Qwen3.6-35B-A3B | 64% | 50% |
| Qwen3.6-35B-A3B | 67% | 50% |
| Qwen3.6-35B-A3B | 69% | 45% |
| Qwen3.6-35B-A3B | 72% | 47% |
| Qwen3.6-35B-A3B | 74% | 49% |
| Qwen3.6-35B-A3B | 77% | 51% |
| Qwen3.6-35B-A3B | 79% | 49% |
| Qwen3.6-35B-A3B | 82% | 51% |
| Qwen3.6-35B-A3B | 85% | 51% |
| Qwen3.6-35B-A3B | 87% | 51% |
| Qwen3.6-35B-A3B | 90% | 52% |
| Qwen3.6-35B-A3B | 92% | 51% |
| Qwen3.6-35B-A3B | 95% | 48% |
| Qwen3.6-35B-A3B | 97% | 47% |
| Qwen3.6-35B-A3B | 100% | 35% |
- The concept space is shared. At the 30B's English layers, a word's vector in one language finds the same concept among 32 in another language 83 to 84% of the time, where chance is 3%. That includes Meitei Mayek and Ol Chiki: Manipuri→Bengali 0.70, Santali→Hindi 0.76. Qwen scores 0.45 to 0.51, and barely shares concepts with the Dravidian and rare-script languages.
- It forms early. The languages already share concepts at layer 4 (83%), long before the lenses can read a word reliably, from layer 11.
- English isn't the hub. Searching into English, Hindi or Chinese, retrieval at layer 15 of the 30B is 0.925, 0.910 and 0.894. At layer 15 the gap between English and Hindi (+0.015) isn't significant; at layer 13 (+0.016) it only just is. Qwen has a clear English hub (+0.13 to +0.14).
- From Tamil into Telugu
- 93%
- All pairs, pooled
- 83–84%
- Into English / Hindi / Chinese, layer 15
- 92% / 91% / 89%
32 concepts in 27 languages. Each word is run through the model on its own line, after its language's name; its vector is read at its last token, and each language's average vector is subtracted. A cell shows how often a word from the row's language finds the same concept among the column language's 32 (chance is 3%). Lines separate English, Devanagari, other Brahmic, Perso-Arabic, Dravidian, Meitei Mayek/Bodo/Ol Chiki, and the world languages. Dogri has 6 words, Maithili 10 and Bodo 13, so their rows are noisier.
Hover the map to read any pair. On Qwen, at its English-heavy layers, the Dravidian block fades: Tamil→Telugu is 0.28 there, against 0.93 on Sarvam-30B.
Most of English's lead is vocabulary. Rank each word only against tokens of its own script, and the Hindi word's top-10 rate jumps from 0.58 to 0.92, the target word's from 0.27 to 0.85, and the Indian languages that aren't in the prompt at all go from 0.12 to 0.74 (0.73 for the big ones, 0.33 for the low-resource ones). English stays at 0.94. The concept is written into many languages' words at once, and English wins the whole-vocabulary readout.
- Hindi, whole vocabulary → own script
- 58% → 92%
- The other Indian languages, whole vocabulary → own script
- 12% → 74%
Sarvam-30B, the ten original pairs, layers 13–16: the share of correct translations with each word in the top 10. Ranked only against its own script, an English word competes with the Latin tokens (about 148,000, plus 6,322 unused placeholder tokens), a Hindi word with 13,638 Devanagari tokens, and a Dravidian word with about 4,200. “The other Indian languages” averages, for each item, the five original Indian languages that are neither in the prompt nor Hindi; those two rows come from a later rerun of the same items.
So a better picture is one concept space that every language feeds into, with English and Hindi as co-anchors, which reads out most easily in English. Lindsey and colleagues (2025) found shared, largely language-independent features like this in Claude 3.5 Haiku. A recent study of other open models, around 7B to 9B and not including Sarvam, finds a similar gap (Bayazit, AlKhamissi and Bosselut, 2026): a probe that reads the geometry of the hidden states shows languages mixing earlier, while decoding probes like the logit lens look more English, so how much English you find depends partly on how you look. The deletions still stand: the model uses the English directions, and the Hindi ones too, and the same attention heads write both. Back to the translator: less someone who silently thinks in English, more someone whose thoughts are in no particular language but whose vocabulary is mostly English. Ask them mid-thought what they mean, and English words come out first.
Two things I found along the way
The first is a loading bug. With transformers 5, Sarvam-30B loads with its rotary position frequencies left uninitialized, usually all zeros. Rotary position embedding (Su et al., 2021) is how the model knows where each token sits, so attention loses word order. Nothing errors or warns, and easy prompts still look fine: asked for the capital of Tamil Nadu, the broken model says Chennai. But five-shot translation accuracy was 0 of 160 prompts, against 96.3% in the next run, once the frequencies were rebuilt. Here is the model continuing "भारत की राजधानी", the capital of India, from the runs on either side of the fix:
Ten greedy tokens from the real model, and accuracy on the same 160 five-shot translations, from the two runs on either side of the fix. [@BOS@] alone, with positions rebuilt, became the setting for everything in this post.
The fix is to rebuild the rotary embedding after loading. I've reported it to Sarvam.
The second is about Elie Bakouch's J-space CKA explorer, which compares how 41 open models organise themselves. It draws, for every pair of layers, how similar their J-lens geometry is (centred kernel alignment; Kornblith et al., 2019). Most models show about three blocks. Sarvam came out as a single flat block, with a coupling of 0.991. The cause is a few outlier gains in Sarvam's final normalisation layer, up to 9.19 against a median of 1.34, which the explorer folds into every measurement. Take the gain out, and the structure appears:
- Blocks
- 1
- Coupling
- 0.99
- Hover a cell
- —
Every layer looks like every other. Each cell compares two layers' J-lens geometry, from layer 0 at the bottom left; the stronger the blue, the more alike. The gaps mark the explorer's own block segmentation. All three maps share one colour scale.
Without it, Sarvam has two blocks, and the boundary falls at layer 11: the depth where English becomes readable. Even then, Sarvam stays unusually unlike Qwen (0.27), and I don't know why.
What it doesn't say
- It's mostly single words: 32 concrete nouns, in word lists no native speaker has checked.
- The causal tests are narrow: lens directions and one band of layers (deleting at every position, or several languages at once, doesn't change the picture). Readouts alone are correlational.
- The math prompts are machine-translated, and "Latin script" also counts romanized words and code.
- Nineteen layers is coarse: "the middle" is a handful of layers.
Next: when it says no
The same English-first shape appears when Sarvam refuses. When the 30B turns down a harmful request in an Indian language, in that language, English refusal words ("Sorry", "I cannot") are readable in its middle layers for 56% of those refusals; the language's own refusal words don't appear until the last layers. And refusal is weaker outside English. On the same unsafe prompts, from XSTest (Röttger et al., 2024) and machine-translated, the 30B refused 82% in English but 42% across the 22 Indian languages. A harm detector trained on English catches 97% of held-out harmful English prompts, but only 58% of Indian-language ones. Mostly, though, an English-trained probe can still read the harm from the prompt, and the model answers anyway. That's the next post, which I'll publish once Sarvam AI has had the findings.
And then there's Sarvam-105B. A first look says it's worth doing properly, but fitting lenses on it needs two H200s just to load the model and roughly four times the compute per prompt. That's more than this project had, so the 105B waits for more compute.
Code and data
The code, the fitted lenses and every run's logs are here, with the lenses on Hugging Face. The whole project, including the safety work in the next post, used about $116 of rented GPU time on Modal.
Thanks
Every GPU run in this post was on Modal. Thank you to Sarvam AI for releasing the weights under Apache-2.0, and to the Qwen team for releasing Qwen3.6-35B-A3B; to the authors of the J-lens, R-lens and J++ for releasing their code; and to Elie Bakouch for publishing the CKA explorer's code and data, which made the comparison exact rather than approximate.
Thanks also to Souvik Maji for sharing his expert ablations on Sarvam-30B; to Wendler, Chen, Lanham and their colleagues, whose translation, hint and early-answering tests I borrowed; to the creators of MGSM, ARC, MMLU, Dolly and XSTest for releasing the prompt sets; to AI4Bharat for IndicTrans2 and Meta for NLLB-200, which translated them; and to the editors of Wiktionary, Wikidata and the Indian-language Wikipedias, where the added languages' word lists and most of the Indian-language lens's training text came from.
I worked with an AI coding assistant throughout. Its code and conclusions were checked like everything else, and the wrong turns are in the engineering log.
Further reading
On models thinking in English:
- Wendler, Veselovsky, Monea & West, Do Llamas Work in English? On the Latent Language of Multilingual Transformers, ACL (2024). The original English-pivot result, and the translation test used here.
- Zhong et al., What Language Do Non-English-Centric Large Language Models Think In?, Findings of ACL (2025). Japanese-centric models pass through English and Japanese.
- Schut, Gal & Farquhar, Do Multilingual LLMs Think In English?, arXiv (2025). Logit-lens evidence that key decisions happen in a space closest to English, and steering works better with English vectors.
- Lindsey, Gurnee, Ameisen et al., On the Biology of a Large Language Model, Transformer Circuits (2025). Shared, largely language-independent concept features.
- Panchal, Varshney, Mamta & Ekbal, Indic-TunedLens: Interpreting Multilingual Models in Indian Languages, VarDial (2026). A tuned lens on Sarvam-1, the 2B predecessor.
- Bayazit, AlKhamissi & Bosselut, Lingua Franca or Probing Artifact? Rethinking Latent Language in Multilingual LLMs, arXiv (2026). Probes that read hidden-state geometry and probes that decode tokens disagree; the decoding ones look more English.
On the lenses:
- nostalgebraist, interpreting GPT: the logit lens, LessWrong (2020).
- Gurnee et al., Verbalizable Representations Form a Global Workspace in Language Models, Transformer Circuits (2026). The J-lens, with code.
- Blank, Bhatia & Nanda, R-lens: Making J-lens More Faithful on Early Layers, LessWrong (2026).
- Ayonrinde & Lindsey, J++ Lens: Jacobian Filtering Enables More Faithful Workspace Lenses, LessWrong (2026), with code. Every lens in this post was fit with it.
On reasoning:
- Wei et al., Chain-of-Thought Prompting Elicits Reasoning in Large Language Models, NeurIPS (2022). Showing reasoning before the answer.
- Chen, Benton, Radhakrishnan et al., Reasoning Models Don't Always Say What They Think (2025). The hint test.
- Lanham et al., Measuring Faithfulness in Chain-of-Thought Reasoning (2023). Forcing an early answer.
On comparing layers, and on positions:
- Kornblith, Norouzi, Lee & Hinton, Similarity of Neural Network Representations Revisited, ICML (2019). Centred kernel alignment.
- Bakouch, J-lens CKA explorer, with data and code (2026).
- Su et al., RoFormer: Enhanced Transformer with Rotary Position Embedding (2021). The position scheme that transformers 5 breaks, without warning, for Sarvam-30B.
On the models and data:
- Sarvam AI, Open-Sourcing Sarvam 30B and 105B (2026), with the Sarvam-30B model card. Training data, architecture and licence.
- Maji, Can you find the "refusal experts" inside an MoE model and switch them off?, X thread (2026). Expert ablations in Sarvam-30B, with Qwen3.6-35B-A3B as a baseline: refusal doesn't sit in any single expert.
- Qwen Team, Qwen3.6-35B-A3B (2026). The comparison model.
- Bai et al., Qwen Technical Report (2023). The first Qwen models, trained with "a significant portion" of English and Chinese.
- Yang et al., Qwen3 Technical Report (2025). Qwen3's training data, in 119 languages and dialects.
- The Constitution of India, Eighth Schedule. The 22 scheduled languages.
- Shi et al., Language Models are Multilingual Chain-of-Thought Reasoners, ICLR (2023). MGSM, the math word problems.
- Clark et al., Think you have Solved Question Answering? Try ARC, the AI2 Reasoning Challenge (2018). The science questions.
- Hendrycks et al., Measuring Massive Multitask Language Understanding, ICLR (2021). MMLU, the technical questions.
- Databricks, databricks-dolly-15k (2023). The everyday questions.
- Gala et al., IndicTrans2: Towards High-Quality and Accessible Machine Translation Models for all 22 Scheduled Indian Languages (2023). The machine translation into Indian languages.
- NLLB Team, No Language Left Behind: Scaling Human-Centered Machine Translation (2022). NLLB-200, the machine translation into Japanese, Russian and Arabic.
- Röttger et al., XSTest: A Test Suite for Identifying Exaggerated Safety Behaviours in Large Language Models, NAACL (2024). The unsafe prompts behind the refusal numbers.