Tamil-first LLM data + training pipeline.
We are building a from-scratch, pure-Tamil small language model — akshara (உயிர்–மெய் / swaram) as the atomic token, agglutination-aware modeling, trained in JAX/Flax and tracked with MLflow, targeting a light, edge-deployable launch.
- Roadmap:
ROADMAP_JAX_SLM.md - Architecture:
docs/ARCHITECTURE_SWARAM_SLM.md - Code:
src/adhan_slm/(working swaram tokenizer + Flax SLM + JAX/MLflow trainer)
PYTHONPATH=src python -m adhan_slm.tokenizer.swaram_tokenizer "படித்துக்கொண்டிருந்தேன்"The existing PyTorch pipeline below is reused for corpus building and as baselines.
- Added shared constants in
src/core/ - Added corpus merger:
src/data_scraper/merge_corpora.py - Added Gemma training notebook:
src/notebooks/03_gemma_training.ipynb
# Clone the repository
git clone https://github.com/yazhi-lem/adhan.git
cd adhan
# Create a virtual environment
python3 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install the package in development mode with all dependencies
pip install -e ".[dev,jax,tamil-nlp]"pip install -e ".[jax]"pip install -e ".[pytorch]"Test the swaram tokenizer (no JAX/PyTorch needed):
python -m adhan_slm.tokenizer.swaram_tokenizer "படித்துக்கொண்டிருந்தேன்"Run unit tests (ensure everything works):
pytest tests/ -vTry the full pipeline (after installing JAX):
# 1. Prepare corpus and freeze tokenizer
python scripts/prepare_slm_corpus.py \
--corpus data/raw/tamil/ --out data/final/tamil_slm \
--vocab-size 12000 --seq-len 1024
# 2. Train a model (smoke test)
python -m adhan_slm.training.train_jax \
--config src/adhan_slm/configs/adhan_slm_tiny.yaml --smoke
# 3. Generate text from a checkpoint
python scripts/generate_slm.py \
--tokenizer-dir data/final/tamil_slm \
--checkpoint checkpoints/adhan-tiny \
--prompt "சொல், உனக்கு பிடித்த உணவு என்ன?"
# 4. Run full evaluation suite
python -m adhan_slm.eval.run_eval \
--tokenizer-dir data/final/tamil_slm \
--config src/adhan_slm/configs/adhan_slm_tiny.yaml \
--checkpoint checkpoints/adhan-tiny- Roadmap — Phased development plan (Phase 0 done, Phase A in progress)
- Architecture — Swaram tokenizer + JAX/Flax model design
- Completion Tracker — Real-time progress on all phases
- Phase A Tracker — Current work (CI/CD, logging, packaging)
Use dedicated scripts:
scripts/run_scraper.pyfor corpus build + HF exportscripts/run_training.pyfor trainingscripts/run_model.pyfor full orchestration
# Build corpus + export HF splits
python scripts/run_scraper.py --strategy modern --max-records 80000
# Train model
python scripts/run_training.py --num-epochs 3 --batch-size 4
# Full run (build + train, optional merge)
python scripts/run_model.py --strategy modern --num-epochs 3 --batch-size 4For full command sequence and examples, see DEV.md.
src/data_scraper/processing/build_unified_corpus.pysrc/data_scraper/export/export_unified_hf.pysrc/data_scraper/merge_corpora.pysrc/models/sangam_gpt/train_enhanced.pyscripts/run_scraper.pyscripts/run_training.pyscripts/run_model.py
MIT