zagreus_0.4_competition

nesso-0.4B-agentic improved on the ITALIC benchmark by on-policy distillation from Coloss/nesso-3B.

Official ITALIC harness (run_eval.py, full 10,000 questions, 5-shot):

Model fast slow (CoT)
mii-llm/nesso-0.4B-agentic (baseline) 33.1% 0.0%*
this model 37.2% 33.2%
Coloss/nesso-3B (teacher) 50.7% 2.5%*

* baseline/teacher answer with a bare letter, which the official slow-mode extractor cannot parse; this model answers parseably in both modes.

Method

On-policy distillation (tinker-cookbook recipe, reimplemented in mii-llm/palingenesis branch odp): every step the student samples completions with its current weights and the loss is the full-distribution reverse KL to the teacher over exactly those tokens. Student (ChatML) and teacher (Llama-3 template) share the Llama-3 base vocabulary; prompts are rendered per-model and the student's <|im_end|> mass is merged into the teacher's <|eot_id|> slot, so stopping behavior is distilled too.

The winning run (opd_v3, checkpoint step 550 of 600):

  • pool of 49,643 ITALIC-format MCQA prompts (pinocchio-raw + MMLU-ita sources, deduped against the ITALIC 10k test set by normalized-question hash), filtered to rows the teacher answers correctly (pgs distill-score — pure KL would distill the teacher's errors too)
  • Italian-language (vocabulary/grammar/comprehension) rows upweighted ×4
  • 80% of prompts rendered with ITALIC's official 5 shots, max_new_tokens 8 (terse supervision)
  • 600 steps, batch 32 prompts, lr 1e-5 cosine, full reverse KL, ~40 min on one A100 80GB

Training/eval code: giux78/zagreus_0.4_competition (experiment) + mii-llm/palingenesis odp branch (library, pgs distill).

Usage

from transformers import AutoModelForCausalLM, AutoTokenizer

tok = AutoTokenizer.from_pretrained("giux78/zagreus_0.4_competition")
model = AutoModelForCausalLM.from_pretrained("giux78/zagreus_0.4_competition", dtype="bfloat16")

messages = [
    {"role": "system", "content": "Sei un assistente utile."},
    {"role": "user", "content": "Rispondi alla seguente domanda a scelta multipla..."},
]
ids = tok.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt")
out = model.generate(ids, max_new_tokens=8, do_sample=False)
print(tok.decode(out[0, ids.shape[1]:], skip_special_tokens=True))

For ITALIC-style evaluation use max_new_tokens=8 and greedy decoding (the model answers with the bare option letter).

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

Model tree for giux78/zagreus_0.4_competition

Finetuned
(3)
this model