# Training Data Place rendered SFT JSONL at `coding_sft.jsonl`. Expected minimal format for `scripts/train_sft_lora.py`: ```jsonl {"text": ""} ``` For tool-use or multi-turn training, keep a raw copy with structured messages and generate this rendered file as a build artifact so template changes are auditable. Raw message format: ```jsonl {"id":"example-1","license":"mit","messages":[{"role":"user","content":"Write add(a, b)."},{"role":"assistant","content":"def add(a, b):\n return a + b"}]} ``` Render and validate: ```bash .venv-train/bin/python scripts/render_sft_jsonl.py \ --input data/train/coding_sft_messages.jsonl \ --output data/train/coding_sft.jsonl .venv-train/bin/python scripts/validate_sft_jsonl.py \ --train-jsonl data/train/coding_sft.jsonl \ --eval-jsonl data/eval/coding_sft_eval.jsonl ``` Stopped-run repair artifacts: - `coding_sft_repair_messages.jsonl`: synthetic strict-output repair messages. - `coding_sft_code_only_messages.jsonl`: code-only rows extracted from fenced production answers. - `coding_sft_prod_repair_messages.jsonl`: 40,000 production message rows plus 4,096 strict repair rows. - `coding_sft_prod_repair.jsonl`: rendered training split for a future resumed run. - `coding_sft_prod_repair_strong_messages.jsonl`: recommended local repair blend with 24,000 production rows, 16,000 extracted code-only rows, and 4,096 strict repair rows. - `coding_sft_prod_repair_strong.jsonl`: rendered recommended repair split for a future resumed run. Do not launch SFT from these files until the user explicitly resumes training.