Vidya 4B — NCERT Tutoring Assistant

Vidya is a fine-tuned Qwen3.5-4B model trained to be an expert tutoring assistant for Indian students preparing for NCERT Classes 6–12, IIT-JEE, and NEET. It explains concepts step-by-step with examples from the Indian curriculum, corrects misconceptions, and adapts to the student's level.

Tutoring score: 4.1 / 5.0 (Gemini 2.0 Flash as judge, 30-sample eval across accuracy, clarity, step-by-step reasoning, appropriate level, encouragement, and misconception handling)

A larger Vidya 9B variant is also available (tutoring score 4.6/5.0).


Quick Start

Ollama (recommended)

ollama run neosaket/vidya:4b

Or with a Modelfile for custom parameters:

FROM neosaket/vidya:4b
PARAMETER temperature 0.3
PARAMETER repeat_penalty 1.5

llama.cpp

llama-cli -m vidya-4b-Q4_K_M.gguf \
  --system "You are Vidya, an expert tutor for Indian students preparing for NCERT Classes 6-12, IIT-JEE, and NEET. Explain concepts step by step with examples from the Indian curriculum." \
  -i

Transformers

from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("neo-saket/vidya-4b", torch_dtype="auto")
tokenizer = AutoTokenizer.from_pretrained("neo-saket/vidya-4b")

messages = [
    {"role": "system", "content": "You are Vidya, an expert tutor for Indian students preparing for NCERT Classes 6-12, IIT-JEE, and NEET. Explain concepts step by step with examples from the Indian curriculum."},
    {"role": "user", "content": "Explain Newton's second law of motion with a Class 9 example."}
]

text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=512, temperature=0.3)
print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))

Suppressing Chain-of-Thought

Qwen3.5 models produce a <think>...</think> reasoning block before the answer. To skip it and get a direct response, pre-fill the assistant turn:

# Add this to your chat template call or inject directly:
# <|im_start|>assistant\n<think>\n\n</think>\n\n

Training Details

Pipeline: SFT → DPO (no CPT due to data constraints)

Stage Details
Base model Qwen/Qwen3.5-4B
SFT NCERT synthetic Q&A (GPT-4o-mini generated), HuggingFace NCERT datasets, SATHEE exam papers
DPO Preference pairs on NCERT content; beta=0.1
LoRA r=16, alpha=16, DoRA + rsLoRA
Hardware RTX 5090 (32 GB VRAM)
SFT LR 3e-5
DPO LR 5e-6
Max seq length 4096

GRPO was also explored for JEE/NEET MCQ reasoning but caused catastrophic tutoring regression with short completions — the deployed model is the DPO checkpoint.


Evaluation

30-sample tutoring evaluation, judged by Gemini 2.0 Flash:

Dimension Score
Overall 4.1 / 5.0
Accuracy 3.8
Clarity 4.4
Step-by-step reasoning 4.5
Appropriate level 4.5
Encouragement 4.5
Misconception handling 4.8

The accuracy score (3.8) reflects the 4B model's smaller factual recall capacity; the 9B variant achieves 4.6/5.0 overall with stronger accuracy.


Sample Interactions

Physics (Class 9):

User: Explain Newton's second law of motion with an example.

Vidya: Great question! Newton's Second Law is one of the most important concepts in Class 9 Physics.

**The Law:** The force acting on an object equals its mass times its acceleration.
  F = ma

**Example:** Imagine pushing a cricket ball and a shot put with the same force.
- Cricket ball (mass ≈ 0.16 kg) → accelerates quickly
- Shot put (mass ≈ 7 kg) → barely moves

Same force (F), different masses → different accelerations. The heavier object has less acceleration.

Key takeaway: More mass = more force needed to produce the same acceleration. ✓

Chemistry (Class 10):

User: What is a displacement reaction? Give an example.

Vidya: A displacement reaction occurs when a more reactive element pushes a less reactive element out of its compound.

**Classic NCERT example — Zinc displacing Copper:**
  Zn + CuSO₄ → ZnSO₄ + Cu

Step by step:
1. Zinc (Zn) is higher in the reactivity series than Copper (Cu)
2. Zinc atoms lose electrons → become Zn²⁺ ions in solution
3. Cu²⁺ ions gain those electrons → deposit as solid copper
4. The blue CuSO₄ solution turns colourless; copper metal appears

⚠️ Common misconception: Less reactive metals cannot displace more reactive ones.
  Iron cannot displace zinc from ZnSO₄ — the reaction won't proceed.

Files

File Description
*.safetensors Merged BF16 model weights (use for fine-tuning or GGUF conversion)
vidya-Q4_K_M.gguf Quantized GGUF, 4-bit — recommended for Ollama / llama.cpp
Modelfile Ollama Modelfile with recommended settings
config.json, tokenizer* Model configuration and tokenizer

Limitations

  • Accuracy is weaker than the 9B variant — may occasionally hallucinate specific NCERT facts
  • Primary training language is English; Hindi support is limited
  • Optimised for Indian curriculum (NCERT, JEE, NEET) — general-purpose use may be suboptimal
  • Not suitable for medical advice, legal guidance, or safety-critical applications

Citation

@misc{vidya4b2026,
  title={Vidya 4B: A Fine-tuned NCERT Tutoring Assistant},
  author={Saket Nayak},
  year={2026},
  url={https://huggingface.co/neo-saket/vidya-4b}
}

License

Apache 2.0 — inherits from the Qwen3.5 base model license.

Downloads last month
166
Safetensors
Model size
4B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for neo-saket/vidya-4b

Finetuned
Qwen/Qwen3.5-4B
Quantized
(240)
this model

Dataset used to train neo-saket/vidya-4b