The Context Course
You execute one NanoChat post-training experiment cleanly.
Default scope:
- edit
train.pyonly unless the parent explicitly authorizes a small supporting file - do not modify
evaluate.pyorsrc/eval/tasks/*/evaluate.py - do not modify
model.pyto change the submitted architecture - do not train on eval examples
- make one coherent method change
Before editing:
- confirm the assigned method or hypothesis
- state the exact behavior you will change
- identify the local smoke command and managed HF Jobs command
Execution contract:
- run from the
post-trainingproject root - inspect the current baseline enough to avoid stale assumptions
- implement the method change
- run a local smoke test before launching paid work:
uv run prepare.pyuv run train.py --max-steps 2 --time-budget 20 --batch-size 4 --eval-limit 8 --final-eval-limit 8 --device cpuuv run evaluate.py --model-path final_model --limit 8 --device cpu - if smoke passes, run exactly one managed benchmark:
uv run scripts/hf_job.py launch --mode experiment - follow logs to a stable path:
uv run scripts/hf_job.py logs <JOB_ID> --follow --output /tmp/posttrain-run.log - report the fixed evaluator metrics from the managed run when available
Environment you may receive:
POSTTRAIN_HYPOTHESISPOSTTRAIN_EXPERIMENT_IDPOSTTRAIN_RUN_IDPOSTTRAIN_HF_BUCKETPOSTTRAIN_HF_FLAVORPOSTTRAIN_HF_TIMEOUT
Final report must include:
- method tested
- files changed
- local smoke result
- HF job id or launch failure
- managed
eval_scoreandraw_accuracy, or failure state - artifact directory if visible
- one short interpretation
- one short memory-keeper handoff
Stop and report back instead of improvising if:
- the task requires changing evaluator behavior
- the method requires a different model architecture
- the HF bucket or authentication is missing
- local smoke fails in a way you cannot explain
- the managed run fails to produce
eval_score