Lexsi Labs AI Safety and Alignment Hackathon, Track 1 (CuratorKIT -> custom LoRA training -> AuditKIT).
Headline: on 164 held-out questions from statute sections never seen in training, the Van Nyaya SFT adapter takes lexically detected refusals on unanswerable questions from 10% to 100%, and lifts grounded answer quality by +22% (English) and +15% (Hindi) token F1, at a cost of 3 false refusals in 124 answerable questions.
Indian forest and environment law sits across several Acts that forest officers, gram sabhas and citizens have to read together: the Indian Forest Act 1927, the Wildlife (Protection) Act 1972, the Forest (Conservation) Act 1980 as amended in 2023 (Van (Sanrakshan Evam Samvardhan) Adhiniyam), the Scheduled Tribes and Other Traditional Forest Dwellers (Recognition of Forest Rights) Act 2006 with its Rules, and the Environment (Protection) Act 1986.
A small multilingual model asked about these laws tends to do two unsafe things:
Van Nyaya fine-tunes Tiny Aya Global so that it answers only from the supplied section, cites it, answers in English or Hindi, and says plainly when the text does not cover the question.
scripts/score.py (token F1 on grounded, refusal rate on unanswerable, false-refusal rate on answerable).Base model: CohereLabs/tiny-aya-global (weights loaded from an ungated mirror of the same checkpoint). Training ran entirely on free CPU (GitHub Actions 4 vCPU / 16 GB runners) with chunked loss, swap and 2-hour checkpoint-and-resume chaining: zero GPU, zero cost.
| model | refusal proxy (40 unanswerable) | EN token F1 (94) | HI token F1 (30) | false refusals (124 answerable) |
|---|---|---|---|---|
| Tiny Aya Global (base) | 10.0% | 0.294 | 0.265 | 0 |
| DPO on base, 50 steps | 40.0% | 0.287 | 0.267 | 0 |
| DPO on base, final (200 pairs) | 45.0% | 0.285 | 0.259 | |
| Van Nyaya SFT (511 rows, final) | 100.0% | 0.359 | 0.306 | 3 (2.4%) |
| SFT + DPO | running |
What it shows:
All generations and per-model score files are public in the eval-outputs dataset, so every number above can be re-scored.
AuditKIT was executed offline on the stored base and final SFT predictions using its F1Score and Abstention scorers. The script and raw report are in scripts/audit_offline.py and results/auditkit/. Native AuditKIT normalization and abstention matching differ from the headline scorer, so its scores are reported separately and never substituted into the main table. No external judge or expert legal validation is claimed.
A legal assistant that is wrong with confidence is worse than none. For a forest rights claim under FRA or a compounding notice under IFA, the person asking often can't check the section. Getting a tiny, phone-sized, bilingual model to stay inside the text and say "the section doesn't say" is a behavior worth testing further, not proof of deployment safety. The GGUF can run on an ordinary CPU; a 2.14 GB browser download is substantial, especially on phones.
GGUF (merged final SFT, split into browser-size shards): https://huggingface.co/AkshayWagh/van-nyaya-tiny-aya-gguf
Model collection: https://huggingface.co/collections/AkshayWagh/van-nyaya-models-6aeb1675438b8efca8ba323e
scripts/score.py, on every model.We continued the final SFT adapter (sft600) with the 200 DPO preference pairs, merged, converted to GGUF and scored it on the same 164 held-out questions with scripts/score.py.
| Model | Refusal acc. (EN unanswerable, n=40) | EN grounded F1 (n=94) | HI grounded F1 (n=30) |
|---|---|---|---|
| SFT (submitted) | 1.000 | 0.359 | 0.306 |
| SFT + DPO200 | 1.000 | 0.355 | 0.300 |
| SFT + DPO200 (run 2, longer DPO) | 1.000 | 0.346 | 0.300 |
DPO on top of SFT did not beat SFT alone: refusals stayed at 100%, token F1 dipped slightly in both languages, and two more answerable questions (idx 79, 107) drew refusal-style answers. A second, longer DPO continuation (run 2) dipped further on English F1 (0.346). The submitted model stays the SFT adapter. Generations and scores: results/ablation_sft_dpo/ and results/ablation_sft_dpo2/.