lesson 4 of 8 · data as the productlesson 4 of 8 · data as the productlesson 4 of 8 · data as the productlesson 4 of 8 · data as the productlesson 4 of 8 · data as the productlesson 4 of 8 · data as the productlesson 4 of 8 · data as the productlesson 4 of 8 · data as the productlesson 4 of 8 · data as the productlesson 4 of 8 · data as the productlesson 4 of 8 · data as the product
The rows are the product
QLoRA will faithfully reproduce whatever you put in examples.jsonl. If a third of the rows are unreviewed model output, the adapter learns that third. Human review is not a nicety on top of the dataset. It is the dataset.
A row in this lab looks like:
{
"company_id": "acme-pay",
"doc_id": "job-118",
"input": "job=pay-checkout-test; log=AssertionError: cart total",
"label": "product-bug",
"reviewer": "sam",
"reviewed_at": "2026-09-18"
}
company_id and doc_id exist so splits can be leak-safe. reviewer exists so an empty string is visible. A row with "reviewer": "pending" is not a training row yet.
Checklist before a row may enter train:
- The label is one of the three, and you would defend it to the person who owns that CI job.
- The input is a real log shape (or a fixture you marked as synthetic), not a paraphrase that accidentally names the eval companies.
- You have rights to keep the text. Client logs, customer PII, and "I exported prod" dumps stay out unless counsel already said yes.
- The base-model card was checked. Qwen2.5-1.5B-Instruct is the default; the card, not this paragraph, is the license.
The starter file in specialist-adapter-receipt/examples.jsonl is a fixture you can audit. Add your own reviewed rows beside it. Do not invent a thousand synthetic labels and call it a corpus.