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
10
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
(4)
this model