Downloads · 30 days
97
18% of all-time downloads
FrontiersMind/Nandi-Mini-V1.1-600M-Intermediate-Checkpoint-400GT
Nandi-Mini-V1.1-600M-Intermediate-Checkpoint-400GT is a text generation model from FrontiersMind. Use it when you need the model to write or continue text. It is set up for transformers. The card lists the license as apache-2.0.
Nandi-Mini-V1.1-600M-Intermediate-Checkpoint-400GT is an Intermediate checkpoint from the upcoming Nandi-Mini-V1.1-600M model family, trained after 400 billion tokens. This is not the final converged model.
Downloads · 30 days
97
18% of all-time downloads
All-time downloads
542
Public
Parameters
649M
1.3 GB on disk
Likes
9
Public
Click a slice to open those files.
.safetensors1.3 GB · 99%
From the Hugging Face model README
Nandi-Mini-V1.1-600M-Intermediate-Checkpoint-400GT is an Intermediate checkpoint from the upcoming Nandi-Mini-V1.1-600M model family, trained after 400 billion tokens. This is not the final converged model.
Nandi-Mini is a compact multilingual language model designed for strong efficiency, deployment flexibility, and improved Indic language support.
The model incorporates several architectural optimizations, including:
The model is being trained completely from scratch and is designed to deliver strong performance under low compute and memory constraints.
This checkpoint is being shared to provide an early look into the model’s scaling behavior and training progress.
This release is an intermediate checkpoint, not the final model. Performance is expected to improve significantly with continued training and scaling.
We are releasing intermediate checkpoints to maintain transparency with the community and demonstrate that our results are achieved without benchmark-specific optimizations or shortcut techniques.
📢 We will soon share technical blog ! Stay tuned!
Nandi-Mini-600M introduces several efficiency-focused architectural optimizations designed for compact yet capable language models.
Shared KV is one of the core architectural ideas explored in Nandi-Mini. Instead of computing separate Key and Value projections, both reuse a shared latent representation.
This design reduces KV-cache memory usage by ~50% during inference with only a small increase in compute overhead, since RoPE applied dynamically during attention computation.
Shared KV is part of our broader focus on deployable foundation models optimized for:
This remains an active research area within the Nandi model family, and we plan to share deeper technical details in upcoming engineering blogs.
| Language | SmolLM3-3B | Qwen3-0.6B-Base | Sarvam-1 | Nandi-Mini-V1.1 |
|---|---|---|---|---|
| English | 1.17 | 1.16 | 1.32 | 1.18 |
| Bengali | 8.66 | 7.51 | 1.55 | 1.44 |
| Gujarati | 10.47 | 9.37 | 1.55 | 1.53 |
| Hindi | 2.71 | 5.14 | 1.25 | 1.32 |
| Kannada | 16.43 | 12.96 | 2.10 | 1.90 |
| Malayalam | 17.77 | 14.56 | 2.49 | 2.05 |
| Marathi | 3.73 | 6.70 | 1.55 | 1.55 |
| Oriya | 19.07 | 15.75 | 2.18 | 2.68 |
| Punjabi | 9.23 | 8.66 | 1.47 | 1.42 |
| Tamil | 13.56 | 10.93 | 2.06 | 2.05 |
| Telugu | 15.40 | 13.38 | 2.09 | 1.77 |
| Assamese | 9.26 | 8.13 | 4.31 | 1.51 |
The model is trained on English and a diverse set of Indic languages, including:
Hindi, Bengali, Tamil, Telugu, Marathi, Gujarati, Kannada, Malayalam, Punjabi, Odia
!pip install transformers=='5.4.0'
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_name = "FrontiersMind/Nandi-Mini-V1.1-600M-Intermediate-Checkpoint-400GT"
tokenizer = AutoTokenizer.from_pretrained(
model_name,
trust_remote_code=True
)
device = "cuda" if torch.cuda.is_available() else "cpu"
model = AutoModelForCausalLM.from_pretrained(
model_name,
trust_remote_code=True,
dtype=torch.bfloat16
).to(device).eval()
prompt = """The night was quiet and the streets were empty"""
model_inputs = tokenizer(
[prompt],
return_tensors="pt"
).to(model.device)
outputs = model.generate(
**model_inputs,
max_new_tokens=50,
do_sample=True,
temperature=0.3,
top_k=20,
top_p=0.95,
repetition_penalty=1.1,
pad_token_id=tokenizer.eos_token_id,
use_cache=True,
)
response = tokenizer.decode(
outputs[0],
skip_special_tokens=True
)
print(response)